Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2015-02-25 15:48:14 +0000
committerPierre-Charles David2015-08-25 14:50:06 +0000
commit7d27c17d9a1ce24cd582a7bc9e077dcb7a9321dd (patch)
treed3d7c554629d219d39b7a20320b10ba8e92bdd6f
parentaeea98e8de00418f4b7ef0a5b30d842f01976525 (diff)
downloadorg.eclipse.sirius-7d27c17d9a1ce24cd582a7bc9e077dcb7a9321dd.tar.gz
org.eclipse.sirius-7d27c17d9a1ce24cd582a7bc9e077dcb7a9321dd.tar.xz
org.eclipse.sirius-7d27c17d9a1ce24cd582a7bc9e077dcb7a9321dd.zip
[475821] Do not hide selected tree item in DTree editor
DTree editor do not have columns as expected by the DTableEraseItemListener. This mechanism is only needed on DTables editor to improve the selection feedback of the selected DCell and its Dline. This commit also correct the active column computation and remove duplicated code between table and tree. Move the active column mecanism in DTable dialect only as the DTree dialect does not have columns. This allows to remove duplicated and non working code from DTree dialect. This also allow to correct a expand/collapse bug in DTree editor on Mac OS X, where user had to type twice on LEFT/RIGHT to expand or collapse the tree items. Bug: 475821 Change-Id: If55dc30d4b5bc2d8c806cfa2cdf13bfbf81548d0 Cherry-picked-from: 460810 Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr> Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr> Signed-off-by: Esteban Dugueperoux <esteban.dugueperoux@obeo.fr>
-rwxr-xr-x[-rw-r--r--]plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableEraseItemListener.java (renamed from plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/DTableEraseItemListener.java)6
-rw-r--r--plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java52
-rw-r--r--plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java47
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTableViewerManager.java37
4 files changed, 47 insertions, 95 deletions
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/DTableEraseItemListener.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableEraseItemListener.java
index 383e740ffc..a948228cf4 100644..100755
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/DTableEraseItemListener.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableEraseItemListener.java
@@ -8,7 +8,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.sirius.ui.tools.internal.editor;
+package org.eclipse.sirius.table.ui.tools.internal.editor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
@@ -44,7 +44,7 @@ public class DTableEraseItemListener implements Listener {
/**
* The viewer manager associated to the treeViewer.
*/
- private AbstractDTableViewerManager tableViewerManager;
+ private DTableViewerManager tableViewerManager;
/**
* Use to remember the last line which was drawn with selected color.
@@ -65,7 +65,7 @@ public class DTableEraseItemListener implements Listener {
* @param treeViewer
* The listen treeViewer
*/
- public DTableEraseItemListener(final AbstractDTableViewerManager tableViewerManager, final TreeViewer treeViewer) {
+ public DTableEraseItemListener(final DTableViewerManager tableViewerManager, final TreeViewer treeViewer) {
this.tableViewerManager = tableViewerManager;
this.treeViewer = treeViewer;
}
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java
index e0fbf32d89..c2bee14cb8 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008 THALES GLOBAL SERVICES.
+ * Copyright (c) 2008, 2015 THALES GLOBAL SERVICES and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -154,6 +154,11 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
imageRegistry.put(EXPORT_IMG, ImageDescriptor.createFromURL((URL) TableUIPlugin.INSTANCE.getImage(EXPORT_IMG)));
}
+ /**
+ * the current active column.
+ */
+ private int activeColumn = -1;
+
private DTableViewerListener tableViewerListener;
private ITableCommandFactory tableCommandFactory;
@@ -303,8 +308,8 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
// Create a new CellFocusManager
final TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(treeViewer, new FocusCellOwnerDrawHighlighter(treeViewer));
// Create a TreeViewerEditor with focusable cell
- TreeViewerEditor.create(treeViewer, focusCellManager, new DTableColumnViewerEditorActivationStrategy(treeViewer), ColumnViewerEditor.TABBING_HORIZONTAL
- | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
+ TreeViewerEditor.create(treeViewer, focusCellManager, new DTableColumnViewerEditorActivationStrategy(treeViewer),
+ ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
// Set after the setInput to avoid layout call it several time for
// nothing at opening
headerTreeColumn.getColumn().addControlListener(tableViewerListener);
@@ -313,6 +318,7 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
private void initializeKeyBindingSupport() {
treeViewer.getTree().addKeyListener(new KeyListener() {
+ @Override
public void keyPressed(final KeyEvent e) {
if (e.keyCode == SWT.DEL) {
DeleteLinesAction deleteLinesAction = new DeleteLinesAction(getEditingDomain(), getTableCommandFactory());
@@ -323,6 +329,7 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
}
}
+ @Override
public void keyReleased(final KeyEvent e) {
};
});
@@ -338,7 +345,8 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
}
/**
- * Initialize a cache and add, if needed, the contextual menu for the table. <BR>
+ * Initialize a cache and add, if needed, the contextual menu for the table.
+ * <BR>
* Cached the actions of creation and deletion in order to increase
* performance and not calculate it on each contextual menu.<BR>
* Problem for action on column header :
@@ -487,10 +495,18 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
}
/**
+ * Manage height of the lines, selected colors.
+ */
+ protected void triggerCustomDrawingTreeItems() {
+ // Manage selected colors for cells
+ treeViewer.getTree().addListener(SWT.EraseItem, new DTableEraseItemListener(this, treeViewer));
+ }
+
+ /**
* Add a listener on the tree to listen the mouseDouwn or the key left-right
- * arrows and store the activeColumn
+ * arrows and store the activeColumn.
*/
- private void triggerColumnSelectedColumn() {
+ protected void triggerColumnSelectedColumn() {
treeViewer.getTree().addMouseListener(new MouseAdapter() {
@Override
@@ -507,16 +523,18 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
});
treeViewer.getTree().addKeyListener(new KeyListener() {
+ @Override
public void keyPressed(final KeyEvent e) {
- if (e.keyCode == SWT.ARROW_LEFT && activeColumn != 0) {
+ if (e.keyCode == SWT.ARROW_LEFT && activeColumn > 0) {
activeColumn--;
treeViewer.getTree().showColumn(treeViewer.getTree().getColumn(activeColumn));
- } else if (e.keyCode == SWT.ARROW_RIGHT && activeColumn != treeViewer.getTree().getColumnCount() - 1) {
+ } else if (e.keyCode == SWT.ARROW_RIGHT && activeColumn < treeViewer.getTree().getColumnCount() - 1) {
activeColumn++;
treeViewer.getTree().showColumn(treeViewer.getTree().getColumn(activeColumn));
}
}
+ @Override
public void keyReleased(final KeyEvent e) {
};
});
@@ -524,6 +542,16 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
}
/**
+ * Return the index of the active column.<BR>
+ * Warning : The column 0 represents the line header.
+ *
+ * @return the activeColumn
+ */
+ public int getActiveColumn() {
+ return activeColumn;
+ }
+
+ /**
* Get the selected {@link DTreeItem item}.
*
* @return the selected tree items or an empty collection
@@ -630,11 +658,11 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
treeViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider));
if (newColumn instanceof DFeatureColumn) {
- treeViewerColumn.setEditingSupport(new DFeatureColumnEditingSupport(treeViewer, (DFeatureColumn) newColumn, getEditingDomain(), getAccessor(), getTableCommandFactory(),
- (AbstractDTableEditor) tableEditor));
+ treeViewerColumn.setEditingSupport(
+ new DFeatureColumnEditingSupport(treeViewer, (DFeatureColumn) newColumn, getEditingDomain(), getAccessor(), getTableCommandFactory(), (AbstractDTableEditor) tableEditor));
} else if (newColumn instanceof DTargetColumn) {
- treeViewerColumn.setEditingSupport(new DTargetColumnEditingSupport(treeViewer, (DTargetColumn) newColumn, getEditingDomain(), getAccessor(), tableCommandFactory,
- (AbstractDTableEditor) tableEditor));
+ treeViewerColumn.setEditingSupport(
+ new DTargetColumnEditingSupport(treeViewer, (DTargetColumn) newColumn, getEditingDomain(), getAccessor(), tableCommandFactory, (AbstractDTableEditor) tableEditor));
}
treeViewerColumn.getColumn().setData(TABLE_COLUMN_DATA, newColumn);
treeViewerColumn.getColumn().addControlListener(tableViewerListener);
diff --git a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java
index 5a50070087..034a4ad2ee 100644
--- a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java
+++ b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 THALES GLOBAL SERVICES.
+ * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -73,8 +73,6 @@ import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
@@ -188,14 +186,10 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
treeViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider));
fillMenu();
- triggerColumnSelectedColumn();
initializeEditingSupport();
initializeDragAndDropSupport();
initializeKeyBindingSupport();
- // Manage height of the lines, selected colors,
- triggerCustomDrawingTreeItems();
-
// Create a new CellFocusManager
final TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(treeViewer, new FocusCellOwnerDrawHighlighter(treeViewer));
// Create a TreeViewerEditor with focusable cell
@@ -211,6 +205,7 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
private void initializeKeyBindingSupport() {
treeViewer.getTree().addKeyListener(new KeyListener() {
+ @Override
public void keyPressed(final KeyEvent e) {
if (e.keyCode == SWT.DEL) {
DeleteTreeItemsAction deleteItemsAction = new DeleteTreeItemsAction(getEditingDomain(), getTreeCommandFactory());
@@ -221,6 +216,7 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
}
}
+ @Override
public void keyReleased(final KeyEvent e) {
};
});
@@ -405,43 +401,6 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
}
/**
- * Add a listener on the tree to listen the mouseDouwn or the key left-right
- * arrows and store the activeColumn
- */
- private void triggerColumnSelectedColumn() {
- treeViewer.getTree().addMouseListener(new MouseAdapter() {
-
- @Override
- public void mouseDown(final MouseEvent event) {
- int x = 0;
- for (int i = 0; i < treeViewer.getTree().getColumnCount(); i++) {
- x += treeViewer.getTree().getColumn(i).getWidth();
- if (event.x <= x) {
- activeColumn = i;
- break;
- }
- }
- }
-
- });
- treeViewer.getTree().addKeyListener(new KeyListener() {
- public void keyPressed(final KeyEvent e) {
- if (e.keyCode == SWT.ARROW_LEFT && activeColumn != 0) {
- activeColumn--;
- treeViewer.getTree().showColumn(treeViewer.getTree().getColumn(activeColumn));
- } else if (e.keyCode == SWT.ARROW_RIGHT && activeColumn != treeViewer.getTree().getColumnCount() - 1) {
- activeColumn++;
- treeViewer.getTree().showColumn(treeViewer.getTree().getColumn(activeColumn));
- }
- }
-
- public void keyReleased(final KeyEvent e) {
- };
- });
-
- }
-
- /**
* Return the TableCommandFactory.
*
* @return the TableCommandFactory
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTableViewerManager.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTableViewerManager.java
index 55b1bcf2ea..f600043330 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTableViewerManager.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTableViewerManager.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 THALES GLOBAL SERVICES.
+ * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -85,11 +85,6 @@ public abstract class AbstractDTableViewerManager {
protected final AbstractDTreeEditor tableEditor;
/**
- * the current active column.
- */
- protected int activeColumn = -1;
-
- /**
* Menu manager.
*/
protected final MenuManager mgr = new MenuManager("#PopupMenu");
@@ -235,34 +230,4 @@ public abstract class AbstractDTableViewerManager {
descriptionFileChanged = modified;
}
- /**
- * Manage height of the lines, selected colors.
- */
- protected void triggerCustomDrawingTreeItems() {
- // Line height modification (aborted because of Windows SWT
- // limitation)
- // Manage height of the lines
- // treeViewer.getTree().addListener(SWT.MeasureItem, new Listener() {
- // public void handleEvent(final Event event) {
- // if (event.item != null && event.item.getData() instanceof DLine) {
- // final DLine currentLine = (DLine) event.item.getData();
- // if (currentLine.getHeight() != 0) {
- // event.height = currentLine.getHeight();
- // }
- // }
- // }
- // });
- // Manage selected colors for cells
- treeViewer.getTree().addListener(SWT.EraseItem, new DTableEraseItemListener(this, treeViewer));
- }
-
- /**
- * Return the index of the active column.<BR>
- * Warning : The column 0 represents the line header.
- *
- * @return the activeColumn
- */
- public int getActiveColumn() {
- return activeColumn;
- }
}

Back to the top