AlignmentEditorCopyHandler now sets current action status.
[taxeditor.git] / eu.etaxonomy.taxeditor.molecular / src / main / java / eu / etaxonomy / taxeditor / molecular / editor / AlignmentEditor.java
index b97df81c6e24e0788f370b0fadb929b531ba6872..9ed9208f004ca08295ac43525618ce3d394f9082 100644 (file)
@@ -128,6 +128,7 @@ public class AlignmentEditor extends EditorPart {
                                        setDirty();
                                }
                        };
+       private final AlignmentEditorActionUpdater ACTION_UPDATER = new AlignmentEditorActionUpdater();
                        
 
     private MultipleAlignmentsContainer alignmentsContainer = null;
@@ -207,14 +208,17 @@ public class AlignmentEditor extends EditorPart {
     private MultipleAlignmentsContainer getAlignmentsContainer() {
        if (alignmentsContainer == null) {
                alignmentsContainer = new MultipleAlignmentsContainer();
-
+               
                AlignmentAreaList list = alignmentsContainer.getAlignmentAreas();
                AlignmentArea readsArea = createEditableAlignmentArea(alignmentsContainer, true);
+               readsArea.getSelection().addSelectionListener(ACTION_UPDATER);
            list.add(createIndexArea(alignmentsContainer, readsArea));
                list.add(readsArea);  // Make sure READS_AREA_INDEX is correct.
-               list.add(createEditableAlignmentArea(alignmentsContainer, false));  // Make sure COMSENSUS_AREA_INDEX is correct.
+               AlignmentArea editableConsensusArea = createEditableAlignmentArea(alignmentsContainer, false);
+               editableConsensusArea.getSelection().addSelectionListener(ACTION_UPDATER);
+               list.add(editableConsensusArea);  // Make sure COMSENSUS_AREA_INDEX is correct.
                list.add(createConsensusHintArea(alignmentsContainer, readsArea));
-
+               
                registerEditSettingListener(alignmentsContainer);
                }
                return alignmentsContainer;
@@ -264,13 +268,21 @@ public class AlignmentEditor extends EditorPart {
      * @return {@code true} if the specified component is focused and is either equal to
      *         {@link #getReadsArea()} or {@link #getEditableConsensusArea()}or {@code false} otherwise
      */
-    public boolean hasFocus(AlignmentArea area) {
-       Composite areaComponent = (Composite)area.getToolkitComponent();
-        Control control = Display.getCurrent().getFocusControl();
-        while ((control != areaComponent) && (control != null)) {
-            control = control.getParent();
+    private boolean hasFocus(AlignmentArea area) {
+       return childHasFocus((Composite)area.getToolkitComponent());
+    }
+    
+    
+    public static boolean childHasFocus(Composite parent) {  //TODO Move to bioinfweb.commons.swt
+       return isChildComponent(parent, Display.getCurrent().getFocusControl());
+    }
+    
+    
+    public static boolean isChildComponent(Composite parent, Control child) {  //TODO Move to bioinfweb.commons.swt
+        while ((child != parent) && (child != null)) {
+            child = child.getParent();
         }
-        return (control == areaComponent); 
+        return (child == parent); 
     }
     
 
@@ -359,6 +371,8 @@ public class AlignmentEditor extends EditorPart {
     @Override
     public void createPartControl(Composite parent) {
                SWTComponentFactory.getInstance().getSWTComponent(getAlignmentsContainer(), parent, SWT.NONE);
+               Display.getCurrent().addFilter(SWT.FocusIn, ACTION_UPDATER);
+               Display.getCurrent().addFilter(SWT.FocusOut, ACTION_UPDATER);
                updateStatusBar();
 
                if (getEditorInput() instanceof AlignmentEditorInput) {
@@ -381,7 +395,15 @@ public class AlignmentEditor extends EditorPart {
        }
 
     
-    private void updateStatusBar() {
+    @Override
+       public void dispose() {
+               Display.getCurrent().removeFilter(SWT.FocusIn, ACTION_UPDATER);
+               Display.getCurrent().removeFilter(SWT.FocusOut, ACTION_UPDATER);
+               super.dispose();
+       }
+
+
+       private void updateStatusBar() {
         IActionBars bars = getEditorSite().getActionBars();
         bars.getStatusLineManager().setMessage("Edit mode: " +
                        (getReadsArea().getEditSettings().isInsert() ? "Insert" : "Overwrite") + "  " +