Revision: 5943 http://sourceforge.net/p/jump-pilot/code/5943 Author: edso Date: 2018-09-25 13:03:23 +0000 (Tue, 25 Sep 2018) Log Message: ----------- finetune macos integration add Preferences add a static OptionsPlugin execute() utilized by apple handler
Modified Paths: -------------- core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/OptionsPlugIn.java Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java 2018-09-25 11:30:30 UTC (rev 5942) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java 2018-09-25 13:03:23 UTC (rev 5943) @@ -142,6 +142,7 @@ import com.vividsolutions.jump.workbench.ui.cursortool.editing.EditingPlugIn; import com.vividsolutions.jump.workbench.ui.images.IconLoader; import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller; +import com.vividsolutions.jump.workbench.ui.plugin.OptionsPlugIn; import com.vividsolutions.jump.workbench.ui.plugin.PersistentBlackboardPlugIn; import com.vividsolutions.jump.workbench.ui.plugin.SaveProjectPlugIn; import com.vividsolutions.jump.workbench.ui.plugin.ViewAttributesPlugIn.ViewAttributesFrame; @@ -2365,18 +2366,24 @@ Class<?> preferencesHandlerClass = findClass("PreferencesHandler"); try { - // create instance of app - Object application = applicationClass.getConstructor((Class[]) null).newInstance((Object[]) null); - + // fetch instance of app + //Object application = applicationClass.getConstructor((Class[]) null).newInstance((Object[]) null); + Object application = applicationClass.getDeclaredMethod("getApplication").invoke(null); + Object proxy = Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class<?>[] { quitHandlerClass, aboutHandlerClass, openFilesHandlerClass, preferencesHandlerClass }, this); - applicationClass.getDeclaredMethod("setQuitHandler", quitHandlerClass).invoke(application, proxy); - applicationClass.getDeclaredMethod("setAboutHandler", aboutHandlerClass).invoke(application, proxy); - applicationClass.getDeclaredMethod("setOpenFileHandler", openFilesHandlerClass).invoke(application, proxy); - applicationClass.getDeclaredMethod("setPreferencesHandler", preferencesHandlerClass).invoke(application, proxy); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + if (quitHandlerClass != null) + applicationClass.getDeclaredMethod("setQuitHandler", quitHandlerClass).invoke(application, proxy); + if (aboutHandlerClass != null) + applicationClass.getDeclaredMethod("setAboutHandler", aboutHandlerClass).invoke(application, proxy); + if (openFilesHandlerClass != null) + applicationClass.getDeclaredMethod("setOpenFileHandler", openFilesHandlerClass).invoke(application, proxy); + if (preferencesHandlerClass != null) + applicationClass.getDeclaredMethod("setPreferencesHandler", preferencesHandlerClass).invoke(application, + proxy); + } catch ( /*InstantiationException |*/ IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { Logger.error(e); } @@ -2403,6 +2410,7 @@ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("openFiles".equals(method.getName())) { + // TODO: implement // if (args[0] != null) { // Object files = args[0].getClass().getMethod("getFiles").invoke(args[0]); // if (files instanceof List) { @@ -2421,8 +2429,7 @@ } else if ("handleAbout".equals(method.getName())) { AboutDialog.instance(getContext()).setVisible(true); } else if ("handlePreferences".equals(method.getName())) { -// PreferencesAction preferencesAction = new PreferencesAction(kseFrame); -// preferencesAction.showPreferences(); + OptionsPlugIn.execute(); } return null; } Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/OptionsPlugIn.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/OptionsPlugIn.java 2018-09-25 11:30:30 UTC (rev 5942) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/OptionsPlugIn.java 2018-09-25 13:03:23 UTC (rev 5943) @@ -36,7 +36,11 @@ import javax.swing.ImageIcon; import javax.swing.JInternalFrame; +import org.openjump.core.ui.DatasetOptionsPanel; +import org.openjump.core.ui.SelectionStyllingOptionsPanel; + import com.vividsolutions.jump.I18N; +import com.vividsolutions.jump.workbench.JUMPWorkbench; import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn; import com.vividsolutions.jump.workbench.plugin.PlugInContext; import com.vividsolutions.jump.workbench.ui.EditOptionsPanel; @@ -45,16 +49,14 @@ import com.vividsolutions.jump.workbench.ui.OptionsDialog; import com.vividsolutions.jump.workbench.ui.OptionsPanelV2; import com.vividsolutions.jump.workbench.ui.SnapVerticesToolsOptionsPanel; +import com.vividsolutions.jump.workbench.ui.images.IconLoader; import com.vividsolutions.jump.workbench.ui.network.ProxySettingsOptionsPanel; import com.vividsolutions.jump.workbench.ui.snap.GridRenderer; -import com.vividsolutions.jump.workbench.ui.images.IconLoader; -import org.openjump.core.ui.DatasetOptionsPanel; -import org.openjump.core.ui.SelectionStyllingOptionsPanel; - public class OptionsPlugIn extends AbstractPlugIn { public final static ImageIcon ICON = IconLoader.icon("fugue/wrench-screwdriver.png"); + private static OptionsPlugIn instance = null; public boolean execute(PlugInContext context) throws Exception { reportNothingToUndoYet(context); @@ -72,11 +74,15 @@ return dialog(context).wasOKPressed(); } - private OptionsDialog dialog(PlugInContext context) { + private static OptionsDialog dialog(PlugInContext context) { return OptionsDialog.instance(context.getWorkbenchContext().getWorkbench()); } public void initialize(PlugInContext context) throws Exception { + // don't double initialize + if (instance != null) + return; + dialog(context).addTab( I18N.get("ui.plugin.OptionsPlugIn.view-edit"), GUIUtil.resize(IconLoader.icon("edit.gif"), 16), @@ -96,8 +102,26 @@ // add proxy panel OptionsPanelV2 proxypanel = ProxySettingsOptionsPanel.getInstance(); dialog(context).addTab(proxypanel); + + instance = this; } + // static execute method for usage in apple handler + public static boolean execute(){ + if (instance!=null) + return false; + + OptionsPlugIn p = new OptionsPlugIn(); + try { + PlugInContext pc = JUMPWorkbench.getInstance().getContext().createPlugInContext(); + p.initialize(pc); + return p.execute(pc); + } catch (Exception e) { + JUMPWorkbench.getInstance().getFrame().handleThrowable(e); + } + + return false; + } public Icon getIcon(int height) { // just one resolution for now _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel