/*
* Copyright 2010 Instituto Superior Tecnico
*
* https://fenix-ashes.ist.utl.pt/
*
* This file is part of the vaadin-framework.
*
* The vaadin-framework Infrastructure is free software: you can
* redistribute it and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation, either version
* 3 of the License, or (at your option) any later version.*
*
* vaadin-framework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with vaadin-framework. If not, see <http://www.gnu.org/licenses/>.
*
*/
package pt.ist.vaadinframework.ui;
import com.vaadin.data.Property;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Link;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.Command;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
/**
* @author Pedro Santos (pedro.miguel.santos@ist.utl.pt)
*/
@SuppressWarnings("serial")
public class ApplicationWindow extends Window {
protected final Property applicationTitle;
protected final Property applicationSubtitle;
protected final Property copyright;
private final VerticalLayout body;
public ApplicationWindow(String theme, Property applicationTitle, Property applicationSubtitle, Property copyright) {
setTheme(theme);
this.applicationTitle = applicationTitle;
this.applicationSubtitle = applicationSubtitle;
this.copyright = copyright;
VerticalLayout main = new VerticalLayout();
main.setWidth(90, UNITS_PERCENTAGE);
main.setHeight(98, UNITS_PERCENTAGE);
main.addStyleName("application-container");
VerticalLayout header = new VerticalLayout();
header.setMargin(true, true, false, true);
header.setSpacing(true);
main.addComponent(header);
HorizontalLayout iconAndTitle = new HorizontalLayout();
iconAndTitle.setSizeFull();
iconAndTitle.setSpacing(true);
header.addComponent(iconAndTitle);
Embedded logo = new Embedded(null, new ThemeResource("../runo/icons/64/globe.png"));
iconAndTitle.addComponent(logo);
iconAndTitle.setComponentAlignment(logo, Alignment.MIDDLE_LEFT);
VerticalLayout titles = new VerticalLayout();
titles.setSpacing(true);
iconAndTitle.addComponent(titles);
iconAndTitle.setExpandRatio(titles, 0.8f);
Label title = new Label(applicationTitle);
title.addStyleName("application-title");
titles.addComponent(title);
Label subtitle = new Label(applicationSubtitle);
subtitle.addStyleName("application-subtitle");
titles.addComponent(subtitle);
HorizontalLayout controls = new HorizontalLayout();
controls.setSpacing(true);
iconAndTitle.addComponent(controls);
iconAndTitle.setComponentAlignment(controls, Alignment.TOP_RIGHT);
Label user = new Label("ist148357");
controls.addComponent(user);
Link logout = new Link("logout", new ExternalResource("#"));
controls.addComponent(logout);
MenuBar menu = new MenuBar();
menu.addStyleName("application-menu");
header.addComponent(menu);
MenuItem hello = menu.addItem("hello", null);
hello.addItem("sdgjk", new Command() {
@Override
public void menuSelected(MenuItem selectedItem) {
getWindow().showNotification("skjhfgksjdfhglksdjh");
}
});
MenuItem hello1 = menu.addItem("hello", null);
hello1.addItem("sdgjk", new Command() {
@Override
public void menuSelected(MenuItem selectedItem) {
getWindow().showNotification("skjhfgksjdfhglksdjh");
}
});
MenuItem hello2 = menu.addItem("hello", null);
hello2.addItem("sdgjk", new Command() {
@Override
public void menuSelected(MenuItem selectedItem) {
getWindow().showNotification("skjhfgksjdfhglksdjh");
}
});
body = new VerticalLayout();
body.setSizeFull();
body.setMargin(true);
body.addStyleName("application-body");
main.addComponent(body);
main.setExpandRatio(body, 1f);
body.addComponent(createDefaultPageBody());
VerticalLayout footer = new VerticalLayout();
main.addComponent(footer);
main.setComponentAlignment(footer, Alignment.MIDDLE_CENTER);
Label copyrightLabel = new Label(copyright);
copyrightLabel.setSizeUndefined();
copyrightLabel.addStyleName("application-footer");
footer.addComponent(copyrightLabel);
footer.setComponentAlignment(copyrightLabel, Alignment.MIDDLE_CENTER);
VerticalLayout outer = (VerticalLayout) getContent();
outer.setSizeFull();
outer.addComponent(main);
outer.setComponentAlignment(main, Alignment.MIDDLE_CENTER);
}
// @Override
// public void attach() {
// super.attach();
// CssLayout main = new CssLayout();
// setContent(main);
// main.addStyleName("application-container");
// main.setSizeUndefined();
// main.setMargin(true);
//
// CssLayout header = new CssLayout();
// main.addComponent(header);
// header.addStyleName("application-header");
// header.setSizeUndefined();
// header.setMargin(true);
// Label title = new Label(applicationTitle);
// header.addComponent(title);
// title.addStyleName("application-title");
// title.setSizeUndefined();
// Label subtitle = new Label(applicationSubtitle);
// header.addComponent(subtitle);
// subtitle.addStyleName("application-subtitle");
// subtitle.setSizeUndefined();
//
// body = new CssLayout();
// main.addComponent(body);
// body.addStyleName("application-body");
// body.setSizeUndefined();
// body.setMargin(true);
//
// body.addComponent(createDefaultPageBody());
//
// CssLayout footer = new CssLayout();
// main.addComponent(footer);
// footer.addStyleName("application-footer");
// footer.setSizeUndefined();
// footer.setMargin(true);
// Label copyrightLabel = new Label(copyright);
// footer.addComponent(copyrightLabel);
// copyrightLabel.addStyleName("application-copyright");
// copyrightLabel.setSizeUndefined();
// }
protected Component createDefaultPageBody() {
HorizontalLayout layout = new HorizontalLayout();
layout.addComponent(new Label("Welcome to "));
layout.addComponent(new Label(applicationTitle));
layout.addComponent(new Label(" application"));
return layout;
}
public void setPage(Component component) {
body.removeAllComponents();
body.addComponent(component);
}
}