/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ package demo.gantt.faces; import ilog.views.faces.dhtml.IlvDHTMLConstants; import ilog.views.faces.dhtml.event.FacesMethodBindingActionListener; import ilog.views.gantt.IlvActivity; import ilog.views.gantt.IlvGanttModel; import ilog.views.gantt.IlvHierarchyChart; import ilog.views.util.IlvResourceUtil; import ilog.views.util.servlet.IlvMenuFactory; import ilog.views.util.servlet.event.JavaScriptActionListener; import ilog.views.util.servlet.model.IlvMenu; import ilog.views.util.servlet.model.IlvMenuItem; import ilog.views.util.servlet.model.IlvMenuSeparator; /** * A simple menu factory. */ public class DemoFactory implements IlvMenuFactory, IlvDHTMLConstants { protected final static String SELECT_MENU_MODEL_ID = "select"; protected final static String EXPAND_MENU_MODEL_ID = "expand"; protected final static String SCROLL_MENU_MODEL_ID = "scroll"; protected final static String IMAGES_DIR = "data/images/"; /** * Creates menu item to set the expand/collapse row, the select row interactor * or scroll interactor, depending on the current interactor set on the client * view. * * @param root * The root menu * @param menuModelId * The memu model ID. */ protected void createInteractorItems(IlvMenu root, String menuModelId) { boolean enabled = !EXPAND_MENU_MODEL_ID.equals(menuModelId); IlvMenuItem toggleRow = new IlvMenuItem( IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "expandCollapseMenuMsg")); toggleRow.setImage(IMAGES_DIR + "arrowpm.gif"); toggleRow.setActionListener(new JavaScriptActionListener("expandButton.doClick()")); toggleRow.setEnabled(enabled); root.addChild(toggleRow); enabled = !SELECT_MENU_MODEL_ID.equals(menuModelId); IlvMenuItem selectRow = new IlvMenuItem( IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "selectRowMenuMsg")); selectRow.setImage(IMAGES_DIR + "arrow.gif"); selectRow.setActionListener(new JavaScriptActionListener("selectButton.doClick()")); selectRow.setEnabled(enabled); root.addChild(selectRow); enabled = !SCROLL_MENU_MODEL_ID.equals(menuModelId); IlvMenuItem scroll = new IlvMenuItem( IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "scrollViewMenuMsg")); scroll.setImage(IMAGES_DIR + "pan.gif"); scroll.setActionListener(new JavaScriptActionListener("scrollButton.doClick()")); scroll.setEnabled(enabled); root.addChild(scroll); } /** * Creates menu items with icons and javascript action attached to zoom in, * zoom out or zoom to fit. * * @param root * The root menu */ protected void createZoomItems(IlvMenu root) { IlvMenuItem zoomIn = new IlvMenuItem(IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "zoomInMenuMsg")); zoomIn.setImage(IMAGES_DIR + "zoom.gif"); zoomIn.setActionListener(new JavaScriptActionListener("gantt.zoomIn()")); root.addChild(zoomIn); IlvMenuItem zoomOut = new IlvMenuItem(IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "zoomOutMenuMsg")); zoomOut.setImage(IMAGES_DIR + "unzoom.gif"); zoomOut.setActionListener(new JavaScriptActionListener("gantt.zoomOut()")); root.addChild(zoomOut); IlvMenuItem zoomFit = new IlvMenuItem( IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "zoomToFitMenuMsg")); zoomFit.setImage(IMAGES_DIR + "zoomfit.gif"); zoomFit.setActionListener(new JavaScriptActionListener("gantt.zoomToFit()")); root.addChild(zoomFit); } /** * Creates a submenu filled with information on the current activity selected * when the pop-up menu was triggered. * * @param root * The root menu. * @param selectedObject * The activity selected, or null. */ protected void createInfosSubMenu(IlvMenu root, Object selectedObject) { if (selectedObject instanceof IlvActivity) { root.addChild(new IlvMenuSeparator()); IlvActivity node = (IlvActivity) selectedObject; IlvMenu info = new IlvMenu(IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "nodePropertiesMenuMsg"), "data/images/properties.gif"); root.addChild(info); String propImg = "data/images/property.gif"; info.addChild(new IlvMenuItem(node.getID(), propImg)); info.addChild(new IlvMenuItem(node.getName(), propImg)); info.addChild(new IlvMenuItem(node.getStartTime().toString(), propImg)); info.addChild(new IlvMenuItem(node.getEndTime().toString(), propImg)); } } public void createContextualActions(IlvHierarchyChart chart, IlvMenu root, Object selectedObject) { if (selectedObject instanceof IlvActivity) { root.addChild(new IlvMenuSeparator()); IlvGanttModel model = chart.getGanttModel(); IlvActivity activity = (IlvActivity) selectedObject; int count = model.getChildActivityCount(activity); if (count > 0) { String s = chart.isRowExpanded(activity) ? IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "collapseRowMenuMsg") : IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "expandRowMenuMsg"); IlvMenuItem expandRow = new IlvMenuItem(s); expandRow.setImage(IMAGES_DIR + "arrowpm.gif"); FacesMethodBindingActionListener l = new FacesMethodBindingActionListener(IMAGE_SERVLET_CONTEXT, "#{ganttBean.expandCollapse}"); expandRow.setActionListener(l); root.addChild(expandRow); } IlvMenuItem selectRow = new IlvMenuItem( IlvResourceUtil.getCurrentLocaleString(DemoFactory.class, "selectRowMenuMsg")); selectRow.setImage(IMAGES_DIR + "arrow.gif"); FacesMethodBindingActionListener l = new FacesMethodBindingActionListener(JSF_CONTEXT, "#{ganttBean.nodeValueChanged}"); selectRow.setActionListener(l); root.addChild(selectRow); } } /** * Dynamically builds a menu depending on the selected activity and the * current set on the client view. * * @param graphicComponent * The gantt chart component. * @param selectedObject * The selected activity when the pop-up menu was triggered. * @param menuModelId * The menu model ID set on the current interactor of the client * view. */ Override public IlvMenu createMenu(Object graphicComponent, Object selectedObject, String menuModelId) { IlvHierarchyChart chart = (IlvHierarchyChart) graphicComponent; IlvMenu root = new IlvMenu("root"); createInteractorItems(root, menuModelId); root.addChild(new IlvMenuSeparator()); createZoomItems(root); createContextualActions(chart, root, selectedObject); createInfosSubMenu(root, selectedObject); return root; } }