From dba92aaa8b7b48cf1ecf068a4a95b5c421624294 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Mon, 16 Dec 2013 21:01:49 +0100 Subject: [PATCH] TreeTable: SelectionMode, selectedRow --- src/org/hwo/ui/SelectionMode.java | 8 ++ src/org/hwo/ui/treetable/TreeTable.java | 168 +++++++++++++++--------- 2 files changed, 111 insertions(+), 65 deletions(-) create mode 100644 src/org/hwo/ui/SelectionMode.java diff --git a/src/org/hwo/ui/SelectionMode.java b/src/org/hwo/ui/SelectionMode.java new file mode 100644 index 0000000..98ad7ec --- /dev/null +++ b/src/org/hwo/ui/SelectionMode.java @@ -0,0 +1,8 @@ +package org.hwo.ui; + +public enum SelectionMode { + NONE, + CELL, + ROW, + COLUMN +} diff --git a/src/org/hwo/ui/treetable/TreeTable.java b/src/org/hwo/ui/treetable/TreeTable.java index 95e9e70..42b82b1 100644 --- a/src/org/hwo/ui/treetable/TreeTable.java +++ b/src/org/hwo/ui/treetable/TreeTable.java @@ -30,6 +30,7 @@ import org.hwo.ui.CellEditorListener; import org.hwo.ui.CellRenderer; import org.hwo.ui.DefaultCellEditor; import org.hwo.ui.DefaultCellRenderer; +import org.hwo.ui.SelectionMode; import org.hwo.ui.shapes.Triangle; import org.hwo.ui.treetable.DefaultTreeTableColumnModel.Column; @@ -93,6 +94,9 @@ public class TreeTable extends JComponent implements Scrollable, TreeTableModelL private CellEditor activeEditor; + private SelectionMode selectionMode; + private int selectedRow; + public TreeTable() { @@ -160,6 +164,8 @@ public class TreeTable extends JComponent implements Scrollable, TreeTableModelL prepareWidth(); prepareHeight(); + + selectedRow = -1; } public Point mouseToCell(int x,int y) @@ -218,6 +224,10 @@ public class TreeTable extends JComponent implements Scrollable, TreeTableModelL { NodeState state = getState(rowObjects.get(row)); setOpened(rowObjects.get(row), !state.opened); + } else if (selectionMode == SelectionMode.ROW) + { + selectedRow = row; + repaint(); } } } @@ -286,6 +296,82 @@ public class TreeTable extends JComponent implements Scrollable, TreeTableModelL return new Rectangle(left, top, width, rowHeight); } + public void paintRow(Graphics g,int row) + { + Object ro = rowObjects.get(row); + NodeState state = getState(ro); + int top = rowHeight * row; + int bottom = top + rowHeight - 1; + + if (selectedRow == row) + { + g.setColor(Color.BLUE); + g.fillRect(0, top, getColumnModel().getColumnPos(getColumnModel().getColumnCount()) - 1, rowHeight - 1); + } + + g.setColor(Color.black); + g.drawLine(0, bottom, getWidth(), bottom); + + for (int column = 0; column < columnModel.getColumnCount(); column++) + { + int left = columnModel.getColumnPos(column); + int width = columnModel.getColumnWidth(column); + int right = left + width - 1; + + g.drawLine(right , top, right, bottom); + + + if (column==0) + { + int a = rowHeight / 4; + int b = rowHeight / 2; + + left += state.indentation * 5; + + g.setColor(Color.BLACK); + + if (model.getChildCount(ro)>0) + { + if (!state.isOpened()) + { + g.drawPolygon(new Triangle(left + a, top + a, left + b, top + b, left + a, bottom - a)); + } else + { + g.drawPolygon(new Triangle(left + a, top + b, left + a + b, top + b, left + b, bottom - a )); + } + } + + left += rowHeight; + } + + g.setColor(getForeground()); + + Object value = model.getValue(ro, columnModel.getColumnModelColumn(column)); + CellRenderer renderer = columnModel.getColumnCellRenderer(column); + + if (renderer == null) + if (value != null) + renderer = findCellRenderer(value.getClass()); + else + renderer = findCellRenderer(null); + + Rectangle rect = new Rectangle(left, top, width, rowHeight); + + Rectangle clipRestore = g.getClipBounds(); + + if (clipRestore.intersects(rect)) + { + Rectangle rectClip = clipRestore.intersection(rect); + + g.setClip(rectClip); + renderer.renderCell(g, row, column, rect, value, ro); + g.setClip(clipRestore); + } + + } + } + + @Override public void paint(Graphics g) { prepareRows(); @@ -295,71 +381,7 @@ public class TreeTable extends JComponent implements Scrollable, TreeTableModelL for (int i=0;i0) - { - if (!state.isOpened()) - { - g.drawPolygon(new Triangle(left + a, top + a, left + b, top + b, left + a, bottom - a)); - } else - { - g.drawPolygon(new Triangle(left + a, top + b, left + a + b, top + b, left + b, bottom - a )); - } - } - - left += rowHeight; - } - - g.setColor(getForeground()); - - Object value = model.getValue(ro, columnModel.getColumnModelColumn(column)); - CellRenderer renderer = columnModel.getColumnCellRenderer(column); - - if (renderer == null) - if (value != null) - renderer = findCellRenderer(value.getClass()); - else - renderer = findCellRenderer(null); - - Rectangle rect = new Rectangle(left, top, width, rowHeight); - - Rectangle clipRestore = g.getClipBounds(); - - if (clipRestore.intersects(rect)) - { - Rectangle rectClip = clipRestore.intersection(rect); - - g.setClip(rectClip); - renderer.renderCell(g, i, column, rect, value, ro); - g.setClip(clipRestore); - } - - } + paintRow(g, i); } } @@ -617,6 +639,22 @@ public class TreeTable extends JComponent implements Scrollable, TreeTableModelL } + + public int getSelectedRow() { + return selectedRow; + } + + public void setSelectedRow(int selectedRow) { + this.selectedRow = selectedRow; + } + + public SelectionMode getSelectionMode() { + return selectionMode; + } + + public void setSelectionMode(SelectionMode selectionMode) { + this.selectionMode = selectionMode; + }