/** * Creates table viewer and builds table contents * * @param parent the parent composite */ private void createTable(Composite parent) { tableViewer = new TableViewer( parent, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); // setup table widget tableViewer.setUseHashlookup(true); Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); GridData data = new GridData(GridData.FILL_BOTH); data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; data.horizontalSpan = 1; data.widthHint = convertWidthInCharsToPixels(30); table.setLayoutData(data); table.addListener( SWT.Selection, new Listener() { public void handleEvent(Event e) { handleSelection(); } }); // Add the columns to the table final String[] columnNames = new String[collectionColumns.size()]; int i = 0; Iterator iter = collectionColumns.iterator(); while (iter.hasNext()) { SortFilterCollectionColumn columnInfo = (SortFilterCollectionColumn) iter.next(); TableColumn column = new TableColumn(table, columnInfo.getAlignment()); column.setText(columnInfo.getCaption()); column.setResizable(columnInfo.isResizable()); column.setWidth(columnInfo.getWidth()); column.setAlignment(columnInfo.getAlignment()); if (columnInfo.getColumnSorter() != null) { column.addSelectionListener( new HeaderSelectionListener( (SortFilterViewerSorter) columnInfo.getColumnSorter(), tableViewer)); // Intialize the table sorter if (_sortColumn != null && column.getText().equals(_sortColumn)) { SortFilterViewerSorter sorter = (SortFilterViewerSorter) columnInfo.getColumnSorter(); if (sorter != null) { if (SortingDirection.ASCENDING_LITERAL.equals(_sortingDirection)) { // Use the ascending image Image image = DiagramUIPluginImages.DESC_SORT_ARROW_UP.createImage(); column.setImage(image); column.pack(); } else if (SortingDirection.DESCENDING_LITERAL.equals(_sortingDirection)) { sorter.toggleSortingDirection(); // Use the descending image Image image = DiagramUIPluginImages.DESC_SORT_ARROW_DN.createImage(); column.setImage(image); column.pack(); } } tableViewer.setSorter(sorter); } } columnNames[i++] = columnInfo.getCaption(); } // setup table viewer tableViewer.setContentProvider(new SortFilterContentProvider()); if (labelProvider != null) tableViewer.setLabelProvider(labelProvider); tableViewer.setColumnProperties(columnNames); tableViewer.setCellModifier(new SortFilterCellModifier()); // Can only changes the first column - the visible column CellEditor[] editors = new CellEditor[collectionColumns.size()]; editors[0] = new CheckboxCellEditor(table); for (i = 1; i < collectionColumns.size(); i++) { editors[i] = null; } tableViewer.setCellEditors(editors); if (elementCollection != null && !elementCollection.isEmpty()) tableViewer.setInput(elementCollection); // Update the model TableItem[] tableItems = tableViewer.getTable().getItems(); List newModel = new ArrayList(); for (i = 0; i < tableItems.length; i++) { SortFilterElement ey = (SortFilterElement) tableItems[i].getData(); newModel.add(i, ey); } tableViewer.setInput(newModel); elementCollection = newModel; createBackUp(); // pack column widths TableColumn[] tableColumns = table.getColumns(); for (i = 0; i < tableColumns.length; i++) { tableColumns[i].pack(); } }
private void handleEvent(SelectionEvent e) { // Clear any existing header images TableColumn[] columns = _tableViewer.getTable().getColumns(); for (int i = 0; i < columns.length; i++) { columns[i].setImage(null); } // Add the image based on the sort int columnIndex = 0; if (e.widget instanceof TableColumn) { TableColumn column = (TableColumn) e.widget; columnIndex = findColumnIndexFromProperty(column.getText()); if (columnIndex != -1) { Image image = null; SortFilterViewerSorter newSorter = (SortFilterViewerSorter) _tableViewer.getSorter(); if (newSorter != null) { newSorter.toggleSortingDirection(); if (newSorter == null || SortingDirection.ASCENDING_LITERAL.equals(newSorter.getSortingDirection())) { // Use the ascending image image = DiagramUIPluginImages.DESC_SORT_ARROW_UP.createImage(); } else { // Use the descending image image = DiagramUIPluginImages.DESC_SORT_ARROW_DN.createImage(); } columns[columnIndex].setImage(image); } } } if (sorter != null) { // Does the actual sorting _tableViewer.setSorter(null); // Necessary to use ascending/descending sorting _tableViewer.setSorter(getSorter()); // Update the model TableItem[] tableItems = _tableViewer.getTable().getItems(); List newModel = new ArrayList(); for (int i = 0; i < tableItems.length; i++) { SortFilterElement ey = (SortFilterElement) tableItems[i].getData(); newModel.add(i, ey); } elementCollection.clear(); elementCollection.addAll(newModel); _tableViewer.refresh(); _sorting = Sorting.AUTOMATIC_LITERAL; Object[] columnNames = tableViewer.getColumnProperties(); if (_sortingKeys != Collections.EMPTY_MAP) { _sortingKeys.clear(); } else { _sortingKeys = new HashMap(); } _sortingKeys.put(columnNames[columnIndex], getSorter().getSortingDirection()); handleSelection(); updateApplyButton(); } }