package org.onecmdb.ui.gwt.toolkit.client; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.GWT_CiBean; import org.onecmdb.ui.gwt.toolkit.client.view.screen.BaseEntryScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.BaseScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.OneCMDBBaseScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.StaticContentScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.ci.EditCIScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.ci.ListCIScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.ci.MoveCIScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.ci.NewCIScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.ci.ReferenceCIScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.ci.ViewCIScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.header.FooterScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.header.HeaderScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.header.WelcomeScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.login.LoginScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.login.LogoutScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.login.OneCMDBLoginScreen; import org.onecmdb.ui.gwt.toolkit.client.view.screen.navigation.NavigationScreen; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.WindowResizeListener; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.HorizontalSplitPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; /** * Entry point classes define <code>onModuleLoad()</code>. */ public abstract class OneCMDBApplication extends BaseEntryScreen implements WindowResizeListener { protected static final int LOGIN_SCREEN = 0; protected static final int HEADER_SCREEN = 1; protected static final int NAVIGATION_SCREEN = 2; protected static final int FOOTER_SCREEN = 3; protected static final int LOGOUT_SCREEN = 4; // Core Screen(s). public static final int NEW_CI_SCREEN = 10; public static final int LIST_CI_SCREEN = 11; public static final int VIEW_CI_SCREEN = 12; public static final int EDIT_CI_SCREEN = 13; public static final int CI_BROWSER_SCREEN = 14; public static final int MOVE_CI_SCREEN = 15; public static final int REFERENCE_CI_SCREEN = 16; public static final int WELCOME_SCREEN = 17; public static final int SHOW_STATIC_CONTENT = 18; protected LoginScreen loginScreen; protected BaseScreen navigationScreen; protected BaseScreen headerScreen; protected BaseScreen footerScreen; protected BaseScreen logoutScreen; private String currentHistoryToken; private String cmdbHistoryPrefix; private ScrollPanel navigationScroll; private ScrollPanel mainPanelScroll; private HorizontalSplitPanel centerSplit; protected static OneCMDBApplication singleton; /* public static OneCMDBApplication get() { return(singleton); } */ protected LoginScreen getLoginScreen() { if (loginScreen == null) { loginScreen = (LoginScreen)getScreenFirstTime(LOGIN_SCREEN); } return(loginScreen); } protected BaseScreen getHeaderScreen() { if (headerScreen == null) { headerScreen = getScreenFirstTime(HEADER_SCREEN); } return(headerScreen); } protected BaseScreen getNavigationScreen() { if (navigationScreen == null) { navigationScreen = getScreenFirstTime(NAVIGATION_SCREEN); } return(navigationScreen); } protected BaseScreen getFooterScreen() { if (footerScreen == null) { footerScreen = getScreenFirstTime(FOOTER_SCREEN); } return(footerScreen); } protected BaseScreen getLogoutScreen() { if (logoutScreen == null) { logoutScreen = getScreenFirstTime(LOGOUT_SCREEN); } return(logoutScreen); } /** * This is the entry point method. */ public void onModuleLoad() { singleton = this; addHistorySupport(); setLoginScreen(); // setMainScreen(null); Window.addWindowResizeListener(this); } public void onHistoryChanged(String historyToken) { // When adding a new History Item a onHistoryChange event will happen. if (historyToken.equals(currentHistoryToken)) { return; } // TODO Auto-generated method stub super.onHistoryChanged(historyToken); } protected String getHistoryName(int index) { currentHistoryToken = super.getHistoryName(index); return(currentHistoryToken); } protected String getHistoryName(int index,String objectType,Long objectId) { currentHistoryToken = super.getHistoryName(index, objectType, objectId); return(currentHistoryToken); } public void setMainScreen(GWT_CiBean account) { this.account = account; getHeaderScreen().setWidth("100%"); DockPanel outer = new DockPanel(); BaseScreen header = getHeaderScreen(); if (header instanceof HeaderScreen) { ((HeaderScreen)header).setAccount(account); } outer.add(header, DockPanel.NORTH); //outer.add(getNavigationScreen()), DockPanel.WEST); //outer.add(getMainPanel(), DockPanel.CENTER); //navigationScroll = new ScrollPanel(getNavigationScreen()); //mainPanelScroll = new ScrollPanel(getMainPanel()); //navigationScroll.setAlwaysShowScrollBars(true); //mainPanelScroll.setAlwaysShowScrollBars(true); centerSplit = new HorizontalSplitPanel(); centerSplit.setLeftWidget(getNavigationScreen()); centerSplit.setRightWidget(getMainPanel()); getMainPanel().setStyleName("mdv-form"); centerSplit.setSplitPosition("35%"); //outer.add(navigationScroll, DockPanel.WEST); //outer.add(mainPanelScroll, DockPanel.CENTER); outer.add(centerSplit, DockPanel.CENTER); getMainPanel().setSize("100%", "100%"); getNavigationScreen().setSize("100%", "100%"); if (getFooterScreen() != null) { getFooterScreen().setWidth("100%"); getFooterScreen().setStyleName("mdv-form"); outer.add(getFooterScreen(), DockPanel.SOUTH); } outer.setWidth("100%"); outer.setWidth("100%"); outer.setSpacing(4); //outer.setCellWidth(getMainPanel(), "100%"); //outer.setCellHeight(getMainPanel(), "100%"); outer.setCellWidth(centerSplit, "100%"); outer.setCellHeight(centerSplit, "100%"); RootPanel.get().clear(); RootPanel.get().add(outer); // No main scrolls.. Window.enableScrolling(false); // Call the window resized handler to get the initial sizes setup. onWindowResized(Window.getClientWidth(), Window.getClientHeight()); showScreen(WELCOME_SCREEN); } public void setLoginScreen() { if (getLoginScreen() != null) { DockPanel outer = new DockPanel(); outer.add(getHeaderScreen(), DockPanel.NORTH); outer.add(getLoginScreen(), DockPanel.CENTER); getLoginScreen().checkIfLogedIn(); RootPanel.get().clear(); outer.setSize("100%", "100%"); RootPanel.get().add(outer); //center(RootPanel.get(), getLoginScreen()); } } // Center a widget in an absolute panel. private void center(AbsolutePanel panel, Widget w) { int left = panel.getAbsoluteLeft(); int top = panel.getAbsoluteTop(); int aHeight = Window.getClientHeight(); int aWidth = Window.getClientWidth(); int wHeight = w.getOffsetHeight(); int wWidth = w.getOffsetWidth(); int centerLeft = left + (aWidth/2) - (wWidth/2); int centerTop = top + (aHeight/2) - (wHeight/2); panel.setWidgetPosition(w, centerLeft, centerTop); } public void setLogoutScreen() { RootPanel.get().clear(); BaseScreen logout = getLogoutScreen(); RootPanel.get().add(logout); center(RootPanel.get(), logout); } /** * All new screens that are defined should be setup here */ protected BaseScreen getScreenFirstTime(int index) { BaseScreen base = null; base = getOneCMDBScreenFirstTime(index); if (base == null) { // Check default screens. switch (index) { case LOGIN_SCREEN: base = new OneCMDBLoginScreen(); break; case LOGOUT_SCREEN: base = new LogoutScreen(); break; case HEADER_SCREEN: base = new HeaderScreen(); break; case NAVIGATION_SCREEN: base = new NavigationScreen(); break; case FOOTER_SCREEN: base = new FooterScreen(); break; // Core screens case NEW_CI_SCREEN: base = new NewCIScreen(); break; case LIST_CI_SCREEN: base = new ListCIScreen(); break; case EDIT_CI_SCREEN: base = new EditCIScreen(); break; case VIEW_CI_SCREEN: base = new ViewCIScreen(); break; case MOVE_CI_SCREEN: base = new MoveCIScreen(); break; case REFERENCE_CI_SCREEN: base = new ReferenceCIScreen(); break; case WELCOME_SCREEN: base = new WelcomeScreen(); break; case SHOW_STATIC_CONTENT: base = new StaticContentScreen(); break; } } if (base != null) { if (base instanceof OneCMDBBaseScreen) { OneCMDBBaseScreen screen = (OneCMDBBaseScreen)base; screen.setBaseEntryScreen(this); /* if (screen.isScrollable()) { base = new CompositeBaseScreen(screen); if (screen.isRightPanel()) { updateSize(base); //updateSize(screen); } } */ } } return base; } protected abstract BaseScreen getOneCMDBScreenFirstTime(int index); public void onWindowResized(int width, int height) { /* System.out.println("Window resize"); if (RootPanel.get().getWidgetCount() > 0) { if (RootPanel.get().getWidget(0) == getLoginScreen()) { System.out.println("\tLogin Dialog Window resize"); center(RootPanel.get(), getLoginScreen()); return; } } */ if (true) { height = Window.getClientHeight(); width = Window.getClientWidth(); //width = RootPanel.get().getOffsetWidth(); //height = RootPanel.get().getOffsetHeight(); int navigationHeight = height - getNavigationScreen().getAbsoluteTop() - 8; if (getFooterScreen() != null) { navigationHeight -= getFooterScreen().getOffsetHeight(); } if (centerSplit != null) { centerSplit.setPixelSize(width - 16, navigationHeight); } return; } if (true) { // Adjust the shortcut panel and detail area to take up the available // room // in the window. int shortcutHeight = height - getNavigationScreen().getAbsoluteTop() - 8; if (shortcutHeight < 1) { shortcutHeight = 1; } String heightStr = "" + shortcutHeight; System.out.println("Left Panel height:" + heightStr); getNavigationScreen().setHeight(heightStr); return; } height = Window.getClientHeight(); width = Window.getClientWidth(); width = RootPanel.get().getOffsetWidth(); int navigatorHeight = height - getNavigationScreen().getAbsoluteTop() - 35; if (navigatorHeight < 1) { navigatorHeight = 1; } int navigatorWidth = 150; /* for (Iterator iter = screens.values().iterator(); iter.hasNext(); ) { Object screen = iter.next(); if (screen instanceof OneCMDBBaseScreen) { updateSize((OneCMDBBaseScreen)screen); } } */ //getNavigationScreen().setSize(navigatorWidth + "px", navigatorHeight +"px"); navigationScroll.setSize(navigatorWidth + "px", navigatorHeight +"px"); int mainScreenWidth = width - navigatorWidth - 35; mainPanelScroll.setSize(mainScreenWidth + "px", navigatorHeight+ "px"); } protected void updateSize(Widget screen) { System.out.println("UpdateSize on Screen...."); int height = Window.getClientHeight(); int width = Window.getClientWidth(); //width = RootPanel.get().getOffsetWidth(); int navigatorHeight = height - getNavigationScreen().getAbsoluteTop() - 35; if (navigatorHeight < 1) { navigatorHeight = 1; } int navigatorWidth = getNavigationScreen().getOffsetWidth(); int mainScreenWidth = width - navigatorWidth - 35; if (mainScreenWidth <= 0) { mainScreenWidth = 1; } /* String heightStr = "" + shortcutHeight + "px"; String restWidthStr = "" + restWidth + "px"; String shortWidthStr = "" + shortcutWidth + "px"; */ //System.out.println("Test Left Panel height:" + heightStr); screen.setSize(mainScreenWidth + "px", navigatorHeight +"px"); } public int getScreenIndex(String selectScreenName) { return(-1); } public String getVersion() { return("1.4.0 - Beta"); } public String getCurrentPage() { return("" + currentPage); } }