Property sheet now populated using selection providers and getAdaptor method on NameE...
authorp.ciardelli <p.ciardelli@localhost>
Wed, 9 Apr 2008 08:29:50 +0000 (08:29 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Wed, 9 Apr 2008 08:29:50 +0000 (08:29 +0000)
13 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/META-INF/MANIFEST.MF
eclipseprojects/eu.etaxonomy.taxeditor/plugin.xml
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Activator.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionPopulatePropertySheet.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameListView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java [new file with mode: 0644]

index 7432c1d9f01cd3446c6d838b9c413f17c034376e..ebef00d55c7cde0730e83be7900ffe7171bc4b38 100644 (file)
@@ -372,6 +372,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationAct
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddQuickName.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionDeleteTaxon.java -text
@@ -414,6 +415,8 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewe
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/WarningAnnotation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/heterosyn_no_bg.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/homosyn_no_bg.gif -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetContentProvider.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueEditingSupport.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueLabelProvider.java -text
index 14bc1a000c59e16176bdc83b575434f842afea24..9a4b489f15b5e444e58c63b884733bd091265156 100644 (file)
@@ -12,6 +12,7 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.jface.text,
  org.eclipse.ui.forms,
  org.eclipse.core.resources,
+ org.eclipse.ui.views,
  eu.etaxonomy.cdmLibrary
 Eclipse-LazyStart: true
 Export-Package: com.swtdesigner,
index 785a8713b5a0fdd39835dbd715a85b3d2d9daeec..aacf2e4f73fded07b5cac05d18b5cd3675e70e1a 100644 (file)
    <extension\r
          point="org.eclipse.ui.perspectives">\r
       <perspective\r
-            class="eu.etaxonomy.taxeditor.Perspective"\r
+            class="eu.etaxonomy.taxeditor.FreetextPropertiesPerspective"\r
             fixed="false"\r
-            id="eu.etaxonomy.taxeditor.perspective"\r
-            name="Perspective">\r
+            id="eu.etaxonomy.taxeditor.perspective.freetextproperties"\r
+            name="FreeText - Form">\r
+      </perspective>\r
+      <perspective\r
+            class="eu.etaxonomy.taxeditor.SideBySidePerspective"\r
+            id="eu.etaxonomy.taxeditor.perspective.sidebyside"\r
+            name="Edit Taxa Side-by-Side">\r
       </perspective>\r
    </extension>\r
    <extension\r
             id="eu.etaxonomy.taxeditor.view.undoview"\r
             name="Recent Actions">\r
       </view>\r
+      <view\r
+            class="eu.etaxonomy.taxeditor.view.LeftPane"\r
+            id="eu.etaxonomy.taxeditor.view.LeftPane"\r
+            name="New ViewPart">\r
+      </view>\r
+      <view\r
+            class="eu.etaxonomy.taxeditor.view.LeftPane"\r
+            id="eu.etaxonomy.taxeditor.view.LeftPane2"\r
+            name="New ViewPart">\r
+      </view>\r
    </extension>\r
    <extension\r
          point="org.eclipse.ui.editors">\r
       <editor\r
-            class="eu.etaxonomy.taxeditor.view.MultiPageTaxonView"\r
+            class="eu.etaxonomy.taxeditor.view.MultiPageTaxonEditor"\r
             icon="icons/edit_16x16.gif"\r
             id="eu.etaxonomy.taxeditor.view.multipagetaxonview"\r
             name="Multitabbed Taxon Editor">\r
index bc29f1f217ded1d894d15559f30e9929d28bf730..7c684944c273cdf6f5792b41d63040f30848f4e8 100644 (file)
@@ -10,19 +10,15 @@ import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;\r
 import org.eclipse.jface.resource.ImageDescriptor;\r
 import org.eclipse.jface.resource.ImageRegistry;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
 import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.ui.forms.FormColors;\r
+import org.eclipse.ui.part.MultiPageSelectionProvider;\r
 import org.eclipse.ui.plugin.AbstractUIPlugin;\r
 import org.osgi.framework.BundleContext;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
 import eu.etaxonomy.cdm.api.service.INameService;\r
-import eu.etaxonomy.cdm.database.CdmDataSource;\r
-import eu.etaxonomy.cdm.model.agent.Person;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
 \r
 /**\r
  * The activator class controls the plug-in life cycle\r
@@ -50,14 +46,14 @@ public class Activator extends AbstractUIPlugin {
                cdmApp = new CdmApplicationController();\r
                INameService nameService = cdmApp.getNameService();\r
                \r
-//             BotanicalName botName = new BotanicalName(Rank.GENUS());\r
-//             botName.setTitleCache("Hieracium L.");\r
-////           botName.setGenusOrUninomial("Hieracium");\r
-//             botName.setUninomial("Hieracium");\r
-//             botName.setCombinationAuthorTeam(new Person());\r
-//             botName.getCombinationAuthorTeam().setTitleCache("L.");\r
+//             BotanicalName botanicalName = new BotanicalName(Rank.GENUS());\r
+//             botanicalName.setTitleCache("Hieracium L.");\r
+////           botanicalName.setGenusOrUninomial("Hieracium");\r
+//             botanicalName.setUninomial("Hieracium");\r
+//             botanicalName.setCombinationAuthorTeam(new Person());\r
+//             botanicalName.getCombinationAuthorTeam().setTitleCache("L.");\r
 //             Taxon genusTaxon = new Taxon();\r
-//             genusTaxon.setName(botName);\r
+//             genusTaxon.setName(botanicalName);\r
 //             genusTaxon.setSec(null);\r
 //                             \r
 //             BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
@@ -168,7 +164,40 @@ public class Activator extends AbstractUIPlugin {
        /* ***************************************************************************************\r
                        PROPERTY SHEET SELECTION PROVIDER\r
         ************************************************************************************** */\r
-       \r
+//     final ISelectionProvider provider = new ISelectionProvider() {\r
+//\r
+//             private ListenerList listeners = new ListenerList();\r
+//             private ISelection selection;\r
+//             \r
+//             @Override\r
+//             public void addSelectionChangedListener(\r
+//                             ISelectionChangedListener listener) {\r
+//                     listeners.add(listener);\r
+//             }\r
+//\r
+//             @Override\r
+//             public ISelection getSelection() {\r
+//                     if (selection != null)\r
+//                             return selection;\r
+//                     return null;\r
+////                   return new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName()));\r
+//             }\r
+//\r
+//             @Override\r
+//             public void removeSelectionChangedListener(\r
+//                             ISelectionChangedListener listener) {}\r
+//\r
+//             @Override\r
+//             public void setSelection(ISelection selection) {\r
+//                     this.selection = selection;\r
+//             }\r
+//    };\r
+    \r
+         \r
+//    public ISelectionProvider getProvider() {\r
+////           this.getWorkbench().getActiveWorkbenchWindow().getSelectionService();\r
+//     return this.provider;\r
+//    }\r
        \r
        /* ***************************************************************************************\r
                        IMAGE REGISTRY\r
index 3297b61e692eab5befb2fd386a613e6d45af05f7..430af0dfb1a01ebedf57d14165f4782018e7525b 100644 (file)
@@ -20,7 +20,7 @@ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
        
        public void initialize(IWorkbenchConfigurer configurer) {
                super.initialize(configurer);
-               
+                               
                // Remembers the user's layout and window size 
                //  for the next time application is started
 //             configurer.setSaveAndRestore(true);             
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java
new file mode 100644 (file)
index 0000000..8d4bd93
--- /dev/null
@@ -0,0 +1,34 @@
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+import eu.etaxonomy.taxeditor.view.LeftPane;
+import eu.etaxonomy.taxeditor.view.NameListView;
+
+public class SideBySidePerspective implements IPerspectiveFactory {
+
+       /*
+        * To remember the user's layout and window sizes for the next time they 
+        *  start your application, add configurer.setSaveAndRestore(true); to the 
+        *  initialize() method of WorkbenchAdvisor.
+        */
+       
+       public static final String ID = "eu.etaxonomy.taxeditor.perspective.sidebyside";
+       
+       public void createInitialLayout(IPageLayout layout) {
+               String editorArea = layout.getEditorArea();
+//             layout.addStandaloneView(NameListView.ID, false, IPageLayout.LEFT, 0.30f, editorArea);          
+//             layout.getViewLayout(NameListView.ID).setCloseable(false);
+               layout.addStandaloneView(LeftPane.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
+               layout.getViewLayout(LeftPane.ID).setCloseable(false);          
+//             layout.getViewLayout("org.eclipse.ui.views.PropertySheet").setCloseable(false);
+//             layout.addView(UndoView.ID, IPageLayout.BOTTOM, 0.8f, editorArea);
+               addFastViews(layout);
+               
+       }
+       private void addFastViews(IPageLayout layout) {
+               System.currentTimeMillis();
+       }
+}
index 8b981413638236bd9fe88a5aa9f52625b8cd629a..14acd9b7eb7163442cca8d302f58c0cad14d6a7d 100644 (file)
@@ -1,32 +1,27 @@
 package eu.etaxonomy.taxeditor.controller;\r
 \r
 import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.viewers.ISelection;\r
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.taxeditor.Activator;\r
 \r
 /**\r
- * Open up a celleditor in the taxonomic tree \r
- *  to add a quickname to taxon\r
+ * Convert an object to a structured selection, pass it to the\r
+ *  universal property sheet provider.\r
  * \r
  * @author p.ciardelli\r
  *\r
  */\r
 public class ActionPopulatePropertySheet extends Action {\r
        TaxonNameBase name;\r
+       private ISelection selection;\r
        \r
-       public ActionPopulatePropertySheet(TaxonNameBase name) {\r
-               this.name = name;\r
+       public ActionPopulatePropertySheet(ISelection selection) {\r
+               this.selection = selection;\r
        }\r
        \r
        public void run() {\r
-       \r
-               \r
-               // Open new node\r
-//             System.out.println(PlatformUI.getWorkbench().getActiveWorkbenchWindow().\r
-//                             getActivePage().getActiveEditor().getSite().getPart()..getId());\r
-//             MultiPageTaxonEditor mptv;\r
-//             mptv.get\r
-               \r
-               \r
+               Activator.getDefault().getProvider().setSelection(this.selection);\r
        }\r
 }
\ No newline at end of file
index 37ee6503f8b361033b19b4b5ab99e3568e65ac0f..b7ecbba0f5903761ed3938dd7428379417a785f5 100644 (file)
@@ -2,30 +2,13 @@ package eu.etaxonomy.taxeditor.view;
 \r
 import java.beans.PropertyChangeEvent;\r
 import java.beans.PropertyChangeListener;\r
-import java.util.Vector;\r
 \r
 import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.ListenerList;\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.ISelectionProvider;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.PartInitException;\r
 import org.eclipse.ui.part.MultiPageEditorPart;\r
-import org.eclipse.ui.part.MultiPageSelectionProvider;\r
-import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
-import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
-import org.eclipse.ui.views.properties.IPropertySheetEntry;\r
-import org.eclipse.ui.views.properties.IPropertySheetPage;\r
-import org.eclipse.ui.views.properties.IPropertySource;\r
-import org.eclipse.ui.views.properties.PropertyDescriptor;\r
-import org.eclipse.ui.views.properties.PropertySheetEntry;\r
-import org.eclipse.ui.views.properties.PropertySheetPage;\r
-import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
 \r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 \r
 /**\r
@@ -37,33 +20,30 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  *\r
  */\r
 public class MultiPageTaxonEditor extends MultiPageEditorPart {\r
-//public class MultiPageTaxonEditor extends FormEditor implements IAdaptable {\r
+//public class MultiPageTaxonEditor extends FormEditor {\r
 \r
        public static final String ID = "eu.etaxonomy.taxeditor.view.multipagetaxonview";\r
        private Taxon taxon;\r
        \r
        @Override\r
        protected void createPages() {\r
-               \r
+                       \r
                try {\r
                        addPage(0, new NameEditorView(), getEditorInput());\r
                        setPageText(0, "Name");\r
-\r
-                       addPage(1, new NameEditorView(), getEditorInput());\r
+                       \r
+                       addPage(1, new EmptyEditorView(), getEditorInput());\r
                        setPageText(1, "Descriptive");\r
                        \r
-                       addPage(2, new NameEditorView(), getEditorInput());\r
+                       addPage(2, new EmptyEditorView(), getEditorInput());\r
                        setPageText(2, "Concepts");\r
                        \r
-                       addPage(3, new NameEditorView(), getEditorInput());\r
+                       addPage(3, new EmptyEditorView(), getEditorInput());\r
                        setPageText(3, "Geographic");\r
-                       \r
-               } catch (PartInitException e) {                 \r
-                       // TODO Auto-generated catch block\r
+                                               \r
+               } catch (PartInitException e) {\r
                        e.printStackTrace();\r
                }\r
-               \r
-//             bindPartName();\r
        }\r
        \r
        @Override\r
@@ -89,7 +69,7 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
                \r
                if (!(input instanceof IEditorInput))\r
                        throw new PartInitException(\r
-                                       "Invalid Input: Must be IFileEditorInput");\r
+                                       "Invalid Input: Must be IEditorInput");\r
                \r
                // Get taxon from editor input\r
                if (input.getAdapter(Taxon.class) != null) {\r
@@ -113,217 +93,7 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
                else\r
                        setPartName(taxon.getName().getTitleCache());\r
                \r
-               setSite(site);\r
-               setInput(input);\r
-               \r
-//             ISelectionProvider provider = new MultiPageSelectionProvider(this);\r
-//             this.getSite().setSelectionProvider(provider);\r
-//             provider.setSelection(new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName())));\r
-//             this.getSite().getSelectionProvider().setSelection(new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName())));\r
-               \r
-               final ISelectionProvider provider = new ISelectionProvider() {\r
-\r
-                       private ListenerList listeners = new ListenerList();\r
-                       \r
-                       @Override\r
-                       public void addSelectionChangedListener(\r
-                                       ISelectionChangedListener listener) {\r
-                               listeners.add(listener);\r
-                       }\r
-\r
-                       @Override\r
-                       public ISelection getSelection() {\r
-                               return new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName()));\r
-                       }\r
-\r
-                       @Override\r
-                       public void removeSelectionChangedListener(\r
-                                       ISelectionChangedListener listener) {}\r
-\r
-                       @Override\r
-                       public void setSelection(ISelection selection) {\r
-                               \r
-                       }\r
-               \r
-        };\r
-        \r
-        this.getSite().setSelectionProvider(provider);\r
-               \r
-       }\r
-       \r
-       public Object getAdapter(Class type) {\r
-           if (type == IPropertySheetPage.class) {\r
-               PropertySheetPage page = new PropertySheetPage();\r
-               \r
-//             CustomSortPropertySheetEntry entry = new CustomSortPropertySheetEntry();\r
-//             page.setRootEntry(entry);\r
-               PropertySheetEntry entry = new PropertySheetEntry();\r
-               page.setRootEntry(entry);\r
-               \r
-               return page;\r
-           }\r
-           return super.getAdapter(type);\r
-       }\r
-\r
-       /* ******************************************************************************************************************** */\r
-       /* ******************************************************************************************************************** */\r
-       /* ******************************************************************************************************************** */\r
-       /* ******************************************************************************************************************** */\r
-       \r
-       class BotNamePropertySource implements IPropertySource {\r
-               \r
-               String[] ranks = new String[] {"Genus", "Species", "Subspecies"};\r
-               \r
-               protected Vector<PropertyDescriptor> descriptors;\r
-               {\r
-                       descriptors = new Vector<PropertyDescriptor>();\r
-                                               \r
-                       // PropertyDescriptor - uneditable cell value\r
-                       descriptors.addElement(\r
-                                       new PropertyDescriptor("titleCache","a1:TitleCache"));\r
-                       \r
-                       // ComboBoxPropertyDescriptor - dropdown list, property supplied must be integer-based\r
-                       ComboBoxPropertyDescriptor ranksDescriptor = \r
-                               new ComboBoxPropertyDescriptor("rank", "a4:Rank", ranks);\r
-                       \r
-                       // if any entry has a category, all non-set default to category "Misc"\r
-                       ranksDescriptor.setCategory("Rank stuff");\r
-                       // IPropertySheetEntry.FILTER_ID_EXPERT -> \r
-                       //      this descriptor is only available under "Show advanced properties" \r
-                       ranksDescriptor.setFilterFlags (new String[] { IPropertySheetEntry.FILTER_ID_EXPERT });\r
-                       \r
-                       descriptors.addElement(ranksDescriptor);\r
-               }\r
-               \r
-               BotanicalName botName;\r
-               \r
-               public BotNamePropertySource(BotanicalName botName) {\r
-                       this.botName = botName;\r
-                       \r
-//                     botName.addPropertyChangeListener(new PropertyChangeListener() {\r
-//\r
-//                             @Override\r
-//                             public void propertyChange(PropertyChangeEvent evt) {\r
-//                                     System.out.println(evt.getPropertyName() + ": " + evt.getNewValue());\r
-//                                     resetPropertyValue(evt.getPropertyName());                                                      \r
-//                             }\r
-//                             \r
-//                     });\r
-                       \r
-               }\r
-\r
-               @Override\r
-               public Object getEditableValue() {\r
-                       return this;\r
-               }\r
-\r
-               @Override\r
-               public IPropertyDescriptor[] getPropertyDescriptors() {\r
-                       return (IPropertyDescriptor[]) descriptors.toArray(\r
-                       new IPropertyDescriptor[descriptors.size()]);\r
-               }\r
-\r
-               @Override\r
-               public Object getPropertyValue(Object id) {\r
-                       System.out.println("calling getPropertyValue for id " + id.toString());\r
-               if (id.equals("titleCache"))\r
-                   // nest IPropertySource to set child nodes\r
-                       return new IPropertySource() {\r
-\r
-                               protected Vector<PropertyDescriptor> descriptors;\r
-                               {\r
-                                       descriptors = new Vector<PropertyDescriptor>();\r
-                                       \r
-                                       // TextPropertyDescriptor - editable cell value\r
-                                       descriptors.addElement(\r
-                                                       new TextPropertyDescriptor("uninomial","a2:Uninomial"));\r
-                                       descriptors.addElement(\r
-                                                       new TextPropertyDescriptor("specificEpithet","a3:SpecificEpithet"));\r
-                               \r
-                               }\r
-                       \r
-                                       @Override\r
-                                       public Object getEditableValue() {\r
-                                               return this;\r
-                                       }\r
-\r
-                                       @Override\r
-                                       public IPropertyDescriptor[] getPropertyDescriptors() {\r
-                                               return (IPropertyDescriptor[]) descriptors.toArray(\r
-                                               new IPropertyDescriptor[descriptors.size()]);\r
-                                       }\r
-\r
-                                       @Override\r
-                                       public Object getPropertyValue(Object id) {\r
-                                               if (id.equals("uninomial"))\r
-                                               return BotNamePropertySource.this.botName.getUninomial();\r
-                                       if (id.equals("specificEpithet"))\r
-                                               return BotNamePropertySource.this.botName.getSpecificEpithet();\r
-                                               return null;\r
-                                       }\r
-\r
-                                       @Override\r
-                                       public boolean isPropertySet(Object id) {\r
-                                               return false;\r
-                                       }\r
-\r
-                                       @Override\r
-                                       public void resetPropertyValue(Object id) {}\r
-\r
-                                       @Override\r
-                                       public void setPropertyValue(Object id, Object value) {\r
-                                               if (id.equals("uninomial"))\r
-                                                       BotNamePropertySource.this.botName.setUninomial((String) value);\r
-                                       if (id.equals("specificEpithet"))\r
-                                               BotNamePropertySource.this.botName.setSpecificEpithet((String) value);\r
-                                       }\r
-                                       \r
-                                       public String toString() {\r
-                                               return BotNamePropertySource.this.botName.getTitleCache();\r
-                                       }\r
-                       \r
-                       };\r
-               if (id.equals("rank")) {\r
-                       System.out.println("Rank: " + this.botName.getRank().getLabel());\r
-                       String rank = this.botName.getRank().getLabel();\r
-                       for (int i = 0; i < ranks.length; i++) {\r
-                               if (rank.equals(ranks[i])) \r
-                                       return i;\r
-                       }\r
-                       return 0;\r
-               }\r
-               return null;\r
-               }\r
-\r
-               @Override\r
-               public boolean isPropertySet(Object id) {\r
-                       return false;\r
-               }\r
-\r
-               @Override\r
-               public void resetPropertyValue(Object id) {}\r
-\r
-               @Override\r
-               public void setPropertyValue(Object id, Object value) {}\r
-       }\r
-       \r
-       class NameTitleCachePropertySource extends BotNamePropertySource {\r
-\r
-               {\r
-                       descriptors = new Vector<PropertyDescriptor>();\r
-                       \r
-                       // TextPropertyDescriptor - editable cell value\r
-                       descriptors.addElement(\r
-                                       new TextPropertyDescriptor("uninomial","a2:Uninomial"));\r
-                       descriptors.addElement(\r
-                                       new TextPropertyDescriptor("specificEpithet","a3:SpecificEpithet"));\r
-                       \r
-               }\r
-               \r
-               public NameTitleCachePropertySource(BotanicalName botName) {\r
-                       super(botName);\r
-               }\r
-               \r
-       }\r
+               super.init(site, input);\r
        \r
+       }       \r
 }\r
index c7a587d1aef4151351dc63b4639c622b7b32449e..2739f3722d7172b15aca42a002928e7ce1894a98 100644 (file)
@@ -3,6 +3,12 @@ package eu.etaxonomy.taxeditor.view;
 import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
 import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.ListenerList;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.layout.GridLayout;\r
@@ -14,12 +20,18 @@ import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.ManagedForm;\r
 import org.eclipse.ui.part.EditorPart;\r
+import org.eclipse.ui.views.properties.IPropertySheetPage;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
 \r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;\r
+import eu.etaxonomy.taxeditor.view.propertysheetsupport.BotanicalNamePropertySource;\r
+import eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetEntry;\r
 \r
 public class NameEditorView extends EditorPart {\r
 \r
@@ -62,7 +74,52 @@ public class NameEditorView extends EditorPart {
 //             taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
                \r
                setSite(site);\r
-               setInput(input);        \r
+               setInput(input);\r
+\r
+               final ISelectionProvider provider = new ISelectionProvider() {\r
+               \r
+                               private ListenerList listeners = new ListenerList();\r
+                               private ISelection selection;\r
+                               \r
+                               @Override\r
+                               public void addSelectionChangedListener(\r
+                                               ISelectionChangedListener listener) {\r
+                                       listeners.add(listener);\r
+                               }\r
+               \r
+                               @Override\r
+                               public ISelection getSelection() {\r
+                                       if (selection != null)\r
+                                               return selection;\r
+                                       return null;\r
+                               }\r
+               \r
+                               @Override\r
+                               public void removeSelectionChangedListener(\r
+                                               ISelectionChangedListener listener) {}\r
+               \r
+                               @Override\r
+                               public void setSelection(ISelection selection) {\r
+                                       this.selection = selection;\r
+                                       fireSelectionChanged();\r
+                               }\r
+\r
+                               private void fireSelectionChanged() {\r
+                                       \r
+                                       SelectionChangedEvent event = new SelectionChangedEvent(this, selection);\r
+                                       \r
+                                       for (Object listener : listeners.getListeners()) {\r
+                                                if (listener instanceof ISelectionChangedListener) {\r
+                                                        ((ISelectionChangedListener)listener).selectionChanged(event);\r
+                                                }\r
+                                       }\r
+                               }\r
+                   };\r
+               \r
+               this.getSite().setSelectionProvider(provider);\r
+               provider.setSelection(\r
+                               new StructuredSelection(\r
+                                               new BotanicalNamePropertySource((BotanicalName) taxon.getName())));\r
        }\r
 \r
        @Override\r
@@ -79,10 +136,10 @@ public class NameEditorView extends EditorPart {
 \r
        @Override\r
        public void createPartControl(final Composite parent) {\r
-               \r
+                               \r
                this.parent = parent;\r
                this.managedForm = new ManagedForm(parent);\r
-               \r
+                               \r
                parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
                parent.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
                \r
@@ -101,7 +158,7 @@ public class NameEditorView extends EditorPart {
                homoGroupComposite.setNameEditorView(this);\r
                \r
                new NameComposite(homoGroupComposite, taxon).setNameEditorView(this);\r
-                                               \r
+                       \r
                TesterooWritableSet.getInstance().addSetChangeListener\r
                (new ISetChangeListener() {\r
                        public void handleSetChange(SetChangeEvent event) {\r
@@ -113,11 +170,10 @@ public class NameEditorView extends EditorPart {
                                NameEditorView.this.managedForm.getForm().reflow(true);\r
                        }\r
                });\r
-//             System.out.println("provider class: " + this.getSite().getSelectionProvider().getClass());\r
        }\r
 \r
        private void createHeterotypicalGroup(Synonym heterosyn) {\r
-\r
+               \r
                GroupComposite heteroGroupComposite = new GroupComposite(parent);\r
                heteroGroupComposite.setTaxon(taxon);\r
                heteroGroupComposite.setNameEditorView(this);\r
@@ -125,6 +181,15 @@ public class NameEditorView extends EditorPart {
                NameComposite nameComposite = new NameComposite(heteroGroupComposite, heterosyn, taxon);\r
                nameComposite.setNameEditorView(this);\r
                nameComposite.setFocus();\r
+\r
+               BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
+               botSpecies.setTitleCache("Hieracium geranium Smith");\r
+               botSpecies.setUninomial("Hieracium");\r
+               botSpecies.setSpecificEpithet("geranium");\r
+               this.getSite().getSelectionProvider().setSelection\r
+                               (new StructuredSelection(new BotanicalNamePropertySource(botSpecies)));\r
+\r
+               \r
        }               \r
        \r
        @Override\r
@@ -140,4 +205,16 @@ public class NameEditorView extends EditorPart {
        public Composite getComposite() {\r
                return parent;\r
        }\r
-}\r
+\r
+       public Object getAdapter(Class type) {\r
+           if (type == IPropertySheetPage.class) {\r
+               PropertySheetPage page = new PropertySheetPage();\r
+               \r
+               CustomSortPropertySheetEntry entry = new CustomSortPropertySheetEntry();\r
+               page.setRootEntry(entry);\r
+               \r
+               return page;\r
+           }\r
+           return super.getAdapter(type);\r
+       }       \r
+}
\ No newline at end of file
index 1c1cb9aa846ded8e813ab790b2799c9f655cf401..b3f5e0feef2aee7912aab383207858bd055ec71c 100644 (file)
@@ -23,6 +23,9 @@ import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.forms.widgets.FormToolkit;\r
 import org.eclipse.ui.forms.widgets.ScrolledForm;\r
 import org.eclipse.ui.part.ViewPart;\r
+import org.eclipse.ui.views.properties.IPropertySheetPage;\r
+import org.eclipse.ui.views.properties.PropertySheetEntry;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
 \r
 import com.swtdesigner.ResourceManager;\r
 import com.swtdesigner.SWTResourceManager;\r
@@ -246,6 +249,5 @@ public class NameListView extends ViewPart {
         */\r
        public TreeViewer getTreeViewer() {\r
                return treeViewer;\r
-       }\r
-       \r
+       }       \r
 }\r
index a02c5872534ff05baa86c98590f526507c0a287a..f63981d668c091ef99083a965a1ddf2e3e169a9e 100644 (file)
@@ -182,7 +182,7 @@ public class NameComposite extends Composite {
                // Listen for focus to send this name to the property sheet\r
                nameViewer.getTextWidget().addFocusListener(new FocusAdapter () {\r
                        public void focusGained(FocusEvent e) {\r
-               \r
+                               showBorder();\r
 //                             if (nameEditor != null) \r
 //                                     nameEditor.setPropertySheetNodes(getName());\r
                        }\r
@@ -279,14 +279,17 @@ public class NameComposite extends Composite {
                (compositeType == ACCEPTED? taxon : synonym).setName(name);\r
                \r
                BotanicalName botname = (BotanicalName)name; \r
-               System.out.println("Composite: " + botname.getTitleCache() + " - " + botname.getUninomial() +\r
-                               " - " + botname.getSpecificEpithet() + " - " + botname.toString());\r
+//             System.out.println("Composite: " + botname.getTitleCache() + " - " + botname.getUninomial() +\r
+//                             " - " + botname.getSpecificEpithet() + " - " + botname.toString());\r
        }\r
        \r
        protected void showBorder() {\r
                if (!(managedForm == null)) {\r
-                       this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-                       managedForm.getToolkit().paintBordersFor(this.getParent());\r
+                       System.out.println("showin");\r
+                       nameViewer.getTextWidget().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+                       managedForm.getToolkit().paintBordersFor(this);\r
+//                     this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+//                     managedForm.getToolkit().paintBordersFor(this.getParent());\r
                        managedForm.getForm().reflow(true);\r
                }\r
        }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java
new file mode 100644 (file)
index 0000000..9371097
--- /dev/null
@@ -0,0 +1,133 @@
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.Vector;\r
+\r
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
+import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+\r
+/**\r
+ * Property source for Botanical Name entries.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class BotanicalNamePropertySource implements IPropertySource {\r
+\r
+    // Property unique keys\r
+       public static final String P_ID_RANK = "rank";\r
+       public static final String P_ID_TITLECACHE = "titlecache";\r
+       public static final String P_ID_UNINOMIAL = "uninomial";\r
+       public static final String P_ID_SPECIESEP = "speciesep";\r
+\r
+    // Property display keys\r
+       // Note: for an explanation of the sorting prefixes ("04:"), \r
+       //  @see eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetEntry\r
+       public static final String P_RANK = "04:Rank";\r
+       public static final String P_TITLECACHE = "01:Title Cache";\r
+       public static final String P_UNINOMIAL = "02:Uninomial";\r
+       public static final String P_SPECIESEP = "03:Specific Epithet";\r
+       \r
+       String[] ranks = new String[] {"Genus", "Species", "Subspecies"};\r
+       BotanicalName botanicalName;\r
+       private String parentid;\r
+       \r
+       protected Vector<PropertyDescriptor> descriptors = new Vector<PropertyDescriptor>();\r
+       /**\r
+        * Add descriptor for a given property.\r
+        * \r
+        * Notes on Descriptor:\r
+        * \r
+        *  PropertyDescriptor - uneditable cell value\r
+        *  ComboBoxPropertyDescriptor - dropdown list, property supplied must be integer-based\r
+        *  TextPropertyDescriptor - editable cell value\r
+        *  \r
+        *  If any descriptor calls setCategory, all descriptors w/out a category are put in \r
+        *  category "Misc".\r
+        *  \r
+        *  descriptor.setFilterFlags (new String[] { IPropertySheetEntry.FILTER_ID_EXPERT }) -\r
+        *   this descriptor shown under advanced properties\r
+        *  \r
+        * @param id\r
+        */\r
+       private void addDescriptor(String id) {\r
+               if (id.equals(P_ID_RANK))\r
+                       descriptors.addElement(\r
+                                       new ComboBoxPropertyDescriptor(P_ID_RANK, P_RANK, ranks));\r
+               if (id.equals(P_ID_TITLECACHE))\r
+                       descriptors.addElement(\r
+                                       new PropertyDescriptor(P_ID_TITLECACHE, P_TITLECACHE));         \r
+               if (id.equals(P_ID_UNINOMIAL))\r
+                       descriptors.addElement(\r
+                                       new TextPropertyDescriptor(P_ID_UNINOMIAL, P_UNINOMIAL));\r
+               if (id.equals(P_ID_SPECIESEP))\r
+                       descriptors.addElement(\r
+                                       new TextPropertyDescriptor(P_ID_SPECIESEP, P_SPECIESEP));\r
+       }\r
+       \r
+       public BotanicalNamePropertySource(BotanicalName botanicalName) {\r
+               this(botanicalName, null, new String[] {P_ID_RANK, P_ID_TITLECACHE});\r
+       }\r
+\r
+       public BotanicalNamePropertySource(BotanicalName botanicalName, \r
+                       String parentid, String[] keys) {\r
+               this.botanicalName = botanicalName;\r
+               this.parentid = parentid;\r
+               for (String key : keys)\r
+                       addDescriptor(key);\r
+       }\r
+       \r
+       @Override\r
+       public Object getEditableValue() {\r
+               return this;\r
+       }\r
+\r
+       @Override\r
+       public IPropertyDescriptor[] getPropertyDescriptors() {\r
+               return (IPropertyDescriptor[]) descriptors.toArray(\r
+                new IPropertyDescriptor[descriptors.size()]);\r
+       }\r
+\r
+       @Override\r
+       public Object getPropertyValue(Object id) {     \r
+        if (id.equals(P_ID_RANK)) {\r
+               String rank = this.botanicalName.getRank().getLabel();\r
+               for (int i = 0; i < ranks.length; i++) {\r
+                       if (rank.equals(ranks[i])) \r
+                               return i;\r
+               }\r
+               return 0;\r
+        }\r
+        if (id.equals(P_ID_TITLECACHE))\r
+               return new BotanicalNamePropertySource(botanicalName, \r
+                               P_ID_TITLECACHE,\r
+                               new String[] {P_ID_UNINOMIAL, P_ID_SPECIESEP});\r
+               if (id.equals(P_ID_UNINOMIAL))\r
+                       return botanicalName.getUninomial();\r
+        if (id.equals(P_ID_SPECIESEP))\r
+                       return botanicalName.getSpecificEpithet();\r
+        return null;\r
+       }\r
+\r
+       @Override\r
+       public boolean isPropertySet(Object id) {\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public void resetPropertyValue(Object id) {}\r
+\r
+       @Override\r
+       public void setPropertyValue(Object id, Object value) {}\r
+\r
+       @Override\r
+       public String toString() {\r
+               if (parentid.equals(P_ID_TITLECACHE))\r
+                       return botanicalName.getTitleCache(); \r
+               return super.toString();\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java
new file mode 100644 (file)
index 0000000..b3314e2
--- /dev/null
@@ -0,0 +1,48 @@
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import org.eclipse.ui.views.properties.PropertySheetEntry;\r
+\r
+/**\r
+ * Humiliatingly hacky override of PropertySheetEntry.\r
+ * \r
+ * GetDisplayName is called by two methods from the PropertySheetViewer, which\r
+ *    a) we are not allowed to set, and\r
+ *    b) uses a comparator which sorts alphabetically.\r
+ * So we set display names in the PropertySourceDescriptors as "01:Uninomial",\r
+ *  "02:Specific Epithet"; if we ascertain from the stack trace that a "compare"\r
+ *  method is asking for the display name, we return the uncut version for\r
+ *  sorting; when any other method requests a display name, we chop off the ":"\r
+ *  and everything before it.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CustomSortPropertySheetEntry extends PropertySheetEntry {\r
+       \r
+       protected PropertySheetEntry createChildEntry() {\r
+        return new CustomSortPropertySheetEntry();\r
+    }\r
+           \r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.ui.views.properties.PropertySheetEntry#getDisplayName()\r
+     */\r
+    public String getDisplayName() {\r
+       \r
+       String displayName = super.getDisplayName();\r
+       \r
+               Thread currentThread = Thread.currentThread();\r
+               StackTraceElement stackRequestingName = currentThread.getStackTrace()[2];\r
+               // currentThread.getStackTrace()[0] = call to getStackTrace\r
+               // currentThread.getStackTrace()[1] = getDisplayName\r
+               // currentThread.getStackTrace()[2] = who is calling getDisplayName\r
+\r
+               if (stackRequestingName.toString().lastIndexOf("compare") != -1)\r
+                       return displayName;\r
+               \r
+        int colon = displayName.lastIndexOf(':');\r
+        if (colon != -1)\r
+            displayName = displayName.substring(colon + 1);\r
+        return displayName;\r
+    }      \r
+\r
+}
\ No newline at end of file