From 1a9186d389215729e0119fc3ff0493c6e25d67b0 Mon Sep 17 00:00:00 2001 From: NAME Date: Mon, 28 Apr 2008 17:56:23 +0000 Subject: Table constructor with default model revived, t... Table constructor with default model revived, table change events overhauled --- src/swing/scala/swing/SequentialContainer.scala | 4 ++-- src/swing/scala/swing/Table.scala | 31 +++++++++++++++---------- src/swing/scala/swing/event/TableEvent.scala | 19 ++++++++++++++- src/swing/scala/swing/test/SwingApp.scala | 4 ++-- 4 files changed, 41 insertions(+), 17 deletions(-) (limited to 'src/swing') diff --git a/src/swing/scala/swing/SequentialContainer.scala b/src/swing/scala/swing/SequentialContainer.scala index 0d1270cb72..a9b663c773 100644 --- a/src/swing/scala/swing/SequentialContainer.scala +++ b/src/swing/scala/swing/SequentialContainer.scala @@ -5,7 +5,7 @@ import scala.collection.mutable.Buffer object SequentialContainer { trait Wrapper extends Component with SequentialContainer with Container.Wrapper { override val contents: Buffer[Component] = new Content - def contents_=(c: Component*) { contents.clear(); contents ++= c } + //def contents_=(c: Component*) { contents.clear(); contents ++= c } } } @@ -14,5 +14,5 @@ object SequentialContainer { */ trait SequentialContainer extends Container { override def contents: Buffer[Component] - def contents_=(c: Component*) + //def contents_=(c: Component*) } diff --git a/src/swing/scala/swing/Table.scala b/src/swing/scala/swing/Table.scala index 659659fa0a..e2080a5e39 100644 --- a/src/swing/scala/swing/Table.scala +++ b/src/swing/scala/swing/Table.scala @@ -43,17 +43,21 @@ class Table extends Component with Scrollable with Publisher { def this(rowData: Array[Array[Any]], columnNames: Seq[Any]) = { this() peer.setModel(new AbstractTableModel { - override def getColumnName(column: Int) = columnNames(column).toString - def getRowCount() = rowData.length - def getColumnCount() = columnNames.length - def getValueAt(row: Int, col: Int): AnyRef = rowData(row)(col).asInstanceOf[AnyRef] - override def isCellEditable(row: Int, column: Int) = true - override def setValueAt(value: Any, row: Int, col: Int) { - rowData(row)(col) = value - fireTableCellUpdated(row, col) - } - }) - } + override def getColumnName(column: Int) = columnNames(column).toString + def getRowCount() = rowData.length + def getColumnCount() = columnNames.length + def getValueAt(row: Int, col: Int): AnyRef = rowData(row)(col).asInstanceOf[AnyRef] + override def isCellEditable(row: Int, column: Int) = true + override def setValueAt(value: Any, row: Int, col: Int) { + rowData(row)(col) = value + fireTableCellUpdated(row, col) + } + }) + } + def this(rows: Int, columns: Int) = { + this() + peer.setModel(new DefaultTableModel(rows, columns)) + } protected def scrollablePeer = peer @@ -164,6 +168,7 @@ class Table extends Component with Scrollable with Publisher { } } + // TODO: a public API for setting editors protected def editor(row: Int, column: Int) = Table.this.peer.getDefaultEditor(Table.this.peer.getValueAt(row, column).getClass) @@ -176,8 +181,10 @@ class Table extends Component with Scrollable with Publisher { def tableChanged(e: TableModelEvent) = publish( e.getType match { case TableModelEvent.UPDATE => - if (e.getLastRow == Math.MAX_INT) + if (e.getFirstRow == 0 && e.getLastRow == Math.MAX_INT && e.getColumn == TableModelEvent.ALL_COLUMNS) TableChanged(Table.this) + else if (e.getFirstRow == TableModelEvent.HEADER_ROW) + TableStructureChanged(Table.this) else TableUpdated(Table.this, e.getFirstRow to e.getLastRow, e.getColumn) case TableModelEvent.INSERT => diff --git a/src/swing/scala/swing/event/TableEvent.scala b/src/swing/scala/swing/event/TableEvent.scala index 4d87b353fd..dc9f80a794 100644 --- a/src/swing/scala/swing/event/TableEvent.scala +++ b/src/swing/scala/swing/event/TableEvent.scala @@ -4,10 +4,27 @@ abstract class TableEvent(override val source: Table) extends ComponentEvent(sou abstract class TableChange(override val source: Table) extends TableEvent(source) +/** + * The most general table change. The table might have changed completely, + * i.e., comlumns might have been reordered, rows added or removed, etc. + * No other event indicates that the structure might have changed. + */ +case class TableStructureChanged(override val source: Table) extends TableChange(source) +/** + * The table structure, i.e., the column order, names, and types stay the same, + * but anything else might have changed. + */ case class TableChanged(override val source: Table) extends TableChange(source) +/** + * The size of the table stays the same, but the given range of rows might + * have changed but only in the given column. A value of -1 for the column + * denotes all columns. + */ case class TableUpdated(override val source: Table, range: Range, column: Int) extends TableChange(source) - +/** + * Any change that caused the table to change it's size + */ case class TableResized(override val source: Table) extends TableChange(source) case class TableRowsAdded(override val source: Table, range: Range) extends TableResized(source) case class TableRowsRemoved(override val source: Table, range: Range) extends TableResized(source) diff --git a/src/swing/scala/swing/test/SwingApp.scala b/src/swing/scala/swing/test/SwingApp.scala index d09434b865..328b488b5b 100644 --- a/src/swing/scala/swing/test/SwingApp.scala +++ b/src/swing/scala/swing/test/SwingApp.scala @@ -20,8 +20,8 @@ object SwingApp extends SimpleGUIApplication { object button extends PushButton { text = "I am a button" } - contents = new GridPanel(GridPanel.Adapt,1) { - contents.append(label, button) + contents = new FlowPanel { + contents.append(button, label) border = Border.Empty(5, 5, 5, 5) } } -- cgit v1.2.3