List of usage examples for org.eclipse.jface.viewers ViewerCell getItem
public Widget getItem()
From source file:hydrograph.ui.dataviewer.window.DebugDataViewer.java
License:Apache License
private Point getCellId(Point mouseLocation, TableViewer tableViewer) { ViewerCell cell = tableViewer.getCell(mouseLocation); if (cell == null) { return null; }//w w w . j a va2s. c o m int columnIndex = cell.getColumnIndex(); int rowIndex = tableViewer.getTable().indexOf((TableItem) cell.getItem()); return new Point(rowIndex, columnIndex); }
From source file:hydrograph.ui.parametergrid.dialog.MultiParameterFileDialog.java
License:Apache License
private void createViewParameterFileBox(Composite composite) { HydroGroup grpPropertyFileView = new HydroGroup(composite, SWT.NONE); grpPropertyFileView.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); grpPropertyFileView.setHydroGroupText(MultiParameterFileDialogConstants.PARAMETER_FILE_VIEW); grpPropertyFileView.setHydroGroupBorderBackground(SWTResourceManager.getColor(SWT.COLOR_DARK_GRAY)); GridLayout gl_grpPropertyFileView = new GridLayout(1, false); gl_grpPropertyFileView.verticalSpacing = 0; gl_grpPropertyFileView.marginHeight = 0; gl_grpPropertyFileView.horizontalSpacing = 0; gl_grpPropertyFileView.marginWidth = 0; grpPropertyFileView.setLayout(gl_grpPropertyFileView); grpPropertyFileView.getHydroGroupClientArea().setLayout(new GridLayout(1, false)); Composite composite_4 = new Composite(grpPropertyFileView.getHydroGroupClientArea(), SWT.None); composite_4.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); composite_4.setLayout(new GridLayout(1, false)); Composite composite_8 = new Composite(composite_4, SWT.NONE); composite_8.setLayout(new GridLayout(5, false)); composite_8.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false, 1, 1)); Button btnAdd_1 = new Button(composite_8, SWT.NONE); btnAdd_1.setToolTipText(Messages.ADD_KEY_SHORTCUT_TOOLTIP); btnAdd_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnAdd_1.addSelectionListener(new SelectionAdapter() { @Override//w w w.j av a 2 s . c om public void widgetSelected(SelectionEvent e) { addNewRow(parameterTableViewer); applyButton.setEnabled(true); } }); btnAdd_1.setImage(ImagePathConstant.ADD_BUTTON.getImageFromRegistry()); Button btnDelete = new Button(composite_8, SWT.NONE); btnDelete.setToolTipText(Messages.DELETE_KEY_SHORTCUT_TOOLTIP); btnDelete.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnDelete.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { deleteRow(parameterTableViewer); applyButton.setEnabled(true); } }); btnDelete.setImage(ImagePathConstant.DELETE_BUTTON.getImageFromRegistry()); Button btnUp = new Button(composite_8, SWT.NONE); btnUp.setToolTipText(Messages.MOVE_UP_KEY_SHORTCUT_TOOLTIP); btnUp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnUp.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveRowUp(parameterTableViewer); applyButton.setEnabled(true); } }); btnUp.setImage(ImagePathConstant.MOVEUP_BUTTON.getImageFromRegistry()); Button btnDown = new Button(composite_8, SWT.NONE); btnDown.setToolTipText(Messages.MOVE_DOWN_KEY_SHORTCUT_TOOLTIP); btnDown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnDown.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveRowDown(parameterTableViewer); applyButton.setEnabled(true); } }); btnDown.setImage(ImagePathConstant.MOVEDOWN_BUTTON.getImageFromRegistry()); new Label(composite_8, SWT.NONE); Composite composite_1 = new Composite(composite_4, SWT.NONE); composite_1.setLayout(new GridLayout(1, false)); composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); parameterTableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); table_2 = parameterTableViewer.getTable(); table_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); table_2.setLinesVisible(true); table_2.setHeaderVisible(true); parameterTableViewer.setContentProvider(new ArrayContentProvider()); parameterTableViewer.setData(TABLE_TYPE_KEY, "parameterTableViewer"); attachShortcutListner(parameterTableViewer, table_2); TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(parameterTableViewer, new FocusCellOwnerDrawHighlighter(parameterTableViewer)); ColumnViewerEditorActivationStrategy activationSupport = new ColumnViewerEditorActivationStrategy( parameterTableViewer); TableViewerEditor.create(parameterTableViewer, focusCellManager, activationSupport, ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION); final TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(parameterTableViewer, SWT.NONE); ColumnViewerToolTipSupport.enableFor(parameterTableViewer, ToolTip.NO_RECREATE); TableColumn tblclmnParameterName_1 = tableViewerColumn_3.getColumn(); tblclmnParameterName_1.setWidth(190); tblclmnParameterName_1.setText(MultiParameterFileDialogConstants.PARAMETER_NAME); tableViewerColumn_3.setEditingSupport(new ParameterEditingSupport(parameterTableViewer, MultiParameterFileDialogConstants.PARAMETER_NAME, this)); tableViewerColumn_3.setLabelProvider(new ColumnLabelProvider() { @Override public String getToolTipText(Object element) { Parameter p = (Parameter) element; if (StringUtils.isEmpty(p.getParameterName())) { return ErrorMessages.NAME_VALUE_CANNOT_BE_BLANK; } else { return null; } } @Override public String getText(Object element) { Parameter p = (Parameter) element; return p.getParameterName(); } @Override public Color getBackground(Object element) { Parameter p = (Parameter) element; if (StringUtils.isEmpty(p.getParameterName())) { return CustomColorRegistry.INSTANCE.getColorFromRegistry(0xFF, 0xDD, 0xDD); } return super.getBackground(element); } }); TableViewerColumn tableViewerColumn_5 = new TableViewerColumn(parameterTableViewer, SWT.NONE); TableColumn tblclmnParameterValue_1 = tableViewerColumn_5.getColumn(); tblclmnParameterValue_1.setWidth(170); tblclmnParameterValue_1.setText(MultiParameterFileDialogConstants.PARAMETER_VALUE); tableViewerColumn_5.setEditingSupport(new ParameterEditingSupport(parameterTableViewer, MultiParameterFileDialogConstants.PARAMETER_VALUE, this)); tableViewerColumn_5.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Parameter p = (Parameter) element; return p.getParameterValue(); } }); TableViewerColumn tableViewerColumn = new TableViewerColumn(parameterTableViewer, SWT.NONE); TableColumn tblclmnEdit = tableViewerColumn.getColumn(); tblclmnEdit.setWidth(84); tableViewerColumn.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { final TableItem item = (TableItem) cell.getItem(); // DO NOT REMOVE THIS CONDITION. The condition is return to // prevent multiple updates on single item if (item.getData("UPDATED") == null) { item.setData("UPDATED", "TRUE"); } else { return; } final Composite buttonPane = new Composite(parameterTableViewer.getTable(), SWT.NONE); buttonPane.setLayout(new FillLayout()); final Button button = new Button(buttonPane, SWT.NONE); button.setText(MultiParameterFileDialogConstants.EDIT_BUTTON_TEXT); final TableEditor editor = new TableEditor(parameterTableViewer.getTable()); editor.grabHorizontal = true; editor.grabVertical = true; editor.setEditor(buttonPane, item, cell.getColumnIndex()); editor.layout(); //Added Key Event on Edit Button button.addKeyListener(new KeyListener() { @Override public void keyReleased(KeyEvent event) { if (event.keyCode == SWT.CTRL || event.keyCode == SWT.COMMAND) { ctrlKeyPressed = false; } } @Override public void keyPressed(KeyEvent event) { if (event.keyCode == SWT.CTRL || event.keyCode == SWT.COMMAND) { ctrlKeyPressed = true; } if (ctrlKeyPressed && event.keyCode == Constants.KEY_D) { deleteRow(parameterTableViewer); } else if (ctrlKeyPressed && event.keyCode == Constants.KEY_N) { addNewRow(parameterTableViewer); } else if (ctrlKeyPressed && event.keyCode == SWT.ARROW_UP) { moveRowUp(parameterTableViewer); } else if (ctrlKeyPressed && event.keyCode == SWT.ARROW_DOWN) { moveRowDown(parameterTableViewer); } } }); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String initialParameterValue = item.getText(PROPERTY_VALUE_COLUMN_INDEX); ParamterValueDialog paramterValueDialog = new ParamterValueDialog(getShell(), XMLUtil.formatXML(initialParameterValue)); paramterValueDialog.open(); int index = Arrays.asList(parameterTableViewer.getTable().getItems()).indexOf(item); if (StringUtils.isNotEmpty(paramterValueDialog.getParamterValue())) { String newParameterValue = paramterValueDialog.getParamterValue().replaceAll("\r", "") .replaceAll("\n", "").replaceAll("\t", "").replace(" ", ""); parameters.get(index).setParameterValue(newParameterValue); } else { parameters.get(index).setParameterValue(""); } parameterTableViewer.refresh(); applyButton.setEnabled(true); } }); item.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { button.dispose(); buttonPane.dispose(); editor.dispose(); } }); } }); parameterTableViewer.setInput(parameters); getShell().setFocus(); enableTabbing(filePathTableViewer); setTableLayoutToMappingTable(parameterTableViewer); parameterTableViewer.getTable().addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { addNewRow(parameterTableViewer); applyButton.setEnabled(true); } @Override public void mouseDown(MouseEvent e) { } }); }
From source file:hydrograph.ui.propertywindow.widgets.customwidgets.mapping.tables.inputtable.InputFieldColumnLabelProvider.java
License:Apache License
@Override public void update(ViewerCell cell) { TableItem item = (TableItem) cell.getItem(); Pattern pattern = Pattern.compile("^[a-zA-Z0-9 _]*$"); if (!pattern.matcher(((InputField) cell.getElement()).getFieldName()).matches()) { item.setBackground(cell.getControl().getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); item.setForeground(cell.getControl().getDisplay().getSystemColor(SWT.COLOR_RED)); ((InputField) cell.getElement()).getErrorObject() .setErrorMessage("Input field should match regular expression- \"^[a-zA-Z0-9_]*$\" "); ((InputField) cell.getElement()).getErrorObject().setHasError(true); } else {/*www . j a va2 s. c o m*/ if (((InputField) cell.getElement()).getFieldName().trim().equalsIgnoreCase("")) { item.setBackground(cell.getControl().getDisplay().getSystemColor(SWT.COLOR_RED)); ((InputField) cell.getElement()).getErrorObject() .setErrorMessage("Input field should not be empty"); ((InputField) cell.getElement()).getErrorObject().setHasError(true); } else { ((InputField) cell.getElement()).getErrorObject().setHasError(false); } } super.update(cell); }
From source file:net.karlmartens.ui.viewer.TableViewerEditor.java
License:Apache License
@Override protected void updateFocusCell(ViewerCell focusCell, ColumnViewerEditorActivationEvent event) { if (event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC || event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL) { final Table table = _viewer.getControl(); final int row = table.indexOf((TableItem) focusCell.getItem()); final int col = focusCell.getColumnIndex(); _selectionManager.setFocusCell(new Point(col, row)); }/*from ww w .ja v a 2s .c o m*/ }
From source file:net.karlmartens.ui.viewer.TimeSeriesTableValueEditingSupport.java
License:Apache License
private void update(ViewerCell cell, double value) { _viewer.getEditingSupport().setValue(cell.getElement(), computePeriodIndex(cell), value); final TableItem item = (TableItem) cell.getItem(); item.setText(cell.getColumnIndex(), _viewer.getNumberFormat().format(value)); _viewer.getControl().redraw();/* ww w . ja va2s.c o m*/ }
From source file:net.sf.smbt.ui.ableton.views.AbletonLiveView.java
License:LGPL
private TreeViewerColumn createTableViewerColumn(String title, int bound) { final TreeViewerColumn viewerColumn = new TreeViewerColumn(subDetailsViewer, SWT.NONE); final TreeColumn column = viewerColumn.getColumn(); column.setText(title);//from www . j a v a 2s.co m column.setWidth(bound); column.setResizable(true); column.setMoveable(true); viewerColumn.setLabelProvider(new StyledCellLabelProvider() { @Override protected void paint(Event event, Object element) { if (element instanceof LiveScene) { TreeItem treeItem = (TreeItem) event.item; Object obj = treeItem.getData(viewerColumn.getColumn().getText() + "#clip"); if (obj != null) { LiveClip c = (LiveClip) obj; super.paint(event, element); if (((LiveScene) element).getSceneID() == lastSceneID) { int width = 0; int height = event.height - 4; int x = event.x; int y = event.y + 2; float l = c.getLength(); float p = c.getPosition(); if (p > 0 && l > 0) { float ratio = p / l; width = Float.valueOf(ratio * (float) viewerColumn.getColumn().getWidth()) .intValue(); event.gc.setAlpha(100); event.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); event.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); event.gc.fillRoundRectangle(x, y, width, height, 2, 2); event.gc.setAlpha(255); event.gc.drawRoundRectangle(x, y, width, height, 2, 2); } } } else { super.paint(event, element); } } else { super.paint(event, element); } } @Override public void update(ViewerCell cell) { super.update(cell); if (cell.getElement() instanceof LiveScene) { LiveScene scene = (LiveScene) cell.getElement(); int idx = cell.getColumnIndex(); if (liveController.getLiveApp().getTracks().size() > idx) { LiveTrack track = liveController.getLiveApp().getTracks().get(idx); for (LiveClip c : track.getClips()) { if (scene.getSceneID() == c.getClipID()) { cell.setText(c.getClipName()); //cell.getStyleRanges(); /* switch(c.getClipState()) { case PLAYING: case TRIGGERED: cell.setImage(playImage); //break; case STOP: cell.setImage(stopImage); break; default: cell.setImage(stopImage); break; };*/ cell.setImage(lastSceneID == scene.getSceneID() ? playImage : stopImage); if (c.getColor() != null) { cell.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); cell.setBackground(c.getColor()); } cell.getItem().setData(track.getTrackName() + "#clip", c); break; } else { cell.setForeground(GUIToolkit.FG); cell.setBackground(GUIToolkit.BG); } } } } } }); return viewerColumn; }
From source file:net.sf.smbt.ui.audio.view.FmodexLiveView.java
License:LGPL
private TreeViewerColumn createTableViewerColumn(String title, int bound) { final TreeViewerColumn viewerColumn = new TreeViewerColumn(subDetailsViewer, SWT.NONE); final TreeColumn column = viewerColumn.getColumn(); column.setText(title);/*from w w w .j a v a 2 s. c o m*/ column.setWidth(bound); column.setResizable(true); column.setMoveable(true); viewerColumn.setLabelProvider(new StyledCellLabelProvider() { @Override protected void paint(Event event, Object element) { TreeItem treeItem = (TreeItem) event.item; Object obj = treeItem.getData(viewerColumn.getColumn().getText() + "#clip"); Object track = treeItem.getData(viewerColumn.getColumn().getText() + "#track"); if (obj != null && track != null) { AudioClip c = (AudioClip) obj; int x = event.getBounds().x; int y = event.getBounds().y; String txt = ""; AudioChannel channel = (AudioChannel) ((AudioTrack) track).getChannel(); if (c.getSound() != null && channel != null) { TimeTag tag = AudioUtils.INSTANCE.getTimePosition(c.getSound(), channel); long ms = tag.getTime(); long lenms = tag.getDuration(); txt = String.format(" (%02d:%02d:%02d/%02d:%02d:%02d)", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100 //tag.getStatus().equals(CLIP_STATUS.PAUSE) ? "Paused " : tag.getStatus().equals(CLIP_STATUS.PLAY) ? "Playing" : "Stopped" ); event.gc.drawText(c.getLabel() + " " + txt, x, y); int width = 0; int height = event.height - 4; int x0 = event.x; int y0 = event.y + 2; float l = tag.getDuration(); float p = tag.getTime(); Color oldBG = event.gc.getBackground(); Color oldFG = event.gc.getForeground(); event.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); if (p > 0 && l > 0) { float ratio = p / l; width = Float.valueOf(ratio * (float) viewerColumn.getColumn().getWidth()).intValue(); event.gc.setAlpha(100); event.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); event.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); event.gc.fillRoundRectangle(x0, y0, width, height, 2, 2); event.gc.setAlpha(255); event.gc.drawRoundRectangle(x0, y0, width, height, 2, 2); } event.gc.setForeground(oldFG); event.gc.setBackground(oldBG); } } else { super.paint(event, element); } } @Override public void update(ViewerCell cell) { super.update(cell); if (cell.getElement() instanceof AudioScene) { AudioScene scene = (AudioScene) cell.getElement(); int idx = cell.getColumnIndex(); if (project.getTracks().size() > idx) { AudioClip clip = scene.getClips().get(idx); AudioTrack track = project.getTracks().get(idx); track.setLabel(viewerColumn.getColumn().getText()); AudioFile file = clip.getFile(); if (file != null) { } cell.getItem().setData(track.getLabel() + "#clip", clip); cell.getItem().setData(track.getLabel() + "#track", track); cell.setText(clip.getLabel()); } } else { cell.setText("clip !!!"); } } }); return viewerColumn; }
From source file:net.zehrer.no2.ui.provider.NoColumnLabelProvider.java
License:Open Source License
@Override public void update(ViewerCell cell) { cell.setText(table.indexOf((TableItem) cell.getItem()) + 1 + ""); cell.setBackground(this.color); }
From source file:org.bonitasoft.studio.contract.ui.property.AddRowOnEnterCellNavigationStrategy.java
License:Open Source License
protected void updateSelection(final ViewerCell viewerCell) { if (viewerCell != null) { viewer.setSelection(new StructuredSelection(viewerCell.getItem().getData())); }/*from w w w . j a v a2 s . c o m*/ }
From source file:org.csstudio.display.pvtable.ui.PVTable.java
License:Open Source License
/** * Create GUI components/*www. jav a2 s .co m*/ * * @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()); }