X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.nattable%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fnattable%2FNatTableSelectionAdaptor.java;h=8a37d048b918243cb082bfa483567912ac0a9b31;hp=03588ae76736ecafa64cb054f0fc12d41c629ed2;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableSelectionAdaptor.java b/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableSelectionAdaptor.java index 03588ae76..8a37d048b 100644 --- a/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableSelectionAdaptor.java +++ b/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableSelectionAdaptor.java @@ -1,173 +1,173 @@ -package org.simantics.browsing.ui.nattable; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.eclipse.jface.viewers.IPostSelectionProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.nebula.widgets.nattable.NatTable; -import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate; -import org.eclipse.nebula.widgets.nattable.layer.ILayerListener; -import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; -import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEvent; -import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; -import org.eclipse.nebula.widgets.nattable.selection.event.CellSelectionEvent; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Event; -import org.simantics.utils.datastructures.MapList; -import org.simantics.utils.ui.AdaptionUtils; - -public class NatTableSelectionAdaptor implements ISelectionProvider, IPostSelectionProvider, ILayerListener { - NatTable natTable; - SelectionLayer selectionLayer; - GETreeData treeData; - StructuredSelection selection; - - private List selectionListeners = new ArrayList<>(); - private List postSelectionListeners = new ArrayList<>(); - private List selListeners = new ArrayList<>(); - - public NatTableSelectionAdaptor(NatTable natTable, SelectionLayer selectionLayer, GETreeData treeData) { - this.natTable = natTable; - this.selectionLayer = selectionLayer; - this.natTable.addLayerListener(this); - this.treeData = treeData; - } - - @Override - public void addSelectionChangedListener(ISelectionChangedListener listener) { - selectionListeners.add(listener); - } - - @Override - public void removeSelectionChangedListener(ISelectionChangedListener listener) { - selectionListeners.remove(listener); - } - - @Override - public void addPostSelectionChangedListener(ISelectionChangedListener listener) { - postSelectionListeners.add(listener); - } - - @Override - public void removePostSelectionChangedListener(ISelectionChangedListener listener) { - postSelectionListeners.remove(listener); - } - - public void addSelectionListener(SelectionListener listener) { - selListeners.add(listener); - } - - public void removeSelectionListener(SelectionListener listener) { - selListeners.remove(listener); - } - - @Override - public ISelection getSelection() { - return selection; - } - - @Override - public void setSelection(ISelection selection) { - if (!(selection instanceof StructuredSelection)) - throw new IllegalArgumentException("Selection must be structured selection"); - if (selection.isEmpty()) { - selectionLayer.clear(false); - natTable.redraw(); - return; - } - List rowItems = new ArrayList<>(AdaptionUtils.adaptToCollection(selection, RowSelectionItem.class)); - if (rowItems.size() > 0) { - - setSelectionExternal(rowItems); - return; - } - Collection nodes = AdaptionUtils.adaptToCollection(selection, TreeNode.class); - if (nodes.size() > 0) { - List selected = new ArrayList<>(); - int allCols[] = new int[selectionLayer.getColumnCount()]; - for (int i = 0; i < allCols.length; i++) - allCols[i] = i; - for (TreeNode n : nodes) { - selected.add(new RowSelectionItem(n, n.listIndex, allCols)); - } - setSelectionExternal(selected); - return; - } - - } - - private void setSelectionExternal(List items) { - selectionLayer.clear(true); - for (RowSelectionItem item : items) { - for (int c : item.columnIndex) - selectionLayer.selectCell(c, item.rowIndex, false, true); - } - selection = new StructuredSelection(items); - fireEvents(); - } - - - private List selectedCells = new ArrayList(); - - @Override - public void handleLayerEvent(ILayerEvent event) { - if (event instanceof CellSelectionEvent) { - evaluateSeletedCells(); - } - } - - /** - * Processes current selection to data indices. - */ - private void evaluateSeletedCells() { - selectedCells.clear(); - for (PositionCoordinate pc : selectionLayer.getSelectedCellPositions()) { - ILayerCell cell = pc.getLayer().getCellByPosition(pc.columnPosition, pc.rowPosition); - selectedCells.add(new Point(cell.getColumnIndex(), cell.getRowIndex())); - } - MapList rowMap = new MapList<>(); - for (Point p : selectedCells) { - rowMap.add(p.y, p.x); - } - List selectionItems = new ArrayList<>(rowMap.getKeySize()); - for (Integer row : rowMap.getKeys()) { - List cols = rowMap.getValues(row); - int col[] = new int[cols.size()]; - for (int i = 0; i < col.length; i++) - col[i] = cols.get(i); - selectionItems.add(new RowSelectionItem(treeData.getDataAtIndex(row), row, col)); - } - this.selection = new StructuredSelection(selectionItems); - fireEvents(); - } - - private void fireEvents() { - for (ISelectionChangedListener l : selectionListeners) { - l.selectionChanged(new SelectionChangedEvent(this, selection)); - } - for (ISelectionChangedListener l : postSelectionListeners) { - l.selectionChanged(new SelectionChangedEvent(this, selection)); - } - Event evt = new Event(); - evt.widget = natTable; - evt.display = natTable.getDisplay(); - evt.data = selection; - for (SelectionListener l : selListeners) { - SelectionEvent sel = new SelectionEvent(evt); - l.widgetSelected(sel); - } - } - - public List getSelectedCells() { - return selectedCells; - } - -} +package org.simantics.browsing.ui.nattable; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.eclipse.jface.viewers.IPostSelectionProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.nebula.widgets.nattable.NatTable; +import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate; +import org.eclipse.nebula.widgets.nattable.layer.ILayerListener; +import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; +import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEvent; +import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; +import org.eclipse.nebula.widgets.nattable.selection.event.CellSelectionEvent; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Event; +import org.simantics.utils.datastructures.MapList; +import org.simantics.utils.ui.AdaptionUtils; + +public class NatTableSelectionAdaptor implements ISelectionProvider, IPostSelectionProvider, ILayerListener { + NatTable natTable; + SelectionLayer selectionLayer; + GETreeData treeData; + StructuredSelection selection; + + private List selectionListeners = new ArrayList<>(); + private List postSelectionListeners = new ArrayList<>(); + private List selListeners = new ArrayList<>(); + + public NatTableSelectionAdaptor(NatTable natTable, SelectionLayer selectionLayer, GETreeData treeData) { + this.natTable = natTable; + this.selectionLayer = selectionLayer; + this.natTable.addLayerListener(this); + this.treeData = treeData; + } + + @Override + public void addSelectionChangedListener(ISelectionChangedListener listener) { + selectionListeners.add(listener); + } + + @Override + public void removeSelectionChangedListener(ISelectionChangedListener listener) { + selectionListeners.remove(listener); + } + + @Override + public void addPostSelectionChangedListener(ISelectionChangedListener listener) { + postSelectionListeners.add(listener); + } + + @Override + public void removePostSelectionChangedListener(ISelectionChangedListener listener) { + postSelectionListeners.remove(listener); + } + + public void addSelectionListener(SelectionListener listener) { + selListeners.add(listener); + } + + public void removeSelectionListener(SelectionListener listener) { + selListeners.remove(listener); + } + + @Override + public ISelection getSelection() { + return selection; + } + + @Override + public void setSelection(ISelection selection) { + if (!(selection instanceof StructuredSelection)) + throw new IllegalArgumentException("Selection must be structured selection"); + if (selection.isEmpty()) { + selectionLayer.clear(false); + natTable.redraw(); + return; + } + List rowItems = new ArrayList<>(AdaptionUtils.adaptToCollection(selection, RowSelectionItem.class)); + if (rowItems.size() > 0) { + + setSelectionExternal(rowItems); + return; + } + Collection nodes = AdaptionUtils.adaptToCollection(selection, TreeNode.class); + if (nodes.size() > 0) { + List selected = new ArrayList<>(); + int allCols[] = new int[selectionLayer.getColumnCount()]; + for (int i = 0; i < allCols.length; i++) + allCols[i] = i; + for (TreeNode n : nodes) { + selected.add(new RowSelectionItem(n, n.listIndex, allCols)); + } + setSelectionExternal(selected); + return; + } + + } + + private void setSelectionExternal(List items) { + selectionLayer.clear(true); + for (RowSelectionItem item : items) { + for (int c : item.columnIndex) + selectionLayer.selectCell(c, item.rowIndex, false, true); + } + selection = new StructuredSelection(items); + fireEvents(); + } + + + private List selectedCells = new ArrayList(); + + @Override + public void handleLayerEvent(ILayerEvent event) { + if (event instanceof CellSelectionEvent) { + evaluateSeletedCells(); + } + } + + /** + * Processes current selection to data indices. + */ + private void evaluateSeletedCells() { + selectedCells.clear(); + for (PositionCoordinate pc : selectionLayer.getSelectedCellPositions()) { + ILayerCell cell = pc.getLayer().getCellByPosition(pc.columnPosition, pc.rowPosition); + selectedCells.add(new Point(cell.getColumnIndex(), cell.getRowIndex())); + } + MapList rowMap = new MapList<>(); + for (Point p : selectedCells) { + rowMap.add(p.y, p.x); + } + List selectionItems = new ArrayList<>(rowMap.getKeySize()); + for (Integer row : rowMap.getKeys()) { + List cols = rowMap.getValues(row); + int col[] = new int[cols.size()]; + for (int i = 0; i < col.length; i++) + col[i] = cols.get(i); + selectionItems.add(new RowSelectionItem(treeData.getDataAtIndex(row), row, col)); + } + this.selection = new StructuredSelection(selectionItems); + fireEvents(); + } + + private void fireEvents() { + for (ISelectionChangedListener l : selectionListeners) { + l.selectionChanged(new SelectionChangedEvent(this, selection)); + } + for (ISelectionChangedListener l : postSelectionListeners) { + l.selectionChanged(new SelectionChangedEvent(this, selection)); + } + Event evt = new Event(); + evt.widget = natTable; + evt.display = natTable.getDisplay(); + evt.data = selection; + for (SelectionListener l : selListeners) { + SelectionEvent sel = new SelectionEvent(evt); + l.widgetSelected(sel); + } + } + + public List getSelectedCells() { + return selectedCells; + } + +}