Example usage for org.eclipse.jface.viewers TableViewerFocusCellManager getFocusCell

List of usage examples for org.eclipse.jface.viewers TableViewerFocusCellManager getFocusCell

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers TableViewerFocusCellManager getFocusCell.

Prototype

@Override
    public ViewerCell getFocusCell() 

Source Link

Usage

From source file:org.eclipse.oomph.setup.ui.IndexManagerDialog.java

License:Open Source License

@Override
protected void createUI(Composite parent) {
    indexViewer = new TableViewer(parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
    indexViewer.getTable().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    indexViewer.setContentProvider(new IStructuredContentProvider() {
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            // Do nothing.
        }//from  w w w .j ava 2 s.com

        public void dispose() {
            // Do nothing.
        }

        public Object[] getElements(Object inputElement) {
            return indexChoices.entrySet().toArray();
        }
    });

    final ColumnViewerInformationControlToolTipSupport columnViewerInformationControlToolTipSupport = new ColumnViewerInformationControlToolTipSupport(
            indexViewer, new LocationListener() {
                public void changing(LocationEvent event) {
                }

                public void changed(LocationEvent event) {
                }
            });

    class MyLabelProvider extends CellLabelProvider implements ILabelProvider {
        private final Color gray = indexViewer.getTable().getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY);

        private final Font normalFont = indexViewer.getTable().getFont();

        private final Font italicFont = ExtendedFontRegistry.INSTANCE.getFont(normalFont,
                IItemFontProvider.ITALIC_FONT);

        private final Font boldFont = ExtendedFontRegistry.INSTANCE.getFont(normalFont,
                IItemFontProvider.BOLD_FONT);

        public String getText(Object element) {
            return asMapEntry(element).getValue();
        }

        public Image getImage(Object element) {
            return SetupUIPlugin.INSTANCE.getSWTImage("full/obj16/Index");
        }

        @Override
        public String getToolTipText(Object element) {
            URI indexLocation = asMapEntry(element).getKey();
            Map<URI, String> indexNames = indexManager.getIndexNames(true);

            StringBuilder result = new StringBuilder();

            String nameLine = "<divs style='white-space:nowrap;'><b>name</b>:&nbsp;"
                    + indexNames.get(indexLocation) + "</div>\n";
            result.append(nameLine);

            String locationLine = "<div style='white-space:nowrap;'><b>location</b>:&nbsp;" + indexLocation
                    + "</div>\n";
            result.append(locationLine);

            String availabilityLine = "<div style='white-space:nowrap;'><b>availability</b>:&nbsp;"
                    + (indexAvailability == null ? "Unknown"
                            : indexAvailability.get(indexLocation) ? "Available" : "Unavailable")
                    + "</div><br/><br/>\n";
            result.append(availabilityLine);

            try {
                AbstractHoverInformationControlManager hoverInformationControlManager = ReflectUtil.getValue(
                        "hoverInformationControlManager", columnViewerInformationControlToolTipSupport);
                int max = Math.max(nameLine.length(), locationLine.length());
                hoverInformationControlManager.setSizeConstraints(max, 6, false, false);
            } catch (Throwable throwable) {
                // Ignore.
            }

            return result.toString();
        }

        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();
            cell.setImage(getImage(element));
            URI indexLocation = asMapEntry(element).getKey();
            if (!originalIndexChoices.containsKey(indexLocation)) {
                cell.setForeground(gray);
            }

            if (indexLocation.equals(originalIndexLocation)) {
                cell.setFont(boldFont);
            } else if (indexAvailability != null && !indexAvailability.get(indexLocation)) {
                cell.setFont(italicFont);
            } else {
                cell.setFont(normalFont);
            }

            cell.setText(getText(element) + "  ");
        }
    }

    final ILabelProvider labelProvider = new MyLabelProvider();
    indexViewer.setLabelProvider(labelProvider);

    final TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(indexViewer,
            new FocusCellOwnerDrawHighlighter(indexViewer));

    indexViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            focusCellManager.getFocusCell();
            updateEnablement();
        }
    });

    indexViewer.setInput(indexManager);

    TextCellEditor textCellEditor = new TextCellEditor(indexViewer.getTable(), SWT.BORDER);
    indexViewer.setCellEditors(new CellEditor[] { textCellEditor });
    indexViewer.setColumnProperties(new String[] { "label" });

    ColumnViewerEditorActivationStrategy editorActivationStrategy = new ColumnViewerEditorActivationStrategy(
            indexViewer) {
        @Override
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
                    || event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.F2;
        }
    };

    TableViewerEditor.create(indexViewer, focusCellManager, editorActivationStrategy,
            ColumnViewerEditor.KEYBOARD_ACTIVATION);
    indexViewer.setCellModifier(new ICellModifier() {
        public void modify(Object element, String property, Object value) {
            asMapEntry(((TableItem) element).getData()).setValue((String) value);
            indexViewer.refresh(true);
        }

        public Object getValue(Object element, String property) {
            return labelProvider.getText(element).trim();
        }

        public boolean canModify(Object element, String property) {
            return true;
        }
    });

    if (!indexChoices.isEmpty()) {
        indexViewer.setSelection(new StructuredSelection(indexChoices.entrySet().iterator().next()));
    }
}