package com.baselet.gui.menu; import static com.baselet.control.constants.MenuConstants.ABOUT_PROGRAM; import static com.baselet.control.constants.MenuConstants.ALIGN; import static com.baselet.control.constants.MenuConstants.CLOSE; import static com.baselet.control.constants.MenuConstants.COPY; import static com.baselet.control.constants.MenuConstants.CUSTOM_ELEMENTS_TUTORIAL; import static com.baselet.control.constants.MenuConstants.CUSTOM_ELEMENTS_TUTORIAL_URL; import static com.baselet.control.constants.MenuConstants.CUT; import static com.baselet.control.constants.MenuConstants.DELETE; import static com.baselet.control.constants.MenuConstants.EDIT_CURRENT_PALETTE; import static com.baselet.control.constants.MenuConstants.EDIT_SELECTED; import static com.baselet.control.constants.MenuConstants.EXIT; import static com.baselet.control.constants.MenuConstants.EXPORT_AS; import static com.baselet.control.constants.MenuConstants.GENERATE_CLASS; import static com.baselet.control.constants.MenuConstants.GENERATE_CLASS_OPTIONS; import static com.baselet.control.constants.MenuConstants.GROUP; import static com.baselet.control.constants.MenuConstants.LAYER; import static com.baselet.control.constants.MenuConstants.LAYER_DOWN; import static com.baselet.control.constants.MenuConstants.MAIL_TO; import static com.baselet.control.constants.MenuConstants.NEW; import static com.baselet.control.constants.MenuConstants.NEW_CE; import static com.baselet.control.constants.MenuConstants.NEW_FROM_TEMPLATE; import static com.baselet.control.constants.MenuConstants.ONLINE_HELP; import static com.baselet.control.constants.MenuConstants.ONLINE_SAMPLE_DIAGRAMS; import static com.baselet.control.constants.MenuConstants.OPEN; import static com.baselet.control.constants.MenuConstants.OPTIONS; import static com.baselet.control.constants.MenuConstants.PASTE; import static com.baselet.control.constants.MenuConstants.PRINT; import static com.baselet.control.constants.MenuConstants.PROGRAM_HOMEPAGE; import static com.baselet.control.constants.MenuConstants.RATE_PROGRAM; import static com.baselet.control.constants.MenuConstants.RECENT_FILES; import static com.baselet.control.constants.MenuConstants.REDO; import static com.baselet.control.constants.MenuConstants.SAVE; import static com.baselet.control.constants.MenuConstants.SAVE_AS; import static com.baselet.control.constants.MenuConstants.SELECT_ALL; import static com.baselet.control.constants.MenuConstants.SET_BACKGROUND_COLOR; import static com.baselet.control.constants.MenuConstants.SET_FOREGROUND_COLOR; import static com.baselet.control.constants.MenuConstants.UNDO; import static com.baselet.control.constants.MenuConstants.UNGROUP; import static com.baselet.control.constants.MenuConstants.VIDEO_TUTORIAL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JComponent; import javax.swing.SwingUtilities; import com.baselet.control.Main; import com.baselet.control.constants.FacetConstants; import com.baselet.control.enums.Program; import com.baselet.diagram.CurrentDiagram; import com.baselet.diagram.DiagramHandler; import com.baselet.diagram.DrawPanel; import com.baselet.diagram.SelectorOld; import com.baselet.diagram.io.ClassChooser; import com.baselet.element.facet.common.GroupFacet; import com.baselet.element.facet.common.LayerFacet; import com.baselet.element.interfaces.GridElement; import com.baselet.element.old.custom.CustomElement; import com.baselet.generator.ClassDiagramConverter; import com.baselet.gui.BaseGUI; import com.baselet.gui.BrowserLauncher; import com.baselet.gui.CurrentGui; import com.baselet.gui.OptionPanel; import com.baselet.gui.command.Align; import com.baselet.gui.command.ChangeElementSetting; import com.baselet.gui.command.Copy; import com.baselet.gui.command.Cut; import com.baselet.gui.command.Paste; import com.baselet.gui.command.RemoveElement; public class MenuFactory { public void doAction(final String menuItem, final Object param) { // AB: Hopefully this will resolve threading issues and work for eclipse AND standalone SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Main main = Main.getInstance(); BaseGUI gui = CurrentGui.getInstance().getGui(); DiagramHandler diagramHandler = gui.getCurrentDiagram().getHandler(); DiagramHandler actualHandler = CurrentDiagram.getInstance().getDiagramHandler(); SelectorOld actualSelector = actualHandler == null ? null : actualHandler.getDrawPanel().getSelector(); if (menuItem.equals(NEW)) { main.doNew(); } else if (menuItem.equals(OPEN)) { main.doOpenFromFileChooser(); } else if (menuItem.equals(CLOSE)) { diagramHandler.doCloseAndAddNewIfNoLeft(); } else if (menuItem.equals(RECENT_FILES)) { main.doOpen((String) param); } else if (menuItem.equals(GENERATE_CLASS)) { new ClassDiagramConverter().createClassDiagrams(ClassChooser.getFilesToOpen()); } else if (menuItem.equals(GENERATE_CLASS_OPTIONS)) { GenerateOptionPanel.getInstance().showPanel(); } else if (menuItem.equals(SAVE) && diagramHandler != null) { diagramHandler.doSave(); } else if (menuItem.equals(SAVE_AS) && diagramHandler != null) { diagramHandler.doSaveAs(Program.getInstance().getExtension()); } else if (menuItem.equals(EXPORT_AS) && diagramHandler != null) { diagramHandler.doSaveAs((String) param); } else if (menuItem.equals(MAIL_TO)) { gui.setMailPanelEnabled(!gui.isMailPanelVisible()); } else if (menuItem.equals(EDIT_CURRENT_PALETTE)) { main.doOpen(main.getPalette().getFileHandler().getFullPathName()); } else if (menuItem.equals(OPTIONS)) { OptionPanel.getInstance().showOptionPanel(); } else if (menuItem.equals(PRINT) && diagramHandler != null) { diagramHandler.doPrint(); } else if (menuItem.equals(EXIT)) { CurrentGui.getInstance().getGui().closeWindow(); } else if (menuItem.equals(UNDO) && actualHandler != null && actualSelector != null) { actualHandler.getController().undo(); } else if (menuItem.equals(REDO) && actualHandler != null) { actualHandler.getController().redo(); } else if (menuItem.equals(DELETE) && actualHandler != null && actualSelector != null) { List<GridElement> v = actualSelector.getSelectedElements(); if (v.size() > 0) { actualHandler.getController().executeCommand(new RemoveElement(v)); } } else if (menuItem.equals(SELECT_ALL) && actualHandler != null && actualSelector != null) { actualSelector.selectAll(); } else if (menuItem.equals(GROUP) && actualHandler != null && actualSelector != null) { actualHandler.getController().executeCommand(new ChangeElementSetting(GroupFacet.KEY, actualSelector.getUnusedGroup().toString(), actualSelector.getSelectedElements())); } else if (menuItem.equals(UNGROUP) && actualHandler != null && actualSelector != null) { actualHandler.getController().executeCommand(new ChangeElementSetting(GroupFacet.KEY, null, actualSelector.getSelectedElements())); } else if (menuItem.equals(CUT) && actualHandler != null) { if (!actualHandler.getDrawPanel().getGridElements().isEmpty()) { actualHandler.getController().executeCommand(new Cut()); } } else if (menuItem.equals(COPY) && actualHandler != null) { if (!actualHandler.getDrawPanel().getGridElements().isEmpty()) { actualHandler.getController().executeCommand(new Copy()); } } else if (menuItem.equals(PASTE) && actualHandler != null) { actualHandler.getController().executeCommand(new Paste()); } else if (menuItem.equals(NEW_CE)) { if (gui.getCurrentCustomHandler().closeEntity()) { gui.setCustomPanelEnabled(true); gui.getCurrentCustomHandler().getPanel().setCustomElementIsNew(true); gui.getCurrentCustomHandler().newEntity(); } } else if (menuItem.equals(NEW_FROM_TEMPLATE)) { if (gui.getCurrentCustomHandler().closeEntity()) { gui.setCustomPanelEnabled(true); gui.getCurrentCustomHandler().getPanel().setCustomElementIsNew(true); gui.getCurrentCustomHandler().newEntity((String) param); } } else if (menuItem.equals(EDIT_SELECTED)) { GridElement entity = main.getEditedGridElement(); if (entity != null && entity instanceof CustomElement) { if (gui.getCurrentCustomHandler().closeEntity()) { gui.setCustomPanelEnabled(true); gui.getCurrentCustomHandler().getPanel().setCustomElementIsNew(false); gui.getCurrentCustomHandler().editEntity((CustomElement) entity); } } } else if (menuItem.equals(CUSTOM_ELEMENTS_TUTORIAL)) { BrowserLauncher.openURL(CUSTOM_ELEMENTS_TUTORIAL_URL); } else if (menuItem.equals(ONLINE_HELP)) { BrowserLauncher.openURL(Program.getInstance().getWebsite() + "/faq.htm"); } else if (menuItem.equals(ONLINE_SAMPLE_DIAGRAMS)) { BrowserLauncher.openURL("http://www.itmeyer.at/umlet/uml2/"); } else if (menuItem.equals(VIDEO_TUTORIAL)) { BrowserLauncher.openURL("http://www.youtube.com/watch?v=3UHZedDtr28"); } else if (menuItem.equals(PROGRAM_HOMEPAGE)) { BrowserLauncher.openURL(Program.getInstance().getWebsite()); } else if (menuItem.equals(RATE_PROGRAM)) { BrowserLauncher.openURL("http://marketplace.eclipse.org/content/umlet-uml-tool-fast-uml-diagrams"); } else if (menuItem.equals(ABOUT_PROGRAM)) { AboutDialog.show(); } else if (menuItem.equals(SET_FOREGROUND_COLOR) && actualHandler != null && actualSelector != null) { actualHandler.getController().executeCommand(new ChangeElementSetting(FacetConstants.FOREGROUND_COLOR_KEY, (String) param, actualSelector.getSelectedElements())); } else if (menuItem.equals(SET_BACKGROUND_COLOR) && actualHandler != null && actualSelector != null) { actualHandler.getController().executeCommand(new ChangeElementSetting(FacetConstants.BACKGROUND_COLOR_KEY, (String) param, actualSelector.getSelectedElements())); } else if (menuItem.equals(ALIGN) && actualHandler != null && actualSelector != null) { List<GridElement> v = actualSelector.getSelectedElements(); if (v.size() > 0) { actualHandler.getController().executeCommand(new Align(v, actualSelector.getDominantEntity(), (String) param)); } } else if (menuItem.equals(LAYER) && actualHandler != null && actualSelector != null) { int change = param.equals(LAYER_DOWN) ? -1 : +1; Map<GridElement, String> valueMap = new HashMap<GridElement, String>(); for (GridElement e : actualSelector.getSelectedElements()) { valueMap.put(e, Integer.toString(e.getLayer() + change)); } actualHandler.getController().executeCommand(new ChangeElementSetting(LayerFacet.KEY, valueMap)); } } }); } // These components should only be enabled if the drawpanel is not empty protected List<JComponent> diagramDependendComponents = new ArrayList<JComponent>(); public void updateDiagramDependendComponents() { DrawPanel currentDiagram = CurrentGui.getInstance().getGui().getCurrentDiagram(); if (currentDiagram == null) { return; // Possible if method is called at loading a palette } DiagramHandler handler = currentDiagram.getHandler(); boolean enable = !(handler == null || handler.getDrawPanel().getGridElements().isEmpty()); for (JComponent component : diagramDependendComponents) { component.setEnabled(enable); } } }