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

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

Introduction

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

Prototype

public void setStyleRanges(StyleRange[] styleRanges) 

Source Link

Document

Set the style ranges to be applied on the text label Note: Requires StyledCellLabelProvider with owner draw enabled.

Usage

From source file:org.eclipse.sapphire.ui.forms.swt.MasterDetailsEditorPage.java

License:Open Source License

private FilteredTree createContentOutline(final Composite parent, final MasterDetailsContentOutline outline,
        final boolean addBorders) {
    final int treeStyle = (addBorders ? SWT.BORDER : SWT.NONE) | SWT.MULTI;

    final ContentOutlineFilteredTree filteredTree = new ContentOutlineFilteredTree(parent, treeStyle, outline);
    final TreeViewer treeViewer = filteredTree.getViewer();
    final Tree tree = treeViewer.getTree();

    final ITreeContentProvider contentProvider = new ITreeContentProvider() {
        private final Listener listener = new Listener() {
            @Override/*from   ww w .  j a v a2s .c om*/
            public void handle(final org.eclipse.sapphire.Event event) {
                if (event instanceof PartEvent) {
                    final SapphirePart part = ((PartEvent) event).part();

                    if (part instanceof MasterDetailsContentNodePart) {
                        final MasterDetailsContentNodePart node = (MasterDetailsContentNodePart) part;

                        if (event instanceof PartVisibilityEvent) {
                            final MasterDetailsContentNodePart parent = node.getParentNode();

                            if (parent == outline.getRoot()) {
                                treeViewer.refresh();
                            } else {
                                treeViewer.refresh(parent);
                            }
                        } else {
                            if (node.visible()) {
                                if (event instanceof LabelChangedEvent || event instanceof ImageChangedEvent
                                        || event instanceof DecorationEvent) {
                                    Display.getCurrent().asyncExec(new TreeViewerUpdateJob(treeViewer, node));
                                } else if (event instanceof NodeListEvent) {
                                    treeViewer.refresh(node);
                                }
                            }
                        }
                    }
                }
            }
        };

        private void attach(final List<MasterDetailsContentNodePart> nodes) {
            for (MasterDetailsContentNodePart node : nodes) {
                node.attach(this.listener);
            }
        }

        private void detach(final List<MasterDetailsContentNodePart> nodes) {
            for (MasterDetailsContentNodePart node : nodes) {
                node.detach(this.listener);
                detach(node.nodes());
            }
        }

        public Object[] getElements(final Object inputElement) {
            final MasterDetailsContentNodeList nodes = outline.getRoot().nodes();
            attach(nodes);
            return nodes.visible().toArray();
        }

        public Object[] getChildren(final Object parentElement) {
            final MasterDetailsContentNodeList nodes = ((MasterDetailsContentNodePart) parentElement).nodes();
            attach(nodes);
            return nodes.visible().toArray();
        }

        public Object getParent(final Object element) {
            return ((MasterDetailsContentNodePart) element).getParentNode();
        }

        public boolean hasChildren(final Object parentElement) {
            final MasterDetailsContentNodeList nodes = ((MasterDetailsContentNodePart) parentElement).nodes();
            attach(nodes);
            return !nodes.visible().isEmpty();
        }

        public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
        }

        public void dispose() {
            detach(outline.getRoot().nodes());
        }
    };

    final StyledCellLabelProvider labelProvider = new StyledCellLabelProvider() {
        private final Map<ImageDescriptor, Image> images = new HashMap<ImageDescriptor, Image>();
        private final Map<org.eclipse.sapphire.Color, Color> colors = new HashMap<org.eclipse.sapphire.Color, Color>();

        public void update(final ViewerCell cell) {
            final MasterDetailsContentNodePart node = (MasterDetailsContentNodePart) cell.getElement();

            final StyledString styledString = new StyledString(node.getLabel());

            for (final TextDecoration decoration : node.decorations()) {
                String text = decoration.text();

                if (text != null) {
                    text = text.trim();

                    if (text.length() > 0) {
                        final Color color = color(decoration.color());

                        styledString.append(" " + text, new Styler() {
                            @Override
                            public void applyStyles(final TextStyle style) {
                                style.foreground = color;
                            }
                        });
                    }
                }
            }

            cell.setText(styledString.toString());
            cell.setStyleRanges(styledString.getStyleRanges());
            cell.setImage(image(node.getImage()));

            super.update(cell);
        }

        private Color color(final org.eclipse.sapphire.Color c) {
            Color color = this.colors.get(c);

            if (color == null) {
                color = new Color(tree.getDisplay(), c.red(), c.green(), c.blue());
                this.colors.put(c, color);
            }

            return color;
        }

        private Image image(final ImageDescriptor imageDescriptor) {
            Image image = this.images.get(imageDescriptor);

            if (image == null) {
                image = imageDescriptor.createImage();
                this.images.put(imageDescriptor, image);
            }

            return image;
        }

        @Override
        public void dispose() {
            for (final Image image : this.images.values()) {
                image.dispose();
            }
        }
    };

    new SapphireToolTip(tree) {
        protected Object getToolTipArea(final Event event) {
            return treeViewer.getCell(new Point(event.x, event.y));
        }

        protected boolean shouldCreateToolTip(Event event) {
            if (!super.shouldCreateToolTip(event)) {
                return false;
            }

            setShift(new Point(0, 20));
            tree.setToolTipText("");

            boolean res = false;

            final MasterDetailsContentNodePart node = getNode(event);

            if (node != null) {
                res = !node.validation().ok();
            }

            return res;
        }

        private MasterDetailsContentNodePart getNode(final Event event) {
            final TreeItem item = tree.getItem(new Point(event.x, event.y));

            if (item == null) {
                return null;
            } else {
                return (MasterDetailsContentNodePart) item.getData();
            }
        }

        protected void afterHideToolTip(Event event) {
            super.afterHideToolTip(event);
            // Clear the restored value else this could be a source of a leak
            if (event != null && event.widget != treeViewer.getControl()) {
                treeViewer.getControl().setFocus();
            }
        }

        @Override
        protected void createContent(final Event event, final Composite parent) {
            final MasterDetailsContentNodePart node = getNode(event);

            parent.setLayout(glayout(1));

            SapphireFormText text = new SapphireFormText(parent, SWT.NO_FOCUS);
            text.setLayoutData(gdfill());

            final org.eclipse.sapphire.modeling.Status validation = node.validation();
            final List<org.eclipse.sapphire.modeling.Status> items = gather(validation);

            final StringBuffer buffer = new StringBuffer();
            buffer.append("<form>");

            final int count = items.size();
            int i = 0;

            for (org.eclipse.sapphire.modeling.Status item : items) {
                final String imageKey = (item.severity() == org.eclipse.sapphire.modeling.Status.Severity.ERROR
                        ? "error"
                        : "warning");
                buffer.append("<li style=\"image\" value=\"" + imageKey + "\">" + escapeForXml(item.message())
                        + "</li>");

                i++;

                if (count > 10 && i == 9) {
                    break;
                }
            }

            if (count > 10) {
                final String msg = problemsOverflowMessage.format(numberToString(count - 9));
                final String imageKey = (validation
                        .severity() == org.eclipse.sapphire.modeling.Status.Severity.ERROR ? "error"
                                : "warning");
                buffer.append("<br/><li style=\"image\" value=\"" + imageKey + "\">" + msg + "</li>");
            }

            buffer.append("</form>");

            text.setText(buffer.toString(), true, false);
            text.setImage("error",
                    ImageData.readFromClassLoader(SwtResourceCache.class, "Error.png").required());
            text.setImage("warning",
                    ImageData.readFromClassLoader(SwtResourceCache.class, "Warning.png").required());
        }

        private String numberToString(final int number) {
            switch (number) {
            case 2:
                return two.text();
            case 3:
                return three.text();
            case 4:
                return four.text();
            case 5:
                return five.text();
            case 6:
                return six.text();
            case 7:
                return seven.text();
            case 8:
                return eight.text();
            case 9:
                return nine.text();
            default:
                return String.valueOf(number);
            }
        }

        private List<org.eclipse.sapphire.modeling.Status> gather(
                final org.eclipse.sapphire.modeling.Status status) {
            final List<org.eclipse.sapphire.modeling.Status> items = new ArrayList<org.eclipse.sapphire.modeling.Status>();
            gather(status, items);
            return items;
        }

        private void gather(final org.eclipse.sapphire.modeling.Status status,
                final List<org.eclipse.sapphire.modeling.Status> items) {
            if (status.children().isEmpty()) {
                items.add(status);
            } else {
                for (org.eclipse.sapphire.modeling.Status child : status.children()) {
                    gather(child, items);
                }
            }
        }
    };

    treeViewer.setContentProvider(contentProvider);
    treeViewer.setLabelProvider(labelProvider);
    treeViewer.setInput(new Object());

    final MutableReference<Boolean> ignoreSelectionChange = new MutableReference<Boolean>(false);
    final MutableReference<Boolean> ignoreExpandedStateChange = new MutableReference<Boolean>(false);

    final Listener contentTreeListener = new Listener() {
        @Override
        public void handle(final org.eclipse.sapphire.Event event) {
            if (event instanceof MasterDetailsContentOutline.SelectionChangedEvent) {
                if (ignoreSelectionChange.get() == true) {
                    return;
                }

                final MasterDetailsContentOutline.SelectionChangedEvent evt = (MasterDetailsContentOutline.SelectionChangedEvent) event;
                final List<MasterDetailsContentNodePart> selection = evt.selection();

                final IStructuredSelection sel;

                if (selection.isEmpty()) {
                    sel = StructuredSelection.EMPTY;
                } else {
                    sel = new StructuredSelection(selection);
                }

                if (!treeViewer.getSelection().equals(sel)) {
                    for (MasterDetailsContentNodePart node : selection) {
                        treeViewer.reveal(node);
                    }

                    treeViewer.setSelection(sel);
                }
            } else if (event instanceof MasterDetailsContentOutline.NodeExpandedStateChangedEvent) {
                if (ignoreExpandedStateChange.get() == true) {
                    return;
                }

                final MasterDetailsContentOutline.NodeExpandedStateChangedEvent evt = (MasterDetailsContentOutline.NodeExpandedStateChangedEvent) event;
                final MasterDetailsContentNodePart node = evt.node();

                final boolean expandedState = node.isExpanded();

                if (treeViewer.getExpandedState(node) != expandedState) {
                    treeViewer.setExpandedState(node, expandedState);
                }
            } else if (event instanceof MasterDetailsContentOutline.FilterChangedEvent) {
                final MasterDetailsContentOutline.FilterChangedEvent evt = (MasterDetailsContentOutline.FilterChangedEvent) event;
                filteredTree.changeFilterText(evt.filter());
            }
        }
    };

    outline.attach(contentTreeListener);

    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(final SelectionChangedEvent event) {
            ignoreSelectionChange.set(true);

            try {
                final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                final List<MasterDetailsContentNodePart> nodes = new ArrayList<MasterDetailsContentNodePart>();

                for (Iterator<?> itr = selection.iterator(); itr.hasNext();) {
                    nodes.add((MasterDetailsContentNodePart) itr.next());
                }

                outline.setSelectedNodes(nodes);
            } finally {
                ignoreSelectionChange.set(false);
            }
        }
    });

    treeViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent event) {
            IStructuredSelection thisSelection = (IStructuredSelection) event.getSelection();
            if (thisSelection.size() == 1) {
                MasterDetailsContentNodePart selectedNode = (MasterDetailsContentNodePart) thisSelection
                        .getFirstElement();
                selectedNode.setExpanded(!selectedNode.isExpanded());
            }
        }
    });

    treeViewer.addTreeListener(new ITreeViewerListener() {
        public void treeExpanded(final TreeExpansionEvent event) {
            ignoreExpandedStateChange.set(true);

            try {
                final MasterDetailsContentNodePart node = (MasterDetailsContentNodePart) event.getElement();
                node.setExpanded(true);
            } finally {
                ignoreExpandedStateChange.set(false);
            }
        }

        public void treeCollapsed(final TreeExpansionEvent event) {
            ignoreExpandedStateChange.set(true);

            try {
                final MasterDetailsContentNodePart node = (MasterDetailsContentNodePart) event.getElement();
                node.setExpanded(false);
            } finally {
                ignoreExpandedStateChange.set(false);
            }
        }
    });

    final ContentOutlineActionSupport actionSupport = new ContentOutlineActionSupport(outline, tree);

    treeViewer.setExpandedElements(outline.getExpandedNodes().toArray());
    contentTreeListener
            .handle(new MasterDetailsContentOutline.SelectionChangedEvent(outline.getSelectedNodes()));

    filteredTree.changeFilterText(outline.getFilterText());

    final ElementsTransfer transfer = new ElementsTransfer(
            getModelElement().type().getModelElementClass().getClassLoader());
    final Transfer[] transfers = new Transfer[] { transfer };

    final DragSource dragSource = new DragSource(tree, DND.DROP_COPY | DND.DROP_MOVE);
    dragSource.setTransfer(transfers);

    final List<Element> dragElements = new ArrayList<Element>();

    dragSource.addDragListener(new DragSourceListener() {
        public void dragStart(final DragSourceEvent event) {
            final TreeItem[] selection = tree.getSelection();
            final String filter = outline().getFilterText();

            if ((filter == null || filter.length() == 0) && draggable(selection)) {
                event.doit = true;

                for (TreeItem item : selection) {
                    final MasterDetailsContentNodePart node = (MasterDetailsContentNodePart) item.getData();
                    dragElements.add(node.getModelElement());
                }
            } else {
                event.doit = false;
            }
        }

        protected boolean draggable(final TreeItem[] selection) {
            if (selection.length > 0) {
                for (TreeItem item : selection) {
                    final MasterDetailsContentNodePart node = (MasterDetailsContentNodePart) item.getData();

                    if (!draggable(node)) {
                        return false;
                    }
                }

                return true;
            }

            return false;
        }

        protected boolean draggable(final MasterDetailsContentNodePart node) {
            final Element element = node.getModelElement();

            if (element.parent() instanceof ElementList && node.controls(element)) {
                return true;
            }

            return false;
        }

        public void dragSetData(final DragSourceEvent event) {
            event.data = dragElements;
        }

        public void dragFinished(final DragSourceEvent event) {
            if (event.detail == DND.DROP_MOVE) {
                // When drop target is the same editor as drag source, the drop handler takes care of removing
                // elements from their original location. The following block of code accounts for the case when 
                // dropping into another editor.

                boolean droppedIntoAnotherEditor = false;

                for (Element dragElement : dragElements) {
                    if (!dragElement.disposed()) {
                        droppedIntoAnotherEditor = true;
                        break;
                    }
                }

                if (droppedIntoAnotherEditor) {
                    final TreeItem[] selection = tree.getSelection();
                    final List<MasterDetailsContentNodePart> dragNodes = new ArrayList<MasterDetailsContentNodePart>();

                    for (TreeItem item : selection) {
                        dragNodes.add((MasterDetailsContentNodePart) item.getData());
                    }

                    final MasterDetailsContentNodePart parentNode = dragNodes.get(0).getParentNode();

                    MasterDetailsContentNodePart selectionPostDelete = findSelectionPostDelete(
                            parentNode.nodes().visible(), dragNodes);

                    if (selectionPostDelete == null) {
                        selectionPostDelete = parentNode;
                    }

                    final Disposable suspension = outline.listeners().queue()
                            .suspend(SelectionChangedEventFilter.INSTANCE);

                    try {
                        for (Element dragElement : dragElements) {
                            final ElementList<?> dragElementContainer = (ElementList<?>) dragElement.parent();
                            dragElementContainer.remove(dragElement);
                        }
                    } catch (Exception e) {
                        // Log this exception unless the cause is EditFailedException. These exception
                        // are the result of the user declining a particular action that is necessary
                        // before the edit can happen (such as making a file writable).

                        final EditFailedException editFailedException = EditFailedException.findAsCause(e);

                        if (editFailedException == null) {
                            Sapphire.service(LoggingService.class).log(e);
                        }
                    } finally {
                        suspension.dispose();
                        outline.listeners().queue().process();
                    }

                    parentNode.getContentTree().setSelectedNode(selectionPostDelete);
                }
            }

            dragElements.clear();
        }
    });

    final DropTarget target = new DropTarget(tree, DND.DROP_COPY | DND.DROP_MOVE);
    target.setTransfer(transfers);

    target.addDropListener(new DropTargetAdapter() {
        public void dragOver(final DropTargetEvent event) {
            if (event.item != null) {
                final TreeItem dragOverItem = (TreeItem) event.item;
                final MasterDetailsContentNodePart dragOverNode = (MasterDetailsContentNodePart) dragOverItem
                        .getData();
                final MasterDetailsContentNodePart parentNode = dragOverNode.getParentNode();
                final List<MasterDetailsContentNodePart> siblingNodes = parentNode.nodes().visible();

                final Point pt = dragOverItem.getDisplay().map(null, tree, event.x, event.y);
                final Rectangle bounds = dragOverItem.getBounds();

                boolean dragOverNodeAcceptedDrop = false;

                if (pt.y > bounds.y + bounds.height / 3
                        && pt.y < bounds.y + bounds.height - bounds.height / 3) {
                    for (final PropertyDef dragOverTargetChildProperty : dragOverNode
                            .getChildNodeFactoryProperties()) {
                        if (dragOverTargetChildProperty instanceof ListProperty
                                && !dragOverTargetChildProperty.isReadOnly()) {
                            dragOverNodeAcceptedDrop = true;
                            event.feedback = DND.FEEDBACK_SELECT;

                            break;
                        }
                    }
                }

                if (!dragOverNodeAcceptedDrop) {
                    MasterDetailsContentNodePart precedingNode = null;
                    MasterDetailsContentNodePart trailingNode = null;

                    if (pt.y < bounds.y + bounds.height / 2) {
                        precedingNode = findPrecedingItem(siblingNodes, dragOverNode);
                        trailingNode = dragOverNode;

                        event.feedback = DND.FEEDBACK_INSERT_BEFORE;
                    } else {
                        precedingNode = dragOverNode;
                        trailingNode = findTrailingItem(siblingNodes, dragOverNode);

                        event.feedback = DND.FEEDBACK_INSERT_AFTER;
                    }

                    boolean ok = false;

                    if (precedingNode != null) {
                        final Element precedingElement = precedingNode.getModelElement();

                        if (precedingElement.parent() instanceof ElementList
                                && precedingNode.controls(precedingElement)) {
                            ok = true;
                        }
                    }

                    if (!ok && trailingNode != null) {
                        final Element trailingElement = trailingNode.getModelElement();

                        if (trailingElement.parent() instanceof ElementList
                                && trailingNode.controls(trailingElement)) {
                            ok = true;
                        }
                    }

                    if (!ok) {
                        event.feedback = DND.FEEDBACK_NONE;
                    }
                }
            }

            event.feedback |= DND.FEEDBACK_SCROLL;
        }

        @SuppressWarnings("unchecked")

        public void drop(final DropTargetEvent event) {
            if (event.data == null || event.item == null) {
                event.detail = DND.DROP_NONE;
                return;
            }

            // Determine where something was dropped.

            final List<ElementData> droppedElements = (List<ElementData>) event.data;
            final TreeItem dropTargetItem = (TreeItem) event.item;
            final MasterDetailsContentNodePart dropTargetNode = (MasterDetailsContentNodePart) dropTargetItem
                    .getData();
            final MasterDetailsContentNodePart parentNode = dropTargetNode.getParentNode();
            final List<MasterDetailsContentNodePart> siblingNodes = parentNode.nodes().visible();

            final Point pt = tree.getDisplay().map(null, tree, event.x, event.y);
            final Rectangle bounds = dropTargetItem.getBounds();

            MasterDetailsContentNodePart precedingNode = null;
            MasterDetailsContentNodePart trailingNode = null;

            boolean dropTargetNodeAcceptedDrop = false;

            if (pt.y > bounds.y + bounds.height / 3 && pt.y < bounds.y + bounds.height - bounds.height / 3) {
                for (final PropertyDef dropTargetChildProperty : dropTargetNode
                        .getChildNodeFactoryProperties()) {
                    if (dropTargetChildProperty instanceof ListProperty
                            && !dropTargetChildProperty.isReadOnly()) {
                        dropTargetNodeAcceptedDrop = true;
                        break;
                    }
                }
            }

            if (!dropTargetNodeAcceptedDrop) {
                if (pt.y < bounds.y + bounds.height / 2) {
                    precedingNode = findPrecedingItem(siblingNodes, dropTargetNode);
                    trailingNode = dropTargetNode;
                } else {
                    precedingNode = dropTargetNode;
                    trailingNode = findTrailingItem(siblingNodes, dropTargetNode);
                }
            }

            // Determine whether the drop was valid from model standpoint and figure out
            // where in the model the dropped elements are to be inserted.

            ElementList<?> list = null;
            int position = -1;

            if (precedingNode != null) {
                final Element precedingElement = precedingNode.getModelElement();

                if (precedingElement.parent() instanceof ElementList
                        && !precedingElement.parent().definition().isReadOnly()
                        && precedingNode.controls(precedingElement)) {
                    list = (ElementList<?>) precedingElement.parent();

                    final Set<ElementType> possibleListElementTypes = list.definition()
                            .service(PossibleTypesService.class).types();

                    for (final ElementData droppedElement : droppedElements) {
                        if (!possibleListElementTypes.contains(droppedElement.type())) {
                            list = null;
                            break;
                        }
                    }

                    if (list != null) {
                        position = list.indexOf(precedingElement) + 1;
                    }
                }
            }

            if (list == null && trailingNode != null) {
                final Element trailingElement = trailingNode.getModelElement();

                if (trailingElement.parent() instanceof ElementList
                        && !trailingElement.parent().definition().isReadOnly()
                        && trailingNode.controls(trailingElement)) {
                    list = (ElementList<?>) trailingElement.parent();

                    final Set<ElementType> possibleListElementTypes = list.definition()
                            .service(PossibleTypesService.class).types();

                    for (final ElementData droppedElement : droppedElements) {
                        if (!possibleListElementTypes.contains(droppedElement.type())) {
                            list = null;
                            break;
                        }
                    }

                    if (list != null) {
                        position = list.indexOf(trailingElement);
                    }
                }
            }

            if (list == null) {
                for (PropertyDef dropTargetChildProperty : dropTargetNode.getChildNodeFactoryProperties()) {
                    if (dropTargetChildProperty instanceof ListProperty
                            && !dropTargetChildProperty.isReadOnly()) {
                        final ListProperty dropTargetChildListProperty = (ListProperty) dropTargetChildProperty;

                        boolean compatible = true;

                        final Set<ElementType> possibleListElementTypes = dropTargetChildListProperty
                                .service(PossibleTypesService.class).types();

                        for (final ElementData droppedElement : droppedElements) {
                            if (!possibleListElementTypes.contains(droppedElement.type())) {
                                compatible = false;
                                break;
                            }
                        }

                        if (compatible) {
                            list = dropTargetNode.getLocalModelElement().property(dropTargetChildListProperty);
                            position = list.size();
                        }
                    }
                }
            }

            if (list == null) {
                event.detail = DND.DROP_NONE;
                return;
            }

            // Prevent a drop within a drag element.

            for (Property p = list; p != null; p = p.element().parent()) {
                for (final Element dragElement : dragElements) {
                    if (p.element() == dragElement) {
                        event.detail = DND.DROP_NONE;
                        return;
                    }
                }
            }

            // Perform the removal and insertion into the new location.

            final Disposable suspension = outline.listeners().queue()
                    .suspend(SelectionChangedEventFilter.INSTANCE);

            try {
                if (event.detail == DND.DROP_MOVE) {
                    for (Element dragElement : dragElements) {
                        final ElementList<?> dragElementContainer = (ElementList<?>) dragElement.parent();

                        if (dragElementContainer == list
                                && dragElementContainer.indexOf(dragElement) < position) {
                            position--;
                        }

                        dragElementContainer.remove(dragElement);
                    }
                }

                final List<MasterDetailsContentNodePart> newSelection = new ArrayList<MasterDetailsContentNodePart>();

                for (final ElementData droppedElement : droppedElements) {
                    final Element insertedElement = list.insert(droppedElement.type(), position);
                    insertedElement.copy(droppedElement);

                    newSelection.add(parentNode.findNode(insertedElement));

                    position++;
                }

                parentNode.getContentTree().setSelectedNodes(newSelection);
            } catch (Exception e) {
                // Log this exception unless the cause is EditFailedException. These exception
                // are the result of the user declining a particular action that is necessary
                // before the edit can happen (such as making a file writable).

                final EditFailedException editFailedException = EditFailedException.findAsCause(e);

                if (editFailedException == null) {
                    Sapphire.service(LoggingService.class).log(e);
                }

                event.detail = DND.DROP_NONE;
            } finally {
                suspension.dispose();
                outline.listeners().queue().process();
            }
        }
    });

    tree.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(final DisposeEvent event) {
            outline.detach(contentTreeListener);
            actionSupport.dispose();
        }
    });

    return filteredTree;
}

From source file:org.eclipse.scada.configuration.ui.component.ComponentOutputDialog.java

License:Open Source License

@Override
protected Control createDialogArea(final Composite parent) {
    getShell().setText("Component Output");

    final Composite composite = (Composite) super.createDialogArea(parent);

    composite.setLayout(new FillLayout());

    final TableLayout layout = new TableLayout();

    this.viewer = new TreeViewer(composite, SWT.FULL_SELECTION | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
    this.viewer.setAutoExpandLevel(2);
    this.viewer.getTree().setHeaderVisible(true);
    this.viewer.getTree().setLayout(layout);

    this.viewer.setContentProvider(this.contentProvider = new ObservableSetTreeContentProvider(
            new ComponentOutputObservableFactory(), null));

    {//from  w  ww .  j a v a2s.  c o m
        final TreeViewerColumn col1 = new TreeViewerColumn(this.viewer, SWT.NONE);
        col1.getColumn().setText("Name");
        col1.setLabelProvider(
                new NameLabelProvider(getShell().getDisplay(), this.contentProvider.getKnownElements()));
        layout.addColumnData(new ColumnWeightData(150));
    }

    {
        final IObservableMap map = PojoProperties.value(ItemEntry.PROP_ITEM)
                .observeDetail(this.contentProvider.getKnownElements());
        final IObservableMap map2 = EMFProperties.value(OsgiPackage.Literals.ITEM__NAME).observeDetail(map);

        final TreeViewerColumn col2 = new TreeViewerColumn(this.viewer, SWT.NONE);
        col2.getColumn().setText("Item ID");
        col2.setLabelProvider(new ObservableMapStyledCellLabelProvider(map2));
        layout.addColumnData(new ColumnWeightData(150));
    }

    {
        final IObservableMap map = PojoProperties.value(ItemEntry.PROP_ITEM)
                .observeDetail(this.contentProvider.getKnownElements());
        final IObservableMap map2 = EMFProperties.value(OsgiPackage.Literals.ITEM__INFORMATION)
                .observeDetail(map);
        final IObservableMap map3 = EMFProperties.value(OsgiPackage.Literals.ITEM_INFORMATION__DESCRIPTION)
                .observeDetail(map2);

        final TreeViewerColumn col2 = new TreeViewerColumn(this.viewer, SWT.NONE);
        col2.getColumn().setText("Description");
        col2.setLabelProvider(new ObservableMapStyledCellLabelProvider(map3));
        layout.addColumnData(new ColumnWeightData(100));
    }

    {
        final IObservableMap map = PojoProperties.value(ItemEntry.PROP_CUSTOMIZATION_REQUEST)
                .observeDetail(this.contentProvider.getKnownElements());
        final IObservableMap map2 = PojoProperties.value("globalizationLevel").observeDetail(map);

        final TreeViewerColumn col2 = new TreeViewerColumn(this.viewer, SWT.NONE);
        col2.getColumn().setText("GL");
        col2.setLabelProvider(new ObservableMapStyledCellLabelProvider(map2));
        layout.addColumnData(new ColumnWeightData(25));
    }

    {
        final IObservableMap map = PojoProperties.value(ItemEntry.PROP_ITEM)
                .observeDetail(this.contentProvider.getKnownElements());

        final TreeViewerColumn col2 = new TreeViewerColumn(this.viewer, SWT.NONE);
        col2.getColumn().setText("Type");
        col2.setLabelProvider(new ObservableMapStyledCellLabelProvider(map) {
            @Override
            public void update(final ViewerCell cell) {
                final Object element = cell.getElement();
                final Item value = (Item) this.attributeMaps[0].get(element);
                if (value == null) {
                    return;
                }

                final StyledString s = new StyledString();
                s.append(value.eClass().getName());

                s.append(String.format(" (%s)", value.eClass().getEPackage().getName()), //$NON-NLS-1$
                        StyledString.QUALIFIER_STYLER);

                cell.setText(s.getString());
                cell.setStyleRanges(s.getStyleRanges());
            }
        });
        layout.addColumnData(new ColumnWeightData(50));
    }

    this.viewer.getControl().addDisposeListener(new DisposeListener() {

        @Override
        public void widgetDisposed(final DisposeEvent e) {
            handleDispose();
        }
    });
    this.viewer.setComparator(new ViewerComparator() {
        @Override
        public int compare(final Viewer viewer, final Object e1, final Object e2) {
            final ItemEntry i1 = AdapterHelper.adapt(e1, ItemEntry.class);
            final ItemEntry i2 = AdapterHelper.adapt(e2, ItemEntry.class);
            if (i1 == i2) {
                return 0;
            }
            if (i1 == null) {
                return -1;
            }
            return StringHelper.join(i1.getLocal(), ".").compareTo(StringHelper.join(i2.getLocal(), ".")); //$NON-NLS-1$ //$NON-NLS-2$
        };
    });
    this.viewer.setInput(this.input);

    return composite;
}

From source file:org.eclipse.scada.da.server.ui.internal.ServerLabelProvider.java

License:Open Source License

protected void update(final ViewerCell cell, final ServerDescriptor element) {
    final StyledString str = new StyledString();

    final boolean running = element.isRunning();

    str.append(element.getLabel());//from ww  w. j  a  v  a 2s . c o  m

    final String add = element.getAdditionalLabel();
    if (add != null) {
        str.append(' ');
        str.append(add, StyledString.QUALIFIER_STYLER);
    }

    cell.setText(str.getString());
    cell.setStyleRanges(str.getStyleRanges());

    if (element.getError() != null) {
        cell.setImage(this.errorImage);
    } else {
        cell.setImage(running ? this.runningImage : this.stoppedImage);
    }
}

From source file:org.eclipse.scada.da.server.ui.internal.ServerLabelProvider.java

License:Open Source License

protected void update(final ViewerCell cell, final ServerEndpoint element) {
    final StyledString str = new StyledString();

    final boolean running = element.isRunning();

    str.append(element.getLabel());//from w ww .  java  2 s .c  om

    cell.setText(str.getString());
    cell.setStyleRanges(str.getStyleRanges());

    if (element.getError() != null) {
        cell.setImage(this.errorImage);
    } else {
        cell.setImage(running ? this.runningImage : this.stoppedImage);
    }
}

From source file:org.eclipse.tracecompass.totalads.ui.models.create.AlgorithmTreeLabelProvider.java

License:Open Source License

@Override
public void update(ViewerCell cell) {
    Object element = cell.getElement();
    StyledString text = new StyledString();
    String algorithmName = ((IDetectionAlgorithm) element).getName();
    text.append(algorithmName);//from ww  w.jav a  2 s .  c  o  m
    cell.setText(text.toString());
    cell.setStyleRanges(text.getStyleRanges());
    super.update(cell);

}

From source file:org.eclipse.viatra.query.tooling.localsearch.ui.debugger.provider.OperationListLabelProvider.java

License:Open Source License

@Override
public void update(final ViewerCell cell) {

    localResourceManager = new LocalResourceManager(JFaceResources.getResources(Display.getCurrent()));

    final SearchOperationViewerNode node = (SearchOperationViewerNode) cell.getElement();

    StyledString text = new StyledString();

    text.append(node.getLabelText());//from w ww . j ava2s  .  co m

    switch (node.getOperationStatus()) {
    case EXECUTED:
        cell.setImage(imageRegistry.get(LocalSearchToolingActivator.ICON_APPLIED_OPERATION));
        text.setStyle(0, text.length(), new Styler() {
            public void applyStyles(TextStyle textStyle) {
                textStyle.font = localResourceManager
                        .createFont(FontDescriptor.createFrom("Arial", 10, SWT.BOLD));
                doColoring(node, textStyle);
            }
        });
        break;
    case CURRENT:
        cell.setImage(imageRegistry.get(LocalSearchToolingActivator.ICON_CURRENT_OPERATION));
        text.setStyle(0, text.length(), new Styler() {
            public void applyStyles(TextStyle textStyle) {
                LocalResourceManager localResMan = new LocalResourceManager(
                        JFaceResources.getResources(Display.getCurrent()));
                textStyle.font = localResMan
                        .createFont(FontDescriptor.createFrom("Arial", 10, SWT.BOLD | SWT.ITALIC));
                doColoring(node, textStyle);
                textStyle.background = localResourceManager.createColor(new RGB(200, 235, 255));
            }
        });
        break;
    case QUEUED:
        cell.setImage(imageRegistry.get(LocalSearchToolingActivator.ICON_NOT_APPLIED_OPERATION));
        text.setStyle(0, text.length(), new Styler() {
            public void applyStyles(TextStyle textStyle) {
                LocalResourceManager localResMan = new LocalResourceManager(
                        JFaceResources.getResources(Display.getCurrent()));
                textStyle.font = localResMan.createFont(FontDescriptor.createFrom("Arial", 10, SWT.NORMAL));
                doColoring(node, textStyle);
            }
        });
        break;
    default:
        throw new UnsupportedOperationException("Unknown operation status: " + node.getOperationStatus());
    }

    cell.setText(text.toString());
    cell.setStyleRanges(text.getStyleRanges());

    super.update(cell);
}

From source file:org.eclipse.viatra.query.tooling.ui.wizards.internal.ImportListLabelProvider.java

License:Open Source License

@Override
public void update(ViewerCell cell) {
    Object element = cell.getElement();
    StyledString text = new StyledString();
    if (element instanceof String) {
        String nsUri = (String) element;
        text.append(nsUri);//from  w w w.jav a2s .c  o  m
        //            if (ePackage.eResource() != null && ePackage.eResource().getURI().isPlatform()) {
        //                text.append(String.format(" (%s)", ePackage.eResource().getURI()), StyledString.QUALIFIER_STYLER);
        //            }
        cell.setImage(imageRegistry.get(ViatraQueryGUIPlugin.ICON_EPACKAGE));
    }
    cell.setText(text.getString());
    cell.setStyleRanges(text.getStyleRanges());
    super.update(cell);
}

From source file:org.eclipse.wst.jsdt.nodejs.ide.ui.internal.views.dependencies.NpmDependenciesViewLabelProvider.java

License:Open Source License

/**
 * {@inheritDoc}// w  w  w  .ja v  a2  s .  c o m
 *
 * @see org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
 */
@Override
public void update(ViewerCell cell) {
    Object element = cell.getElement();
    if (element instanceof JsonObject) {
        JsonObject jsonObject = (JsonObject) element;
        JsonElement nameJsonElement = jsonObject.get("name");
        JsonElement versionJsonELement = jsonObject.get("version");
        if (nameJsonElement instanceof JsonPrimitive && versionJsonELement instanceof JsonPrimitive) {
            JsonPrimitive nameJsonPrimitive = (JsonPrimitive) nameJsonElement;
            String name = nameJsonPrimitive.getAsString();

            JsonPrimitive versionJsonPrimitive = (JsonPrimitive) versionJsonELement;
            String version = versionJsonPrimitive.getAsString();

            StyledString text = new StyledString();
            text.append(name);
            text.append(" ");
            text.append("[" + version + "]", StyledString.COUNTER_STYLER);

            cell.setText(text.toString());
            cell.setStyleRanges(text.getStyleRanges());
            cell.setImage(NodeJsIdeUiActivator.getInstance().getImage(INodeJsIcons.PROJECT_16x16));
        }
    } else if (element instanceof JsonDependencyField) {
        JsonDependencyField jsonDependencyField = (JsonDependencyField) element;
        String name = jsonDependencyField.getName();

        JsonElement versionJsonElement = jsonDependencyField.getValue().get("version");
        if (versionJsonElement instanceof JsonPrimitive) {
            JsonPrimitive versionJsonPrimitive = (JsonPrimitive) versionJsonElement;
            String version = versionJsonPrimitive.getAsString();

            StyledString text = new StyledString();
            text.append(name);
            text.append(" ");
            text.append("[" + version + "]", StyledString.COUNTER_STYLER);

            cell.setText(text.toString());
            cell.setStyleRanges(text.getStyleRanges());
            cell.setImage(NodeJsIdeUiActivator.getInstance().getImage(INodeJsIcons.FILE_16x16));
        }
    }
}

From source file:org.eclipselabs.e4.tapiji.translator.ui.treeviewer.provider.TreeViewerLabelProvider.java

License:Open Source License

@Override
public void update(final ViewerCell cell) {
    final Object element = cell.getElement();
    final int columnIndex = cell.getColumnIndex();
    cell.setText(this.getColumnText(element, columnIndex));

    /*if (isCrossRefRegion(cell.getText())) {
    cell.setFont(FONT_BOLD);/*  w  w  w.ja  v  a  2s  . co  m*/
    cell.setBackground(COLOR_CROSSREFERENCE_BACKGROUND);
    cell.setForeground(COLOR_CROSSREFERENCE_FOREGROUND);
    } else {
    cell.setFont(getColumnFont(element, columnIndex));
    cell.setBackground(COLOR_WHITE);
    cell.setForeground(COLOR_BLACK);
    }*/

    if (isSearchEnabled) {
        searchStyle(cell, (Term) element, columnIndex);
    } else {
        cell.setStyleRanges(null);
    }
    super.update(cell);
}

From source file:org.eclipselabs.e4.tapiji.translator.ui.treeviewer.provider.TreeViewerLabelProvider.java

License:Open Source License

private void searchStyle(final ViewerCell cell, final Term term, final int columnIndex) {
    if (isMatchingToPattern(term, columnIndex)) {
        final List<FilterRegion> regions = ((FilterInfo) term.getInfo())
                .getFoundInTranslationRanges(getColumnLocale(columnIndex));

        StyleRange style;//w  ww .  j  av a2  s  . c o  m
        for (final FilterRegion reg : regions) {
            style = new StyleRange(reg.getOffset(), reg.getLength(), COLOR_BLACK, COLOR_INFO, SWT.BOLD);
            STYLE_RANGES.add(style);
        }
        cell.setStyleRanges(STYLE_RANGES.toArray(new StyleRange[STYLE_RANGES.size()]));
    } else {
        cell.setForeground(COLOR_BLACK);
    }
}