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]; }