package com.baselet.standalone.gui; import java.awt.event.KeyEvent; import java.util.Collection; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JToggleButton; import com.baselet.control.constants.MenuConstants; import com.baselet.diagram.CustomPreviewHandler; import com.baselet.diagram.DiagramHandler; import com.baselet.diagram.PaletteHandler; import com.baselet.element.interfaces.GridElement; import com.baselet.gui.menu.MenuFactorySwing; public class MenuBuilder { private MenuFactorySwing menuFactory; private JMenu editMenu; private JMenuItem editUndo; private JMenuItem editRedo; private JMenuItem editDelete; private JMenuItem editSelectAll; private JMenuItem editGroup; private JMenuItem editUngroup; private JMenuItem editCut; private JMenuItem editCopy; private JMenuItem editPaste; private JMenuItem customNew; private JMenu customNewFromTemplate; private JMenuItem customEdit; private JToggleButton mailButton; public JMenuBar createMenu(JPanel searchPanel, JPanel zoomPanel, JToggleButton mailButton) { /*********** CREATE MENU *****************/ JMenuBar menu = new JMenuBar(); menuFactory = MenuFactorySwing.getInstance(); JMenu fileMenu = new JMenu(MenuConstants.FILE); fileMenu.setMnemonic(KeyEvent.VK_F); fileMenu.add(menuFactory.createNew()); fileMenu.add(menuFactory.createOpen()); fileMenu.add(menuFactory.createClose()); fileMenu.add(menuFactory.createRecentFiles()); fileMenu.addSeparator(); fileMenu.add(menuFactory.createGenerate()); fileMenu.add(menuFactory.createGenerateOptions()); fileMenu.addSeparator(); fileMenu.add(menuFactory.createSave()); fileMenu.add(menuFactory.createSaveAs()); fileMenu.add(menuFactory.createExportAs()); fileMenu.add(menuFactory.createMailTo()); fileMenu.addSeparator(); fileMenu.add(menuFactory.createEditCurrentPalette()); fileMenu.addSeparator(); fileMenu.add(menuFactory.createOptions()); fileMenu.addSeparator(); fileMenu.add(menuFactory.createPrint()); fileMenu.addSeparator(); fileMenu.add(menuFactory.createExit()); menu.add(fileMenu); editMenu = new JMenu(MenuConstants.EDIT); editMenu.setMnemonic(KeyEvent.VK_E); editMenu.add(editUndo = menuFactory.createUndo()); editMenu.add(editRedo = menuFactory.createRedo()); editMenu.add(editDelete = menuFactory.createDelete()); editMenu.addSeparator(); editMenu.add(editSelectAll = menuFactory.createSelectAll()); editMenu.add(editGroup = menuFactory.createGroup()); editMenu.add(editUngroup = menuFactory.createUngroup()); editMenu.addSeparator(); editMenu.add(editCopy = menuFactory.createCopy()); editMenu.add(editCut = menuFactory.createCut()); editMenu.add(editPaste = menuFactory.createPaste()); menu.add(editMenu); editDelete.setEnabled(false); editGroup.setEnabled(false); editCut.setEnabled(false); editPaste.setEnabled(false); editUngroup.setEnabled(false); // Custom Element Menu JMenu menu_custom = new JMenu(MenuConstants.CUSTOM_ELEMENTS); menu_custom.setMnemonic(KeyEvent.VK_C); menu_custom.add(customNew = menuFactory.createNewCustomElement()); menu_custom.add(customNewFromTemplate = menuFactory.createNewCustomElementFromTemplate()); menu_custom.add(customEdit = menuFactory.createEditSelected()); menu_custom.addSeparator(); menu_custom.add(menuFactory.createCustomElementTutorial()); menu.add(menu_custom); customEdit.setEnabled(false); // Help Menu JMenu helpMenu = new JMenu(MenuConstants.HELP); helpMenu.setMnemonic(KeyEvent.VK_H); helpMenu.add(menuFactory.createOnlineHelp()); helpMenu.add(menuFactory.createOnlineSampleDiagrams()); helpMenu.add(menuFactory.createVideoTutorials()); helpMenu.addSeparator(); helpMenu.add(menuFactory.createProgramHomepage()); helpMenu.add(menuFactory.createRateProgram()); helpMenu.addSeparator(); helpMenu.add(menuFactory.createAboutProgram()); menu.add(helpMenu); menu.add(searchPanel); menu.add(zoomPanel); this.mailButton = mailButton; menu.add(mailButton); return menu; } public void elementsSelected(Collection<GridElement> selectedElements) { if (selectedElements.isEmpty()) { editDelete.setEnabled(false); editGroup.setEnabled(false); editCut.setEnabled(false); // menu_edit_copy must remain enabled even if no entity is selected to allow the export of the full diagram to the system clipboard. } else { editDelete.setEnabled(true); editCut.setEnabled(true); boolean allElementsInGroup = true; for (GridElement e : selectedElements) { if (e.getGroup() == null) { allElementsInGroup = false; } } editUngroup.setEnabled(allElementsInGroup); editGroup.setEnabled(!allElementsInGroup && selectedElements.size() > 1); } } public void enablePasteMenuEntry() { editPaste.setEnabled(true); } public void setNewCustomElementMenuItemsEnabled(boolean enable) { customNew.setEnabled(enable); customNewFromTemplate.setEnabled(enable); } public void setEditCustomElementMenuItemEnabled(boolean enabled) { if (customEdit != null) { customEdit.setEnabled(enabled); } } public void setCustomElementEditMenuEnabled(boolean enabled) { editGroup.setEnabled(enabled); editUngroup.setEnabled(enabled); editDelete.setEnabled(enabled); editCut.setEnabled(enabled); editPaste.setEnabled(enabled); editCopy.setEnabled(enabled); editSelectAll.setEnabled(enabled); } public void updateGrayedOutMenuItems(DiagramHandler handler) { // These menuitems only get changed if this is not the palette or custompreview if (!(handler instanceof PaletteHandler) && !(handler instanceof CustomPreviewHandler)) { menuFactory.updateDiagramDependendComponents(); if (handler == null || handler.getDrawPanel().getGridElements().isEmpty()) { mailButton.setEnabled(false); } else { mailButton.setEnabled(true); } } // The menu_edit menuitems always work with the actual selected diagram (diagram, palette or custompreview), therefore we change it everytime if (handler == null || handler.getDrawPanel().getGridElements().isEmpty()) { editCopy.setEnabled(false); editSelectAll.setEnabled(false); } else if (handler instanceof CustomPreviewHandler) { setCustomElementEditMenuEnabled(false); } else { editMenu.setEnabled(true); // must be set to enabled explicitely because it could be deactivated from CustomPreview setCustomElementEditMenuEnabled(true); } if (handler == null || !handler.getController().isUndoable()) { editUndo.setEnabled(false); } else { editUndo.setEnabled(true); } if (handler == null || !handler.getController().isRedoable()) { editRedo.setEnabled(false); } else { editRedo.setEnabled(true); } } }