Java tutorial
/** * Copyright (c) 2011 Forschungszentrum Juelich GmbH * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Claudia Knobloch, FZ Juelich */ package org.eclipse.ptp.rm.lml.ui.views; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.layout.TreeColumnLayout; import org.eclipse.jface.util.SafeRunnable; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ILazyTreeContentProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.ptp.rm.lml.core.LMLManager; import org.eclipse.ptp.rm.lml.core.events.ILguiAddedEvent; import org.eclipse.ptp.rm.lml.core.events.ILguiRemovedEvent; import org.eclipse.ptp.rm.lml.core.events.IMarkObjectEvent; import org.eclipse.ptp.rm.lml.core.events.ISelectObjectEvent; import org.eclipse.ptp.rm.lml.core.events.ITableSortedEvent; import org.eclipse.ptp.rm.lml.core.events.IUnmarkObjectEvent; import org.eclipse.ptp.rm.lml.core.events.IUnselectedObjectEvent; import org.eclipse.ptp.rm.lml.core.events.IViewUpdateEvent; import org.eclipse.ptp.rm.lml.core.listeners.ILMLListener; import org.eclipse.ptp.rm.lml.core.model.ILguiItem; import org.eclipse.ptp.rm.lml.core.model.ITableColumnLayout; import org.eclipse.ptp.rm.lml.internal.core.model.Cell; import org.eclipse.ptp.rm.lml.internal.core.model.LMLColor; import org.eclipse.ptp.rm.lml.internal.core.model.Row; import org.eclipse.ptp.rm.lml.ui.UIUtils; import org.eclipse.ptp.rm.lml.ui.messages.Messages; import org.eclipse.ptp.rm.lml.ui.providers.EventForwarder; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.progress.UIJob; public class TableView extends ViewPart { private final class LMLTableListListener implements ILMLListener { /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.ILguiAddedEvent) */ public void handleEvent(ILguiAddedEvent event) { UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { if (composite != null && !viewCreated) { fLguiItem = lmlManager.getSelectedLguiItem(); if (fLguiItem != null) { createTable(); viewCreated = true; if (fLguiItem.getObjectStatus() != null) { fLguiItem.getObjectStatus().addComponent(eventForwarder); componentAdded = true; } } } } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.ILguiRemovedEvent) */ public void handleEvent(ILguiRemovedEvent event) { UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { if (composite != null && fLguiItem != null && viewCreated) { if (componentAdded) { fLguiItem.getObjectStatus().removeComponent(eventForwarder); componentAdded = false; } saveColumnLayout(); fLguiItem = null; setViewerInput(); disposeTable(); viewCreated = false; } } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.IMarkObjectEvent) */ public void handleEvent(IMarkObjectEvent event) { selectedOid = event.getOid(); UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { // if (composite != null && !composite.isDisposed()) { // viewer.refresh(); // } if (composite != null && !composite.isDisposed() && viewer.getInput() != null) { tree.deselectAll(); Row[] rows = null; if (viewer.getInput() instanceof Row[]) { rows = (Row[]) viewer.getInput(); } int index = -1; if (rows != null) { for (int i = 0; i < rows.length; i++) { if (rows[i].oid != null && rows[i].oid.equals(selectedOid)) { index = i; break; } } } if (index > -1) { tree.select(tree.getItem(index)); } } } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.ISelectObjectEvent) */ public void handleEvent(ISelectObjectEvent event) { final String oid = event.getOid(); UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { if (composite != null && !composite.isDisposed() && viewer.getInput() != null) { tree.deselectAll(); Row[] rows = null; if (viewer.getInput() instanceof Row[]) { rows = (Row[]) viewer.getInput(); } int index = -1; if (rows != null) { for (int i = 0; i < rows.length; i++) { if (rows[i].oid != null && rows[i].oid.equals(oid)) { index = i; break; } } } if (index > -1) { tree.select(tree.getItem(index)); } } } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.ITableSortedEvent) */ public void handleEvent(ITableSortedEvent e) { UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { if (fLguiItem != null && fLguiItem.getTableHandler() != null && tree.getSortDirection() != 0 && tree.getSortColumn() != null) { fLguiItem.getTableHandler().sort(gid, SWT.UP, getSortIndex(), tree.getSortDirection()); } setViewerInput(); } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.IUnmarkObjectEvent) */ public void handleEvent(IUnmarkObjectEvent event) { UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { selectedOid = null; // if (composite != null && !composite.isDisposed()) { // viewer.refresh(); // } if (composite != null && !composite.isDisposed()) { tree.deselectAll(); } } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.IUnselectedObjectEvent) */ public void handleEvent(IUnselectedObjectEvent event) { UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { if (composite != null && !composite.isDisposed()) { tree.deselectAll(); } } }); } /* * (non-Javadoc) * * @see org.eclipse.ptp.rm.lml.core.listeners.ILMLListener# handleEvent (org.eclipse.ptp.core.events.IViewUpdateEvent) */ public void handleEvent(IViewUpdateEvent event) { UIUtils.safeRunSyncInUIThread(new SafeRunnable() { public void run() throws Exception { if (composite != null && viewCreated) { if (selectedItem != null && !selectedItem.isDisposed()) { lmlManager.unmarkObject(selectedItem.getData().toString()); selectedItem = null; } if (componentAdded) { if (fLguiItem != null && fLguiItem.getObjectStatus() != null) { fLguiItem.getObjectStatus().removeComponent(eventForwarder); } componentAdded = false; } fLguiItem = lmlManager.getSelectedLguiItem(); if (fLguiItem != null && fLguiItem.getTableHandler() != null && tree.getSortColumn() != null) { fLguiItem.getTableHandler().getSortProperties(gid); fLguiItem.getTableHandler().sort(gid, SWT.UP, getSortIndex(), tree.getSortDirection()); } setViewerInput(); if (fLguiItem != null && fLguiItem.getTableHandler() != null) { fLguiItem.getObjectStatus().addComponent(eventForwarder); componentAdded = true; } } } }); } } private Composite composite; private Menu headerMenu; private Tree tree; private TreeColumn[] treeColumns; private int[] savedColumnWidths; private TreeColumnLayout treeColumnLayout; private TreeViewer viewer; private ILguiItem fLguiItem = null; private String gid = null; private final ILMLListener lmlListener = new LMLTableListListener(); private final LMLManager lmlManager = LMLManager.getInstance(); private TreeItem selectedItem = null; private String selectedOid = null; private boolean componentAdded = false; private boolean viewCreated = false; private boolean isMouseDown = false; private final EventForwarder eventForwarder = new EventForwarder(); @Override public void createPartControl(Composite parent) { gid = getViewSite().getId(); composite = new Composite(parent, SWT.None); treeColumnLayout = new TreeColumnLayout(); composite.setLayout(treeColumnLayout); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); viewer = new TreeViewer(composite, SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.VIRTUAL); viewer.getTree().setLayout(new TableLayout()); viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); viewer.setContentProvider(new ILazyTreeContentProvider() { private Row[] rows; public void dispose() { // Nothing } public Object getParent(Object element) { if (element instanceof Cell) { return ((Cell) element).row; } return rows; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.rows = (Row[]) newInput; } public void updateChildCount(Object element, int currentChildCount) { // Nothing } public void updateElement(Object parent, int index) { Object element; if (parent instanceof Row) { element = ((Row) parent).cells[index]; } else { element = rows[index]; } viewer.replace(parent, index, element); updateChildCount(element, -1); } }); viewer.setUseHashlookup(true); /* * Must expand first level of table, otherwise it may not be redrawn. */ viewer.setAutoExpandLevel(2); tree = viewer.getTree(); headerMenu = new Menu(composite); // Part for the controlling Monitor - context menu final MenuManager contextMenu = new MenuManager(); contextMenu.setRemoveAllWhenShown(true); final Menu menu = contextMenu.createContextMenu(composite); getSite().registerContextMenu(contextMenu, viewer); tree.setLinesVisible(true); tree.setHeaderVisible(true); tree.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(Event event) { final Point pt = tree.getDisplay().map(null, tree, new Point(event.x, event.y)); final Rectangle clientArea = tree.getClientArea(); final boolean header = clientArea.y <= pt.y && pt.y < (clientArea.y + tree.getHeaderHeight()); tree.setMenu(header ? headerMenu : menu); } }); /* * Get the selected LguiItem (if there is one) so that the table will be populated when the it is first created */ fLguiItem = lmlManager.getSelectedLguiItem(); createTable(); tree.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (fLguiItem != null) { saveColumnLayout(); } } }); } @Override public void dispose() { lmlManager.removeListener(lmlListener); } @Override public void init(IViewSite site) { try { super.init(site); } catch (final PartInitException e) { e.printStackTrace(); } lmlManager.addListener(lmlListener, this.getClass().getName()); } /** * Refresh the viewer. */ public void refresh() { new UIJob(Messages.TableUpdate) { @Override public IStatus runInUIThread(IProgressMonitor monitor) { if (viewer != null) { setViewerInput(); viewer.refresh(); } return Status.OK_STATUS; } }.schedule(); } @Override public void setFocus() { viewer.getControl().setFocus(); } /** * * @param tableViewer * @param fSelected */ private void createColumns() { if (fLguiItem.isLayout() || fLguiItem.getTableHandler() == null) { return; } final ITableColumnLayout[] tableColumnLayouts = fLguiItem.getTableHandler().getTableColumnLayout(gid); if (tableColumnLayouts == null) { return; } treeColumns = new TreeColumn[tableColumnLayouts.length]; savedColumnWidths = new int[tableColumnLayouts.length + 1]; // first column with color rectangle TreeViewerColumn treeViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); treeViewerColumn.setLabelProvider(new ColumnLabelProvider() { @Override public Image getImage(Object element) { final Display display = treeColumns[0].getDisplay(); final Image image = new Image(display, 12, 12); final GC gc = new GC(image); if (((Row) element).oid != null && (selectedOid == null || ((Row) element).oid.equals(selectedOid))) { LMLColor color = ((Row) element).color; if (color == null) { color = LMLColor.LIGHT_GRAY; } gc.setBackground(new Color(display, color.getRed(), color.getGreen(), color.getBlue())); } else { gc.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); } gc.fillRectangle(image.getBounds().x, image.getBounds().y, image.getBounds().width, image.getBounds().height); gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); gc.drawRectangle(image.getBounds().x, image.getBounds().y, image.getBounds().width - 1, image.getBounds().height - 1); gc.dispose(); return image; } @Override public String getText(Object element) { return null; } }); TreeColumn treeColumn = treeViewerColumn.getColumn(); treeColumn.setMoveable(false); treeColumn.setResizable(false); treeColumn.setAlignment(SWT.LEFT); createMenuItem(headerMenu, treeColumn, 0); treeColumnLayout.setColumnData(treeColumn, new ColumnPixelData(40, true)); // the remaining columns for (int i = 0; i < tableColumnLayouts.length; i++) { treeViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); final int cellNumber = i; treeViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { cell.setText(((Row) cell.getElement()).cells[cellNumber].value); } }); treeColumn = treeViewerColumn.getColumn(); treeColumn.setMoveable(true); treeColumn.setText(tableColumnLayouts[i].getTitle()); treeColumn.setAlignment(getColumnAlignment(tableColumnLayouts[i].getStyle())); if (tableColumnLayouts[i].isActive()) { final boolean resizable = true; treeColumn.setResizable(resizable); /* * Create the header menu for this column */ createMenuItem(headerMenu, treeColumn, i + 1); /* * Set the column width */ treeColumnLayout.setColumnData(treeColumn, new ColumnWeightData( (int) (tableColumnLayouts[i].getWidth() * composite.getClientArea().width), 10, resizable)); } else { final boolean resizable = false; treeColumn.setResizable(resizable); /* * Create the header menu for this column */ createMenuItem(headerMenu, treeColumn, i + 1); /* * Set the column width */ savedColumnWidths[i + 1] = 0; treeColumnLayout.setColumnData(treeColumn, new ColumnWeightData(0, 0, resizable)); } treeColumns[i] = treeColumn; } // just a default column treeViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); treeViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { } }); treeColumn = treeViewerColumn.getColumn(); treeColumn.setMoveable(true); treeColumn.setText(""); //$NON-NLS-1$ treeColumn.setAlignment(SWT.TRAIL); treeColumn.setResizable(false); treeColumnLayout.setColumnData(treeColumn, new ColumnWeightData(0, 0, false)); /* * Sorting is done in the model as the table is virtual and has a lazy content provider. */ final Listener sortListener = new Listener() { public void handleEvent(Event e) { final TreeColumn currentColumn = (TreeColumn) e.widget; if (tree.getSortColumn() == currentColumn) { tree.setSortDirection(tree.getSortDirection() == SWT.UP ? SWT.DOWN : SWT.UP); } else { tree.setSortColumn(currentColumn); tree.setSortDirection(SWT.UP); } if (fLguiItem != null && fLguiItem.getTableHandler() != null) { fLguiItem.getTableHandler().setSortProperties(gid, getSortIndex(), getSortDirectionString()); } lmlManager.sortLgui(); } }; for (final TreeColumn col : treeColumns) { col.addListener(SWT.Selection, sortListener); } // Mouse action (in combination with nodedisplay) if (gid.equals(ILguiItem.ACTIVE_JOB_TABLE)) { tree.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { if (e.button == 1) { isMouseDown = true; final TreeItem item = tree.getItem(new Point(e.x, e.y)); if (item != null && !composite.isDisposed()) { lmlManager.selectObject(item.getData().toString()); lmlManager.markObject(item.getData().toString()); } } } @Override public void mouseUp(MouseEvent e) { if (e.button == 1) { final TreeItem item = tree.getItem(new Point(e.x, e.y)); if (item != null && !composite.isDisposed()) { lmlManager.unmarkObject(item.getData().toString()); lmlManager.unselectObject(item.getData().toString()); } isMouseDown = false; } } }); } /* * tree.addMouseMoveListener(new MouseMoveListener() { * * public void mouseMove(MouseEvent e) { final TreeItem item = tree.getItem(new Point(e.x, e.y)); if (item == null) { * return; } if (selectedItem != null && !selectedItem.equals(item)) { if (!selectedItem.isDisposed()) { * lmlManager.unselectObject(selectedItem.getData().toString()); } } selectedItem = item; if (!selectedItem.isDisposed()) { * lmlManager.selectObject(selectedItem.getData().toString()); } } * * }); tree.addMouseTrackListener(new MouseTrackListener() { * * public void mouseEnter(MouseEvent e) { // nothing } * * public void mouseExit(MouseEvent e) { if (selectedItem != null && !selectedItem.isDisposed()) { * lmlManager.unselectObject(selectedItem.getData().toString()); selectedItem = null; } } * * public void mouseHover(MouseEvent e) { // nothing } }); */ } private void createMenuItem(Menu parent, final TreeColumn column, final int index) { final MenuItem itemName = new MenuItem(parent, SWT.CHECK); itemName.setText(column.getText()); itemName.setSelection(column.getResizable()); itemName.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { boolean active = true; if (itemName.getSelection()) { if (savedColumnWidths[index] <= 50) { savedColumnWidths[index] = 50; } column.setWidth(savedColumnWidths[index]); column.setResizable(true); } else { savedColumnWidths[index] = column.getWidth(); column.setWidth(0); column.setResizable(false); active = false; } if (fLguiItem != null) { fLguiItem.getTableHandler().setTableColumnActive(gid, column.getText(), active); } } }); } private void createTable() { if (fLguiItem != null) { createColumns(); if (fLguiItem.getTableHandler() != null) { final Object[] sortProperties = fLguiItem.getTableHandler().getSortProperties(gid); if (!((String) sortProperties[1]).equals(ITableColumnLayout.SORT_DIRECTION_NONE) && ((Integer) sortProperties[0]) != -1) { tree.setSortDirection(getSortDirectionInt((String) sortProperties[1])); tree.setSortColumn(getSortColumn((Integer) sortProperties[0])); fLguiItem.getTableHandler().sort(gid, SWT.UP, getSortIndex(), tree.getSortDirection()); } } } // Insert the input setViewerInput(); composite.layout(); } /** * Disposing the table. * * Setting defaults values to sort column and sort direction. Deleting for every TreeColumn corresponding listeners and the * TreeColumn itself. All MenuItems from the headerMenu and the MenuManager of the View are also erased. */ private void disposeTable() { tree.setSortColumn(null); tree.setSortDirection(0); /* * Remove columns */ final TreeColumn[] oldColumns = tree.getColumns(); for (final TreeColumn oldColumn : oldColumns) { final Listener[] oldListeners = oldColumn.getListeners(SWT.Selection); for (final Listener oldListener : oldListeners) { oldColumn.removeListener(SWT.Selection, oldListener); } oldColumn.dispose(); } treeColumns = new TreeColumn[0]; /* * Remove menu items */ for (final MenuItem item : headerMenu.getItems()) { item.dispose(); } getViewSite().getActionBars().getMenuManager().removeAll(); } private int getColumnAlignment(String alignment) { if (alignment.equals(ITableColumnLayout.COLUMN_STYLE_LEFT)) { return SWT.LEAD; } if (alignment.equals(ITableColumnLayout.COLUMN_STYLE_RIGHT)) { return SWT.TRAIL; } return SWT.LEAD; } private TreeColumn getSortColumn(Integer index) { TreeColumn column = null; if (index >= 0 && index < treeColumns.length) { column = treeColumns[index]; } return column; } private int getSortDirectionInt(String sortDirection) { if (sortDirection.equals(ITableColumnLayout.SORT_DIRECTION_UP)) { return SWT.UP; } else if (sortDirection.equals(ITableColumnLayout.SORT_DIRECTION_DOWN)) { return SWT.DOWN; } return -1; } /** * Determines the sort direction and gives back the int value of the determined sort direction. Default value is "NONE". * * @return int value of the determined sort direction */ private String getSortDirectionString() { if (tree.getSortDirection() == SWT.UP) { return ITableColumnLayout.SORT_DIRECTION_UP; } else if (tree.getSortDirection() == SWT.DOWN) { return ITableColumnLayout.SORT_DIRECTION_DOWN; } return ITableColumnLayout.SORT_DIRECTION_NONE; } /** * Determines the sort column and gives back the index of the determined sort column. Default value is -1. * * @return index value of the determined sort column */ private int getSortIndex() { for (int i = 0; i < treeColumns.length; i++) { if (treeColumns[i].equals(tree.getSortColumn())) { return i; } } return -1; } /** * * * @return */ private Double[] getWidths() { final TreeColumn[] columns = tree.getColumns(); int width = 0; for (final TreeColumn column : columns) { width += column.getWidth(); } final Double[] widths = new Double[columns.length - 1]; for (int i = 0; i < columns.length - 2; i++) { final TreeColumn column = columns[i + 1]; Double columnWidth = (double) 0; if (column.getWidth() > 0) { columnWidth = Integer.valueOf(column.getWidth()).doubleValue() / width; } widths[i] = columnWidth; } return widths; } /** * Rearranging of the columns order. * * The table of the TableView has two additional columns (one visible, the other is hidden) than there are saved in the inner * model. This methods eliminates these two columns and rewrite the numbers of the column order. The visible one should always * be the first, but during moving other columns this fact can change. The hidden column is always the last one. * * @param order * order at the beginning * @return new column order array with two columns removed */ private int[] removeFirstColumn(int[] order) { final int[] orderNew = new int[order.length - 2]; int dif = 0; for (int i = 0; i < order.length - 1; i++) { if (order[i] != 0) { orderNew[i - dif] = order[i] - 1; } else { dif = 1; } } return orderNew; } /** * Determines the current Layout of the view and transmit it to the inner model. * * Sends first changes of the column order to the model side, then changes of the width. After that the sorting parameters are * determined. There can be changes of the column order, so the position of the column is checked also. * * The default values of sortIndex and sortDirection are -1 and "NON". */ private void saveColumnLayout() { if (fLguiItem != null && fLguiItem.getTableHandler() != null && tree.getColumnOrder().length != 0) { final int[] indexe = removeFirstColumn(tree.getColumnOrder()); fLguiItem.getTableHandler().changeTableColumnsOrder(gid, indexe); fLguiItem.getTableHandler().changeTableColumnsWidth(gid, getWidths()); final int sortIndex = getSortIndex(); final String sortDirection = getSortDirectionString(); int index = 0; for (int i = 0; i < indexe.length; i++) { if (indexe[i] == sortIndex) { index = i; } } fLguiItem.getTableHandler().setSortProperties(gid, index, sortDirection); } } /** * */ private void setViewerInput() { /* * Don't change input if mouse is down as this causes a SIGSEGV in SWT! */ if (!isMouseDown) { Row[] input = new Row[0]; if (fLguiItem != null && fLguiItem.getTableHandler() != null) { input = fLguiItem.getTableHandler().getTableDataWithColor(gid, gid.equals(ILguiItem.ACTIVE_JOB_TABLE)); } if (!composite.isDisposed()) { viewer.setInput(input); viewer.setChildCount(input, input.length); } } } }