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.eclipse.recommenders.internal.models.rcp.ModelRepositoriesView.java

License:Open Source License

@Override
public void createPartControl(Composite parent) {
    bus.register(this);
    Composite container = new Composite(parent, SWT.NONE);
    container.setLayout(new GridLayout());

    txtSearch = new Text(container, SWT.BORDER | SWT.ICON_SEARCH | SWT.SEARCH | SWT.CANCEL);
    txtSearch.setMessage(Messages.SEARCH_PLACEHOLDER_FILTER_TEXT);
    txtSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    txtSearch.addKeyListener(new KeyAdapter() {
        @Override//  www .  j a v  a2s. c  o  m
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.ARROW_DOWN && tree.getItemCount() != 0) {
                tree.setFocus();
                tree.setSelection(tree.getTopItem());
            }
        }
    });

    Composite composite = new Composite(container, SWT.NONE);

    TreeColumnLayout treeLayout = new TreeColumnLayout();
    composite.setLayout(treeLayout);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL);
    ColumnViewerToolTipSupport.enableFor(treeViewer);
    tree = treeViewer.getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);

    TreeViewerColumn repositoryViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    TreeColumn repositoryColumn = repositoryViewerColumn.getColumn();
    treeLayout.setColumnData(repositoryColumn, new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true));
    repositoryColumn.setText(Messages.COLUMN_LABEL_REPOSITORY);
    repositoryViewerColumn.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();
            StyledString text = new StyledString();
            if (element instanceof String) {
                String url = (String) element;
                text.append(url);
                text.append(" "); //$NON-NLS-1$
                text.append(format(Messages.TABLE_CELL_SUFFIX_KNOWN_COORDINATES, fetchNumberOfModels(url)),
                        StyledString.COUNTER_STYLER);
                cell.setImage(images.getImage(OBJ_REPOSITORY));
            }
            if (element instanceof KnownCoordinate) {
                KnownCoordinate v = (KnownCoordinate) element;
                text.append(v.pc.toString());
            }
            cell.setText(text.toString());
            cell.setStyleRanges(text.getStyleRanges());
            super.update(cell);
        }
    });

    int minWidth = calculateMinColumnWidthForClassifier();
    for (String classifier : modelClassifiers) {
        newColumn(treeLayout, classifier, minWidth);
    }
    treeViewer.setUseHashlookup(true);
    treeViewer.setContentProvider(new ILazyTreeContentProvider() {

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            filteredCoordinatesGroupedByRepo = ArrayListMultimap.create(coordinatesGroupedByRepo);
        }

        @Override
        public void dispose() {
        }

        @Override
        public void updateElement(Object parent, int index) {
            if (parent instanceof IViewSite) {
                String element = prefs.remotes[index];
                treeViewer.replace(parent, index, element);
                treeViewer.setChildCount(element, getChildren(element).length);
            } else if (parent instanceof String) {
                treeViewer.replace(parent, index, getChildren(parent)[index]);
            }
        }

        private Object[] getChildren(Object element) {
            if (element instanceof String) {
                return filteredCoordinatesGroupedByRepo.get((String) element).toArray();
            }
            return new Object[0];
        }

        @Override
        public void updateChildCount(Object element, int currentChildCount) {
            int count = 0;

            if (element instanceof IViewSite) {
                count = prefs.remotes.length;
            }

            if (contains(prefs.remotes, element)) {
                count = getChildren(element).length;
            }

            if (count != currentChildCount) {
                treeViewer.setChildCount(element, count);
            }
        }

        @Override
        public Object getParent(Object element) {
            if (element instanceof KnownCoordinate) {
                KnownCoordinate v = (KnownCoordinate) element;
                return v.url;
            }
            return null;
        }
    });

    treeViewer.setInput(getViewSite());
    refreshData();

    addRemoteRepositoryAction = new Action() {
        @Override
        public void run() {
            addRemoteRepository();
        }
    };

    IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
    addAction(Messages.TOOLBAR_TOOLTIP_ADD_REPOSITORY, ELCL_ADD_REPOSITORY, toolBarManager,
            addRemoteRepositoryAction);

    addAction(Messages.TOOLBAR_TOOLTIP_REFRESH, ELCL_REFRESH, toolBarManager, new Action() {
        @Override
        public void run() {
            refreshData();
        }
    });

    addAction(Messages.TOOLBAR_TOOLTIP_EXPAND_ALL, ELCL_EXPAND_ALL, toolBarManager, new Action() {
        @Override
        public void run() {
            for (int i = 0; i < treeViewer.getTree().getItemCount(); i++) {
                treeViewer.getTree().getItem(i).setExpanded(true);
            }
        }
    });

    addAction(Messages.TOOLBAR_TOOLTIP_COLLAPSE_ALL, ELCL_COLLAPSE_ALL, toolBarManager, new Action() {
        @Override
        public void run() {
            for (int i = 0; i < treeViewer.getTree().getItemCount(); i++) {
                treeViewer.getTree().getItem(i).setExpanded(false);
            }
        }
    });

    IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();
    addAction(Messages.MENUITEM_DELETE_MODELS, ELCL_DELETE, menuManager, new Action() {
        @Override
        public void run() {
            deleteCacheAndRefresh();
        }
    });

    addContextMenu();
    bindingContext = initDataBindings();
}

From source file:org.eclipse.recommenders.internal.snipmatch.rcp.SnippetsView.java

License:Open Source License

@Override
public void createPartControl(final Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    GridLayoutFactory.swtDefaults().applyTo(composite);

    txtSearch = new Text(composite, SWT.BORDER | SWT.ICON_SEARCH | SWT.SEARCH | SWT.CANCEL);
    txtSearch.setMessage(Messages.SEARCH_PLACEHOLDER_SEARCH_TEXT);
    GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtSearch);
    txtSearch.addModifyListener(new ModifyListener() {

        @Override//from  w w  w  .  j av a 2 s  .  c  om
        public void modifyText(ModifyEvent e) {
            refreshUI();
        }
    });
    txtSearch.setData(SWT_ID, SEARCH_FIELD);
    txtSearch.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.ARROW_DOWN && tree.getItemCount() != 0) {
                tree.setFocus();
                tree.setSelection(tree.getTopItem());
            }
        }
    });

    Composite treeComposite = new Composite(composite, SWT.NONE);

    TreeColumnLayout treeLayout = new TreeColumnLayout();
    treeComposite.setLayout(treeLayout);
    treeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    treeViewer = new TreeViewer(treeComposite, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.VIRTUAL);
    ColumnViewerToolTipSupport.enableFor(treeViewer);
    tree = treeViewer.getTree();
    tree.setData(SWT_ID, TREE);
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);

    TreeViewerColumn snippetViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    TreeColumn snippetColumn = snippetViewerColumn.getColumn();
    treeLayout.setColumnData(snippetColumn, new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true));
    snippetColumn.setText(Messages.TABLE_COLUMN_TITLE_SNIPPETS);
    snippetViewerColumn.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();
            StyledString text = new StyledString();
            if (element instanceof SnippetRepositoryConfiguration) {
                SnippetRepositoryConfiguration config = (SnippetRepositoryConfiguration) element;

                text.append(config.getName());
                text.append(" "); //$NON-NLS-1$

                if (prefs.isRepositoryEnabled(config)) {
                    text.append(format(Messages.TABLE_CELL_SUFFIX_SNIPPETS, fetchNumberOfSnippets(config)),
                            StyledString.COUNTER_STYLER);
                } else {
                    text.append(Messages.TABLE_REPOSITORY_DISABLED, StyledString.COUNTER_STYLER);
                }

                cell.setImage(images.getImage(Images.OBJ_REPOSITORY));
            } else if (element instanceof KnownSnippet) {
                KnownSnippet knownSnippet = (KnownSnippet) element;
                text.append(toStringRepresentation.apply(knownSnippet));
            }
            cell.setText(text.toString());
            cell.setStyleRanges(text.getStyleRanges());
            super.update(cell);
        }
    });

    treeViewer.addOpenListener(new IOpenListener() {

        @Override
        public void open(OpenEvent event) {
            if (selectionConsistsOnlyElementsOf(KnownSnippet.class)) {
                editSnippets();
            }
        }
    });
    treeViewer.setUseHashlookup(true);
    treeViewer.setContentProvider(new ILazyTreeContentProvider() {

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

        @Override
        public void dispose() {
        }

        @Override
        public void updateElement(Object parent, int index) {
            if (parent instanceof IViewSite) {
                SnippetRepositoryConfiguration config = availableRepositories.get(index);
                treeViewer.replace(parent, index, config);
                treeViewer.setChildCount(config, getChildren(config).length);
            } else if (parent instanceof SnippetRepositoryConfiguration) {
                treeViewer.replace(parent, index, getChildren(parent)[index]);
            }
        }

        private Object[] getChildren(Object element) {
            if (element instanceof SnippetRepositoryConfiguration) {
                return filteredSnippetsGroupedByRepoName.get((SnippetRepositoryConfiguration) element)
                        .toArray();
            }
            return new Object[0];
        }

        @Override
        public void updateChildCount(Object element, int currentChildCount) {
            int count = 0;

            if (element instanceof IViewSite) {
                count = availableRepositories.size();
            }

            if (availableRepositories.contains(element)) {
                count = getChildren(element).length;
            }

            if (count != currentChildCount) {
                treeViewer.setChildCount(element, count);
            }
        }

        @Override
        public Object getParent(Object element) {
            if (element instanceof KnownSnippet) {
                KnownSnippet knownSnippet = (KnownSnippet) element;
                return knownSnippet.config;
            }
            return null;
        }
    });

    selection = ViewersObservables.observeMultiSelection(treeViewer);

    createActions(parent);
    addToolBar(parent);
    addContextMenu();

    refreshUI();
}

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// w w  w.  j av a2 s .com
            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.ae.ui.views.views.LabelProviderSupport.java

License:Open Source License

public void decorateWithActorType(final DecoratedEvent event, final ViewerCell cell) {
    final String value = Variant.valueOf(event.getEvent().getField(Fields.ACTOR_TYPE)).asString("");
    if ("USER".equalsIgnoreCase(value)) //$NON-NLS-1$
    {/*from   www  . java  2 s.c  o  m*/
        cell.setImage(this.userImage);
    } else if ("SYSTEM".equalsIgnoreCase(value)) //$NON-NLS-1$
    {
        cell.setImage(this.systemImage);
    } else {
        cell.setImage(null);
    }
}

From source file:org.eclipse.scada.ae.ui.views.views.LabelProviderSupport.java

License:Open Source License

public void decorateWithMonitorState(final DecoratedEvent event, final ViewerCell cell) {
    // FIXME: should be done using new StyleBlinker

    if (!event.isActive()) {
        cell.setImage(null);
    } else {//from w  w w . j  av a 2  s  .c  o m
        switch (event.getMonitor().getStatus()) {
        case NOT_OK:
            //$FALL-THROUGH$
        case NOT_OK_AKN:
            if (event.getMonitor().getSeverity() == Severity.WARNING) {
                cell.setImage(this.warningImage);
            } else {
                cell.setImage(this.alarmImage);
            }
            break;
        case NOT_AKN:
            cell.setImage(this.ackImage);
            break;
        case NOT_OK_NOT_AKN:
            cell.setImage(this.ackImage);
            break;
        case INACTIVE: //$FALL-THROUGH$
        case INIT: //$FALL-THROUGH$
        case UNSAFE: //$FALL-THROUGH$
        case OK: //$FALL-THROUGH$
            break;
        }
    }
}

From source file:org.eclipse.scada.configuration.component.tools.wizard.PreviewPage.java

License:Open Source License

@Override
public void createControl(final Composite parent) {
    setTitle("Preview result");
    setMessage("Check the result");

    this.viewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.BORDER);
    this.viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    setControl(this.viewer.getControl());

    this.viewer.getTable().setHeaderVisible(true);

    this.viewer.setContentProvider(new ArrayContentProvider());

    final AdapterFactory adapterFactory = new ComponentItemProviderAdapterFactory();
    this.labelProvider = new AdapterFactoryLabelProvider(adapterFactory);

    final TableLayout layout = new TableLayout();
    this.viewer.getTable().setLayout(layout);

    {//from  ww  w  .  j ava  2 s.  c o m
        final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE);
        layout.addColumnData(new ColumnWeightData(10));
        col.getColumn().setText("Item");
        col.setLabelProvider(new CellLabelProvider() {

            @Override
            public void update(final ViewerCell cell) {
                cell.setText(PreviewPage.this.labelProvider.getText(((Entry) cell.getElement()).getItem()));
                cell.setImage(PreviewPage.this.labelProvider.getImage(((Entry) cell.getElement()).getItem()));
            }
        });
    }
    {
        final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE);
        layout.addColumnData(new ColumnWeightData(10));

        col.getColumn().setText("Old name");
        col.setLabelProvider(new CellLabelProvider() {

            @Override
            public void update(final ViewerCell cell) {
                cell.setText(((Entry) cell.getElement()).getItem().getSourceName());
            }
        });
    }
    {
        final TableViewerColumn col = new TableViewerColumn(this.viewer, SWT.NONE);
        layout.addColumnData(new ColumnWeightData(10));

        col.getColumn().setText("Result");
        col.setLabelProvider(new CellLabelProvider() {

            @Override
            public void update(final ViewerCell cell) {
                renderResult(cell, (Entry) cell.getElement());
            }
        });
    }
}

From source file:org.eclipse.scada.configuration.component.tools.wizard.PreviewPage.java

License:Open Source License

protected void renderResult(final ViewerCell cell, final Entry element) {
    if (element.getException() != null) {
        cell.setText(ExceptionHelper.getMessage(element.getException()));
        cell.setImage(JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR));
    } else {/*from w  ww.j  av  a 2 s .c om*/
        cell.setText(element.getNewName());
        cell.setImage(null);
    }
}

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

License:Open Source License

@Override
public void update(final ViewerCell cell) {
    final Object ele = cell.getElement();
    if (ele instanceof Master) {
        final MasterServer master = ((Master) ele).getMaster();
        final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) this.adapterFactory.adapt(master,
                IItemLabelProvider.class);
        cell.setText(itemLabelProvider.getText(master));

        cell.setImage(makeImage(itemLabelProvider.getImage(master)));
    } else if (ele instanceof ItemEntry) {
        final Item item = ((ItemEntry) ele).getItem();
        cell.setText("" + ((ItemEntry) ele).getLocal());
        final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) this.adapterFactory.adapt(item,
                IItemLabelProvider.class);
        cell.setImage(makeImage(itemLabelProvider.getImage(item)));
    } else if (ele instanceof ClassInformationProvider) {
        final ClassInformationProvider cip = (ClassInformationProvider) ele;
        cell.setText(String.format("%s (%s)", cip.getSimpleName(), cip.getPackageName()));
    } else {//from w  w  w  . j  a  v  a 2 s  .  c o m
        cell.setText("" + ele);
    }
}

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   w w  w  .j  ava 2  s .  com

    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());//ww w .j  a va 2  s  . c  o m

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

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