ca.upei.ic.timetable.client.ApplicationView.java Source code

Java tutorial

Introduction

Here is the source code for ca.upei.ic.timetable.client.ApplicationView.java

Source

/*
 *  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(
                "&copy; 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();
    }

}