Example usage for org.eclipse.jface.viewers ViewerCell setImage

List of usage examples for org.eclipse.jface.viewers ViewerCell setImage

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers ViewerCell setImage.

Prototype

public void setImage(Image image) 

Source Link

Document

Set the Image for the cell.

Usage

From source file:org.bonitasoft.studio.parameters.property.section.provider.ParameterStyledLabelProvider.java

License:Open Source License

@Override
public void update(ViewerCell cell) {
    if (cell.getElement() instanceof Parameter) {
        Parameter p = (Parameter) cell.getElement();
        StyledString styledString = new StyledString();

        String decoration = " -- " + typeProvider.getText(p);
        styledString.append(p.getName(), null);

        styledString.append(decoration, StyledString.DECORATIONS_STYLER);
        cell.setText(styledString.getString());
        cell.setImage(getImage(p));
        cell.setStyleRanges(styledString.getStyleRanges());
    }/* www.j a va  2 s.c  o m*/
}

From source file:org.csstudio.alarm.beast.ui.alarmtable.AlarmTableLabelProvider.java

License:Open Source License

/** Update one cell of the table */
@Override//  w ww  .  j  a va2s  .c om
public void update(final ViewerCell cell) {
    // AlarmTableProvider should always provide "AlarmTreePV" elements
    final AlarmTreePV alarm = (AlarmTreePV) cell.getElement();

    // Special handling of 'info' entry that has no parent
    switch (column) {
    case ACK:
        cell.setImage(
                alarm.getSeverity().isActive() ? CheckBoxImages.getInstance(cell.getControl()).getImage(false)
                        : CheckBoxImages.getInstance(cell.getControl()).getImage(true));
        break;
    case ICON:
        cell.setImage(icon_provider.getIcon(alarm));
        break;
    case PV:
        cell.setText(alarm.getName());
        break;
    case DESCRIPTION: {
        final String annunciation = AnnunciationFormatter.format(alarm.getDescription(),
                alarm.getSeverity().getDisplayName(), alarm.getValue(), true);
        cell.setText(annunciation);
    }

        break;
    case TIME:
        cell.setText(formatter == null ? alarm.getTimestampText()
                : (alarm.getTimestamp() == null ? ""
                        : formatter.format(
                                ZonedDateTime.ofInstant(alarm.getTimestamp(), ZoneId.systemDefault()))));
        break;
    case CURRENT_SEVERITY:
        if (alarm.getParent() == null)
            return;
        cell.setText(alarm.getCurrentSeverity().getDisplayName());
        cell.setBackground(color_provider.getColor(alarm.getCurrentSeverity()));
        break;
    case CURRENT_STATUS:
        if (alarm.getParent() == null)
            return;
        cell.setText(alarm.getCurrentMessage());
        break;
    case SEVERITY:
        if (alarm.getParent() == null)
            return;
        cell.setText(alarm.getSeverity().getDisplayName());
        cell.setBackground(color_provider.getColor(alarm.getSeverity()));
        break;
    case STATUS:
        if (alarm.getParent() == null)
            return;
        cell.setText(alarm.getMessage());
        break;
    case VALUE:
        if (alarm.getParent() == null)
            return;
        cell.setText(alarm.getValue());
        break;
    case ACTION:
        GDCDataStructure[] guidance = alarm.getGuidance();
        if (guidance.length != 0) {
            cell.setText(guidance[0].getDetails());
        }
        break;
    case ID:
        GDCDataStructure[] guidances = alarm.getGuidance();
        if (guidances.length != 0) {
            cell.setText(guidances[0].getTitle());
        }
        break;
    default:
        break;
    }

    if (column == ColumnInfo.ICON)
        return;

    // If enabled, the background color will reflect the severity of the alarm (when in alarm state).
    // If reverse_colors is also enabled, the background/text colors for unacknowledged cleared alarms will be reversed.
    if (!background_color_alarm_sensitive)
        return;

    final SeverityLevel severity = alarm.getSeverity();
    if (severity == SeverityLevel.OK) {
        // if OK, use default colors
        cell.setBackground(null);
        cell.setForeground(null);
        return;
    }

    final SeverityLevel current_severity = alarm.getCurrentSeverity();
    final Color severity_color = color_provider.getColor(severity);
    final Color color_pair = color_pair_provider == null ? null : color_pair_provider.getColor(severity);

    Color bg_color = severity_color, fg_color = color_pair;

    if (reverse_colors && current_severity == SeverityLevel.OK) {
        // the alarm is currently cleared (recovered), and color reversal is enabled
        bg_color = color_pair;
        fg_color = severity_color;
    }

    cell.setBackground(bg_color);
    cell.setForeground(fg_color);
}

From source file:org.csstudio.alarm.beast.ui.alarmtree.AlarmTreeLabelProvider.java

License:Open Source License

/** Set a cell's text and color from alarm tree item */
@Override/*from w  w  w.  j  a v a 2  s.com*/
public void update(final ViewerCell cell) {
    final AlarmTreeItem item = (AlarmTreeItem) cell.getElement();
    // Text
    String text = getText(item);
    if (!text.equals(cell.getText()))
        cell.setText(text);

    // Provide icon that represents the item's severity
    if (item instanceof AlarmTreePV && !((AlarmTreePV) item).isEnabled()) {
        cell.setImage(icon_provider.getDisabledIcon());
        cell.setBackground(null);
        cell.setForeground(null);
        return; // done, skip the color coding
    } else
        cell.setImage(icon_provider.getIcon(item.getCurrentSeverity(), item.getSeverity(),
                item.getDisabledChildCount() > 0));

    // Color-code AlarmTreePV based on severity.
    final SeverityLevel severity = item.getSeverity();
    //  'OK' severity isn't color-coded.
    if (severity == SeverityLevel.OK) {
        cell.setBackground(null);
        cell.setForeground(null);
        return;
    }
    //  Generally, the foreground (text) color is set,
    //  but for PV items with active alarms, the background
    //  color is set to make it stand out even more.
    final Color color = color_provider.getColor(severity);
    if ((item instanceof AlarmTreePV) && severity.isActive()) {
        cell.setBackground(color);
        cell.setForeground(null);
    } else {
        cell.setForeground(color);
        cell.setBackground(null);
    }
}

From source file:org.csstudio.askap.chat.GroupMemberLabelProvider.java

License:Open Source License

/** Display name of member with generic icon
 *  {@inheritDoc}/*from   ww w. j  a  v a 2  s. c o m*/
 */
@Override
public void update(final ViewerCell cell) {
    final String person = (String) cell.getElement();
    cell.setText(person);

    if (icon == null) {
        final ImageDescriptor descr = Activator.getImage(ICON_NAME);
        if (descr == null) // Running as standalone demo?
            icon = new Image(Display.getCurrent(), ICON_NAME);
        else
            icon = descr.createImage();
    }
    cell.setImage(icon);
}

From source file:org.csstudio.display.pvtable.ui.PVTable.java

License:Open Source License

/**
 * Create GUI components//w  ww  .  j  a v  a 2 s  .c  om
 *
 * @param parent
 */
private void createComponents(final Composite parent) {
    // TableColumnLayout requires table to be only child of parent.
    // To assert that'll always be the case, create box.
    final Composite table_box = new Composite(parent, 0);
    parent.setLayout(new FillLayout());
    final TableColumnLayout layout = new MinSizeTableColumnLayout(50);
    table_box.setLayout(layout);

    // Tried CheckboxTableViewer, but it lead to inconsistent refreshes:
    // Rows would appear blank. Didn't investigate further, stuck with
    // TableViewer.
    viewer = new TableViewer(table_box,
            SWT.CHECK | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.VIRTUAL);

    final Table table = viewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    // PV Name column: Has the 'check box' to select, allows editing
    final TableViewerColumn pv_column = createColumn(viewer, layout, Messages.PV, 75, 100,
            new PVTableCellLabelProvider() {
                @Override
                public void update(final ViewerCell cell) {
                    final TableItem tab_item = (TableItem) cell.getItem();
                    final PVTableItem item = (PVTableItem) cell.getElement();
                    if (item.isConfHeader()) {
                        cell.setText(item.getConfHeader());
                        cell.setForeground(tab_item.getDisplay().getSystemColor(SWT.COLOR_DARK_BLUE));
                        return;
                    }
                    if (item.isMeasureHeader() && model.getConfig() != null) {
                        cell.setText(item.getMeasureHeader());
                        cell.setForeground(tab_item.getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN));
                        return;
                    }
                    if (item.isComment()) {
                        cell.setText(item.getComment());
                        cell.setForeground(tab_item.getDisplay().getSystemColor(SWT.COLOR_BLUE));
                        return;
                    }
                    tab_item.setChecked(item.isSelected());
                    cell.setText(item.getName());
                    cell.setForeground(null);
                }
            });
    pv_column.setEditingSupport(new EditingSupport(viewer) {
        @Override
        protected boolean canEdit(final Object element) {
            final PVTableItem item = (PVTableItem) element;
            if (item.isMeasure() && !item.isMeasureHeader())
                return false;
            return true;
        }

        @Override
        protected CellEditor getCellEditor(final Object element) {
            return AutoCompleteUIHelper.createAutoCompleteTextCellEditor(table, AutoCompleteTypes.PV);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final String new_name = value.toString().trim();
            final PVTableItem item = (PVTableItem) element;

            if (item == PVTableModelContentProvider.NEW_ITEM) {
                // Set name of magic NEW_ITEM: Add new item
                if (new_name.isEmpty())
                    return;
                model.addItem(new_name);
                viewer.setInput(model);
            } else if (item.isMeasureHeader() && !new_name.startsWith("#mesure#"))
                return;
            else if (new_name.isEmpty()) {
                if (item.isConfHeader()) {
                    boolean isDelete = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
                            Messages.InformationPopup, Messages.InformationPopup_DelConfHeader);

                    if (isDelete == false)
                        return;

                    Configuration conf = model.getConfig();
                    System.out.println("PVTable.createComponents(...).new EditingSupport() {...}.setValue() "
                            + conf + " " + ((conf != null) ? conf.getMeasures() : ""));
                    List<Measure> allMeasures = conf.getMeasures();
                    for (Measure measure : allMeasures) {
                        List<PVTableItem> itemsMeasure = measure.getItems();
                        for (PVTableItem itemMes : itemsMeasure)
                            model.removeItem(itemMes);
                    }
                }
                // Setting name to nothing: Remove item
                model.removeItem(item);
                viewer.remove(item);

                viewer.setItemCount(model.getItemCount() + 1);
                viewer.refresh();
            } else {
                // Change name of existing item
                item.updateName(new_name);
                model.isConfHeaderToAdd(item);
                model.fireModelChange();
            }
        }

        @Override
        protected Object getValue(final Object element) {
            final PVTableItem item = (PVTableItem) element;
            return item.getName();
        }
    });
    // Allow check/uncheck to select items for restore
    viewer.getTable().addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(final Event event) {
            final TableItem tab_item = (TableItem) event.item;
            final PVTableItem item = (PVTableItem) tab_item.getData();

            if (event.detail != SWT.CHECK) {
                changeContextMenu(item);
                return;
            }

            if (item.isComment() || item.isMeasure()) {
                tab_item.setChecked(false);
                return;
            }

            /*
             * Toggle selection of PVTableItem, then update the TableItem to
             * reflect current state. When instead updating the PVTableItem
             * from the TableItem's check mark, the result was inconsistent
             * behavior for selected rows: Could not un-check the checkbox
             * for a selected row...
             */
            if (item == PVTableModelContentProvider.NEW_ITEM)
                item.setSelected(false);
            else
                item.setSelected(!item.isSelected());
            tab_item.setChecked(item.isSelected());
        }
    });

    // Optionally, add column to display item.getDescription()
    if (Preferences.showDescription()) {
        createColumn(viewer, layout, Messages.Description, 50, 40, new PVTableCellLabelProvider() {
            @Override
            public void update(final ViewerCell cell) {
                final PVTableItem item = (PVTableItem) cell.getElement();
                cell.setText(item.getDescription());
            }
        });
    }

    // Read-only time stamp
    createColumn(viewer, layout, Messages.Time, 50, 100, new PVTableCellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final PVTableItem item = (PVTableItem) cell.getElement();
            final VType value = item.getValue();
            if (!item.isMeasureHeader() && (value == null || item.isComment()))
                cell.setText(""); //$NON-NLS-1$
            else
                cell.setText(TimestampHelper.format(VTypeHelper.getTimestamp(value)));
        }
    });
    // Editable value
    final TableViewerColumn value_column = createColumn(viewer, layout, Messages.Value, 100, 50,
            new PVTableCellLabelProviderWithChangeIndicator(changed_background) {
                @Override
                public void update(final ViewerCell cell) {
                    final PVTableItem item = (PVTableItem) cell.getElement();
                    final VType value = item.getValue();
                    if (value == null)
                        cell.setText(""); //$NON-NLS-1$
                    else
                        cell.setText(VTypeHelper.toString(value));
                    super.update(cell);
                }
            });
    value_column.setEditingSupport(new EditingSupport(viewer) {
        /** When a combo box editor is created, its value must be the integer
         *  index. Note that this variable is shared for all rows. When
         *  editing, the UI thread calls getCellEditor() for the row, then
         *  get/setValue().
         */
        private boolean need_index = false;

        @Override
        protected boolean canEdit(final Object element) {
            final PVTableItem item = (PVTableItem) element;
            return item.isWritable();
        }

        @Override
        protected CellEditor getCellEditor(final Object element) {
            final PVTableItem item = (PVTableItem) element;
            final String[] options = item.getValueOptions();
            need_index = options != null;
            if (need_index)
                return new ComboBoxCellEditor(table, options, SWT.READ_ONLY);
            return new TextCellEditor(table);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final PVTableItem item = (PVTableItem) element;
            item.setValue(value.toString());
        }

        @Override
        protected Object getValue(final Object element) {
            final PVTableItem item = (PVTableItem) element;
            final VType value = item.getValue();
            if (need_index) {
                if (value == null || !(value instanceof VEnum))
                    return 0;
                return ((VEnum) value).getIndex();
            }
            if (value == null)
                return ""; //$NON-NLS-1$
            return VTypeHelper.toString(value);
        }
    });
    // Remaining columns are read-only
    createColumn(viewer, layout, Messages.Alarm, 100, 50, new PVTableCellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final PVTableItem item = (PVTableItem) cell.getElement();
            final VType value = item.getValue();
            if (value == null)
                cell.setText(""); //$NON-NLS-1$
            else {
                cell.setText(VTypeHelper.formatAlarm(value));
                cell.setForeground(alarm_colors.get(VTypeHelper.getSeverity(value)));
            }
        }
    });
    // Column Saved Value
    createColumn(viewer, layout, Messages.Saved, 100, 50,
            new PVTableCellLabelProviderWithChangeIndicator(changed_background) {
                @Override
                public void update(final ViewerCell cell) {
                    final PVTableItem item = (PVTableItem) cell.getElement();
                    final SavedValue value = item.getSavedValue().orElse(null);
                    if (value == null)
                        cell.setText(""); //$NON-NLS-1$
                    else
                        cell.setText(value.toString());
                    super.update(cell);
                }
            });

    // Optionally, add column to display item.getTime_saved()
    if (Preferences.showSaveTimestamp()) {
        createColumn(viewer, layout, Messages.Saved_Value_TimeStamp, 50, 40, new PVTableCellLabelProvider() {
            @Override
            public void update(final ViewerCell cell) {
                final PVTableItem item = (PVTableItem) cell.getElement();
                cell.setText(item.getTime_saved());
            }
        });
    }

    final TableViewerColumn completion_column = createColumn(viewer, layout, "Completion", 10, 100,
            new PVTableCellLabelProvider() {
                @Override
                public void update(final ViewerCell cell) {
                    final PVTableItem item = (PVTableItem) cell.getElement();
                    if (item.isWritable()) {
                        if (item.isUsingCompletion())
                            cell.setImage(icon_checked);
                        else
                            cell.setImage(icon_unchecked);
                    }
                }
            });
    completion_column.getColumn().setToolTipText("Await completion (use put-callback) when restoring values?");
    completion_column.setEditingSupport(new EditingSupport(viewer) {
        @Override
        protected boolean canEdit(final Object element) {
            return ((PVTableItem) element).isWritable();
        }

        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(table);
        }

        @Override
        protected Object getValue(final Object element) {
            return ((PVTableItem) element).isUsingCompletion();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            ((PVTableItem) element).setUseCompletion((Boolean) value);
            model.fireModelChange();
        }
    });

    ColumnViewerToolTipSupport.enableFor(viewer);
    viewer.setContentProvider(new PVTableModelContentProvider());
}

From source file:org.csstudio.scan.ui.scantree.gui.CommandTreeLabelProvider.java

License:Open Source License

/** {@inheritDoc} */
@Override//  ww w . ja  v  a2  s .c  om
public void update(final ViewerCell cell) {
    final ScanCommand command = (ScanCommand) cell.getElement();
    cell.setText(getText(command));
    cell.setImage(getImage(command));

    // highlight the currently active command
    if (active_command.get() == command)
        cell.setForeground(cell.getControl().getDisplay().getSystemColor(SWT.COLOR_GREEN));
    else
        cell.setForeground(null);
}

From source file:org.csstudio.trends.databrowser2.propsheet.AxesTableHandler.java

License:Open Source License

/** Create table columns: Auto-sizable, with label provider and editor
 *  @param table_layout/*from w  ww .j a  v  a  2s.com*/
 */
private void createColumns(TableColumnLayout table_layout) {
    TableViewerColumn col;

    // Visible? Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisVisibility, 45, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isVisible())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isVisible();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setVisible(((Boolean) value).booleanValue());
            if (((Boolean) value).booleanValue()) {
                if (axis.isAutoScale())
                    model.setArchiveRescale(ArchiveRescale.NONE);
            }
            command.rememberNewConfig();
        }
    });

    // Axis Name Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.ValueAxisName, 100, 100);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(axis.getName());
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).getName();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final String name = value.toString().trim();
            if (name.equals(axis.getName()))
                return;
            final ChangeAxisConfigCommand config = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setName(name);
            config.rememberNewConfig();
        }
    });

    // Use Axis Name ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.UseAxisName, 95, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isUsingAxisName())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isUsingAxisName();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.useAxisName(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Use Trace Names ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.UseTraceNames, 110, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isUsingTraceNames())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isUsingTraceNames();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.useTraceNames(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Show Grid? ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.Grid, 50, 5);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isGridVisible())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isGridVisible();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setGridVisible(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Use Right Side? ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisOnRight, 80, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isOnRight())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isOnRight();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setOnRight(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Color Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.Color, 40, 5);
    col.setLabelProvider(new ColorCellLabelProvider<AxisConfig>() {
        @Override
        protected Color getColor(final AxisConfig axis) {
            return color_registry.createColor(axis.getColor());
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new RGBCellEditor(axes_table.getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).getColor();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setColor((RGB) value);
            command.rememberNewConfig();
        }
    });

    // Minimum value Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisMin, 70, 50);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(Double.toString(axis.getMin()));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected Object getValue(final Object element) {
            return Double.toString(((AxisConfig) element).getMin());
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            try {
                final AxisConfig axis = (AxisConfig) element;
                final double limit = Double.parseDouble(value.toString().trim());
                if (limit == axis.getMin())
                    return;
                final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
                axis.setRange(limit, axis.getMax());
                command.rememberNewConfig();
            } catch (NumberFormatException ex) {
                // NOP, leave as is
            }
        }
    });

    // Maximum value Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisMax, 70, 50);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(Double.toString(axis.getMax()));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected Object getValue(final Object element) {
            return Double.toString(((AxisConfig) element).getMax());
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            try {
                final AxisConfig axis = (AxisConfig) element;
                final double limit = Double.parseDouble(value.toString().trim());
                if (limit == axis.getMax())
                    return;
                final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
                axis.setRange(axis.getMin(), limit);
                command.rememberNewConfig();
            } catch (NumberFormatException ex) {
                // NOP, leave as is
            }
        }
    });

    // Auto scale Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AutoScale, 80, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isAutoScale())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isAutoScale();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setAutoScale(((Boolean) value).booleanValue());
            if (((Boolean) value).booleanValue() && axis.isVisible())
                model.setArchiveRescale(ArchiveRescale.NONE);
            command.rememberNewConfig();
        }
    });

    // Log scale Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.LinLogScaleType, 80, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isLogScale())
                cell.setText(Messages.LogScale);
            else
                cell.setText(Messages.LinacScale);
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isLogScale();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setLogScale(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Label Font Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisLabelFont, 40, 5);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(axis.getLabelFont().toString());
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new FontCellEditor(axes_table.getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).getLabelFont();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setLabelFont((FontData) value);
            command.rememberNewConfig();
        }
    });

    // Scale Font Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisScaleFont, 40, 5);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(axis.getScaleFont().toString());
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new FontCellEditor(axes_table.getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).getScaleFont();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setScaleFont((FontData) value);
            command.rememberNewConfig();
        }
    });

}

From source file:org.csstudio.trends.databrowser2.propsheet.TraceTableHandler.java

License:Open Source License

/** Create table columns: Auto-sizable, with label provider and editor
 *  @param table_layout// w w  w  . java2s . c o  m
 *  @param operations_manager
 *  @param table_viewer
 */
public void createColumns(final TableColumnLayout table_layout, final UndoableActionManager operations_manager,
        final TableViewer table_viewer) {
    color_registry = new LocalResourceManager(JFaceResources.getResources(), table_viewer.getTable());
    final Shell shell = table_viewer.getTable().getShell();

    // Visible Column ----------
    TableViewerColumn view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceVisibility,
            45, 1);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setImage(item.isVisible() ? Activator.getDefault().getImage(Activator.ICON_CHECKED)
                    : Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceVisibilityTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            final int v1 = item1.isVisible() ? 1 : 0;
            final int v2 = item2.isVisible() ? 1 : 0;
            final int cmp = v1 - v2;
            if (cmp != 0)
                return cmp;
            return item1.getName().compareTo(item2.getName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).isVisible();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final ModelItem item = (ModelItem) element;
            final boolean visible = ((Boolean) value).booleanValue();
            if (!visible && !store.getBoolean(Preferences.ALLOW_HIDE_TRACE)) {
                MessageDialogWithToggle md = MessageDialogWithToggle.openOkCancelConfirm(shell,
                        Messages.HideTraceWarning, Messages.HideTraceWarningDetail, Messages.DoNotShowAgain,
                        false, null, null);
                if (md.getToggleState())
                    store.setValue(Preferences.ALLOW_HIDE_TRACE, true);
                if (md.getReturnCode() != MessageDialog.OK)
                    return;
            }
            new ChangeVisibilityCommand(operations_manager, item, visible);
            editing = false;
        }
    });

    // Trace PV/Formula Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.ItemName, 70, 70);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getName());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.ItemNameTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            return item1.getName().compareTo(item2.getName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getName();
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final String new_name = value.toString().trim();
            final ModelItem item = (ModelItem) element;
            if (new_name.equals(item.getName()))
                return;
            new ChangeNameCommand(shell, operations_manager, item, new_name);
            editing = false;
        }
    });

    // Display Name Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceDisplayName, 70, 70);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getDisplayName());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceDisplayNameTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            return item1.getDisplayName().compareTo(item2.getDisplayName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getDisplayName();
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final String new_name = value.toString().trim();
            final ModelItem item = (ModelItem) element;
            if (new_name.equals(item.getDisplayName()))
                return;
            new ChangeDisplayNameCommand(operations_manager, item, new_name);
            editing = false;
        }
    });

    // Color Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.Color, 40, 10);
    view_col.setLabelProvider(new ColorCellLabelProvider<ModelItem>() {
        @Override
        protected Color getColor(ModelItem item) {
            return color_registry.createColor(item.getColor());
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            return new RGBCellEditor(table_viewer.getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getColor();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            new ChangeColorCommand(operations_manager, (ModelItem) element, (RGB) value);
            editing = false;
        }
    });

    // Selected sample time stamp and value
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.CursorTimestamp, 150, 30);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            final Optional<PlotDataItem<Instant>> sample = item.getSelectedSample();
            if (sample.isPresent())
                cell.setText(TimeHelper.format(sample.get().getPosition()));
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.CursorTimestampTT;
        }
    });
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.CursorValue, 40, 30);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            final Optional<PlotDataItem<Instant>> sample = item.getSelectedSample();
            if (sample.isPresent()) {
                final PlotSample plot_sample = (PlotSample) sample.get();
                String text = DefaultVTypeFormat.get().format(plot_sample.getVType());
                final String units = item.getUnits();
                if (units != null)
                    text += " " + units; //$NON-NLS-1$
                cell.setText(text);
            } else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.CursorValueTT;
        }
    });

    // Scan Period Column (only applies to PVItems) ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.ScanPeriod, 70, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            if (item instanceof PVItem)
                cell.setText(Double.toString(((PVItem) item).getScanPeriod()));
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(final Object element) {
            if (!(element instanceof PVItem))
                return null;
            return Messages.ScanPeriodTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected boolean canEdit(Object element) {
            return element instanceof PVItem;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected Object getValue(final Object element) {
            if (element instanceof PVItem)
                return Double.toString(((PVItem) element).getScanPeriod());
            else
                return Messages.NotApplicable;
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            if (!(element instanceof PVItem))
                return;
            final PVItem pv = (PVItem) element;
            try {
                final double period = Double.parseDouble(value.toString().trim());
                if (period != pv.getScanPeriod())
                    new ChangeSamplePeriodCommand(shell, operations_manager, pv, period);
                editing = false;
            } catch (NumberFormatException ex) {
                // Display will revert to original value
                return;
            }
        }
    });

    // Buffer size Column (only applies to PVItems) ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.LiveSampleBufferSize, 70, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            if (item instanceof PVItem)
                cell.setText(Integer.toString(((PVItem) item).getLiveCapacity()));
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(final Object element) {
            if (!(element instanceof PVItem))
                return null;
            final PVItem pv = (PVItem) element;
            return NLS.bind(Messages.LiveBufferSizeInfoFmt, pv.getLiveCapacity(),
                    new RelativeTime(pv.getLiveCapacity()).toString());
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected boolean canEdit(Object element) {
            return element instanceof PVItem;
        }

        @Override
        protected Object getValue(final Object element) {
            if (element instanceof PVItem)
                return Integer.toString(((PVItem) element).getLiveCapacity());
            else
                return Messages.NotApplicable;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            if (!(element instanceof PVItem))
                return;
            final PVItem pv = (PVItem) element;
            try {
                final int size = Integer.parseInt(value.toString().trim());
                if (size != pv.getLiveCapacity())
                    new ChangeLiveCapacityCommand(shell, operations_manager, pv, size);
                editing = false;
            } catch (NumberFormatException ex) {
                // Display will revert to original value
                return;
            }
        }
    });

    // Axis Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.Axis, 60, 30);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getAxis().getName());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.AxisTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            final int cmp = item1.getAxis().getName().compareTo(item2.getAxis().getName());
            if (cmp != 0)
                return cmp;
            return item1.getDisplayName().compareTo(item2.getDisplayName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) { // Thread-safe copy of model axes as this editor is invoked
        final List<AxisConfig> axes = new ArrayList<>();

        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final List<String> axis_names = new ArrayList<>();
            axes.clear();
            for (AxisConfig axis : model.getAxes()) {
                axes.add(axis);
                axis_names.add(axis.getName());
            }
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    axis_names.toArray(new String[axis_names.size()]), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return model.getAxisIndex(((ModelItem) element).getAxis());
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final int axis_index = ((Integer) value).intValue();
            final AxisConfig axis = axes.get(axis_index);
            final ModelItem item = (ModelItem) element;
            if (axis != item.getAxis())
                new ChangeAxisCommand(operations_manager, item, axis);
            editing = false;
        }
    });

    // Trace Type Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceType, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getTraceType().toString());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceTypeTT;
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    TraceType.getDisplayNames(), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getTraceType().ordinal();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final TraceType trace_type = TraceType.fromOrdinal(((Integer) value).intValue());
            final ModelItem item = (ModelItem) element;
            if (trace_type != item.getTraceType())
                new ChangeTraceTypeCommand(operations_manager, item, trace_type);
            editing = false;
        }
    });

    // Line Width Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceLineWidth, 40, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(Integer.toString(item.getLineWidth()));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceLineWidthTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return Integer.toString(((ModelItem) element).getLineWidth());
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            int width;
            try {
                width = Integer.parseInt(value.toString().trim());
            } catch (NumberFormatException ex) {
                width = 0;
            }
            final ModelItem item = (ModelItem) element;
            if (width != item.getLineWidth())
                new ChangeLineWidthCommand(operations_manager, item, width);
            editing = false;
        }
    });

    // Point Type Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.PointType, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getPointType().toString());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.PointTypeTT;
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    PointType.getDisplayNames(), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getPointType().ordinal();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final PointType point_type = PointType.fromOrdinal(((Integer) value).intValue());
            final ModelItem item = (ModelItem) element;
            if (point_type != item.getPointType())
                new ChangePointTypeCommand(operations_manager, item, point_type);
            editing = false;
        }
    });

    // Point Size Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.PointSize, 40, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(Integer.toString(item.getPointSize()));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.PointSizeTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return Integer.toString(((ModelItem) element).getPointSize());
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            int size;
            try {
                size = Integer.parseInt(value.toString().trim());
            } catch (NumberFormatException ex) {
                size = 0;
            }
            final ModelItem item = (ModelItem) element;
            if (size != item.getPointSize())
                new ChangePointSizeCommand(operations_manager, item, size);
            editing = false;
        }
    });

    // Request Type Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.RequestType, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            if (item instanceof PVItem)
                cell.setText(((PVItem) item).getRequestType().toString());
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.RequestTypeTT;
        }
    });
    // Edit as boolean: Raw == false,  Optimized == true
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected boolean canEdit(final Object element) {
            return element instanceof PVItem;
        }

        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((PVItem) element).getRequestType() == RequestType.OPTIMIZED;
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final PVItem item = (PVItem) element;
            final RequestType request_type = ((Boolean) value).booleanValue() ? RequestType.OPTIMIZED
                    : RequestType.RAW;
            if (request_type == RequestType.RAW && !store.getBoolean(Preferences.ALLOW_REQUEST_RAW)) {
                MessageDialogWithToggle md = MessageDialogWithToggle.openOkCancelConfirm(shell,
                        Messages.RequestTypeWarning, Messages.RequestTypeWarningDetail, Messages.DoNotShowAgain,
                        false, null, null);
                if (md.getToggleState())
                    store.setValue(Preferences.ALLOW_REQUEST_RAW, true);
                if (md.getReturnCode() == MessageDialog.OK)
                    return;
            }
            new ChangeRequestTypeCommand(operations_manager, item, request_type);
            editing = false;
        }
    });

    // Waveform Index Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.WaveformIndexCol, 40, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(Integer.toString(item.getWaveformIndex()));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.WaveformIndexColTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return Integer.toString(((ModelItem) element).getWaveformIndex());
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            int index;
            try {
                index = Integer.parseInt(value.toString().trim());
                if (index < 0)
                    return;
                final ModelItem item = (ModelItem) element;
                if (index != item.getWaveformIndex())
                    new ChangeWaveformIndexCommand(operations_manager, item, index);
            } catch (NumberFormatException ex) {
                return;
            } finally {
                editing = false;
            }

        }
    });

    ColumnViewerToolTipSupport.enableFor(table_viewer);
}

From source file:org.csstudio.trends.databrowser3.propsheet.AxesTableHandler.java

License:Open Source License

/** Create table columns: Auto-sizable, with label provider and editor
 *  @param table_layout/* w  ww.  j  ava  2  s .  c om*/
 */
private void createColumns(TableColumnLayout table_layout) {
    TableViewerColumn col;

    // Visible? Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisVisibility, 45, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isVisible())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isVisible();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setVisible(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Axis Name Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.ValueAxisName, 100, 100);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(axis.getName());
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).getName();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final String name = value.toString().trim();
            if (name.equals(axis.getName()))
                return;
            final ChangeAxisConfigCommand config = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setName(name);
            config.rememberNewConfig();
        }
    });

    // Use Axis Name ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.UseAxisName, 95, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isUsingAxisName())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isUsingAxisName();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.useAxisName(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Use Trace Names ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.UseTraceNames, 110, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isUsingTraceNames())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isUsingTraceNames();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.useTraceNames(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Show Grid? ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.Grid, 50, 5);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isGridVisible())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isGridVisible();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setGridVisible(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Use Right Side? ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisOnRight, 80, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isOnRight())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isOnRight();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setOnRight(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Color Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.Color, 40, 5);
    col.setLabelProvider(new ColorCellLabelProvider<AxisConfig>() {
        @Override
        protected Color getColor(final AxisConfig axis) {
            return color_registry.createColor(axis.getRGBColor());
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new RGBCellEditor(axes_table.getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).getRGBColor();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setColor((RGB) value);
            command.rememberNewConfig();
        }
    });

    // Minimum value Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisMin, 70, 50);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(Double.toString(axis.getMin()));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected Object getValue(final Object element) {
            return Double.toString(((AxisConfig) element).getMin());
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            try {
                final AxisConfig axis = (AxisConfig) element;
                final double limit = Double.parseDouble(value.toString().trim());
                if (limit == axis.getMin())
                    return;
                final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
                axis.setRange(limit, axis.getMax());
                command.rememberNewConfig();
            } catch (NumberFormatException ex) {
                // NOP, leave as is
            }
        }
    });

    // Maximum value Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AxisMax, 70, 50);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            cell.setText(Double.toString(axis.getMax()));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected Object getValue(final Object element) {
            return Double.toString(((AxisConfig) element).getMax());
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            try {
                final AxisConfig axis = (AxisConfig) element;
                final double limit = Double.parseDouble(value.toString().trim());
                if (limit == axis.getMax())
                    return;
                final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
                axis.setRange(axis.getMin(), limit);
                command.rememberNewConfig();
            } catch (NumberFormatException ex) {
                // NOP, leave as is
            }
        }
    });

    // Auto scale Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.AutoScale, 80, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isAutoScale())
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_CHECKED));
            else
                cell.setImage(Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isAutoScale();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setAutoScale(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

    // Log scale Column ----------
    col = TableHelper.createColumn(table_layout, axes_table, Messages.LinLogScaleType, 80, 10);
    col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final AxisConfig axis = (AxisConfig) cell.getElement();
            if (axis.isLogScale())
                cell.setText(Messages.LogScale);
            else
                cell.setText(Messages.LinacScale);
        }
    });
    col.setEditingSupport(new EditSupportBase(axes_table) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((AxisConfig) element).isLogScale();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final AxisConfig axis = (AxisConfig) element;
            final ChangeAxisConfigCommand command = new ChangeAxisConfigCommand(operations_manager, axis);
            axis.setLogScale(((Boolean) value).booleanValue());
            command.rememberNewConfig();
        }
    });

}

From source file:org.csstudio.trends.databrowser3.propsheet.TraceTableHandler.java

License:Open Source License

/** Create table columns: Auto-sizable, with label provider and editor
 *  @param table_layout// www  . j  ava 2s . co m
 *  @param operations_manager
 *  @param table_viewer
 */
public void createColumns(final TableColumnLayout table_layout, final UndoableActionManager operations_manager,
        final TableViewer table_viewer) {
    color_registry = new LocalResourceManager(JFaceResources.getResources(), table_viewer.getTable());
    final Shell shell = table_viewer.getTable().getShell();

    // Visible Column ----------
    TableViewerColumn view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceVisibility,
            45, 1);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setImage(item.isVisible() ? Activator.getDefault().getImage(Activator.ICON_CHECKED)
                    : Activator.getDefault().getImage(Activator.ICON_UNCHECKED));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceVisibilityTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            final int v1 = item1.isVisible() ? 1 : 0;
            final int v2 = item2.isVisible() ? 1 : 0;
            final int cmp = v1 - v2;
            if (cmp != 0)
                return cmp;
            return item1.getName().compareTo(item2.getName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).isVisible();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final ModelItem item = (ModelItem) element;
            final boolean visible = ((Boolean) value).booleanValue();
            if (!visible && prompt_for_not_visible) {
                if (!MessageDialog.openQuestion(shell, Messages.HideTraceWarning,
                        Messages.HideTraceWarningDetail))
                    return;
                prompt_for_not_visible = false;
            }
            new ChangeVisibilityCommand(operations_manager, item, visible);
            editing = false;
        }
    });

    // Trace PV/Formula Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.ItemName, 70, 70);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getName());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.ItemNameTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            return item1.getName().compareTo(item2.getName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getName();
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final String new_name = value.toString().trim();
            final ModelItem item = (ModelItem) element;
            if (new_name.equals(item.getName()))
                return;
            new ChangeNameCommand(shell, operations_manager, item, new_name);
            editing = false;
        }
    });

    // Display Name Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceDisplayName, 70, 70);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getDisplayName());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceDisplayNameTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            return item1.getDisplayName().compareTo(item2.getDisplayName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getDisplayName();
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final String new_name = value.toString().trim();
            final ModelItem item = (ModelItem) element;
            if (new_name.equals(item.getDisplayName()))
                return;
            new ChangeDisplayNameCommand(operations_manager, item, new_name);
            editing = false;
        }
    });

    // Color Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.Color, 40, 10);
    view_col.setLabelProvider(new ColorCellLabelProvider<ModelItem>() {
        @Override
        protected Color getColor(ModelItem item) {
            return color_registry.createColor(SWTMediaPool.getRGB(item.getPaintColor()));
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            return new RGBCellEditor(table_viewer.getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getRGBColor();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            new ChangeColorCommand(operations_manager, (ModelItem) element, SWTMediaPool.getJFX((RGB) value));
            editing = false;
        }
    });

    // Selected sample time stamp and value
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.CursorTimestamp, 150, 30);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            final Optional<PlotDataItem<Instant>> sample = item.getSelectedSample();
            if (sample.isPresent())
                cell.setText(TimeHelper.format(sample.get().getPosition()));
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.CursorTimestampTT;
        }
    });
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.CursorValue, 40, 30);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            final Optional<PlotDataItem<Instant>> sample = item.getSelectedSample();
            if (sample.isPresent()) {
                final PlotSample plot_sample = (PlotSample) sample.get();
                String text = DefaultVTypeFormat.get().format(plot_sample.getVType());
                final String units = item.getUnits();
                if (units != null)
                    text += " " + units; //$NON-NLS-1$
                cell.setText(text);
            } else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.CursorValueTT;
        }
    });

    // Scan Period Column (only applies to PVItems) ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.ScanPeriod, 70, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            if (item instanceof PVItem)
                cell.setText(Double.toString(((PVItem) item).getScanPeriod()));
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(final Object element) {
            if (!(element instanceof PVItem))
                return null;
            return Messages.ScanPeriodTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected boolean canEdit(Object element) {
            return element instanceof PVItem;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected Object getValue(final Object element) {
            if (element instanceof PVItem)
                return Double.toString(((PVItem) element).getScanPeriod());
            else
                return Messages.NotApplicable;
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            if (!(element instanceof PVItem))
                return;
            final PVItem pv = (PVItem) element;
            try {
                final double period = Double.parseDouble(value.toString().trim());
                if (period != pv.getScanPeriod())
                    new ChangeSamplePeriodCommand(shell, operations_manager, pv, period);
                editing = false;
            } catch (NumberFormatException ex) {
                // Display will revert to original value
                return;
            }
        }
    });

    // Buffer size Column (only applies to PVItems) ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.LiveSampleBufferSize, 70, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            if (item instanceof PVItem)
                cell.setText(Integer.toString(((PVItem) item).getLiveCapacity()));
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(final Object element) {
            if (!(element instanceof PVItem))
                return null;
            final PVItem pv = (PVItem) element;
            return NLS.bind(Messages.LiveBufferSizeInfoFmt, pv.getLiveCapacity(),
                    new RelativeTime(pv.getLiveCapacity()).toString());
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected boolean canEdit(Object element) {
            return element instanceof PVItem;
        }

        @Override
        protected Object getValue(final Object element) {
            if (element instanceof PVItem)
                return Integer.toString(((PVItem) element).getLiveCapacity());
            else
                return Messages.NotApplicable;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            if (!(element instanceof PVItem))
                return;
            final PVItem pv = (PVItem) element;
            try {
                final int size = Integer.parseInt(value.toString().trim());
                if (size != pv.getLiveCapacity())
                    new ChangeLiveCapacityCommand(shell, operations_manager, pv, size);
                editing = false;
            } catch (NumberFormatException ex) {
                // Display will revert to original value
                return;
            }
        }
    });

    // Axis Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.Axis, 60, 30);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getAxis().getName());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.AxisTT;
        }
    });
    new TableColumnSortHelper<ModelItem>(table_viewer, view_col) {
        @Override
        public int compare(final ModelItem item1, final ModelItem item2) {
            final int cmp = item1.getAxis().getName().compareTo(item2.getAxis().getName());
            if (cmp != 0)
                return cmp;
            return item1.getDisplayName().compareTo(item2.getDisplayName());
        }
    };
    view_col.setEditingSupport(new EditSupportBase(table_viewer) { // Thread-safe copy of model axes as this editor is invoked
        final List<AxisConfig> axes = new ArrayList<>();

        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final List<String> axis_names = new ArrayList<>();
            axes.clear();
            for (AxisConfig axis : model.getAxes()) {
                axes.add(axis);
                axis_names.add(axis.getName());
            }
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    axis_names.toArray(new String[axis_names.size()]), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return model.getAxisIndex(((ModelItem) element).getAxis());
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final int axis_index = ((Integer) value).intValue();
            final AxisConfig axis = axes.get(axis_index);
            final ModelItem item = (ModelItem) element;
            if (axis != item.getAxis())
                new ChangeAxisCommand(operations_manager, item, axis);
            editing = false;
        }
    });

    // Trace Type Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceType, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getTraceType().toString());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceTypeTT;
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    TraceType.getDisplayNames(), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getTraceType().ordinal();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final TraceType trace_type = TraceType.values()[(((Integer) value).intValue())];
            final ModelItem item = (ModelItem) element;
            if (trace_type != item.getTraceType())
                new ChangeTraceTypeCommand(operations_manager, item, trace_type);
            editing = false;
        }
    });

    // Line Width Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceLineWidth, 40, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(Integer.toString(item.getLineWidth()));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceLineWidthTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return Integer.toString(((ModelItem) element).getLineWidth());
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            int width;
            try {
                width = Integer.parseInt(value.toString().trim());
            } catch (NumberFormatException ex) {
                width = 0;
            }
            final ModelItem item = (ModelItem) element;
            if (width != item.getLineWidth())
                new ChangeLineWidthCommand(operations_manager, item, width);
            editing = false;
        }
    });

    // Line Style Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.TraceLineStyle, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getLineStyle().toString());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.TraceLineStyleTT;
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    LineStyle.getDisplayNames(), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getLineStyle().ordinal();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final LineStyle line_style = LineStyle.values()[((Integer) value).intValue()];
            final ModelItem item = (ModelItem) element;
            if (line_style != item.getLineStyle())
                new ChangeLineStyleCommand(operations_manager, item, line_style);
            editing = false;
        }
    });

    // Point Type Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.PointType, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(item.getPointType().toString());
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.PointTypeTT;
        }
    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            final ComboBoxCellEditor combo = new ComboBoxCellEditor(table_viewer.getTable(),
                    PointType.getDisplayNames(), SWT.READ_ONLY);
            combo.setValue(getValue(element));
            return combo;
        }

        @Override
        protected Object getValue(final Object element) {
            return ((ModelItem) element).getPointType().ordinal();
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final PointType point_type = PointType.values()[((Integer) value).intValue()];
            final ModelItem item = (ModelItem) element;
            if (point_type != item.getPointType())
                new ChangePointTypeCommand(operations_manager, item, point_type);
            editing = false;
        }
    });

    // Point Size Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.PointSize, 40, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(Integer.toString(item.getPointSize()));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.PointSizeTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return Integer.toString(((ModelItem) element).getPointSize());
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            int size;
            try {
                size = Integer.parseInt(value.toString().trim());
            } catch (NumberFormatException ex) {
                size = 0;
            }
            final ModelItem item = (ModelItem) element;
            if (size != item.getPointSize())
                new ChangePointSizeCommand(operations_manager, item, size);
            editing = false;
        }
    });

    // Request Type Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.RequestType, 75, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            if (item instanceof PVItem)
                cell.setText(((PVItem) item).getRequestType().toString());
            else
                cell.setText(Messages.NotApplicable);
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.RequestTypeTT;
        }
    });
    // Edit as boolean: Raw == false,  Optimized == true
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected boolean canEdit(final Object element) {
            return element instanceof PVItem;
        }

        @Override
        protected CellEditor getCellEditor(final Object element) {
            editing = true;
            return new CheckboxCellEditor(((TableViewer) getViewer()).getTable());
        }

        @Override
        protected Object getValue(final Object element) {
            return ((PVItem) element).getRequestType() == RequestType.OPTIMIZED;
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            final PVItem item = (PVItem) element;
            final RequestType request_type = ((Boolean) value).booleanValue() ? RequestType.OPTIMIZED
                    : RequestType.RAW;
            if (request_type == RequestType.RAW && prompt_for_raw_data_request) {
                if (!MessageDialog.openQuestion(shell, Messages.RequestTypeWarning,
                        Messages.RequestTypeWarningDetail))
                    return;
                prompt_for_raw_data_request = false;
            }
            new ChangeRequestTypeCommand(operations_manager, item, request_type);
            editing = false;
        }
    });

    // Waveform Index Column ----------
    view_col = TableHelper.createColumn(table_layout, table_viewer, Messages.WaveformIndexCol, 40, 10);
    view_col.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {
            final ModelItem item = (ModelItem) cell.getElement();
            cell.setText(Integer.toString(item.getWaveformIndex()));
        }

        @Override
        public String getToolTipText(Object element) {
            return Messages.WaveformIndexColTT;
        }

    });
    view_col.setEditingSupport(new EditSupportBase(table_viewer) {
        @Override
        protected Object getValue(final Object element) {
            return Integer.toString(((ModelItem) element).getWaveformIndex());
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            editing = true;
            return super.getCellEditor(element);
        }

        @Override
        protected void setValue(final Object element, final Object value) {
            int index;
            try {
                index = Integer.parseInt(value.toString().trim());
                if (index < 0)
                    return;
                final ModelItem item = (ModelItem) element;
                if (index != item.getWaveformIndex())
                    new ChangeWaveformIndexCommand(operations_manager, item, index);
            } catch (NumberFormatException ex) {
                return;
            } finally {
                editing = false;
            }

        }
    });

    ColumnViewerToolTipSupport.enableFor(table_viewer);
}