/* * Copyright 2008 University of Prince Edward Island * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ca.upei.ic.timetable.client; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; /** * The Main View for the Application * * This is the main view of the application. This view organizes all other * views of various controllers. All other views should be positioned and * resized by this view. * * @author felix * */ public class ApplicationView implements View { private ApplicationController app_; private static String[] headerStrings = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; private HorizontalPanel headerPanel_; public ApplicationView(ApplicationController app) { app_ = app; // hide the root panel first hide(); // create the application view elements // we are using a horizontal split panel to host the left side (course view) // and the right side (calendar view) DockPanel panel = GWT.create(DockPanel.class); panel.setSize("980px", "580px"); final View findCourseView = app_.getFindCourseController().getView(); // find course button final Button findCourseButton = GWT.create(Button.class); findCourseButton.setText("Find Course..."); findCourseButton.setPixelSize(250, 28); findCourseButton.addClickListener(new ClickListener() { public void onClick(Widget sender) { findCourseView.show(); } }); // message view final View messageView = app_.getMessageController().getView(); // course view final View courseView = app_.getCourseController().getView(); courseView.getWidget().setWidth("340px"); // calendar view final View calendarView = app_.getCourseCalendarController().getView(); // top panel HorizontalPanel topPanel = GWT.create(HorizontalPanel.class); topPanel.add(findCourseButton); headerPanel_ = GWT.create(HorizontalPanel.class); SimplePanel topleft = PanelUtils.simplePanel(new HTML(""), 61, 28); headerPanel_.add(topleft); // add headers for (int i=1; i<6; i++) { SimplePanel header = GWT.create(SimplePanel.class); header.addStyleName("gridHeaderCell"); header.setPixelSize(128, 28); header.add(new HTML(headerStrings[i])); headerPanel_.add(header); } topPanel.add(headerPanel_); // add elements to the dock panel // to north (top bar) panel.add(PanelUtils.horizontalPanel(findCourseButton, headerPanel_ ) , DockPanel.NORTH); // to west (left side bar) panel.add(PanelUtils.verticalPanel( PanelUtils.decoratorPanel(PanelUtils.scrollPanel(courseView.getWidget(), 240, 555)), PanelUtils.horizontalPanel( ButtonUtils.button("Clear", 125, 25, new ClickListener() { public void onClick(Widget sender) { app_.getCourseController().clear(); } }, null), ButtonUtils.button("Print...", 125, 25, new ClickListener() { public void onClick(Widget sender) { Element wrapper = DOM.createDiv(); Element header = (Element) headerPanel_.getElement().cloneNode(true); wrapper.appendChild(header); CalendarPanel calendar = (CalendarPanel) app_.getCourseCalendarController().getView().getWidget(); int height = calendar.getRealHeight(); Element calendarElement = (Element) calendar.getElement().cloneNode(true); DOM.setStyleAttribute(calendarElement, "page-break-inside", "avoid"); DOM.setStyleAttribute(calendarElement, "height", (height+50)+"px"); wrapper.appendChild(calendarElement); app_.print("Main.css", wrapper.getInnerHTML()); } }, null) ) ), DockPanel.WEST); // to center (content) panel.add(calendarView.getWidget(), DockPanel.CENTER); // to footer (copyright) panel.add(new HTML("© 2008 University of Prince Edward Island. This is an <a href=\"http://github.com/upei/\">open-source project</a> licensed under Apache License 2.0."), DockPanel.SOUTH); // add the horizontal panel RootPanel.get().add(panel); } public ViewController getController() { return app_; } public void hide() { RootPanel.get().setVisible(false); } public void show() { RootPanel.get().setVisible(true); } public void addSubView(View subView) { RootPanel.get().add(subView.getWidget()); } public Widget getWidget() { return RootPanel.get(); } }