setDirty();
}
};
+ private final AlignmentEditorActionUpdater ACTION_UPDATER = new AlignmentEditorActionUpdater();
private MultipleAlignmentsContainer alignmentsContainer = null;
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;
* @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);
}
@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) {
}
- 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") + " " +