TreeTable: SelectionMode, selectedRow

thobaben_serialize
Harald Wolff 2013-12-16 21:01:49 +01:00
parent a7056482f3
commit dba92aaa8b
2 changed files with 111 additions and 65 deletions

View File

@ -0,0 +1,8 @@
package org.hwo.ui;
public enum SelectionMode {
NONE,
CELL,
ROW,
COLUMN
}

View File

@ -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;i<rowObjects.size();i++)
{
Object ro = rowObjects.get(i);
NodeState state = getState(ro);
int top = rowHeight * i;
int bottom = top + 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, 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;
}