diff options
| author | Maxime Porhel | 2015-02-25 15:48:14 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2015-08-25 14:50:06 +0000 |
| commit | 7d27c17d9a1ce24cd582a7bc9e077dcb7a9321dd (patch) | |
| tree | d3d7c554629d219d39b7a20320b10ba8e92bdd6f | |
| parent | aeea98e8de00418f4b7ef0a5b30d842f01976525 (diff) | |
| download | org.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.java | 52 | ||||
| -rw-r--r-- | plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java | 47 | ||||
| -rw-r--r-- | plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTableViewerManager.java | 37 |
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; - } } |
