CTable now fires notifications when the row or column count changes. Changed example to add/remove rows.
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/AccessibleTableExample.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/AccessibleTableExample.java
index 0a4a446..32d7ab5 100644
--- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/AccessibleTableExample.java
+++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/AccessibleTableExample.java
@@ -13,8 +13,9 @@
import java.util.*;
import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
/**
* This example shows how to use AccessibleTableListener and
@@ -23,6 +24,8 @@
*/
public class AccessibleTableExample {
static ResourceBundle resourceBundle = ResourceBundle.getBundle("examples_accessibility"); //$NON-NLS-1$
+ static CTable table1;
+
static String getResourceString(String key) {
try {
return resourceBundle.getString(key);
@@ -39,6 +42,58 @@
AccessibleTableExample.getResourceString("color4"),
AccessibleTableExample.getResourceString("color5"),};
+ private static SelectionListener addButtonHandler = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ int currSize = table1.getItemCount();
+ int colCount = table1.getColumnCount();
+ CTableItem item = new CTableItem(table1, SWT.NONE);
+ String[] cells = new String[colCount];
+
+ for (int i = 0; i < colCount; i++) {
+ cells[i] = "C" + i + "R" + currSize;
+ }
+ item.setText(cells);
+ }
+ };
+
+ private static SelectionListener removeButtonHandler = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ int currSize = table1.getItemCount();
+ if (currSize > 0) {
+ table1.remove(currSize - 1);
+ }
+ }
+ };
+
+ private static SelectionListener removeSelectedHandler = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ CTableItem[] selectedItems = table1.getSelection();
+ for (int i = 0; i < selectedItems.length; i++) {
+ selectedItems[i].dispose();
+ }
+ }
+ };
+
+ private static SelectionListener addColumnHandler = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ int currSize = table1.getColumnCount();
+ CTableColumn item = new CTableColumn(table1, SWT.NONE);
+ item.setText("Col " + currSize);
+ item.setWidth(50);
+ }
+ };
+
+ private static SelectionListener removeColumnHandler = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ int colCount = table1.getColumnCount();
+
+ if (colCount > 0) {
+ CTableColumn column = table1.getColumn(colCount - 1);
+ column.dispose();
+ }
+ }
+ };
+
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
@@ -51,7 +106,7 @@
new Label(group, SWT.NONE).setText("CTable with column headers");
- CTable table1 = new CTable(group, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
+ table1 = new CTable(group, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
table1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
table1.setHeaderVisible(true);
table1.setLinesVisible(true);
@@ -65,6 +120,24 @@
item.setText(new String [] {"C0R" + row, "C1R" + row, "C2R" + row});
}
+ Composite btnGroup = new Composite(group, SWT.NONE);
+ btnGroup.setLayout(new GridLayout(2, false));
+ Button btn = new Button(btnGroup, SWT.PUSH);
+ btn.setText("Add rows");
+ btn.addSelectionListener(addButtonHandler);
+ btn = new Button(btnGroup, SWT.PUSH);
+ btn.setText("Remove rows");
+ btn.addSelectionListener(removeButtonHandler);
+ btn = new Button(btnGroup, SWT.PUSH);
+ btn.setText("Remove selected rows");
+ btn.addSelectionListener(removeSelectedHandler);
+ btn = new Button(btnGroup, SWT.PUSH);
+ btn.setText("Add column");
+ btn.addSelectionListener(addColumnHandler);
+ btn = new Button(btnGroup, SWT.PUSH);
+ btn.setText("Remove last column");
+ btn.addSelectionListener(removeColumnHandler);
+
new Label(group, SWT.NONE).setText("CTable used as a list");
CTable table2 = new CTable(group, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java
index 1d39a3a..849820a 100644
--- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java
+++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/accessibility/CTable.java
@@ -499,6 +499,15 @@
redrawFromItemDownwards (topIndex);
}
}
+
+ /* Columns were added, so notify the accessible. */
+ int[] eventData = new int[5];
+ eventData[0] = ACC.INSERT;
+ eventData[1] = 0;
+ eventData[2] = 0;
+ eventData[3] = index;
+ eventData[4] = 1;
+ getAccessible().sendEvent(ACC.EVENT_TABLE_CHANGED, eventData);
}
void createItem (CTableItem item) {
int index = item.index;
@@ -729,6 +738,14 @@
}
}
+ int[] eventData = new int[5];
+ eventData[0] = ACC.DELETE;
+ eventData[1] = 0;
+ eventData[2] = 0;
+ eventData[3] = index;
+ eventData[4] = 1;
+ getAccessible().sendEvent(ACC.EVENT_TABLE_CHANGED, eventData);
+
if (sortColumn == column) {
sortColumn = null;
}
@@ -800,8 +817,15 @@
*/
if (itemsCount == 0 && isFocusControl ()) {
redraw ();
- return;
}
+
+ int[] eventData = new int[5];
+ eventData[0] = ACC.DELETE;
+ eventData[1] = 0;
+ eventData[2] = 0;
+ eventData[3] = index;
+ eventData[4] = 1;
+ getAccessible().sendEvent(ACC.EVENT_TABLE_CHANGED, eventData);
}
Image getArrowDownImage () {
return (Image) display.getData (ID_ARROWDOWN);
@@ -3360,9 +3384,19 @@
}
items = new CTableItem [0];
selectedItems = new CTableItem [0];
+ int oldCount = itemsCount;
itemsCount = topIndex = 0;
anchorItem = lastClickedItem = null;
lastSelectionEvent = null;
+
+ int[] eventData = new int[5];
+ eventData[0] = ACC.DELETE;
+ eventData[1] = 0;
+ eventData[2] = oldCount;
+ eventData[3] = 0;
+ eventData[4] = 0;
+ getAccessible().sendEvent(ACC.EVENT_TABLE_CHANGED, eventData);
+
ScrollBar vBar = getVerticalBar ();
if (vBar != null) {
vBar.setMaximum (1);
@@ -3777,6 +3811,14 @@
CTableItem newFocusItem = count > 0 ? items [count - 1] : null;
setFocusItem (newFocusItem, false);
}
+ int[] eventData = new int[5];
+ eventData[0] = ACC.DELETE;
+ eventData[1] = redrawStart;
+ eventData[2] = redrawEnd - redrawStart;
+ eventData[3] = 0;
+ eventData[4] = 0;
+ getAccessible().sendEvent(ACC.EVENT_TABLE_CHANGED, eventData);
+
itemsCount = count;
if (columns.length == 0) updateHorizontalBar ();
} else {
@@ -3789,6 +3831,14 @@
items [i] = new CTableItem (this, SWT.NONE, i, false);
itemsCount++;
}
+
+ int[] eventData = new int[5];
+ eventData[0] = ACC.INSERT;
+ eventData[1] = redrawStart;
+ eventData[2] = count;
+ eventData[3] = 0;
+ eventData[4] = 0;
+ getAccessible().sendEvent(ACC.EVENT_TABLE_CHANGED, eventData);
if (oldCount == 0) focusItem = items [0];
}