package com.opendoorlogistics.studio.appframe; import java.awt.Event; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JMenu; import javax.swing.KeyStroke; import com.opendoorlogistics.api.io.ImportFileType; import com.opendoorlogistics.core.scripts.elements.Script; import com.opendoorlogistics.studio.dialogs.AboutBoxDialog; import com.opendoorlogistics.studio.internalframes.HasInternalFrames.FramePlacement; import com.opendoorlogistics.studio.panels.FunctionsListPanel; import com.opendoorlogistics.studio.scripts.editor.ScriptWizardActions; import com.opendoorlogistics.studio.scripts.editor.ScriptWizardActions.WizardActionsCallback; import com.opendoorlogistics.studio.scripts.execution.ScriptUIManager; import com.opendoorlogistics.utils.ui.ODLAction; public class MenuFactory { public JMenu createHelpMenu(ActionFactory actionBuilder, AbstractAppFrame appFrame) { JMenu mnHelp = new JMenu("Help"); mnHelp.setMnemonic('H'); Action helpsite = actionBuilder.createGotoWebsiteAction(appFrame); if (helpsite != null) { mnHelp.add(helpsite); } mnHelp.add(createAbout(appFrame)); mnHelp.add(new AbstractAction("List of data adapter functions") { @Override public void actionPerformed(ActionEvent e) { appFrame.addInternalFrame(FunctionsListPanel.createFrame(), FramePlacement.AUTOMATIC); } }); mnHelp.add(new AbstractAction("List of 3rd party data & libraries") { @Override public void actionPerformed(ActionEvent e) { final AboutBoxDialog dlg = new AboutBoxDialog(appFrame, true); dlg.setTitle("3rd party data & libs used in ODL Studio"); dlg.setLocationRelativeTo(appFrame); dlg.setVisible(true); } }); return mnHelp; } public AbstractAction createAbout(AbstractAppFrame appFrame) { return new AbstractAction("About ODL Studio") { @Override public void actionPerformed(ActionEvent e) { placeAbout(appFrame, new AboutBoxDialog(appFrame, false)); } }; } private void placeAbout(AbstractAppFrame appFrame, final AboutBoxDialog dlg) { dlg.setLocationRelativeTo(appFrame); dlg.setVisible(true); } public AbstractAction createAbout(AbstractAppFrame appFrame, String title, String text) { return new AbstractAction(title) { @Override public void actionPerformed(ActionEvent e) { placeAbout(appFrame, new AboutBoxDialog(appFrame, title,text)); } }; } public JMenu createWindowsMenu(DesktopAppFrame appFrame) { JMenu mnWindow = new JMenu("Window"); mnWindow.setMnemonic('W'); mnWindow.add(new AbstractAction("Tile open windows") { @Override public void actionPerformed(ActionEvent e) { appFrame.tileWindows(); } }).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, Event.CTRL_MASK)); mnWindow.add(new AbstractAction("Cascade open windows") { @Override public void actionPerformed(ActionEvent e) { appFrame.cascadeWindows(); } }).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, Event.CTRL_MASK)); mnWindow.add(new AbstractAction("Close all open windows") { @Override public void actionPerformed(ActionEvent e) { appFrame.closeWindows(); } }); mnWindow.add(new AbstractAction("Minimise all open windows") { @Override public void actionPerformed(ActionEvent e) { appFrame.minimiseWindows(); } }).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, Event.CTRL_MASK)); return mnWindow; } public JMenu createImportMenu(AbstractAppFrame appFrame){ JMenu mnImport = new JMenu("Import"); class ImportPair { String menuString; ImportFileType type; public ImportPair(String menuString, ImportFileType type) { super(); this.menuString = menuString; this.type = type; } } for (final ImportPair type : new ImportPair[] { new ImportPair("Comma separated (CSV) text", ImportFileType.CSV), new ImportPair("Tab separated text", ImportFileType.TAB), new ImportPair("Excel", ImportFileType.EXCEL), new ImportPair("Shapefile (link geometry to original file)", ImportFileType.SHAPEFILE_LINKED_GEOM), new ImportPair("Shapefile (copy geometry into spreadsheet)", ImportFileType.SHAPEFILE_COPIED_GEOM), }) { mnImport.add(new AbstractAction(type.menuString) { @Override public void actionPerformed(ActionEvent e) { appFrame.importFile(type.type); } }); } return mnImport; } public JMenu createScriptCreationMenu(AbstractAppFrame appFrame, ScriptUIManager scriptManager) { JMenu mnCreateScript = new JMenu("Create script"); mnCreateScript.setMnemonic('C'); for (ODLAction action : new ScriptWizardActions(appFrame.getApi(), appFrame, scriptManager.getAvailableFieldsQuery()).createComponentActions(new WizardActionsCallback() { @Override public void onNewScript(Script script) { scriptManager.launchScriptEditor(script, null, null); } })) { mnCreateScript.add(action); } return mnCreateScript; } }