java-org.hwo.ui/src/org/hwo/ui/treetable/DefaultTreeTableColumnModel...

199 lines
4.0 KiB
Java

package org.hwo.ui.treetable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.hwo.ui.CellRenderer;
public class DefaultTreeTableColumnModel implements TreeTableColumnModel {
public class Column
{
private String label;
private int width;
private int modelColumn;
private CellRenderer
cellRenderer;
private TreeTablePopupListener
popupListener;
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
fireColumnsChanged();
}
public int getWidth() {
return width;
}
public Column setWidth(int width) {
this.width = width;
fireColumnsChanged();
return this;
}
public int getModelColumn() {
return modelColumn;
}
public Column setModelColumn(int modelColumn) {
this.modelColumn = modelColumn;
fireColumnsChanged();
return this; }
public CellRenderer getCellRenderer() {
return cellRenderer;
}
public Column setCellRenderer(CellRenderer cellRenderer) {
this.cellRenderer = cellRenderer;
return this;
}
public TreeTablePopupListener getPopupListener() {
return popupListener;
}
public Column setPopupListener(TreeTablePopupListener popupListener) {
this.popupListener = popupListener;
return this;
}
}
private List<Column> columns;
private List<TreeTableModelListener> treeTableModelListener;
public DefaultTreeTableColumnModel()
{
treeTableModelListener = new LinkedList<TreeTableModelListener>();
columns = new ArrayList<DefaultTreeTableColumnModel.Column>();
Column column = new Column();
column.label = "";
column.width = 280;
columns.add(column);
}
public Column addColumn(String label)
{
return addColumn(label,100);
}
public Column addColumn(String label,int width)
{
return addColumn(label, width, -1);
}
public Column addColumn(String label,int width,int modelColumn)
{
Column column = new Column();
column.label = label;
column.width = width;
columns.add(column);
if (modelColumn == -1)
column.modelColumn = columns.indexOf(column);
else
column.modelColumn = modelColumn;
fireColumnsChanged();
return column;
}
public void removeColumn(int column)
{
columns.remove(column);
fireColumnsChanged();
}
public Column getColumn(int column)
{
return columns.get(column);
}
public int indexOfColumn(Column column)
{
return columns.indexOf(column);
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public String getColumnLabel(int column) {
return columns.get(column).getLabel();
}
@Override
public int getColumnWidth(int column) {
return columns.get(column).getWidth();
}
@Override
public int getColumnPos(int column) {
int x = 0;
for (int i=0;i<column;i++)
x += getColumnWidth(i);
return x;
}
@Override
public void addTreeTableModelListener(TreeTableModelListener listener) {
treeTableModelListener.add(listener);
}
@Override
public void removeTreeTableModelListener(TreeTableModelListener listener) {
treeTableModelListener.remove(listener);
}
private void fireColumnsChanged()
{
for (TreeTableModelListener listener:treeTableModelListener)
listener.rowsChanged();
}
@Override
public int getColumnAtX(int x) {
for (int i=0;i<columns.size();i++)
{
if (x < getColumnPos(i+1))
return i;
}
return -1;
}
@Override
public CellRenderer getColumnCellRenderer(int column) {
return columns.get(column).getCellRenderer();
}
@Override
public int getColumnModelColumn(int x)
{
return getColumn(x).modelColumn;
}
@Override
public TreeTablePopupListener getPopup(int row, int column) {
TreeTablePopupListener listener;
listener = getPopupFromColumn(column);
if (listener == null)
listener = getPopupFromRow(row);
return listener;
}
protected TreeTablePopupListener getPopupFromRow(int row)
{
return null;
}
protected TreeTablePopupListener getPopupFromColumn(int column)
{
return columns.get(column).getPopupListener();
}
}