Checkin before fooling around with save.
authorp.ciardelli <p.ciardelli@localhost>
Tue, 29 Apr 2008 08:42:33 +0000 (08:42 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Tue, 29 Apr 2008 08:42:33 +0000 (08:42 +0000)
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Activator.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/GroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/GroupedComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java

index f6461d469d5af5a59b35dfe0c5af68ae75e12488..b63834e454bcee09f6f0a30a60e3bf2df0e946e5 100644 (file)
@@ -13,7 +13,6 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;\r
 import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.ui.forms.FormColors;\r
-import org.eclipse.ui.internal.registry.ViewRegistry;\r
 import org.eclipse.ui.plugin.AbstractUIPlugin;\r
 import org.osgi.framework.BundleContext;\r
 \r
@@ -204,44 +203,6 @@ public class Activator extends AbstractUIPlugin {
                return observableSynonymSet;            \r
        }\r
        \r
-       /* ***************************************************************************************\r
-                       PROPERTY SHEET SELECTION PROVIDER\r
-        ************************************************************************************** */\r
-//     final ISelectionProvider provider = new ISelectionProvider() {\r
-//\r
-//             private ListenerList listeners = new ListenerList();\r
-//             private ISelection selection;\r
-//             \r
-//             @Override\r
-//             public void addSelectionChangedListener(\r
-//                             ISelectionChangedListener listener) {\r
-//                     listeners.add(listener);\r
-//             }\r
-//\r
-//             @Override\r
-//             public ISelection getSelection() {\r
-//                     if (selection != null)\r
-//                             return selection;\r
-//                     return null;\r
-////                   return new StructuredSelection(new BotNamePropertySource((BotanicalName) taxon.getName()));\r
-//             }\r
-//\r
-//             @Override\r
-//             public void removeSelectionChangedListener(\r
-//                             ISelectionChangedListener listener) {}\r
-//\r
-//             @Override\r
-//             public void setSelection(ISelection selection) {\r
-//                     this.selection = selection;\r
-//             }\r
-//    };\r
-    \r
-         \r
-//    public ISelectionProvider getProvider() {\r
-////           this.getWorkbench().getActiveWorkbenchWindow().getSelectionService();\r
-//     return this.provider;\r
-//    }\r
-       \r
        /* ***************************************************************************************\r
                        IMAGE REGISTRY\r
         ************************************************************************************** */\r
index c645460c0c937bfa8db5f8771033a9029a8950d0..5127bfa7829296b8727b1b80739f3270ede58fe0 100644 (file)
@@ -24,6 +24,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
        // when fillActionBars is called with FILL_PROXY.
        private IWorkbenchAction exitAction;
        private ActionOpenNameEditor newNameAction;
+       private IWorkbenchAction saveAction;
 
        public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
                super(configurer);
@@ -37,6 +38,8 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                // Registering also provides automatic disposal of the actions when
                // the window is closed.
 
+               saveAction = ActionFactory.SAVE.create(window);
+               
                exitAction = ActionFactory.QUIT.create(window);
                register(exitAction);
                
@@ -49,6 +52,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                                IWorkbenchActionConstants.M_FILE);
                menuBar.add(fileMenu);
                fileMenu.add(newNameAction);
+               fileMenu.add(saveAction);
                fileMenu.add(exitAction);
        }
 
index b7ecbba0f5903761ed3938dd7428379417a785f5..c5d027b3ca70bca8aca51b09a51fa27ce4574232 100644 (file)
@@ -10,6 +10,7 @@ import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.MultiPageEditorPart;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;\r
 \r
 /**\r
  * \r
@@ -48,8 +49,9 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
        \r
        @Override\r
        public void doSave(IProgressMonitor monitor) {\r
-               // TODO Auto-generated method stub\r
-               \r
+               System.out.println("Start save");\r
+               new ActionSaveTaxon(taxon);\r
+               System.out.println("Save finished");\r
        }\r
 \r
        @Override\r
@@ -78,7 +80,7 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
                        taxon = null;\r
                }\r
 \r
-               // Listen for name changes fired when taxon is saved; \r
+               // Listen for name changes, \r
                //  change tab for this taxon editor accordingly\r
                taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
                        public void propertyChange(PropertyChangeEvent e) {\r
index 18444b3b62122e1f5e36a38e3fcef434816aaf55..0c100432fc0a339a285858fa6f77f731af12c3f4 100644 (file)
@@ -4,8 +4,6 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;\r
 import java.util.List;\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.IAdaptable;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.core.runtime.ListenerList;\r
@@ -15,11 +13,16 @@ import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;\r
 import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.StyledText;\r
 import org.eclipse.swt.dnd.DND;\r
 import org.eclipse.swt.dnd.DropTarget;\r
 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.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Event;\r
@@ -35,19 +38,20 @@ import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.views.properties.IPropertySheetPage;\r
 import org.eclipse.ui.views.properties.PropertySheetPage;\r
 \r
+import com.swtdesigner.SWTResourceManager;\r
+\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\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.controller.ActionAddSynonymToTaxon;\r
+import eu.etaxonomy.cdm.strategy.parser.TaxonNameParserBotanicalNameImpl;\r
 import eu.etaxonomy.taxeditor.controller.WidgetTransfer;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.CompositeBorderDecorator;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.LineBreakListener;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;\r
 import eu.etaxonomy.taxeditor.view.propertysheetsupport.BotanicalNamePropertySource;\r
 import eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetEntry;\r
 \r
@@ -151,6 +155,11 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                                new BotanicalNamePropertySource((BotanicalName) taxon.getName())));\r
        }\r
 \r
+       public void setSelection(BotanicalName name) {\r
+               getSite().getSelectionProvider().setSelection\r
+                               (new StructuredSelection(new BotanicalNamePropertySource(name)));;\r
+       }\r
+       \r
        @Override\r
        public boolean isDirty() {\r
                return dirty;\r
@@ -200,39 +209,7 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                createNameComposite(synonym, heterotypicComposite);                             \r
                        }\r
                }\r
-                               \r
-               // TODO replace this with real set of taxon's synonyms\r
-               // 1) Observe all synonyms\r
-//             TesterooWritableSet.getInstance().addSetChangeListener\r
-//             (new ISetChangeListener() {\r
-//                     public void handleSetChange(SetChangeEvent event) {\r
-//                             for ( Object addition: event.diff.getAdditions()) {\r
-//                                     Synonym synonym = null;\r
-//                                     if (addition instanceof Synonym)\r
-//                                             synonym = (Synonym) addition;\r
-//                                             HomotypicalGroup emptyHomotypicalGroup = new HomotypicalGroup();\r
-//                                             synonym.getName().setHomotypicalGroup(emptyHomotypicalGroup);\r
-//                                             GroupComposite groupComposite = createGroupComposite(emptyHomotypicalGroup);\r
-//                                             createNameComposite(synonym, groupComposite);\r
-//                             }\r
-//                             parent.layout();\r
-//                     }\r
-//             });\r
-                               \r
-//             taxon.addPropertyChangeListener(new PropertyChangeListener() {\r
-//                     @Override\r
-//                     public void propertyChange(PropertyChangeEvent evt) {\r
-//                             System.out.println("changing");\r
-//                     }       \r
-//             });\r
-//             taxon.addPropertyChangeListener("synonyms", new PropertyChangeListener() {\r
-//\r
-//                     @Override\r
-//                     public void propertyChange(PropertyChangeEvent evt) {\r
-//                             System.out.println("new syn");\r
-//                     }       \r
-//             });\r
-               \r
+                       \r
                // Listen for names being dragged outside of existing homotypic groups -\r
                //  user wants to create a new group\r
                Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
@@ -281,44 +258,30 @@ public class NameEditorView extends EditorPart implements IAdaptable {
        \r
        private NameComposite createNameComposite(final TaxonBase taxonBase, GroupComposite groupComposite) {\r
                NameComposite nameComposite;\r
+               TaxonNameBase name = taxonBase.getName();\r
                if (taxonBase instanceof Taxon) {\r
                        nameComposite = new NameComposite(groupComposite, taxonBase, false);\r
+                       nameComposite.setIcon(NameComposite.ACCEPTED);\r
+                       \r
                } else {\r
                        nameComposite = new NameComposite(groupComposite, taxonBase, true);\r
                        \r
-                       // TODO new prop change listener that first checks whether this group / element combo exists\r
-//                     taxonBase.getName().addPropertyChangeListener("homotypicalGroup", new PropertyChangeListener() {\r
-//\r
-//                             @Override\r
-//                             public void propertyChange(PropertyChangeEvent evt) {\r
-//                                     HomotypicalGroup homotypicalGroup = \r
-//                                                     (HomotypicalGroup) evt.getNewValue();\r
-//                                     GroupComposite groupComposite = groupCompositeMap.get(\r
-//                                                     homotypicalGroup);\r
-//                                     if (groupComposite == null) {;\r
-//                                             groupComposite = createGroupComposite(homotypicalGroup);\r
-//                                             groupCompositeMap.put(homotypicalGroup, groupComposite);\r
-//                                     }\r
-//                                     createNameComposite(taxonBase, groupComposite);\r
-//                             }\r
-//                     });\r
+                       nameComposite.indent();\r
+                       \r
+                       if (taxon.getName().getHomotypicalGroup().equals(groupComposite.getData())) {\r
+                               nameComposite.setIcon(NameComposite.HOMOTYPIC_SYNONYM);\r
+                       } else {\r
+                               nameComposite.setIcon(NameComposite.HETEROTYPIC_SYNONYM);\r
+                       }\r
                }\r
                                \r
-               new CompositeBorderDecorator(nameComposite.getTextWidget(), managedForm);\r
+               StyledText textWidget = nameComposite.getTextWidget();\r
                \r
-               // Add listener for sending selection to property sheet         \r
-               nameComposite.getTextWidget().addListener(SWT.Selection, new Listener() {\r
-                       @Override\r
-                       public void handleEvent(Event event) {\r
-                               setSelection((BotanicalName) event.data);\r
-                       }\r
-               });\r
+               new CompositeBorderDecorator(textWidget, managedForm);\r
                \r
-               nameComposite.getTextWidget().addVerifyListener(new LineBreakListener() {\r
+               textWidget.addVerifyListener(new LineBreakListener() {\r
                        @Override\r
                        public void handleSplitText(String text) {\r
-//                             new ActionAddSynonymToTaxon(taxon, text).run();\r
-\r
                                // Model actions\r
                                BotanicalName name = BotanicalName.PARSED_NAME(text);\r
                                \r
@@ -335,16 +298,50 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                parent.layout();\r
                        }               \r
                });\r
+                       \r
+               // Add listener for sending selection to property sheet\r
+               textWidget.addFocusListener(new FocusListener() {\r
+                       @Override\r
+                       public void focusGained(FocusEvent e) {\r
+                               setSelection((BotanicalName) taxonBase.getName());\r
+                       }\r
+\r
+                       @Override\r
+                       public void focusLost(FocusEvent e) {}                  \r
+               });\r
+               \r
+               textWidget.setFont(\r
+                               SWTResourceManager.getFont("Georgia", \r
+                                               (taxonBase instanceof Taxon ? 12 : 10), \r
+                                               SWT.NONE));\r
+               \r
+               String initText = (name.getTitleCache() == null) ? \r
+                               "" : name.getTitleCache();\r
+               textWidget.setText(initText);\r
+                               \r
+               // Put cursor at end of name viewer\r
+               textWidget.setCaretOffset(\r
+                               textWidget.getText().length());\r
+\r
+               textWidget.addModifyListener(new ModifyListener () {\r
+                       public void modifyText(ModifyEvent e) {\r
+                               StyledText widget = (StyledText) e.widget;\r
+                               String text = widget.getText();\r
+                               TaxonNameParserBotanicalNameImpl.NewInstance().parseFullName\r
+                                               ((BotanicalName) taxonBase.getName(), text, null, true);\r
+                       }\r
+               });             \r
+               \r
+               NameViewer nameViewer = (NameViewer) nameComposite.getTextViewer();\r
+               nameViewer.setShowError(name.getHasProblem());\r
                \r
                nameComposite.addPropertyChangeListener("parent", new PropertyChangeListener() {\r
 \r
                        @Override\r
                        public void propertyChange(PropertyChangeEvent evt) {\r
                                \r
-                               if (! (evt.getSource() instanceof NameComposite)) return;\r
-                               if (! (evt.getNewValue() instanceof HomotypicalGroup)) return;\r
-                                       \r
-                               HomotypicalGroup newHomotypicalGroup = (HomotypicalGroup) evt.getNewValue();\r
+                               GroupComposite groupComposite = (GroupComposite) evt.getNewValue();\r
+                               HomotypicalGroup newHomotypicalGroup = (HomotypicalGroup) groupComposite.getData();\r
                                NameComposite nameComposite = (NameComposite) evt.getSource();\r
                                \r
                                // Set name's homotypical group         \r
@@ -370,6 +367,7 @@ public class NameEditorView extends EditorPart implements IAdaptable {
 //                             ("TEST2", "Testeroo warn", null, IMessageProvider.WARNING, nameComposite.getTextWidget());\r
 //             managedForm.getMessageManager().addMessage\r
 //                             ("TEST2", "Testeroo info", null, IMessageProvider.INFORMATION, nameComposite.getTextWidget());\r
+               \r
                return nameComposite;\r
        }\r
        \r
@@ -390,9 +388,4 @@ public class NameEditorView extends EditorPart implements IAdaptable {
            }\r
            return super.getAdapter(type);\r
        }\r
-\r
-       public void setSelection(BotanicalName name) {\r
-               getSite().getSelectionProvider().setSelection\r
-                               (new StructuredSelection(new BotanicalNamePropertySource(name)));;\r
-       }\r
 }
\ No newline at end of file
index b784b29d79c698ba9852479593390d9f784d0c71..482836b32b8f8cdf035c8438bfe75fef16cdd198 100644 (file)
@@ -11,28 +11,13 @@ import org.eclipse.jface.text.source.IAnnotationAccess;
 import org.eclipse.jface.text.source.SourceViewer;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.StyledText;\r
-import org.eclipse.swt.events.FocusEvent;\r
-import org.eclipse.swt.events.FocusListener;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
 import org.eclipse.swt.graphics.Color;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Event;\r
 import org.eclipse.ui.forms.widgets.TableWrapData;\r
 \r
-import com.swtdesigner.SWTResourceManager;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\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.cdm.strategy.parser.TaxonNameParserBotanicalNameImpl;\r
-import eu.etaxonomy.taxeditor.controller.ActionAddSynonymToTaxon;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.AnnotationMarkerAccess;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.ErrorAnnotation;\r
-import eu.etaxonomy.taxeditor.view.nameviewersupport.LineBreakListener;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.WarningAnnotation;\r
 \r
 /**\r
@@ -43,15 +28,16 @@ import eu.etaxonomy.taxeditor.view.nameviewersupport.WarningAnnotation;
  */\r
 public class NameViewer extends SourceViewer {\r
        \r
-       TaxonBase taxon;\r
-       boolean initialized = false; \r
-       \r
        public NameViewer(Composite parent) {\r
                super(parent, null, SWT.WRAP | SWT.MULTI | SWT.RESIZE);\r
                                                        \r
                // Set name viewer's text to name cache\r
                this.setDocument(new Document(""), new AnnotationModel());\r
-                               \r
+\r
+               // Lay out StyledText\r
+               StyledText textWidget = this.getTextWidget();\r
+               textWidget.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+               \r
                // Annotations section\r
                IAnnotationAccess fAnnotationAccess = new AnnotationMarkerAccess();\r
                \r
@@ -87,61 +73,9 @@ public class NameViewer extends SourceViewer {
                if (hasProblem && text.length() > 0) {\r
                        for (int i = 1; i <= this.getTextWidget().getLineCount(); i++) {\r
                                this.getAnnotationModel().addAnnotation(\r
-                                               new ErrorAnnotation(i, "Could not parse name."), \r
+                                               new ErrorAnnotation(i, "Could not parse."), \r
                                                new Position(0, text.length()));\r
                        }\r
                }\r
        }\r
-       \r
-       public void initialize(TaxonBase taxon) {\r
-               this.taxon = taxon;\r
-               \r
-               StyledText nameWidget = this.getTextWidget();\r
-               \r
-               nameWidget.addFocusListener(new FocusListener() {\r
-                       @Override\r
-                       public void focusGained(FocusEvent e) {\r
-                               Event event = new Event();\r
-                               event.data = getName();\r
-                               e.widget.notifyListeners(SWT.Selection, event);\r
-                       }\r
-\r
-                       @Override\r
-                       public void focusLost(FocusEvent e) {}                  \r
-               });\r
-               \r
-               nameWidget.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));           \r
-               nameWidget.setFont(\r
-                               SWTResourceManager.getFont("Georgia", \r
-                                               (taxon instanceof Taxon ? 12 : 10), \r
-                                               SWT.NONE));\r
-                               \r
-               // Listen for changes to name\r
-               nameWidget.addModifyListener(new ModifyListener () {\r
-                       public void modifyText(ModifyEvent e) {\r
-                               if (initialized) {\r
-                                       String text = ((StyledText) e.widget).getText();\r
-                                       TaxonNameParserBotanicalNameImpl.NewInstance().parseFullName\r
-                                                       ((BotanicalName) getName(), text, null, true);\r
-                               }\r
-                       }\r
-               });\r
-                                                               \r
-               // Put name into name viewer, show error if parsed incorrectly\r
-               String initText = (getName().getTitleCache() == null) ? \r
-                               "" : getName().getTitleCache();\r
-               nameWidget.setText(initText);\r
-               this.setShowError(getName().getHasProblem());\r
-               \r
-               // Put cursor at end of name viewer\r
-               nameWidget.setCaretOffset(\r
-                               nameWidget.getText().length());\r
-               \r
-               // Any new input should now be parsed\r
-               initialized = true;\r
-       }\r
-       \r
-       TaxonNameBase getName() {\r
-               return taxon.getName();\r
-       }\r
 }
\ No newline at end of file
index 6f8a70cdd34108afb386891d797214e69a44dffa..34e3fec4035971086d0209f817a18f39579dc338 100644 (file)
@@ -16,9 +16,13 @@ import eu.etaxonomy.taxeditor.controller.WidgetTransfer;
 public class GroupComposite extends Composite {\r
        \r
        public GroupComposite(Composite parent, Object data) {\r
+               this(parent);\r
+               setData(data);\r
+       }\r
+       \r
+       public GroupComposite(Composite parent) {\r
                super(parent, SWT.NONE);\r
                                \r
-               setData(data);\r
                                \r
                // Graphic layout of composite\r
                this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
index 6fc0a3a5f266114cdaa165f7a778366ca682c415..d2576589f125a81e2dc6f941df5434469b40d626 100644 (file)
@@ -3,7 +3,7 @@ package eu.etaxonomy.taxeditor.view.nameviewersupport;
 import java.beans.PropertyChangeListener;\r
 import java.beans.PropertyChangeSupport;\r
 \r
-import org.eclipse.jface.text.source.SourceViewer;\r
+import org.eclipse.jface.text.TextViewer;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.StyledText;\r
 import org.eclipse.swt.dnd.DND;\r
@@ -21,66 +21,61 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout;
 import eu.etaxonomy.taxeditor.controller.WidgetTransfer;\r
 \r
 /**\r
- * A composite that holds an editable relation, and which is optionally \r
- *  draggable. The relation is represented by a relation label and a \r
- *  source viewer. The relation's data is stored in the Widget's data field.\r
+ * A draggable composite with two elements: a draggable label and a text viewer for editing text.\r
  * \r
  * @author p.ciardelli\r
  *\r
  */\r
 abstract public class GroupedComposite extends Composite {\r
        \r
-       private Label relationLabel;\r
-       protected SourceViewer dataViewer;\r
-       private boolean draggable;\r
-       @SuppressWarnings("unused")\r
-       private boolean initialized = false;\r
-       // The Composite marked as the main entry is indented to the left\r
-       //  of all others\r
-       @SuppressWarnings("unused")\r
-       protected boolean mainentry = false;\r
+       private Label draggableLabel;\r
+       private TextViewer textViewer;\r
+       protected TableWrapLayout layout;\r
        \r
+       protected static final int LEFT_MARGIN = 15;\r
+               \r
        PropertyChangeSupport propertyChangeSupport;\r
        \r
+       public GroupedComposite(Composite parent, boolean draggable) {\r
+               this(parent, null, draggable);\r
+       }\r
+       \r
        public GroupedComposite(Composite parent, Object data, boolean draggable) {\r
                super(parent, SWT.NONE);\r
-               \r
-               setData(data);\r
-               \r
-               this.draggable = draggable;\r
+\r
+               if (data != null) {\r
+                       setData(data);\r
+               }\r
                \r
                propertyChangeSupport = new PropertyChangeSupport(this);\r
                \r
-               createNameComposite();\r
-               \r
+               createContent();\r
+                               \r
+               if (draggable) {\r
+                       addDraggability();\r
+               }               \r
        }\r
        \r
-       /**\r
-        * \r
-        */\r
-       public void createNameComposite() {\r
-               \r
+       protected void createContent() {\r
                this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
-               TableWrapLayout layout = new TableWrapLayout();\r
+               layout = new TableWrapLayout();\r
                layout.numColumns = 2;\r
-               layout.leftMargin = (mainentry? 0: 15);\r
+               layout.leftMargin = 0;\r
                this.setLayout(layout);\r
                \r
                this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
                \r
-               relationLabel = new Label(this, SWT.NONE);                                      \r
-               relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-               relationLabel.setLayoutData(new TableWrapData(TableWrapData.CENTER, TableWrapData.MIDDLE));\r
-                               \r
-               // Add drag functionality to synonyms only\r
-               if (!draggable) return;\r
-                               \r
-               // Drag functionality\r
+               draggableLabel = new Label(this, SWT.NONE);                                     \r
+               draggableLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+               draggableLabel.setLayoutData(new TableWrapData(TableWrapData.CENTER, TableWrapData.MIDDLE));\r
+       }\r
+       \r
+       private void addDraggability() {\r
                Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};               \r
                int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
                \r
                // Make relation label draggable        \r
-               DragSource dragLabel = new DragSource (relationLabel, operations);\r
+               DragSource dragLabel = new DragSource (draggableLabel, operations);\r
                dragLabel.setTransfer(types);\r
                dragLabel.addDragListener(dragSourceListener);\r
        }\r
@@ -102,10 +97,6 @@ abstract public class GroupedComposite extends Composite {
                }\r
        };\r
        \r
-       public StyledText getTextWidget() {\r
-               return dataViewer.getTextWidget();\r
-       }\r
-\r
        /** \r
         * Override of setParent: dispose of parent if this is its last child composite\r
         * @see org.eclipse.swt.widgets.Control#setParent(org.eclipse.swt.widgets.Composite)\r
@@ -125,7 +116,7 @@ abstract public class GroupedComposite extends Composite {
                }\r
                return false;\r
        }\r
-       \r
+\r
        public void addPropertyChangeListener(String propertyName,\r
             PropertyChangeListener listener) {\r
                propertyChangeSupport.addPropertyChangeListener(propertyName, listener);\r
@@ -134,21 +125,25 @@ abstract public class GroupedComposite extends Composite {
        public void removePropertyChangeListener(PropertyChangeListener listener) {\r
                propertyChangeSupport.removePropertyChangeListener(listener);\r
        }\r
-       \r
-       /**\r
-        * Initialization of the dataViewer should take place here. \r
-        * @param data\r
-        */\r
-       protected void initialize() {\r
-               initialized = true;\r
+\r
+       public TextViewer getTextViewer() {\r
+               return textViewer;\r
        }\r
-               \r
-       protected void setViewer(SourceViewer dataViewer) {\r
-               this.dataViewer = dataViewer;\r
+\r
+       public void setTextViewer(TextViewer textViewer) {\r
+               this.textViewer = textViewer;\r
+       }\r
+\r
+       public StyledText getTextWidget() {\r
+               return textViewer.getTextWidget();\r
        }\r
 \r
-       @SuppressWarnings("unused")\r
        protected void setIcon(Image icon) {\r
-               relationLabel.setImage(icon);\r
+               draggableLabel.setImage(icon);\r
+       }\r
+\r
+       public void indent() {\r
+               layout.leftMargin = LEFT_MARGIN;\r
+               this.setLayout(layout);\r
        }\r
 }
\ No newline at end of file
index 47ee60a99253e6518a37c732227d4d4f163a558d..d8b3a31e341ced25a7c733a21d9226f4f44541da 100644 (file)
@@ -3,8 +3,6 @@ package eu.etaxonomy.taxeditor.view.nameviewersupport;
 import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.swt.widgets.Composite;\r
 \r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.Activator;\r
 import eu.etaxonomy.taxeditor.view.NameViewer;\r
 \r
@@ -13,38 +11,15 @@ public class NameComposite extends GroupedComposite {
        public static final int ACCEPTED = 0;\r
        public static final int HOMOTYPIC_SYNONYM = 1;\r
        public static final int HETEROTYPIC_SYNONYM = 2;\r
-       \r
-       int compositeType = HETEROTYPIC_SYNONYM;\r
-\r
+                       \r
        public NameComposite(Composite parent, Object data, boolean draggable) {\r
                super(parent, data, draggable);\r
        }\r
        \r
-       /**\r
-        * \r
-        */\r
-       public void createNameComposite() {\r
-                                               \r
-               if (getData() instanceof Taxon) {\r
-                       mainentry = true;\r
-                       compositeType = ACCEPTED;\r
-               }\r
-               \r
-               super.createNameComposite();\r
-               \r
-               setIcon(compositeType);\r
+       protected void createContent() {\r
+               super.createContent();          \r
                \r
-               setViewer(new NameViewer(this));\r
-\r
-               initialize();\r
-       }\r
-\r
-       \r
-       protected void initialize() {\r
-               if (getData() instanceof TaxonBase) {\r
-                       ((NameViewer) dataViewer).initialize((TaxonBase) getData());\r
-               }\r
-               super.initialize();\r
+               setTextViewer(new NameViewer(this));\r
        }\r
 \r
        public void setIcon(int type) {\r