Revision: 5521
          http://sourceforge.net/p/jump-pilot/code/5521
Author:   edso
Date:     2017-10-22 15:12:35 +0000 (Sun, 22 Oct 2017)
Log Message:
-----------
preliminary support for autowrapping Cursortools into PlugIns for eventually 
installing CursorTools from a default-plugins.xml listing

Modified Paths:
--------------
    core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java

Added Paths:
-----------
    
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/CursorToolPluginWrapper.java

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java  
2017-10-22 13:24:13 UTC (rev 5520)
+++ core/trunk/src/com/vividsolutions/jump/workbench/plugin/PlugInManager.java  
2017-10-22 15:12:35 UTC (rev 5521)
@@ -52,6 +52,8 @@
 import com.vividsolutions.jump.workbench.Logger;
 import com.vividsolutions.jump.workbench.WorkbenchContext;
 import com.vividsolutions.jump.workbench.WorkbenchProperties;
+import com.vividsolutions.jump.workbench.ui.cursortool.CursorTool;
+import com.vividsolutions.jump.workbench.ui.cursortool.CursorToolPluginWrapper;
 import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller;
 
 /**
@@ -245,22 +247,35 @@
 
           // make sure we use the plugin classloader for plugins
           plugInClass = classLoader.loadClass(className);
-          PlugIn plugIn = (PlugIn) plugInClass.newInstance();
+          if (plugInClass == null)
+            throw new JUMPException("class '"+className+"' is not available in 
the class path!");
 
+          Object o = plugInClass.newInstance();
+          PlugIn plugIn;
+          if (o instanceof CursorTool) {
+            plugIn = new CursorToolPluginWrapper((CursorTool) o);
+          } else {
+            plugIn = (PlugIn) o;
+          }
+
           plugIn.initialize(pc);
-          
+
           // get plugin's menu settings
           Map<String, Map> menuSettings = props.getSettings(new String[] {
               WorkbenchProperties.KEY_PLUGIN, className,
               WorkbenchProperties.KEY_MENUS});
-          
+
           // interpret menu settings
           for (Map.Entry<String, Map> entry : menuSettings.entrySet()) {
-            
+
             String menuKey = entry.getKey();
-            if (pc.getFeatureInstaller().fetchMenuForKey(menuKey)==null)
+            if (pc.getFeatureInstaller().fetchMenuForKey(menuKey)==null){
+              if (menuKey != "order_id")
+                Logger.error("'"+menuKey+"' is an invalid menu handle.");
+
               continue;
-            
+            }
+
             // install me to menu?
             String installSetting = props.getSetting(new String[] {
                 WorkbenchProperties.KEY_PLUGIN, className,

Added: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/CursorToolPluginWrapper.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/CursorToolPluginWrapper.java
                         (rev 0)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/CursorToolPluginWrapper.java
 2017-10-22 15:12:35 UTC (rev 5521)
@@ -0,0 +1,60 @@
+package com.vividsolutions.jump.workbench.ui.cursortool;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import com.vividsolutions.jump.workbench.plugin.PlugIn;
+import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+import com.vividsolutions.jump.workbench.ui.LayerViewPanel;
+
+/**
+ * a simple wrapper to reuse a cursor tool as a plugin w/in the ui.
+ */
+public class CursorToolPluginWrapper implements PlugIn {
+
+  CursorTool tool;
+
+  /**
+   * create a plugin instance for the given cursor tool
+   * 
+   * make sure the cursor tool respects shortcuts by wrapping it into
+   * {@link com.vividsolutions.jump.workbench.ui.cursortool.QuasimodeTool}
+   * 
+   * @param cursorTool
+   */
+  public CursorToolPluginWrapper(CursorTool cursorTool) {
+    super();
+    final QuasimodeTool quasimodeTool = cursorTool instanceof QuasimodeTool ? 
(QuasimodeTool) cursorTool
+        : QuasimodeTool.createWithDefaults(cursorTool);
+    this.tool = quasimodeTool;
+  }
+
+  @Override
+  public void initialize(PlugInContext context) throws Exception {
+  }
+
+  @Override
+  public boolean execute(PlugInContext context) throws Exception {
+    LayerViewPanel lvp = context.getLayerViewPanel();
+
+    if (lvp != null) {
+      lvp.setCurrentCursorTool(tool);
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public String getName() {
+    return tool.getName();
+  }
+
+  public ImageIcon getIcon() {
+    // we really only use ImageIcons anyway for CursorTools
+    Icon icon = tool.getIcon();
+    if (icon instanceof ImageIcon)
+      return ((ImageIcon) icon);
+    return null;
+  }
+
+}


Property changes on: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/CursorToolPluginWrapper.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to