Commit before seeing the effects of putting the property sheet provider on the Activator.
authorp.ciardelli <p.ciardelli@localhost>
Mon, 7 Apr 2008 09:11:32 +0000 (09:11 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Mon, 7 Apr 2008 09:11:32 +0000 (09:11 +0000)
23 files changed:
.gitattributes
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/ApplicationWorkbenchWindowAdvisor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Perspective.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionOpenNameEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionPopulatePropertySheet.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/BotanicalNameDetailsPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorDetailsPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMasterDetailsBlock.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/LeftPane.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MasterDetailsPage.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonView.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorPage.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/ScrolledPropertiesBlock.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TaxonomicTreeViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/GroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameViewerVerifyListener.java

index dca02b8a3053daaf841cb024724f3280fbf99a40..7432c1d9f01cd3446c6d838b9c413f17c034376e 100644 (file)
@@ -371,7 +371,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Application.ja
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java -text
 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/Perspective.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.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
@@ -387,18 +387,20 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/Tax
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameEditorInput.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameTreeContentProvider.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/PropertySheetNode.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/BotanicalNameDetailsPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorDetailsPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMasterDetailsBlock.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EmptyEditorView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/LeftPane.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MasterDetailsPage.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MoveDialogView.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorViewOld.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameListView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameViewer.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/PropertySheetViewer.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/RecentNamesTableViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/ScrolledPropertiesBlock.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TaxonomicTreeViewer.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TestDragAndDrop.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/UndoView.java -text
index 9f80109fdcb3937c293932bac6ae79489570e5d3..bc29f1f217ded1d894d15559f30e9929d28bf730 100644 (file)
@@ -3,6 +3,7 @@ package eu.etaxonomy.taxeditor;
 import java.net.URL;\r
 import java.util.ResourceBundle;\r
 \r
+import org.apache.log4j.Logger;\r
 import org.eclipse.core.databinding.observable.list.WritableList;\r
 import org.eclipse.core.databinding.observable.set.WritableSet;\r
 import org.eclipse.core.runtime.IPath;\r
@@ -15,6 +16,8 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 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
@@ -38,8 +41,18 @@ public class Activator extends AbstractUIPlugin {
         * The constructor\r
         */\r
        public Activator() {\r
+               final Logger logger = Logger.getLogger(Activator.class.getName());\r
+               \r
+               logger.error("Start");\r
+//             CdmApplicationController.toDelete();\r
+//             HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.CREATE;\r
+//             cdmApp = new CdmApplicationController(hbm2dll);\r
+               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
@@ -49,6 +62,7 @@ public class Activator extends AbstractUIPlugin {
 //                             \r
 //             BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
 //             botSpecies.setTitleCache("Hieracium asturianum Pau");\r
+////           botSpecies.setGenusOrUninomial("Hieracium");\r
 //             botSpecies.setUninomial("Hieracium");\r
 //             botSpecies.setSpecificEpithet("asturianum");\r
 //             botSpecies.setCombinationAuthorTeam(new Person());\r
@@ -60,6 +74,7 @@ public class Activator extends AbstractUIPlugin {
 //\r
 //             BotanicalName botSpecies2= new BotanicalName(Rank.SPECIES());\r
 //             botSpecies2.setTitleCache("Hieracium wolffii Zahn");\r
+////           botSpecies2.setGenusOrUninomial("Hieracium");\r
 //             botSpecies2.setUninomial("Hieracium");\r
 //             botSpecies2.setSpecificEpithet("wolffii");\r
 //             botSpecies2.setCombinationAuthorTeam(new Person());\r
@@ -71,7 +86,7 @@ public class Activator extends AbstractUIPlugin {
 //             \r
 //             cdmApp.getTaxonService().saveTaxon(genusTaxon);\r
 //             \r
-//             System.exit(-1);                \r
+////           System.exit(-1);                \r
        }\r
 \r
        /*\r
@@ -107,7 +122,10 @@ public class Activator extends AbstractUIPlugin {
        /**\r
         * All CDM services are called via the application controller\r
         */\r
-       private CdmApplicationController cdmApp = new CdmApplicationController();\r
+       \r
+//     HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.VALIDATE;\r
+//     private CdmApplicationController cdmApp = new CdmApplicationController(hbm2dll);\r
+       private CdmApplicationController cdmApp;\r
        \r
        public CdmApplicationController getCdmApp() {\r
                return cdmApp;\r
@@ -147,6 +165,11 @@ public class Activator extends AbstractUIPlugin {
                return observableSynonymSet;            \r
        }\r
        \r
+       /* ***************************************************************************************\r
+                       PROPERTY SHEET SELECTION PROVIDER\r
+        ************************************************************************************** */\r
+       \r
+       \r
        /* ***************************************************************************************\r
                        IMAGE REGISTRY\r
         ************************************************************************************** */\r
index c17b4289fa163c410e1c30fec25bc29e89f9aa83..3297b61e692eab5befb2fd386a613e6d45af05f7 100644 (file)
@@ -7,7 +7,7 @@ import org.eclipse.ui.application.WorkbenchWindowAdvisor;
 
 public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
 
-       private static final String PERSPECTIVE_ID = "eu.etaxonomy.taxeditor.perspective";
+       private static final String PERSPECTIVE_ID = "eu.etaxonomy.taxeditor.perspective.freetextproperties";
 
        public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
                        IWorkbenchWindowConfigurer configurer) {
index 46781d6249d8dc88478d4b26da5041adb233c9ef..4b75597eb4e922bb34e515f847c719bedcbdc476 100644 (file)
@@ -24,6 +24,7 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
                configurer.setInitialSize(new Point(800, 600));
                configurer.setShowCoolBar(false);
                configurer.setShowStatusLine(false);
+               configurer.setShowPerspectiveBar(true);
                configurer.setTitle("EDIT Taxonomic Editor");
        }
        
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java
new file mode 100644 (file)
index 0000000..14845c8
--- /dev/null
@@ -0,0 +1,37 @@
+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 FreetextPropertiesPerspective 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.freetextproperties";
+       
+       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);          
+               
+               IFolderLayout folderLayout = layout.createFolder("folder", IPageLayout.RIGHT, 0.5f, editorArea);
+               folderLayout.addView("org.eclipse.ui.views.PropertySheet");
+               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();
+       }
+}
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Perspective.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Perspective.java
deleted file mode 100644 (file)
index f7a6478..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package eu.etaxonomy.taxeditor;
-
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-import eu.etaxonomy.taxeditor.view.NameListView;
-
-public class Perspective implements IPerspectiveFactory {
-
-       public static final String ID = "eu.etaxonomy.taxeditor.perspective";
-       
-       public void createInitialLayout(IPageLayout layout) {
-               String editorArea = layout.getEditorArea();
-               layout.addStandaloneView(NameListView.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
-//             layout.addView(UndoView.ID, IPageLayout.BOTTOM, 0.8f, editorArea);
-               layout.getViewLayout(NameListView.ID).setCloseable(false);
-               addFastViews(layout);
-       }
-       private void addFastViews(IPageLayout layout) {
-               System.currentTimeMillis();
-       }
-}
index ad7ace932f2f61ca9413613daebf8b6533460c88..ae03c75580cff9fd8b000179c5bfeb7fb52f40e2 100644 (file)
@@ -9,8 +9,9 @@ import eu.etaxonomy.cdm.model.name.BotanicalName;
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.Activator;\r
-import eu.etaxonomy.taxeditor.view.MultiPageTaxonView;\r
+import eu.etaxonomy.taxeditor.view.MultiPageTaxonEditor;\r
 import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
+import eu.etaxonomy.taxeditor.view.LeftPane;\r
 import eu.etaxonomy.taxeditor.view.NameListView;\r
 import eu.etaxonomy.taxeditor.view.TaxonomicTreeViewer;\r
 \r
@@ -43,6 +44,7 @@ public class ActionOpenNameEditor extends Action {
        \r
        public void run() {\r
 \r
+               \r
                // If this is a non-empty taxon being opened for the first time,\r
                //  add to recent names list            \r
                if (taxon.getName().getTitleCache() != null &&\r
@@ -52,11 +54,11 @@ public class ActionOpenNameEditor extends Action {
                // If this taxon is not visible in the tree, open node\r
                ((TaxonomicTreeViewer) ((NameListView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().\r
                                findView(NameListView.ID)).getTreeViewer()).revealTaxon(taxon);\r
-                               \r
+               \r
                IEditorInput input = new NameEditorInput(taxon);\r
                try {\r
                                Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().\r
-                                       getActivePage().openEditor(input, MultiPageTaxonView.ID);\r
+                                       getActivePage().openEditor(input, MultiPageTaxonEditor.ID);\r
                        } catch (PartInitException e) {\r
                                // TODO Auto-generated catch block\r
                                e.printStackTrace();\r
index 4081c2d3878f1c1337d11cbcdbf5f3b3702de049..8b981413638236bd9fe88a5aa9f52625b8cd629a 100644 (file)
@@ -24,7 +24,7 @@ public class ActionPopulatePropertySheet extends Action {
                // Open new node\r
 //             System.out.println(PlatformUI.getWorkbench().getActiveWorkbenchWindow().\r
 //                             getActivePage().getActiveEditor().getSite().getPart()..getId());\r
-//             MultiPageTaxonView mptv;\r
+//             MultiPageTaxonEditor mptv;\r
 //             mptv.get\r
                \r
                \r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/BotanicalNameDetailsPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/BotanicalNameDetailsPage.java
new file mode 100644 (file)
index 0000000..5861f8f
--- /dev/null
@@ -0,0 +1,116 @@
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.forms.IFormPart;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+\r
+public class BotanicalNameDetailsPage extends EditorDetailsPage {\r
+\r
+       private BotanicalName name;\r
+       private Text titleText;\r
+       private Text genusText;\r
+       private Text spEpText;\r
+       private Text authorText;\r
+       \r
+       @Override\r
+       public boolean isDirty() {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public boolean isStale() {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public void refresh() {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void setFocus() {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public boolean setFormInput(Object input) {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+       \r
+       @Override\r
+       public void selectionChanged(IFormPart part, ISelection selection) {\r
+               \r
+               IStructuredSelection ssel = (IStructuredSelection) selection;\r
+               \r
+               final TaxonBase newTaxon = (TaxonBase) ssel.getFirstElement();\r
+               BotanicalName newName = (BotanicalName) newTaxon.getName();\r
+               \r
+               if ((this.name == null) || ! newName.getRank().equals(this.name.getRank())) {\r
+                       Section nameSection = createSection("Name");\r
+                       titleText = (Text) createInputField(nameSection, "Full Name", newName, "titleCache");\r
+                       genusText = (Text) createInputField(nameSection, "Genus", newName, "uninomial");\r
+                       spEpText = (Text) createInputField(nameSection, "Specific epithet", newName, "specificEpithet");\r
+//                     authorText = (Text) createInputField(nameSection, "Authorship", newName, "authorshipCache");\r
+//                     titleText = (Text) createInputField(nameSection, "Full Name", null, null);\r
+//                     genusText = (Text) createInputField(nameSection, "Genus", null, null);\r
+//                     spEpText = (Text) createInputField(nameSection, "Specific epithet", null, null);\r
+               }\r
+               \r
+               newTaxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
+                       public void propertyChange(PropertyChangeEvent e) {\r
+                               BotanicalName botName = (BotanicalName) newTaxon.getName();\r
+                               titleText.setText(botName.getTitleCache());\r
+                               genusText.setText(botName.getUninomial());\r
+                               spEpText.setText(botName.getSpecificEpithet());\r
+                       }\r
+               });\r
+\r
+               if ((this.name == null) || ! newName.getAuthorshipCache().equals(this.name.getAuthorshipCache())) {\r
+                       Section authorshipSection = createSection("Authorship");\r
+               }               \r
+               \r
+               if ((this.name == null) || ! newName.getNomenclaturalReference().equals(this.name.getNomenclaturalReference())) {\r
+                       Section nomRefSection = createSection("Nomenclatural reference");\r
+               }               \r
+\r
+               if ((this.name == null) || ! newName.getHomotypicalGroup().getTypeDesignations().\r
+                               equals(this.name.getHomotypicalGroup().getTypeDesignations())) {\r
+                       Section typeSection = createSection("Type information");\r
+               }\r
+               \r
+               this.name = newName;\r
+       }\r
+\r
+       public void showObject() {\r
+               BotanicalName botname = (BotanicalName)name;\r
+               System.out.println("Details: " + botname.getTitleCache() + " - " + botname.getUninomial() +\r
+                               " - " + botname.getSpecificEpithet() + " - " + botname.toString());\r
+       }       \r
+       \r
+       @Override\r
+       public void commit(boolean onSave) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void dispose() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorDetailsPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorDetailsPage.java
new file mode 100644 (file)
index 0000000..9653380
--- /dev/null
@@ -0,0 +1,134 @@
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import org.eclipse.core.databinding.DataBindingContext;\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.jface.databinding.swt.SWTObservables;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.KeyListener;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.ui.forms.IDetailsPage;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.events.ExpansionAdapter;\r
+import org.eclipse.ui.forms.events.ExpansionEvent;\r
+import org.eclipse.ui.forms.widgets.ColumnLayout;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+/**\r
+ * The abstract class for details, i.e. form-based editing.\r
+ * \r
+ * Implementing classes should add section and input fields in\r
+ *  selectionChanged(). Content elements are null before this.\r
+ *  \r
+ * Sections can be wiped clean to be re-built with disposeSectionContent(section),\r
+ *  for instance, when a TaxonName changes its rank and a name consists of different\r
+ *  parts. \r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public abstract class EditorDetailsPage implements IDetailsPage {\r
+\r
+       private FormToolkit toolkit;\r
+       private ScrolledForm form;\r
+       private IManagedForm mform;\r
+       private Composite detailsComposite;\r
+       private DataBindingContext bindingContext = new DataBindingContext();\r
+       \r
+       @Override\r
+       public void createContents(Composite parent) {  \r
+               \r
+               detailsComposite = parent;\r
+               toolkit = mform.getToolkit();\r
+               \r
+               ColumnLayout layout = new ColumnLayout();\r
+               layout.topMargin = 0;\r
+               layout.bottomMargin = 5;\r
+               layout.leftMargin = 10;\r
+               layout.rightMargin = 10;\r
+               layout.horizontalSpacing = 10;\r
+               layout.verticalSpacing = 10;\r
+               layout.maxNumColumns = 4;\r
+               layout.minNumColumns = 1;                               \r
+               parent.setLayout(layout);       \r
+       }\r
+\r
+       protected Section createSection(String title) {\r
+               final Section section = toolkit.createSection(detailsComposite, \r
+                               Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED);\r
+               section.marginWidth = 10;\r
+               section.setText(title); //$NON-NLS-1$           \r
+               \r
+               createClient(section);\r
+               \r
+               section.addExpansionListener(new ExpansionAdapter() {\r
+                       public void expansionStateChanged(ExpansionEvent e) {\r
+                               form.reflow(false);\r
+                       }\r
+               });\r
+               \r
+               return section;\r
+       }\r
+       \r
+       private void createClient(Section section) {\r
+\r
+               Composite client = toolkit.createComposite(section);\r
+               GridLayout gridlayout = new GridLayout();\r
+               gridlayout.marginWidth = gridlayout.marginHeight = 5;\r
+               gridlayout.numColumns = 2;\r
+               client.setLayout(gridlayout);\r
+               section.setClient(client);\r
+               \r
+               toolkit.paintBordersFor(client);\r
+       }\r
+       \r
+       protected Control createInputField(Section section, String label, \r
+                       Object bindObject, String bindField) {\r
+               \r
+               Composite client = (Composite) section.getClient();\r
+               toolkit.createLabel(client, label); //$NON-NLS-1$\r
+               Text text = toolkit.createText(client, "", SWT.SINGLE );\r
+               text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); //$NON-NLS-1$\r
+               text.setData(FormToolkit.TEXT_BORDER);\r
+               \r
+               text.addKeyListener(new KeyListener() {\r
+\r
+                       @Override\r
+                       public void keyPressed(KeyEvent e) {\r
+                       }\r
+\r
+                       @Override\r
+                       public void keyReleased(KeyEvent e) {\r
+                               showObject();\r
+                       }\r
+                       \r
+               });\r
+               \r
+               if (!(bindObject == null)) {\r
+                       bindingContext.bindValue(\r
+                                       SWTObservables.observeText(text, SWT.Modify),\r
+                                       BeansObservables.observeValue(bindObject, bindField),\r
+                                       null, null);\r
+               }\r
+               return text;\r
+       }\r
+\r
+\r
+       abstract public void showObject();\r
+       \r
+       protected void disposeSectionContent(Section section) {\r
+               section.getClient().dispose();\r
+               createClient(section);\r
+       }\r
+       \r
+       @Override\r
+       public void initialize(IManagedForm mform) {\r
+               this.mform = mform;\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMasterDetailsBlock.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMasterDetailsBlock.java
new file mode 100644 (file)
index 0000000..3d7c29c
--- /dev/null
@@ -0,0 +1,127 @@
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.DetailsPart;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.MasterDetailsBlock;\r
+import org.eclipse.ui.forms.SectionPart;\r
+import org.eclipse.ui.forms.editor.FormPage;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+import eu.etaxonomy.taxeditor.Activator;\r
+/**\r
+ * Responsible for the look and feel of freetext (master) - form (detail)\r
+ *  view used when editing names / synonymy, concepts, features, etc.\r
+ *  \r
+ * Should be called in the constructor of a class implementing FormPage, which then\r
+ *  calls getMasterPage() to write to the master Component and registers detail pages\r
+ *  via getDetails(), Ã  la:\r
+ *  \r
+ *     block.getDetails().registerPage(BotanicalName.class, nameDetailsPage);\r
+ * \r
+ * @author p.ciardelli\r
+ */\r
+public class EditorMasterDetailsBlock extends MasterDetailsBlock {\r
+       private Composite master;\r
+       private SectionPart details;\r
+       private IManagedForm managedForm;\r
+       \r
+       /**\r
+        * @param page\r
+        */\r
+       public EditorMasterDetailsBlock(FormPage page) { }\r
+\r
+       public void createContent(IManagedForm managedForm) {\r
+               super.createContent(managedForm);\r
+               \r
+               this.managedForm = managedForm;\r
+               // After master-details have been laid out, populate details by\r
+               //  firing an event\r
+//             managedForm.fireSelectionChanged(details, new StructuredSelection(taxon.get));\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.forms.MasterDetailsBlock#createMasterPart(org.eclipse.ui.forms.IManagedForm, org.eclipse.swt.widgets.Composite)\r
+        */\r
+       protected void createMasterPart(final IManagedForm managedForm,\r
+                       Composite parent) {\r
+                               \r
+               FormToolkit toolkit = managedForm.getToolkit();\r
+               Section section = toolkit.createSection(parent, Section.NO_TITLE);\r
+               \r
+               master = toolkit.createComposite(section);\r
+               GridLayout layout = new GridLayout();\r
+               layout.marginWidth = 2;\r
+               layout.marginHeight = 2;\r
+               master.setLayout(layout);\r
+               section.setClient(master);\r
+               \r
+               // Still unclear why I can't just use DetailsPart ...\r
+               details = new SectionPart(section);\r
+               managedForm.addPart(details);\r
+               \r
+//             recentNamesViewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
+//                     public void selectionChanged(SelectionChangedEvent event) {                             \r
+//                             managedForm.fireSelectionChanged(details, event.getSelection());\r
+//                     }\r
+//             });\r
+       }\r
+                       \r
+       protected void createToolBarActions(IManagedForm managedForm) {\r
+               final ScrolledForm form = managedForm.getForm();\r
+               Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
+                       public void run() {\r
+                               sashForm.setOrientation(SWT.HORIZONTAL);\r
+                               form.reflow(true);\r
+                       }\r
+               };\r
+               haction.setChecked(true);\r
+//             haction.setToolTipText(Messages.getString("EditorMasterDetailsBlock.horizontal")); //$NON-NLS-1$\r
+               haction.setToolTipText("Align editing horizontally"); //$NON-NLS-1$\r
+               haction.setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor(Activator.IMG_HORIZONTAL));\r
+               Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
+                       public void run() {\r
+                               sashForm.setOrientation(SWT.VERTICAL);\r
+                               form.reflow(true);\r
+                       }\r
+               };\r
+               vaction.setChecked(false);\r
+//             vaction.setToolTipText(Messages.getString("EditorMasterDetailsBlock.vertical")); //$NON-NLS-1$\r
+               vaction.setToolTipText("Align editing vertically"); //$NON-NLS-1$\r
+               vaction.setImageDescriptor(Activator.getDefault()\r
+                               .getImageRegistry().getDescriptor(Activator.IMG_VERTICAL));\r
+               form.getToolBarManager().add(haction);\r
+               form.getToolBarManager().add(vaction);\r
+       }\r
+       protected void registerPages(DetailsPart detailsPart) {\r
+//             detailsPart.setPageProvider(new IDetailsPageProvider() {\r
+//\r
+//                     @Override\r
+//                     public IDetailsPage getPage(Object key) {\r
+//                             return new BotanicalNameDetailsPage();\r
+//                     }\r
+//\r
+//                     @Override\r
+//                     public Object getPageKey(Object object) {\r
+//                             return null;\r
+//                     }\r
+//                     \r
+//             });             \r
+//             detailsPart.registerPage(TaxonNameBase.class, new BotanicalNameDetailsPage());\r
+       }\r
+       public Composite getMaster() {\r
+               return master;\r
+       }\r
+       public DetailsPart getDetails() {\r
+               return detailsPart;\r
+       }\r
+       public void setInput(Object obj) {\r
+               managedForm.fireSelectionChanged(details, new StructuredSelection(obj));\r
+       }\r
+}
\ No newline at end of file
index 4385fa2d2c0d0c74b81f5a395e851a41e74001a3..cef8eda53e01cafff3d96d0a9e01537ef77244d6 100644 (file)
@@ -1,22 +1,34 @@
 package eu.etaxonomy.taxeditor.view;\r
 \r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+\r
 import org.eclipse.jface.action.IMenuManager;\r
 import org.eclipse.jface.action.IToolBarManager;\r
 import org.eclipse.jface.viewers.ITreeViewerListener;\r
 import org.eclipse.jface.viewers.TreeExpansionEvent;\r
 import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.ControlEvent;\r
-import org.eclipse.swt.events.ControlListener;\r
+import org.eclipse.swt.custom.SashForm;\r
 import org.eclipse.swt.events.FocusEvent;\r
 import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.Rectangle;\r
 import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.layout.GridLayout;\r
 import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
 import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Listener;\r
 import org.eclipse.swt.widgets.Menu;\r
 import org.eclipse.swt.widgets.MenuItem;\r
+import org.eclipse.swt.widgets.Sash;\r
 import org.eclipse.swt.widgets.Text;\r
+import org.eclipse.swt.widgets.TreeItem;\r
+import org.eclipse.ui.forms.FormColors;\r
+import org.eclipse.ui.forms.IFormColors;\r
 import org.eclipse.ui.forms.ManagedForm;\r
 import org.eclipse.ui.forms.events.ExpansionAdapter;\r
 import org.eclipse.ui.forms.events.ExpansionEvent;\r
@@ -24,8 +36,7 @@ import org.eclipse.ui.forms.widgets.ColumnLayout;
 import org.eclipse.ui.forms.widgets.FormToolkit;\r
 import org.eclipse.ui.forms.widgets.ScrolledForm;\r
 import org.eclipse.ui.forms.widgets.Section;\r
-import org.eclipse.ui.forms.widgets.TableWrapData;\r
-import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+import org.eclipse.ui.forms.widgets.SharedScrolledComposite;\r
 import org.eclipse.ui.part.ViewPart;\r
 \r
 import com.swtdesigner.ResourceManager;\r
@@ -42,6 +53,7 @@ public class LeftPane extends ViewPart {
        private TaxonomicTreeViewer treeViewer;\r
        private RecentNamesTableViewer recentNamesViewer;\r
        private ManagedForm managedForm;\r
+       private SashForm sashForm;\r
 \r
        /**\r
         * Create contents of the view part\r
@@ -65,13 +77,25 @@ public class LeftPane extends ViewPart {
                layout.maxNumColumns = 4;\r
                layout.minNumColumns = 1;               \r
                this.body.setLayout(layout);\r
+//             this.body.setLayout(new FillLayout());\r
+               \r
+//             this.body.setLayoutData(new ColumnLayoutData(SWT.DEFAULT, SWT.TOP));\r
                \r
+               // Create non-resizable datasource element \r
                createDatasourceInfo();\r
+\r
+               // Create sash form to put resizable elements on\r
+//             this.sashForm = new MDSashForm(this.body, SWT.VERTICAL);\r
+//             toolkit.adapt(sashForm, false, false);\r
+\r
                createTaxonomicTree();\r
                createRecentNames();\r
                createSearch();\r
                createFavorites();\r
                \r
+//             this.sashForm.setWeights(new int[] { 30, 20, 20, 20 });\r
+//             hookResizeListener();\r
+               \r
                createActions();\r
                initializeToolBar();\r
                initializeMenu();\r
@@ -126,36 +150,139 @@ public class LeftPane extends ViewPart {
        \r
        private void createTaxonomicTree() {\r
 \r
-               final Composite treeComp = createExpandableSection("Taxonomic tree", null);\r
+//             final Composite treeComp = createExpandableSection("Taxonomic tree", null);\r
+               final Composite treeComp = createSection("Taxonomic tree", null, 1);\r
+               \r
+               treeComp.getParent().addListener(SWT.Resize, new Listener() {\r
+\r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               System.out.println("resizing");\r
+                       }\r
+                       \r
+               });\r
+               \r
                treeComp.setRedraw(true);\r
+//             treeComp.setData(FormToolkit.TEXT_BORDER);\r
                treeViewer = new TaxonomicTreeViewer(treeComp);\r
-               treeViewer.getTree().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+//             treeViewer.getTree().setLayout(new ColumnLayout());\r
+//             treeViewer.getTree().setLayoutData(new ColumnLayoutData());\r
+//             treeViewer.getTree().setLayoutData(new TableWrapData(\r
+//                             TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));\r
+               treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+//             treeViewer.getTree().setData(FormToolkit.TREE_BORDER);\r
+               \r
+               treeViewer.getTree().addListener(SWT.Resize, new Listener() {\r
+\r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               \r
+                               if (event.item != null)\r
+                                       System.out.println("item " + event.item.toString());\r
+\r
+                               if (event.widget != null)\r
+                                       System.out.println("widget " + event.widget.toString());\r
+                               \r
+//                             event.doit;\r
+                               \r
+                       }\r
+                       \r
+               });\r
+               \r
+               toolkit.paintBordersFor(treeComp);\r
+               toolkit.paintBordersFor(treeComp.getParent());\r
                toolkit.adapt(treeViewer.getTree(), true, true);\r
+               treeViewer.getTree().addListener(SWT.Expand, new Listener() {\r
+\r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               TreeItem item = (TreeItem) event.item;\r
+                               int itemHeight = item.getBounds().height;\r
+                               \r
+                               System.out.println("Before " + treeComp.getBounds().height + " " + treeViewer.getTree().getBounds().height);\r
+                               // adding elements to treeComp causes the section to resize\r
+//                             toolkit.createText(treeComp, "Joe mama", SWT.SINGLE );\r
+                               \r
+                               Rectangle rectangle3 = treeComp.getParent().getBounds();\r
+                               rectangle3.height = rectangle3.height + (itemHeight * item.getItems().length);  \r
+                               treeComp.getParent().setBounds(rectangle3);\r
+                               \r
+                               Rectangle rectangle2 = treeComp.getBounds();\r
+                               rectangle2.height = rectangle2.height + (itemHeight * item.getItems().length);  \r
+                               treeComp.setBounds(rectangle2);\r
+//                             \r
+//\r
+                               Rectangle rectangle = treeViewer.getTree().getBounds();\r
+//                             System.out.println(rectangle.height);\r
+                               rectangle.height = rectangle.height + (itemHeight * item.getItems().length);  \r
+                               treeViewer.getTree().setBounds(rectangle);\r
+//                             treeViewer.getTree()..redraw();\r
+//                             System.out.println(rectangle.height);\r
+                               \r
+                               System.out.println("After " + treeComp.getBounds().height + " " + treeViewer.getTree().getBounds().height);\r
+                               \r
+                               treeViewer.getTree().setVisible(false);\r
+//                             treeViewer.getTree().setVisible(true);\r
+                               \r
+//                             treeComp.setVisible(false); \r
+//                             treeComp.setVisible(true);\r
+//                             treeViewer.getTree().g\r
+                               \r
+//                             treeViewer.getTree().layout();\r
+//                             treeViewer.getTree().redraw();\r
+//                             treeViewer.getControl().redraw();\r
+//                             treeComp.layout();\r
+//                             treeComp.redraw();                      \r
+                               scrolledForm.reflow(true);\r
+//                             toolkit.paintBordersFor(treeComp);\r
+//                             toolkit.paintBordersFor(treeComp.getParent());\r
+                               \r
+//                             System.out.println(item.getItems().length);\r
+                               \r
+//                             System.out.println(event.widget.getClass());\r
+//                             System.out.println(event. .getClass());\r
+                       }\r
+                       \r
+               });\r
                treeViewer.addTreeListener(new ITreeViewerListener() {\r
 \r
                        @Override\r
                        public void treeCollapsed(TreeExpansionEvent event) {\r
+                               Point point = treeViewer.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
+//                             SharedScrolledComposite s;\r
+//                             System.out.println(point);\r
 //                             treeComp.layout();\r
 //                             treeComp.redraw();\r
 //                             body.redraw();\r
-                               System.out.println(treeViewer.getControl().getBounds().height);\r
-                               scrolledForm.reflow(true);\r
+//                             System.out.println(treeViewer.getControl().getBounds().height);\r
+//                             scrolledForm.reflow(true);\r
+//                             System.out.println(treeViewer.getTree().getItemHeight() . getVisibleExpandedElements().length);\r
                        }\r
 \r
                        @Override\r
                        public void treeExpanded(TreeExpansionEvent event) {\r
-                               treeComp.layout();\r
-                               treeComp.redraw();\r
+                               Point point = treeViewer.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT);\r
+//                             System.out.println(point);\r
+                               \r
+//                             Object[] visibleElements = treeViewer.getVisibleExpandedElements();\r
+//                             treeViewer.getTree().setSize(treeViewer.getTree().computeSize(SWT.DEFAULT, SWT.DEFAULT));\r
+                               \r
+                               \r
 //                             body.layout();\r
 //                             body.redraw();\r
-                               scrolledForm.reflow(true);\r
-                               System.out.println("ex");\r
-                               treeViewer.getTree().layout();\r
-                               treeViewer.getTree().redraw();\r
-                               treeViewer.getControl().redraw();\r
-                               System.out.println(treeViewer.getControl().getBounds().height);\r
-                               scrolledForm.reflow(true);\r
-                               \r
+//                             scrolledForm.reflow(true);\r
+//                             treeViewer.getTree().layout();\r
+//                             treeViewer.getTree().redraw();\r
+//                             treeViewer.getControl().redraw();\r
+//                             treeComp.layout();\r
+//                             treeComp.redraw();\r
+//                             System.out.println(treeViewer.getControl().getBounds().height);\r
+//                             scrolledForm.reflow(true);\r
+                               // event.getElement() -> Taxon\r
+                               // event.getSource() -> TaxonomicTreeViewer\r
+//                             treeViewer.getTree().get\r
+//                             System.out.println(((Taxon) event.getElement()).get .getItemCount());\r
+//                             System.out.println(treeViewer.getVisibleExpandedElements().length);\r
                        }\r
                });\r
                \r
@@ -163,25 +290,29 @@ public class LeftPane extends ViewPart {
 \r
        private void createRecentNames() {\r
 \r
-               recentNamesViewer = new RecentNamesTableViewer(createExpandableSection(\r
-                               "Recently viewed names", null));\r
-               recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+//             recentNamesViewer = new RecentNamesTableViewer(createExpandableSection(\r
+//                             "Recently viewed names", null));\r
+               recentNamesViewer = new RecentNamesTableViewer(createSection(\r
+                               "Recently viewed names", null, 1));             \r
+//             recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
                toolkit.adapt(recentNamesViewer.getTable(), true, true);                \r
        }       \r
 \r
 \r
        private void createSearch() {\r
-               Composite searchComposite = createExpandableSection("Search", null);\r
-               ((TableWrapLayout) searchComposite.getLayout()).numColumns = 2;\r
+//             Composite searchComposite = createExpandableSection("Search", null);\r
+               Composite searchComposite = createSection("Search", null, 2);\r
+               \r
+//             searchComposite.setLayout(new TableWrapLayout());\r
+//             ((TableWrapLayout) searchComposite.getLayout()).numColumns = 2;\r
 \r
                final Text searchText = new Text(searchComposite, SWT.SINGLE);\r
                searchText.setData(FormToolkit.TEXT_BORDER);\r
                toolkit.paintBordersFor(searchComposite);\r
                searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
                searchText.setText("Use \"*\" for wildcard searching");\r
-               final TableWrapData td = new TableWrapData\r
-                               (TableWrapData.FILL_GRAB, TableWrapData.MIDDLE);\r
-               searchText.setLayoutData(td);\r
+//             searchText.setLayoutData(new ColumnLayoutData());\r
+               searchText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
                searchText.addFocusListener(new FocusListener() {\r
 \r
                        public void focusGained(FocusEvent e) {\r
@@ -204,50 +335,63 @@ public class LeftPane extends ViewPart {
 \r
 \r
        private void createFavorites() {\r
-               recentNamesViewer = new RecentNamesTableViewer(createExpandableSection("Favorites", \r
-                               "Drag items into this area for easy access"));\r
-               recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+//             recentNamesViewer = new RecentNamesTableViewer(createExpandableSection("Favorites", \r
+//                             "Drag items into this area for easy access"));\r
+               recentNamesViewer = new RecentNamesTableViewer(createSection("Favorites", \r
+                               "Drag items into this area for easy access", 1));               \r
+//             recentNamesViewer.getTable().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
                toolkit.adapt(recentNamesViewer.getTable(), true, true);                \r
        }       \r
        \r
-       private Composite createExpandableSection(String header, String description) {\r
+//     private Composite createExpandableSection(String header, String description) {\r
+//             int sectionStyle = Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED;\r
+//             if (description != null) sectionStyle |= Section.DESCRIPTION;\r
+//             Section section = toolkit.createSection(body, sectionStyle);\r
+////           Section section = toolkit.createSection(sashForm, sectionStyle);\r
+//             \r
+//             section.addExpansionListener(new ExpansionAdapter() {\r
+//                     public void expansionStateChanged(ExpansionEvent e) {\r
+//                             scrolledForm.reflow(true);\r
+//                     }\r
+//             });\r
+//     \r
+//             section.setText(header);\r
+//             if (description != null)\r
+//                     section.setDescription(description);\r
+//             \r
+//             final Composite composite = toolkit.createComposite(section, SWT.NONE);\r
+////           composite.setLayout(new TableWrapLayout());\r
+////                   composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+//             toolkit.adapt(composite);\r
+//             section.setClient(composite);\r
+//             return composite;\r
+//             \r
+//     }\r
+       \r
+       private Composite createSection(String title, String desc, int numColumns) {\r
+               \r
                int sectionStyle = Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED;\r
-               if (description != null) sectionStyle |= Section.DESCRIPTION;\r
-               Section section = toolkit.createSection(body, sectionStyle);\r
+               if (desc != null) sectionStyle |= Section.DESCRIPTION;\r
                \r
+               final ScrolledForm form = managedForm.getForm();\r
+               FormToolkit toolkit = managedForm.getToolkit();\r
+               Section section = toolkit.createSection(form.getBody(), sectionStyle);\r
+               section.setText(title);\r
+               if (desc != null) section.setDescription(desc);\r
+               //toolkit.createCompositeSeparator(section);\r
+               Composite client = toolkit.createComposite(section);\r
+               GridLayout layout = new GridLayout();\r
+               layout.marginWidth = layout.marginHeight = 0;\r
+               layout.numColumns = numColumns;\r
+               client.setLayout(layout);\r
+               section.setClient(client);\r
                section.addExpansionListener(new ExpansionAdapter() {\r
                        public void expansionStateChanged(ExpansionEvent e) {\r
-                               scrolledForm.reflow(true);\r
+                               form.reflow(false);\r
                        }\r
                });\r
-       \r
-               section.setText(header);\r
-               if (description != null)\r
-                       section.setDescription(description);\r
-\r
-               final Composite composite = toolkit.createComposite(section, SWT.NONE);\r
-               composite.setLayout(new TableWrapLayout());\r
-               composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
-               toolkit.adapt(composite);\r
-               section.setClient(composite);\r
-\r
-               composite.addControlListener(new ControlListener() {\r
-\r
-                       @Override\r
-                       public void controlMoved(ControlEvent e) {\r
-                               // TODO Auto-generated method stub\r
-                               \r
-                       }\r
-\r
-                       @Override\r
-                       public void controlResized(ControlEvent e) {\r
-                               System.out.println("resized");\r
-                       }\r
-                       \r
-               });\r
-               \r
-               return composite;\r
-       }\r
+               return client;\r
+       }       \r
        \r
        /**\r
         * Create the actions\r
@@ -279,4 +423,101 @@ public class LeftPane extends ViewPart {
                return treeViewer;\r
        }\r
 \r
+       /* ***************************************************\r
+               FOLLOWING SASH BITS BORROWED FROM \r
+                org.eclipse.ui.forms.MasterDetailsBlock\r
+          *************************************************** */\r
+       \r
+       private void hookResizeListener() {\r
+               Listener listener = ((MDSashForm)sashForm).listener;\r
+               Control [] children = sashForm.getChildren();\r
+               for (int i=0; i<children.length; i++) {\r
+                       if (children[i] instanceof Sash) continue;\r
+                       children[i].addListener(SWT.Resize, listener);\r
+               }\r
+       }\r
+       \r
+       private void onSashPaint(Event e) {\r
+               Sash sash = (Sash)e.widget;\r
+               FormColors colors = managedForm.getToolkit().getColors();\r
+               boolean vertical = (sash.getStyle() & SWT.VERTICAL)!=0;\r
+               GC gc = e.gc;\r
+               Boolean hover = (Boolean)sash.getData("hover"); //$NON-NLS-1$\r
+               gc.setBackground(colors.getColor(IFormColors.TB_BG));\r
+               gc.setForeground(colors.getColor(IFormColors.TB_BORDER));\r
+               Point size = sash.getSize();\r
+               if (vertical) {\r
+                       if (hover!=null)\r
+                               gc.fillRectangle(0, 0, size.x, size.y);\r
+                       //else\r
+                               //gc.drawLine(1, 0, 1, size.y-1);\r
+               }\r
+               else {\r
+                       if (hover!=null)\r
+                               gc.fillRectangle(0, 0, size.x, size.y);\r
+                       //else\r
+                               //gc.drawLine(0, 1, size.x-1, 1);                               \r
+               }\r
+       }       \r
+       \r
+       class MDSashForm extends SashForm {\r
+               ArrayList sashes = new ArrayList();\r
+               Listener listener = new Listener () {\r
+                       public void handleEvent(Event e) {\r
+                               switch (e.type) {\r
+                               case SWT.MouseEnter:\r
+                                       e.widget.setData("hover", Boolean.TRUE); //$NON-NLS-1$\r
+                                       ((Control)e.widget).redraw();\r
+                                       break;\r
+                               case SWT.MouseExit:\r
+                                       e.widget.setData("hover", null); //$NON-NLS-1$\r
+                                       ((Control)e.widget).redraw();\r
+                                       break;\r
+                               case SWT.Paint:\r
+                                       onSashPaint(e);\r
+                               break;\r
+                               case SWT.Resize:\r
+                                       hookSashListeners();\r
+                               break;\r
+                               }\r
+                       }\r
+               };\r
+               public MDSashForm(Composite parent, int style) {\r
+                       super(parent, style);\r
+               }\r
+               \r
+               public void layout(boolean changed) {\r
+                       super.layout(changed);\r
+                       hookSashListeners();\r
+               }\r
+               \r
+               public void layout(Control [] children) {\r
+                       super.layout(children);\r
+                       hookSashListeners();\r
+               }\r
+\r
+               private void hookSashListeners() {\r
+                       purgeSashes();\r
+                       Control [] children = getChildren();\r
+                       for (int i=0; i<children.length; i++) {\r
+                               if (children[i] instanceof Sash) {\r
+                                       Sash sash = (Sash)children[i];\r
+                                       if (sashes.contains(sash))\r
+                                               continue;\r
+                                       sash.addListener(SWT.Paint, listener);\r
+                                       sash.addListener(SWT.MouseEnter, listener);\r
+                                       sash.addListener(SWT.MouseExit, listener);\r
+                                       sashes.add(sash);\r
+                               }\r
+                       }\r
+               }\r
+               private void purgeSashes() {\r
+                       for (Iterator iter=sashes.iterator(); iter.hasNext();) {\r
+                               Sash sash = (Sash)iter.next();\r
+                               if (sash.isDisposed())\r
+                                       iter.remove();\r
+                       }\r
+               }\r
+       }\r
+       \r
 }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MasterDetailsPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MasterDetailsPage.java
deleted file mode 100644 (file)
index ba510ba..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.editor.FormEditor;\r
-import org.eclipse.ui.forms.editor.FormPage;\r
-import org.eclipse.ui.forms.widgets.ScrolledForm;\r
-\r
-import eu.etaxonomy.taxeditor.Activator;\r
-\r
-/**\r
- * Template for freetext - form editing\r
- * \r
- * @author p.ciardelli\r
- */\r
-public class MasterDetailsPage extends FormPage {\r
-       protected ScrolledPropertiesBlock block;\r
-       public MasterDetailsPage(FormEditor editor) {\r
-//             super(editor, "fourth", Messages.getString("MasterDetailsPage.label")); //$NON-NLS-1$ //$NON-NLS-2$\r
-               super(editor, "fourth", "MasterDetailsPage.label"); //$NON-NLS-1$ //$NON-NLS-2$\r
-               block = new ScrolledPropertiesBlock(this);\r
-       }\r
-       protected void createFormContent(final IManagedForm managedForm) {\r
-               final ScrolledForm form = managedForm.getForm();\r
-//             FormToolkit toolkit = managedForm.getToolkit();\r
-//             form.setText(Messages.getString("MasterDetailsPage.title")); //$NON-NLS-1$\r
-//             form.setText("MasterDetailsPage.title"); //$NON-NLS-1$\r
-               form.setBackgroundImage(Activator.getDefault().getImage(\r
-                               Activator.IMG_FORM_BG));\r
-               block.createContent(managedForm);\r
-               createMasterContent();\r
-       }\r
-       protected void createMasterContent() { }\r
-       protected Composite getMasterComposite() {\r
-               return block.getClientComposite();\r
-       }\r
-       protected Composite getDetailComposite() {\r
-               return null;\r
-       }\r
-}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java
new file mode 100644 (file)
index 0000000..37ee650
--- /dev/null
@@ -0,0 +1,329 @@
+package eu.etaxonomy.taxeditor.view;\r
+\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
+ * \r
+ * Generates the tabbed editor with Name view on top and tabs for\r
+ *  "Facts", "Specimen", "Geography", etc.\r
+ * \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class MultiPageTaxonEditor extends MultiPageEditorPart {\r
+//public class MultiPageTaxonEditor extends FormEditor implements IAdaptable {\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
+               try {\r
+                       addPage(0, new NameEditorView(), getEditorInput());\r
+                       setPageText(0, "Name");\r
+\r
+                       addPage(1, new NameEditorView(), getEditorInput());\r
+                       setPageText(1, "Descriptive");\r
+                       \r
+                       addPage(2, new NameEditorView(), getEditorInput());\r
+                       setPageText(2, "Concepts");\r
+                       \r
+                       addPage(3, new NameEditorView(), getEditorInput());\r
+                       setPageText(3, "Geographic");\r
+                       \r
+               } catch (PartInitException e) {                 \r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+//             bindPartName();\r
+       }\r
+       \r
+       @Override\r
+       public void doSave(IProgressMonitor monitor) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void doSaveAs() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public boolean isSaveAsAllowed() {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
+               \r
+               if (!(input instanceof IEditorInput))\r
+                       throw new PartInitException(\r
+                                       "Invalid Input: Must be IFileEditorInput");\r
+               \r
+               // Get taxon from editor input\r
+               if (input.getAdapter(Taxon.class) != null) {\r
+                       taxon = (Taxon) input.getAdapter(Taxon.class);\r
+               } else {\r
+                       taxon = null;\r
+               }\r
+\r
+               // Listen for name changes fired when taxon is saved; \r
+               //  change tab for this taxon editor accordingly\r
+               taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
+                       public void propertyChange(PropertyChangeEvent e) {\r
+                               setPartName(taxon.getName().getTitleCache());\r
+                       }\r
+               });\r
+\r
+                // Any taxon that has been saved will by necessity have a name;\r
+                //  only a new taxon will not\r
+               if (taxon.getName().getTitleCache() == null)\r
+                       setPartName("New taxon");\r
+               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
+       \r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonView.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonView.java
deleted file mode 100644 (file)
index b329a1d..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-package eu.etaxonomy.taxeditor.view;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.forms.editor.FormEditor;\r
-import org.eclipse.ui.part.MultiPageEditorPart;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * \r
- * Generates the tabbed editor with Name view on top and tabs for\r
- *  "Facts", "Specimen", "Geography", etc.\r
- * \r
- * @author p.ciardelli\r
- *\r
- */\r
-//public class MultiPageTaxonView extends MultiPageEditorPart {\r
-public class MultiPageTaxonView extends FormEditor {\r
-\r
-       public static final String ID = "eu.etaxonomy.taxeditor.view.multipagetaxonview";\r
-       private Taxon taxon;\r
-       \r
-       /* \r
-        * The FormEditor version\r
-        * (non-Javadoc)\r
-        * @see org.eclipse.ui.forms.editor.FormEditor#addPages()\r
-        */\r
-       protected void addPages() {\r
-               try {\r
-                       addPage(0, new NameEditorPage(this), getEditorInput());\r
-                       setPageText(0, "Name");\r
-       \r
-               } catch (PartInitException e) {                 \r
-                       // TODO Auto-generated catch block\r
-                       e.printStackTrace();\r
-               }               \r
-       }\r
-       \r
-       /* \r
-        * The MultiPageEditorPart version\r
-        * (non-Javadoc)\r
-        * @see org.eclipse.ui.forms.editor.FormEditor#createPages()\r
-        */\r
-       protected void createPages_() {\r
-               \r
-               try {\r
-                       addPage(0, new MasterDetailsPage(this), getEditorInput());\r
-                       setPageText(0, "Name");\r
-\r
-                       addPage(1, new NameEditorViewOld(), getEditorInput());\r
-                       setPageText(1, "Descriptive");\r
-//                     \r
-//                     addPage(2, new NameEditorViewOld(), getEditorInput());\r
-//                     setPageText(2, "Concepts");\r
-//                     \r
-//                     addPage(3, new NameEditorViewOld(), getEditorInput());\r
-//                     setPageText(3, "Geographic");\r
-                       \r
-               } catch (PartInitException e) {                 \r
-                       // TODO Auto-generated catch block\r
-                       e.printStackTrace();\r
-               }\r
-               \r
-//             bindPartName();\r
-       }\r
-\r
-       @Override\r
-       public void doSave(IProgressMonitor monitor) {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-\r
-       @Override\r
-       public void doSaveAs() {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-\r
-       @Override\r
-       public boolean isSaveAsAllowed() {\r
-               // TODO Auto-generated method stub\r
-               return false;\r
-       }\r
-\r
-       @Override\r
-       public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
-               \r
-               if (!(input instanceof IEditorInput))\r
-                       throw new PartInitException(\r
-                                       "Invalid Input: Must be IFileEditorInput");\r
-               \r
-               // Get taxon from editor input\r
-               if (input.getAdapter(Taxon.class) != null) {\r
-                       taxon = (Taxon) input.getAdapter(Taxon.class);\r
-               } else {\r
-                       taxon = null;\r
-               }\r
-\r
-               // Listen for name changes fired when taxon is saved; \r
-               //  change tab for this taxon editor accordingly\r
-               taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
-                       public void propertyChange(PropertyChangeEvent e) {\r
-                               setPartName(taxon.getName().getTitleCache());\r
-                       }\r
-               });\r
-\r
-                // Any taxon that has been saved will by necessity have a name;\r
-                //  only a new taxon will not\r
-               if (taxon.getName().getTitleCache() == null)\r
-                       setPartName("New taxon");\r
-               else\r
-                       setPartName(taxon.getName().getTitleCache());\r
-               \r
-               setSite(site);\r
-               setInput(input);\r
-       }\r
-}\r
index bab93e268ba451a5ef1bfa6d435d3b370fab3571..d72109716128c0132ba85f903c1122e2aa81daad 100644 (file)
@@ -3,6 +3,8 @@ 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.swt.SWT;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
 import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.layout.GridLayout;\r
 import org.eclipse.swt.widgets.Composite;\r
@@ -11,47 +13,70 @@ import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.forms.editor.FormPage;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\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
 \r
-public class NameEditorPage extends MasterDetailsPage {\r
-\r
+/**\r
+ * Creates a page with a master-details block for editing\r
+ *  a taxon and its synonyms.\r
+ * \r
+ * @author p.ciardelli\r
+ */\r
+public class NameEditorPage extends FormPage {\r
+       \r
+       protected EditorMasterDetailsBlock block;\r
        private Taxon taxon;\r
-       private Composite nameComposite;\r
-\r
+       private Composite freeTextComposite;    \r
+       private BotanicalNameDetailsPage nameDetailsPage;\r
+       private IManagedForm managedForm;\r
+       \r
        public NameEditorPage(FormEditor editor) {\r
-               super(editor);\r
+               super(editor, "editormasterdetailspage", "NameEditorPage"); //$NON-NLS-1$ //$NON-NLS-2$\r
+               block = new EditorMasterDetailsBlock(this);             \r
        }\r
+\r
+       protected void createFormContent(IManagedForm managedForm) {\r
+\r
+//             form.setBackgroundImage(Activator.getDefault().getImage(\r
+//                             Activator.IMG_FORM_BG));\r
+               block.createContent(managedForm);\r
        \r
-       protected void createFormContent(final IManagedForm managedForm) {\r
-               super.createFormContent(managedForm);\r
+               createMasterContent(managedForm);\r
+               createDetailsPages(managedForm);\r
+               \r
        }\r
-       \r
-       protected void createMasterContent() {\r
-               nameComposite = new Composite(getMasterComposite(), SWT.NONE);\r
-               nameComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-               nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
-               GridLayout gridLayout = new GridLayout();\r
-               gridLayout.verticalSpacing = 10;\r
-               nameComposite.setLayout(gridLayout);            \r
-               nameComposite.setRedraw(true);\r
+\r
+       private void createMasterContent(IManagedForm managedForm) {\r
+               \r
+               this.managedForm = managedForm;\r
                \r
+               freeTextComposite = block.getMaster();\r
+               freeTextComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+               freeTextComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
                \r
+               GridLayout gridLayout = new GridLayout();\r
+               gridLayout.verticalSpacing = 10;\r
+               freeTextComposite.setLayout(gridLayout);                \r
+               freeTextComposite.setRedraw(true);\r
+                                               \r
 //             clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
-//             NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, nameComposite);\r
+//             NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, freeTextComposite);\r
 //             acceptedNameViewer.setBindingContext(bindingContext);\r
 //             acceptedNameViewer.configure(new NameViewerConfig());\r
-               \r
-               GroupComposite homoGroupComposite = new GroupComposite(nameComposite);\r
+                               \r
+               GroupComposite homoGroupComposite = new GroupComposite(freeTextComposite);\r
                homoGroupComposite.setTaxon(taxon);\r
                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
@@ -59,15 +84,25 @@ public class NameEditorPage extends MasterDetailsPage {
                                        if (addition instanceof Synonym)\r
                                                createHeterotypicalGroup((Synonym) addition);\r
                                }\r
-                               nameComposite.layout();\r
-//                             contentComposite.layout();\r
+                               freeTextComposite.layout();\r
+                               NameEditorPage.this.managedForm.getForm().reflow(true);\r
                        }\r
                });\r
        }\r
 \r
+       private void createDetailsPages(IManagedForm managedForm) {\r
+               \r
+               // Tell details part to show a BotanicalNameDetailsPage when input is TaxonNameBase\r
+               nameDetailsPage = new BotanicalNameDetailsPage();\r
+//             block.getDetails().registerPage(BotanicalName.class, nameDetailsPage);\r
+               block.getDetails().registerPage(TaxonBase.class, nameDetailsPage);      \r
+               block.getDetails().registerPage(Taxon.class, nameDetailsPage);\r
+               block.setInput(taxon);\r
+       }\r
+       \r
        private void createHeterotypicalGroup(Synonym heterosyn) {\r
 \r
-               GroupComposite heteroGroupComposite = new GroupComposite(nameComposite);\r
+               GroupComposite heteroGroupComposite = new GroupComposite(freeTextComposite);\r
                heteroGroupComposite.setTaxon(taxon);\r
                heteroGroupComposite.setNameEditorView(this);\r
                \r
@@ -92,6 +127,10 @@ public class NameEditorPage extends MasterDetailsPage {
 //             taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
                \r
                setSite(site);\r
-               setInput(input);\r
-       }       \r
-}\r
+               setInput(input);                \r
+       }\r
+\r
+       public Composite getFreeTextComposite() {\r
+               return freeTextComposite;\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java
new file mode 100644 (file)
index 0000000..c7a587d
--- /dev/null
@@ -0,0 +1,143 @@
+package eu.etaxonomy.taxeditor.view;\r
+\r
+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.swt.SWT;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.ManagedForm;\r
+import org.eclipse.ui.part.EditorPart;\r
+\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
+\r
+public class NameEditorView extends EditorPart {\r
+\r
+       private IManagedForm managedForm;\r
+       private Taxon taxon;\r
+       private Composite parent;\r
+       \r
+       @Override\r
+       public void doSave(IProgressMonitor monitor) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void doSaveAs() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void init(IEditorSite site, IEditorInput input)\r
+                       throws PartInitException {\r
+               if (!(input instanceof IEditorInput))\r
+                       throw new PartInitException(\r
+                                       "Invalid Input: Must be IFileEditorInput");\r
+               \r
+               if (input.getAdapter(Taxon.class) != null) {\r
+                       taxon = (Taxon) input.getAdapter(Taxon.class);\r
+               } else {\r
+                       \r
+                       taxon = null;\r
+               }\r
+               \r
+               // Get parent taxon\r
+//             if (taxon.getTaxonomicParent() != null)\r
+//                             higherTaxon = taxon.getTaxonomicParent();\r
+               \r
+               // Register listeners for any change in accepted name or set of relations\r
+//             taxon.getName().addPropertyChangeListener("titleCache", taxonChangeListener);\r
+//             taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
+               \r
+               setSite(site);\r
+               setInput(input);        \r
+       }\r
+\r
+       @Override\r
+       public boolean isDirty() {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public boolean isSaveAsAllowed() {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public void createPartControl(final Composite parent) {\r
+               \r
+               this.parent = parent;\r
+               this.managedForm = new ManagedForm(parent);\r
+               \r
+               parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+               parent.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
+               \r
+               GridLayout gridLayout = new GridLayout();\r
+               gridLayout.verticalSpacing = 10;\r
+               parent.setLayout(gridLayout);           \r
+               parent.setRedraw(true);\r
+                                               \r
+//             clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
+//             NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, freeTextComposite);\r
+//             acceptedNameViewer.setBindingContext(bindingContext);\r
+//             acceptedNameViewer.configure(new NameViewerConfig());\r
+                               \r
+               GroupComposite homoGroupComposite = new GroupComposite(parent);\r
+               homoGroupComposite.setTaxon(taxon);\r
+               homoGroupComposite.setNameEditorView(this);\r
+               \r
+               new NameComposite(homoGroupComposite, taxon).setNameEditorView(this);\r
+                                               \r
+               TesterooWritableSet.getInstance().addSetChangeListener\r
+               (new ISetChangeListener() {\r
+                       public void handleSetChange(SetChangeEvent event) {\r
+                               for ( Object addition: event.diff.getAdditions()) {\r
+                                       if (addition instanceof Synonym)\r
+                                               createHeterotypicalGroup((Synonym) addition);\r
+                               }\r
+                               parent.layout();\r
+                               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
+               GroupComposite heteroGroupComposite = new GroupComposite(parent);\r
+               heteroGroupComposite.setTaxon(taxon);\r
+               heteroGroupComposite.setNameEditorView(this);\r
+               \r
+               NameComposite nameComposite = new NameComposite(heteroGroupComposite, heterosyn, taxon);\r
+               nameComposite.setNameEditorView(this);\r
+               nameComposite.setFocus();\r
+       }               \r
+       \r
+       @Override\r
+       public void setFocus() {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       public IManagedForm getManagedForm() {\r
+               return this.managedForm;\r
+       }\r
+\r
+       public Composite getComposite() {\r
+               return parent;\r
+       }\r
+}\r
index 4698c4852e6ea12bb8879f8131f87b0bca6f928a..bea29b207557380d3230368d3bd9447803331294 100644 (file)
@@ -50,6 +50,7 @@ public class NameViewer extends SourceViewer {
                                new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB));                \r
                \r
                this.addPainter(annotationPainter);\r
+               \r
        }\r
 \r
        public void setShowError(boolean hasProblem) {\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/ScrolledPropertiesBlock.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/ScrolledPropertiesBlock.java
deleted file mode 100644 (file)
index 48d3ce4..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************\r
- * Copyright (c) 2000, 2004 IBM Corporation and others.\r
- * All rights reserved. This program and the accompanying materials \r
- * are made available under the terms of the Common Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/cpl-v10.html\r
- * \r
- * Contributors:\r
- *     IBM Corporation - initial API and implementation\r
- *******************************************************************************/\r
-package eu.etaxonomy.taxeditor.view;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.SelectionChangedEvent;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Table;\r
-import org.eclipse.ui.forms.DetailsPart;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.MasterDetailsBlock;\r
-import org.eclipse.ui.forms.SectionPart;\r
-import org.eclipse.ui.forms.editor.FormPage;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.eclipse.ui.forms.widgets.ScrolledForm;\r
-import org.eclipse.ui.forms.widgets.Section;\r
-\r
-import eu.etaxonomy.taxeditor.Activator;\r
-/**\r
- * Template for freetext - form editing\r
- * \r
- * @author p.ciardelli\r
- */\r
-public class ScrolledPropertiesBlock extends MasterDetailsBlock {\r
-       private FormPage page;\r
-       private Composite client;\r
-       public ScrolledPropertiesBlock(FormPage page) {\r
-               this.page = page;\r
-       }\r
-       /**\r
-        * @param id\r
-        * @param title\r
-        */\r
-//     class MasterContentProvider implements IStructuredContentProvider {\r
-//             public Object[] getElements(Object inputElement) {\r
-//                     if (inputElement instanceof SimpleFormEditorInput) {\r
-//                             SimpleFormEditorInput input = (SimpleFormEditorInput) page\r
-//                                             .getEditor().getEditorInput();\r
-//                             return input.getModel().getContents();\r
-//                     }\r
-//                     return new Object[0];\r
-//             }\r
-//             public void dispose() {\r
-//             }\r
-//             public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
-//             }\r
-//     }\r
-//     class MasterLabelProvider extends LabelProvider\r
-//                     implements\r
-//                             ITableLabelProvider {\r
-//             public String getColumnText(Object obj, int index) {\r
-//                     return obj.toString();\r
-//             }\r
-//             public Image getColumnImage(Object obj, int index) {\r
-//                     if (obj instanceof TypeOne) {\r
-//                             return PlatformUI.getWorkbench().getSharedImages().getImage(\r
-//                                             ISharedImages.IMG_OBJ_ELEMENT);\r
-//                     }\r
-//                     if (obj instanceof TypeTwo) {\r
-//                             return PlatformUI.getWorkbench().getSharedImages().getImage(\r
-//                                             ISharedImages.IMG_OBJ_FILE);\r
-//                     }\r
-//                     return null;\r
-//             }\r
-//     }\r
-       protected void createMasterPart(final IManagedForm managedForm,\r
-                       Composite parent) {\r
-                               \r
-               //final ScrolledForm form = managedForm.getForm();\r
-               FormToolkit toolkit = managedForm.getToolkit();\r
-               Section section = toolkit.createSection(parent, Section.DESCRIPTION | Section.TITLE_BAR);\r
-//             section.setText(Messages.getString("ScrolledPropertiesBlock.sname")); //$NON-NLS-1$\r
-//             section.setDescription(Messages.getString("ScrolledPropertiesBlock.sdesc")); //$NON-NLS-1$\r
-//             section.setText("ScrolledPropertiesBlock.sname"); //$NON-NLS-1$\r
-//             section.setDescription("ScrolledPropertiesBlock.sdesc"); //$NON-NLS-1$          \r
-               section.marginWidth = 10;\r
-               section.marginHeight = 5;\r
-               client = toolkit.createComposite(section, SWT.WRAP);\r
-               GridLayout layout = new GridLayout();\r
-               layout.numColumns = 2;\r
-               layout.marginWidth = 2;\r
-               layout.marginHeight = 2;\r
-               client.setLayout(layout);\r
-               GridData gd = new GridData(GridData.FILL_BOTH);\r
-               gd.heightHint = 20;\r
-               toolkit.paintBordersFor(client);\r
-               section.setClient(client);\r
-               final SectionPart spart = new SectionPart(section);\r
-               managedForm.addPart(spart);\r
-       }\r
-       \r
-       protected void createToolBarActions(IManagedForm managedForm) {\r
-               final ScrolledForm form = managedForm.getForm();\r
-               Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
-                       public void run() {\r
-                               sashForm.setOrientation(SWT.HORIZONTAL);\r
-                               form.reflow(true);\r
-                       }\r
-               };\r
-               haction.setChecked(true);\r
-//             haction.setToolTipText(Messages.getString("ScrolledPropertiesBlock.horizontal")); //$NON-NLS-1$\r
-               haction.setToolTipText("ScrolledPropertiesBlock.horizontal"); //$NON-NLS-1$\r
-               haction.setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor(Activator.IMG_HORIZONTAL));\r
-               Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$\r
-                       public void run() {\r
-                               sashForm.setOrientation(SWT.VERTICAL);\r
-                               form.reflow(true);\r
-                       }\r
-               };\r
-               vaction.setChecked(false);\r
-//             vaction.setToolTipText(Messages.getString("ScrolledPropertiesBlock.vertical")); //$NON-NLS-1$\r
-               vaction.setToolTipText("ScrolledPropertiesBlock.vertical"); //$NON-NLS-1$\r
-               vaction.setImageDescriptor(Activator.getDefault()\r
-                               .getImageRegistry().getDescriptor(Activator.IMG_VERTICAL));\r
-               form.getToolBarManager().add(haction);\r
-               form.getToolBarManager().add(vaction);\r
-       }\r
-       protected void registerPages(DetailsPart detailsPart) {\r
-               // TODO Register FlowPage here\r
-//             detailsPart.registerPage(TypeOne.class, new TypeOneDetailsPage());\r
-//             detailsPart.registerPage(TypeTwo.class, new TypeTwoDetailsPage());\r
-       }\r
-       public Composite getClientComposite() {\r
-               return client;\r
-       }\r
-}
\ No newline at end of file
index 0eab3a40aaa1d95f8e8fe205e146705a5b3dfb17..efb3ba686286122317eba9cdbd51a20e5540be86 100644 (file)
@@ -45,6 +45,7 @@ import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Tree;\r
 import org.eclipse.swt.widgets.TreeItem;\r
 import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
 \r
 import com.swtdesigner.ResourceManager;\r
 \r
@@ -81,7 +82,9 @@ public class TaxonomicTreeViewer extends TreeViewer {
 \r
                // Tree settings\r
                final Tree tree = this.getTree();\r
-               tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));\r
+//             tree.setLayoutData(new TableWrapData\r
+//                             (TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));\r
+//             tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));\r
                tree.setLinesVisible(false);\r
                tree.setHeaderVisible(false);\r
                \r
@@ -299,6 +302,7 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                        e.printStackTrace();\r
                                        taxon = null;\r
                                }\r
+                               \r
                                new ActionOpenNameEditor(taxon).run();\r
                        }\r
                });             \r
index cb3d59bc37aad31826664330b99911a7ec526869..6b1d7e09ee565dba36c7357f2ba399f8a671d01c 100644 (file)
@@ -6,30 +6,27 @@ import org.eclipse.swt.dnd.DropTarget;
 import org.eclipse.swt.dnd.DropTargetAdapter;\r
 import org.eclipse.swt.dnd.DropTargetEvent;\r
 import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.graphics.GC;\r
-import org.eclipse.swt.graphics.Rectangle;\r
 import org.eclipse.swt.layout.GridData;\r
 import org.eclipse.swt.layout.GridLayout;\r
 import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
 \r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.view.NameEditorPage;\r
-import eu.etaxonomy.taxeditor.view.NameEditorViewOld;\r
+import eu.etaxonomy.taxeditor.view.NameEditorView;\r
 \r
 public class GroupComposite extends Composite {\r
        \r
        Taxon taxon;\r
-       Rectangle rectangle;\r
        HomotypicalGroup homotypicalGroup;\r
        boolean acceptedGroup;\r
-       private NameEditorPage nameEditorView;\r
+       private NameEditorView nameEditor;\r
+       private IManagedForm managedForm;\r
        \r
        public void setTaxon(Taxon taxon) {\r
                this.taxon = taxon;\r
@@ -45,17 +42,7 @@ public class GroupComposite extends Composite {
                this.setLayout(gridLayout);\r
                this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
                this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-                                       \r
-//             this.addListener(SWT.Resize, new Listener() {\r
-//                     public void handleEvent(Event event) {\r
-//                             GC gc = new GC(GroupComposite.this);\r
-//                             rectangle = GroupComposite.this.getClientArea();\r
-//                             gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
-//                             gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
-//                             System.out.println(rectangle.height);\r
-//                     }\r
-//             });             \r
-               \r
+                               \r
                // Drop functionality\r
                Transfer[] types = new Transfer[] {TaxonTransfer.getInstance()};\r
                int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
@@ -64,34 +51,11 @@ public class GroupComposite extends Composite {
                target.addDropListener(new DropTargetAdapter() {\r
                                                \r
                        public void dragEnter(DropTargetEvent event) {\r
-                               \r
-                               \r
-                               \r
-//                             for (Control child : GroupComposite.this.getChildren()) {\r
-//                                     if (child.getClass() != NameComposite.class) continue;\r
-////                                   System.out.println(child.getClass() + " " + event.data.getClass());\r
-//                                     \r
-//                                     if (((NameComposite) child).getName() == TaxonTransfer.getInstance().getTaxon().getName()) {\r
-//                                             event.detail = DND.DROP_NONE;\r
-//                                             return;\r
-//                                     }\r
-//                             }\r
-                               \r
-//                             if (((NameComposite) event.widget).getParent() == GroupComposite.this)\r
-//                                     event.detail = DND.DROP_NONE;\r
-//                             rectangle = GroupComposite.this.getClientArea();\r
-//                             GC gc = new GC(GroupComposite.this);\r
-//                             rectangle = GroupComposite.this.getClientArea();\r
-//                             gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
-//                             gc.drawRectangle(rectangle.x, rectangle.y, rectangle.width - 1, rectangle.height - 1);\r
-                               \r
-//                             rectangle.draw(Display.getDefault().getSystemColor\r
-//                                             (SWT.COLOR_BLACK));\r
+                               showBorder();\r
                        }\r
                        \r
                        public void dragLeave(DropTargetEvent event) {\r
-//                             rectangle.draw(Display.getDefault().getSystemColor\r
-//                                             (SWT.COLOR_GRAY));\r
+                               hideBorder();\r
                        }\r
                        \r
                        public void drop(DropTargetEvent event) {\r
@@ -107,13 +71,26 @@ public class GroupComposite extends Composite {
                });\r
        }\r
        \r
-       public void drawRect() {\r
-               GC gc = new GC(this);\r
-               Rectangle rect = this.getClientArea();\r
-               gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GREEN));\r
-               gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2);              \r
+       protected void hideBorder() {\r
+               if (!(managedForm == null)) {\r
+                       this.setData(FormToolkit.KEY_DRAW_BORDER, null);\r
+                       managedForm.getToolkit().paintBordersFor(nameEditor.getComposite());\r
+                       managedForm.getForm().reflow(true);\r
+               }\r
        }\r
 \r
+       protected void showBorder() {\r
+               if (!(managedForm == null)) {\r
+                       \r
+                       // To cut down on flickering, only draw border as necessary\r
+                       if (this.getData(FormToolkit.KEY_DRAW_BORDER) == FormToolkit.TEXT_BORDER) return;\r
+                       \r
+                       this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+                       managedForm.getToolkit().paintBordersFor(nameEditor.getComposite());\r
+                       managedForm.getForm().reflow(true);\r
+               }\r
+       }\r
+       \r
        public HomotypicalGroup getHomotypicalGroup() {\r
                return homotypicalGroup;\r
        }\r
@@ -130,12 +107,12 @@ public class GroupComposite extends Composite {
                this.acceptedGroup = acceptedGroup;\r
        }\r
 \r
-       public void setNameEditorView(NameEditorPage nameEditorView) {\r
-               this.nameEditorView = nameEditorView;\r
-       }\r
-       \r
-       public NameEditorPage getNameEditorView() {\r
-               return nameEditorView;\r
+       public void setNameEditorView(NameEditorView nameEditorView) {\r
+               this.nameEditor = nameEditorView;\r
+               this.managedForm = nameEditorView.getManagedForm();\r
        }\r
        \r
+       public NameEditorView getNameEditorView() {\r
+               return nameEditor;\r
+       }       \r
 }\r
index 4714799f3285d9038d2e8580b63d6649f8a50828..a02c5872534ff05baa86c98590f526507c0a287a 100644 (file)
@@ -23,6 +23,8 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;\r
 import org.eclipse.swt.widgets.Menu;\r
 import org.eclipse.swt.widgets.MenuItem;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
 \r
 import com.swtdesigner.SWTResourceManager;\r
 \r
@@ -32,7 +34,7 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.view.NameEditorPage;\r
-import eu.etaxonomy.taxeditor.view.NameEditorViewOld;\r
+import eu.etaxonomy.taxeditor.view.NameEditorView;\r
 import eu.etaxonomy.taxeditor.view.NameViewer;\r
 \r
 public class NameComposite extends Composite {\r
@@ -131,7 +133,7 @@ public class NameComposite extends Composite {
        public void createNameComposite() {\r
 \r
                Assert.isNotNull(taxon);\r
-               \r
+                               \r
                // Graphic layout of composite\r
                GridLayout gridLayout = new GridLayout();\r
                gridLayout.verticalSpacing = 0;\r
@@ -180,12 +182,12 @@ 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
-//                             if (nameEditorView != null) \r
-//                                     nameEditorView.setPropertySheetNodes(getName());\r
+               \r
+//                             if (nameEditor != null) \r
+//                                     nameEditor.setPropertySheetNodes(getName());\r
                        }\r
                });\r
-               \r
+                               \r
                // Listen for user selecting text\r
                nameViewer.getTextWidget().addSelectionListener(new SelectionListener() {\r
 \r
@@ -202,8 +204,7 @@ public class NameComposite extends Composite {
                        }\r
                        \r
                });\r
-               \r
-               \r
+                               \r
                // Put name into name viewer, show error if parsed incorrectly\r
                nameViewer.getTextWidget().setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
                nameViewer.setShowError(getName().getHasProblem());\r
@@ -242,12 +243,9 @@ public class NameComposite extends Composite {
         */\r
        DragSourceListener dragSourceListener = new DragSourceListener () {\r
                \r
-               CompositeRectangle rectangle;\r
-               \r
                public void dragStart(DragSourceEvent event) {\r
 \r
-                       rectangle = new CompositeRectangle(NameComposite.this,\r
-                                       Display.getDefault().getSystemColor(SWT.COLOR_GRAY));\r
+//                     showBorder();\r
                        \r
                        event.doit = true;\r
                }\r
@@ -255,11 +253,11 @@ public class NameComposite extends Composite {
                        TaxonTransfer.getInstance().setTaxon(synonym);\r
                }\r
                public void dragFinished(DragSourceEvent event) {\r
+                                               \r
                        if (event.detail == DND.DROP_MOVE) {\r
                                Composite parent = NameComposite.this.getParent();\r
                                Composite grandParent = parent.getParent();\r
                                \r
-//                             rectangle.dispose();\r
                                NameComposite.this.dispose();\r
                                \r
                                // If this was the last child in its homo. group,\r
@@ -274,19 +272,32 @@ public class NameComposite extends Composite {
                        }\r
                }\r
        };\r
-       private NameEditorPage nameEditorView;\r
+       private NameEditorView nameEditor;\r
+       private IManagedForm managedForm;\r
        \r
-       public void setName(TaxonNameBase name) {\r
+       public void setName(TaxonNameBase name) {               \r
                (compositeType == ACCEPTED? taxon : synonym).setName(name);\r
-               nameViewer.setShowError(name.getHasProblem());\r
+               \r
+               BotanicalName botname = (BotanicalName)name; \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
+                       managedForm.getForm().reflow(true);\r
+               }\r
+       }\r
+\r
        public TaxonNameBase getName() {\r
                return (compositeType == ACCEPTED? taxon : synonym).getName();                          \r
        }\r
 \r
-       public void setNameEditorView(NameEditorPage nameEditorView) {\r
-               this.nameEditorView = nameEditorView;           \r
+       public void setNameEditorView(NameEditorView nameEditorView) {\r
+               this.nameEditor = nameEditorView;\r
+               this.managedForm = nameEditorView.getManagedForm();\r
        }\r
        \r
        private void createTempMenu() {\r
@@ -300,7 +311,7 @@ public class NameComposite extends Composite {
                        }\r
 \r
                        public void mouseDown(MouseEvent e) {\r
-                               menu1.setVisible(true);\r
+                               // menu1.setVisible(true);\r
                        }\r
 \r
                        public void mouseUp(MouseEvent e) {\r
index 39796b85cf99a80abe3e2327c9b64416827f036c..7fd28ff5521cb32efe27d8e675400ec59f2cef6c 100644 (file)
@@ -40,9 +40,8 @@ public class NameViewerVerifyListener implements VerifyListener {
                String widgetText = styledText.getText(); \r
                int cursorPosition = styledText.getCaretOffset();\r
                \r
-               // Is there a line break in verifyText?\r
+               // If no line break in verifyText, Parse text normally\r
                if (!verifyText.contains(System.getProperty("line.separator")))\r
-                       // Parse text normally\r
                        return;\r
                \r
                // Don't add verifyText without further processing\r