import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.TableEditor;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.KeyAdapter;
column.pack();
if (col instanceof TmfMarginColumn) {
column.setResizable(false);
+ column.addControlListener(new ControlAdapter() {
+ /*
+ * Make sure that the margin column is always first
+ */
+ @Override
+ public void controlMoved(ControlEvent e) {
+ int[] order = fTable.getColumnOrder();
+ if (order[0] == MARGIN_COLUMN_INDEX) {
+ return;
+ }
+ for (int i = order.length - 1; i > 0; i--) {
+ if (order[i] == MARGIN_COLUMN_INDEX) {
+ order[i] = order[i - 1];
+ order[i - 1] = MARGIN_COLUMN_INDEX;
+ }
+ }
+ fTable.setColumnOrder(order);
+ }
+ });
+ } else {
+ column.setMoveable(true);
}
}
ParameterizedCommand cmd = ParameterizedCommand.generateCommand(command, parameters);
IEvaluationContext context = handlerService.getCurrentState();
- // Omit the margin column
- List<TmfEventTableColumn> exportColumns = fColumns.subList(EVENT_COLUMNS_START_INDEX, fColumns.size());
+ List<TmfEventTableColumn> exportColumns = new ArrayList<>();
+ for (int i : fTable.getColumnOrder()) {
+ // Omit the margin column
+ if (i >= EVENT_COLUMNS_START_INDEX) {
+ exportColumns.add(fColumns.get(i));
+ }
+ }
context.addVariable(ExportToTextCommandHandler.TMF_EVENT_TABLE_COLUMNS_ID, exportColumns);
handlerService.executeCommandInContext(cmd, null, context);
* @since 3.0
*/
public String[] getItemStrings(ITmfEvent event) {
- return getItemStrings(fColumns, event);
+ List<TmfEventTableColumn> columns = new ArrayList<>();
+ for (int i : fTable.getColumnOrder()) {
+ columns.add(fColumns.get(i));
+ }
+ return getItemStrings(columns, event);
}
/**
/*******************************************************************************
- * Copyright (c) 2010, 2013 Ericsson
+ * Copyright (c) 2010, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
private boolean fResetTopIndex = false; // Flag to trigger reset of top index
private ControlAdapter fResizeListener; // Resize listener to update visible rows
+ private ControlAdapter fColumnMoveListener; // Column move listener to redraw column headers
// ------------------------------------------------------------------------
// Constructor
};
fTable.addControlListener(fResizeListener);
+ fColumnMoveListener = new ControlAdapter() {
+ @Override
+ public void controlMoved(ControlEvent e) {
+ fTable.setHeaderVisible(false);
+ fTable.setHeaderVisible(true);
+ }
+ };
+
// Implement a "fake" tooltip
final String TOOLTIP_DATA_KEY = "_TABLEITEM"; //$NON-NLS-1$
final Listener labelListener = new Listener() {
*/
column.addControlListener(fResizeListener);
+ /*
+ * Work around a display glitch (probably a GTK glitch) where
+ * the moved column's header becomes invisible and unselectable
+ * until you focus on another one.
+ */
+ column.addControlListener(fColumnMoveListener);
+
return column;
}
return fTable.getColumns();
}
+ /**
+ * Returns an array of zero-relative integers that map
+ * the creation order of the receiver's columns to the
+ * order in which they are currently being displayed.
+ * <p>
+ * Specifically, the indices of the returned array represent
+ * the current visual order of the columns, and the contents
+ * of the array represent the creation order of the columns.
+ *
+ * @return the current visual order of the receiver's columns
+ */
+ public int[] getColumnOrder() {
+ return fTable.getColumnOrder();
+ }
+
+ /**
+ * Sets the order that the columns in the receiver should
+ * be displayed in to the given argument which is described
+ * in terms of the zero-relative ordering of when the columns
+ * were added.
+ * <p>
+ * Specifically, the contents of the array represent the
+ * original position of each column at the time its creation.
+ *
+ * @param order the new order to display the columns
+ */
+ public void setColumnOrder(int[] order) {
+ fTable.setColumnOrder(order);
+ }
+
/**
* Method getItem.
* @param point Point the coordinates in the table