/** * Copyright 2008-2016 Qualogy Solutions B.V. * * 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 com.qualogy.qafe.gwt.client.ui.renderer; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.qualogy.qafe.gwt.client.component.QRootPanel; import com.qualogy.qafe.gwt.client.context.ClientApplicationContext; import com.qualogy.qafe.gwt.client.vo.ui.ComponentGVO; import com.qualogy.qafe.gwt.client.vo.ui.MenuItemGVO; import com.qualogy.qafe.gwt.client.vo.ui.MenuItemSeparatorGVO; import com.qualogy.qafe.gwt.client.vo.ui.RootPanelGVO; import com.qualogy.qafe.gwt.client.vo.ui.ToolbarGVO; import com.qualogy.qafe.gwt.client.vo.ui.WindowGVO; public class WindowRenderer extends AbstractComponentRenderer { private String toolbarHeight; public UIObject render(ComponentGVO component, String uuid, String parent, String context) { QRootPanel qRootPanel = null; if (component != null) { if (component instanceof WindowGVO) { WindowGVO gvo = (WindowGVO) component; qRootPanel = new QRootPanel(); RendererHelper.addId(component, qRootPanel,uuid,parent, context, false); RendererHelper.addUUID(component, qRootPanel, uuid); RendererHelper.addEvents(component, qRootPanel, uuid); Widget rootPanel = (Widget)super.renderChildComponent(gvo.getRootPanel(), uuid,gvo.getId(), context); Widget menuAndToolbar = createMenuAndToolbar(qRootPanel,gvo.getRootPanel(), uuid, parent); Widget messageBox = new MessageBox(); ScrollPanel sp = new ScrollPanel(); if (ClientApplicationContext.getInstance().isMDI()){ sp.setHeight(gvo.getHeight()); sp.setWidth(gvo.getWidth()); } else { sp.setHeight(Window.getClientHeight()+"px"); sp.setWidth(Window.getClientWidth()+"px"); } sp.add(rootPanel); qRootPanel.setMenuAndToolBar(menuAndToolbar); qRootPanel.setRootPanel(sp); qRootPanel.setMessageBox(messageBox); qRootPanel.add(menuAndToolbar,0,0); int yPosition = toolbarHeight != null ? Integer.parseInt(toolbarHeight)+ 20 : 0; if(qRootPanel.getMenuBar() != null){ yPosition+=22; } qRootPanel.add(sp,0,yPosition); qRootPanel.add(messageBox,200,0); } } return qRootPanel; } /*private void inheritStyle(UIObject source, UIObject target) { if ((source.getStyleName() != null) && (source.getStyleName().length() > 0)) { target.addStyleName(source.getStyleName()); } if ((source.getElement().getStyle() != null) && (source.getElement().getStyle().toString().length() > 0)) { String inlineStyle = DOM.getElementAttribute(source.getElement(), "style"); target.getElement().setAttribute("style", inlineStyle); } }*/ private Widget createMenuAndToolbar(QRootPanel uiObject,ComponentGVO component, String uuid,String parent) { VerticalPanel vp = new VerticalPanel(); //vp.setSpacing(2); vp.setWidth("100%"); //int totalMargin = 0; MenuBar menu = createMenu(component, uuid,parent); if (menu != null) { vp.add(menu); //totalMargin=totalMargin+28; uiObject.setMenuBar(menu); } if (component instanceof RootPanelGVO) { RootPanelGVO rootPanelGVO = (RootPanelGVO) component; if (rootPanelGVO.getToolbarGVO() != null) { Widget toolbar = createToolBar((ToolbarGVO) rootPanelGVO.getToolbarGVO(), uuid,parent) ; vp.add(toolbar); uiObject.setToolbar(toolbar); //totalMargin=totalMargin+28; } if (rootPanelGVO.getTitle()!=null && rootPanelGVO.getTitle().length()>0){ vp.add(new HTML(rootPanelGVO.getTitle())); } } //DOM.setElementAttribute(vp.getElement(), "totalMargin", ""+totalMargin); return vp; } private Widget createToolBarButton(ToolbarGVO toolbar, final String imageLocation, final String toolTip, ComponentGVO component, String uuid,String parent) { Widget w = null; Image toolbarImage = new Image(imageLocation); toolbarImage.setSize(toolbar.getItemWidth(),toolbar.getItemHeight()); RendererHelper.addStyle(component, toolbarImage); PushButton toolbarButton = new PushButton(toolbarImage); toolbarButton.setTitle(component.getTooltip()); RendererHelper.fillIn(component, toolbarButton, uuid,parent, component.getContext()); w = toolbarButton; return w; } private HorizontalPanel createToolBar(ToolbarGVO component, String uuid,String parent) { HorizontalPanel tb = new HorizontalPanel(); tb.setSpacing(5); RendererHelper.fillIn(component, tb, uuid,parent, component.getContext()); if (component != null) { if (component.getToolbarItems() != null) { for (int i = 0; i < component.getToolbarItems().length; i++) { tb.add(createToolBarButton(component,component.getToolbarItems()[i].getImageLocation(), component.getToolbarItems()[i].getTooltip(), component.getToolbarItems()[i], uuid,parent)); toolbarHeight = (component.getItemHeight().replace("px", "")).trim(); } } } return tb; } private MenuBar createMenu(ComponentGVO component, String uuid, String parent) { Command cmd = new Command() { public void execute() { } }; MenuBar mainMenu = null; MenuItemGVO rootMenu = component.getMenu(); if (rootMenu != null) { if (rootMenu.getSubMenus() != null) { mainMenu = new MenuBar(); RendererHelper.fillIn(rootMenu, mainMenu, uuid,parent, component.getContext()); for (int i = 0; i < rootMenu.getSubMenus().length; i++) { if (rootMenu.getSubMenus()[i].getSubMenus() != null && rootMenu.getSubMenus()[i].getSubMenus().length > 0) { processMenu(mainMenu, rootMenu.getSubMenus()[i], rootMenu.getSubMenus()[i].getDisplayname(), uuid,parent); } else { MenuItem menuItem = new MenuItem(rootMenu.getSubMenus()[i].getDisplayname(), cmd); RendererHelper.fillIn(rootMenu.getSubMenus()[i], menuItem, uuid,parent, component.getContext()); mainMenu.addItem(menuItem); } } } if(rootMenu.getStyleClass() != null) { mainMenu.setStylePrimaryName(rootMenu.getStyleClass()); } } if (mainMenu!=null){ mainMenu.setAutoOpen(true); mainMenu.setAnimationEnabled(true); } return mainMenu; } private void processMenu(MenuBar menu, MenuItemGVO subMenuGVO, String name, String uuid, String parent) { MenuBar subMenu = new MenuBar(true); MenuItemGVO[] subMenus = subMenuGVO.getSubMenus(); for (int j = 0; j < subMenus.length; j++) { if (subMenus[j].getSubMenus() != null && subMenus[j].getSubMenus().length > 0) { processMenu(subMenu, subMenus[j], subMenus[j].getDisplayname(), uuid,parent); } else { if (subMenus[j] instanceof MenuItemSeparatorGVO){ subMenu.addSeparator(); } else { MenuItem menuItem = new MenuItem(subMenus[j].getDisplayname(),(Command) null); RendererHelper.fillIn(subMenus[j], menuItem, uuid,parent, subMenus[j].getContext()); subMenu.addItem(menuItem); } } } MenuItem subMenuItem = new MenuItem(name, subMenu); RendererHelper.fillIn(subMenuGVO, subMenuItem, uuid,parent, subMenuGVO.getContext()); menu.addItem(subMenuItem); } }