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:eu.esdihumboldt.hale.ui.util.groovy.ast.viewer.ASTViewer.java

License:Open Source License

/**
 * Constructor.//  w w  w .  j av  a2 s.c  om
 * 
 * @param parent the parent composite
 * @param textViewer a text viewer where the code for an AST node should be
 *            selected on double click, or <code>null</code>
 */
public ASTViewer(Composite parent, ITextViewer textViewer) {
    this.textViewer = textViewer;

    page = new Composite(parent, SWT.NONE);
    TreeColumnLayout layout = new TreeColumnLayout();
    page.setLayout(layout);

    treeViewer = new TreeViewer(page, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    //      new DrillDownAdapter(viewer);
    treeViewer.setContentProvider(new ViewContentProvider());
    treeViewer.setLabelProvider(new ViewLabelProvider());

    treeViewer.getTree().setHeaderVisible(true);

    TreeViewerColumn mainColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    mainColumn.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();

            StyledString text = new StyledString();
            text.append(element.getClass().getSimpleName());

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

            super.update(cell);
        }
    });
    mainColumn.getColumn().setText("Node");
    layout.setColumnData(mainColumn.getColumn(), new ColumnPixelData(200));

    TreeViewerColumn infoColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    infoColumn.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();

            StyledString text = new StyledString();
            if (element instanceof Parameter) {
                // getText not implemented for Parameter
                Parameter param = (Parameter) element;
                text.append(param.getName());
            } else if (element instanceof ExpressionStatement) {
                // getText not properly implemented for ExpressionStatement
                text.append(((ExpressionStatement) element).getExpression().getText());
            } else if (element instanceof ASTNode) {
                ASTNode node = (ASTNode) element;
                text.append(node.getText());
            } else if (element instanceof Variable) {
                Variable var = (Variable) element;
                text.append(var.getName());
            } else {
                text.append(element.toString());
            }

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

            super.update(cell);
        }
    });
    infoColumn.getColumn().setText("Text");
    layout.setColumnData(infoColumn.getColumn(), new ColumnPixelData(300));

    TreeViewerColumn propertiesColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
    propertiesColumn.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();

            StyledString text = new StyledString();
            if (element instanceof Variable || element instanceof ASTNode || element instanceof VariableScope) {
                ASTNodeUtil.addProperties(element, text);
            }

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

            super.update(cell);
        }
    });
    propertiesColumn.getColumn().setText("Properties");
    layout.setColumnData(propertiesColumn.getColumn(), new ColumnPixelData(1600));

    makeActions();
    if (textViewer != null) {
        addDoubleClickAction();
    }
}

From source file:eu.esdihumboldt.hale.ui.views.data.internal.compare.DefinitionInstanceLabelProvider.java

License:Open Source License

/**
 * @see CellLabelProvider#update(ViewerCell)
 *///from  w  w w .  j a va  2  s  .c o  m
@Override
public void update(ViewerCell cell) {
    TreePath treePath = cell.getViewerRow().getTreePath();

    InstanceEntry entry = findInstanceEntry(treePath);
    Object value = entry.value;

    InstanceValidationReport report = null;
    // If childDef is null we are at the top element.
    if (entry.definition && entry.childDef == null) {
        report = InstanceValidator.validate(instance);
    }

    boolean hasValue = false;
    if (entry.definition && value instanceof Instance) {
        hasValue = ((Instance) value).getValue() != null;
    } else if (!entry.definition && treePath.getSegmentCount() == 1) {
        // metadata root
        if (instance.getMetaDataNames().isEmpty()) {
            hasValue = true;
            value = null;
        }
    }

    StyledString styledString;
    if (value == null) {
        styledString = new StyledString("no value", StyledString.DECORATIONS_STYLER);
    } else if (value instanceof Group && !hasValue) {
        styledString = new StyledString("+", StyledString.QUALIFIER_STYLER);
    } else {
        if (value instanceof Instance) {
            value = ((Instance) value).getValue();
        }
        // TODO some kind of conversion?
        String stringValue = value.toString();
        /*
         * Values that are very large, e.g. string representations of very
         * complex geometries lead to
         * StyledCellLabelProvider.updateTextLayout taking a very long time,
         * rendering the application unresponsive when the data views are
         * displayed. As such, we reduce the string to a maximum size.
         */
        if (stringValue.length() > MAX_STRING_LENGTH) {
            stringValue = stringValue.substring(0, MAX_STRING_LENGTH) + "...";
        }

        styledString = new StyledString(stringValue, null);
    }

    // mark cell if there are other values
    if (entry.valueCount > 1) {
        String decoration = " "
                + MessageFormat.format(MULTIPLE_VALUE_FORMAT, entry.choice + 1, entry.valueCount);
        styledString.append(decoration, StyledString.COUNTER_STYLER);
    }

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

    if (report != null && !report.getWarnings().isEmpty())
        cell.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK));

    super.update(cell);
}

From source file:eu.esdihumboldt.hale.ui.views.data.internal.explore.InstanceValueLabelProvider.java

License:Open Source License

/**
 * @see CellLabelProvider#update(ViewerCell)
 *//*from   w  w  w  .  j a v a2s.c  o  m*/
@Override
public void update(ViewerCell cell) {
    TreePath treePath = cell.getViewerRow().getTreePath();
    Object element = treePath.getLastSegment();
    Definition<?> definition = null;

    Object value = ((Pair<?, ?>) element).getSecond();
    if (((Pair<?, ?>) element).getFirst() instanceof Definition)
        definition = (Definition<?>) ((Pair<?, ?>) element).getFirst();

    InstanceValidationReport report = null;
    if (definition instanceof ChildDefinition<?>)
        report = InstanceValidator.validate(value, (ChildDefinition<?>) ((Pair<?, ?>) element).getFirst());
    else if (definition instanceof TypeDefinition)
        report = InstanceValidator.validate((Instance) value);

    boolean hasValue = false;
    if (value instanceof Instance) {
        hasValue = ((Instance) value).getValue() != null;
    }

    StyledString styledString;
    if (value == null) {
        styledString = new StyledString("no value", StyledString.DECORATIONS_STYLER);
    } else if (value instanceof Group && !hasValue) {
        styledString = new StyledString("+", StyledString.QUALIFIER_STYLER);
    } else {
        if (value instanceof Instance) {
            value = ((Instance) value).getValue();
        }
        // TODO some kind of conversion?
        String stringValue = value.toString();
        /*
         * Values that are very large, e.g. string representations of very
         * complex geometries lead to
         * StyledCellLabelProvider.updateTextLayout taking a very long time,
         * rendering the application unresponsive when the data views are
         * displayed. As such, we reduce the string to a maximum size.
         */
        if (stringValue.length() > MAX_STRING_LENGTH) {
            stringValue = stringValue.substring(0, MAX_STRING_LENGTH) + "...";
        }

        styledString = new StyledString(stringValue, null);
    }

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

    if (report != null && !report.getWarnings().isEmpty())
        cell.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK));

    super.update(cell);
}

From source file:eu.esdihumboldt.hale.ui.views.resources.internal.ResourcesLabelProvider.java

License:Open Source License

@Override
public void update(ViewerCell cell) {
    Object element = cell.getElement();
    cell.setImage(getImage(element));/*from  w  w w  .ja  v a 2 s .  co m*/

    StyledString text = new StyledString(getText(element));

    if (element instanceof Resource) {
        Resource resource = (Resource) element;
        if (resource.getContentType() != null) {
            text.append(" (" + resource.getContentType().getName() + ")", StyledString.DECORATIONS_STYLER);
        }
    }

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

    super.update(cell);
}

From source file:fr.esrf.icat.manager.core.icatserver.IcatServerLabelProvider.java

License:Apache License

@Override
public void update(ViewerCell cell) {
    Object element = cell.getElement();
    StyledString text = new StyledString();
    if (element instanceof ICATServer) {
        ICATServer icatServer = (ICATServer) element;
        text.append(icatServer.getServerURL());
        if (icatServer.isConnected()) {
            cell.setImage(null);/*from w ww  .j  av  a  2 s. co  m*/
            text.append(" (" + icatServer.getVersion() + ") ", StyledString.QUALIFIER_STYLER);
        }
        switch (icatServer.getStatus()) {
        case CONNECTED:
            cell.setImage(connected_server_image);
            break;
        case FAILED:
            cell.setImage(failed_server_image);
            break;
        default:
            cell.setImage(unknown_server_image);
            break;
        }

    } else if (element instanceof ICATEntity) {
        ICATEntity entity = (ICATEntity) element;
        text.append(entity.getEntityName());
        Long count = entitiesCount.get(entity);
        if (null != count) {
            text.append(" (" + count.toString() + ") ", StyledString.COUNTER_STYLER);
        }
    } else {
        text.append(element.toString());
    }
    cell.setText(text.toString());
    cell.setStyleRanges(text.getStyleRanges());
    super.update(cell);
}

From source file:hydrograph.ui.help.aboutDialog.HydrographInstallationDialog.java

License:Apache License

protected void createFolderItems(CTabFolder folder) {
    IConfigurationElement[] elements = ConfigurationInfo.getSortedExtensions(loadElements());
    for (int i = 0; i < elements.length; i++) {
        IConfigurationElement element = elements[i];
        if (!element.getAttribute(IWorkbenchRegistryConstants.ATT_NAME).equalsIgnoreCase("Features")) {
            CTabItem item = new CTabItem(folder, SWT.NONE);

            item.setText(element.getAttribute(IWorkbenchRegistryConstants.ATT_NAME));
            item.setData(element);//from   ww  w .j  a  v  a 2 s  .  c  o m
            item.setData(ID, element.getAttribute(IWorkbenchRegistryConstants.ATT_ID));

            Composite control = new Composite(folder, SWT.NONE);
            control.setLayout(new GridLayout());
            item.setControl(control);
        }
    }

    CTabItem tbtmLibraries = new CTabItem(folder, SWT.NONE);
    tbtmLibraries.setText("Libraries");

    composite_1 = new Composite(folder, SWT.NONE);
    composite_1.setLayout(new GridLayout(1, false));
    tbtmLibraries.setControl(composite_1);

    URL url = FileLocator.find(bundle, path, null);
    try {
        fileUrl = FileLocator.toFileURL(url);
    } catch (IOException e2) {
        logger.error(e2.getMessage());
    }
    tableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
    Table table = tableViewer.getTable();
    table.setLinesVisible(true);
    table.setHeaderVisible(true);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    readFromXMLFile(fileUrl);
    createTableViewerColumns(tableViewer, "Name");
    createTableViewerColumns(tableViewer, "Version No");
    createTableViewerColumns(tableViewer, "Group Id");
    createTableViewerColumns(tableViewer, "Artifact Id");
    TableViewerColumn tableLicense = createTableViewerColumns(tableViewer, "License Info");

    TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
    TableColumn tblclmnItem = tableViewerColumn.getColumn();
    tblclmnItem.setWidth(0);
    tblclmnItem.setResizable(false);
    tblclmnItem.setText("Path");

    tableViewer.setLabelProvider(new InstallationDetailsLabelProvider());
    tableViewer.setContentProvider(new InstallationDetailsContentProvider());
    tableViewer.setInput(installationWindowDetails.getJarInfromationDetails());
    tableLicense.setLabelProvider(new StyledCellLabelProvider() {
        @Override
        public void update(ViewerCell cell) {
            Object element = cell.getElement();
            if (element instanceof JarInformationDetails) {
                JarInformationDetails jarInfo = (JarInformationDetails) cell.getElement();

                /* make text look like a link */
                StyledString text = new StyledString();
                StyleRange myStyledRange = new StyleRange(0, jarInfo.getLicenseInfo().length(),
                        Display.getCurrent().getSystemColor(SWT.COLOR_BLUE), null);
                myStyledRange.underline = true;
                text.append(jarInfo.getLicenseInfo(), StyledString.DECORATIONS_STYLER);
                cell.setText(text.toString());

                StyleRange[] range = { myStyledRange };
                cell.setStyleRanges(range);

                super.update(cell);

            }
        }
    });
    tableViewer.refresh();

    tableViewer.getControl().addMouseListener(new MouseAdapter() {

        @Override
        public void mouseUp(MouseEvent e) {
            StructuredSelection selection = (StructuredSelection) tableViewer.getSelection();
            JarInformationDetails details = (JarInformationDetails) selection.getFirstElement();
            if (details != null) {
                IPath iPath = new Path(details.getPath());
                try {
                    URL url = FileLocator.find(bundle, iPath, null);
                    URL fileUrlForPath = FileLocator.toFileURL(url);
                    PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(fileUrlForPath);
                } catch (PartInitException | IOException e1) {
                    logger.error(e1.getMessage());
                    WidgetUtility.errorMessage("Unable to open URL in external browser");
                }
            }

        }
    });
}

From source file:msi.gama.gui.viewers.csv.CSVLabelProvider.java

License:Apache License

/**
 * @see org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
 *///from w  w w. j ava 2 s.  c  om
@Override
public void update(final ViewerCell cell) {
    CSVRow element = (CSVRow) cell.getElement();
    int index = cell.getColumnIndex();
    String columnText = getColumnText(element, index);
    cell.setText(columnText);
    cell.setImage(null);
    if (searchText != null && searchText.length() > 0) {
        int intRangesCorrectSize[] = SearchResultStyle.getSearchTermOccurrences(searchText, columnText);
        List<StyleRange> styleRange = new ArrayList<StyleRange>();
        for (int i = 0; i < intRangesCorrectSize.length / 2; i++) {
            StyleRange myStyleRange = new StyleRange(0, 0, null, searchColor);
            myStyleRange.start = intRangesCorrectSize[i];
            myStyleRange.length = intRangesCorrectSize[++i];
            styleRange.add(myStyleRange);
        }
        cell.setStyleRanges(styleRange.toArray(new StyleRange[styleRange.size()]));
    } else {
        cell.setStyleRanges(null);
    }

    super.update(cell);
}

From source file:net.sourceforge.docfetcher.view.ScopeGroup.java

License:Open Source License

private void initViewer() {
    // Remove selection when viewer loses focus
    viewer.getTree().addFocusListener(new FocusAdapter() {
        public void focusLost(FocusEvent e) {
            ((Tree) e.widget).deselectAll();

            /*/*from   w w w.j  ava  2 s.co  m*/
             * We have to deactivate the context menu entries manually since
             * the deselectAll call will not cause a SelectionChangedEvent.
             */
            viewerMenu.setManagedActionsEnabled(false);
        }
    });

    viewer.setContentProvider(new ITreeContentProvider() {
        public Object[] getElements(Object inputElement) {
            return (RootScope[]) inputElement;
        }

        public Object[] getChildren(Object parentElement) {
            return ((Scope) parentElement).getChildren();
        }

        public boolean hasChildren(Object element) {
            return getChildren(element).length > 0;
        }

        public Object getParent(Object element) {
            return ((Indexable) element).getParent();
        }

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

        public void dispose() {
        }
    });

    class MyStyledCellLabelProvider extends StyledCellLabelProvider {
        private Styler styler;

        public MyStyledCellLabelProvider() {
            styler = new Styler() {
                public void applyStyles(TextStyle textStyle) {
                    textStyle.foreground = UtilGUI.getColor(SWT.COLOR_DARK_GRAY);
                }
            };
        }

        public void update(ViewerCell cell) {
            Indexable scope = (Indexable) cell.getElement();
            File file = scope.getFile();
            String label = file.getName();
            if (label.equals("")) // applies to root directories, i.e. "C:\\" //$NON-NLS-1$
                label = file.getAbsolutePath();

            // "temp" prefix for RootScopes that will be deleted on exit
            if (scope instanceof RootScope)
                if (((RootScope) scope).isDeleteOnExit())
                    label = "[X]  " + label; //$NON-NLS-1$

            StyledString styledString = new StyledString(label, null);
            if (scope instanceof RootScope) {
                String path = file.getAbsolutePath();
                styledString.append(" --- " + path, styler); //$NON-NLS-1$
            }
            cell.setText(styledString.toString());
            cell.setStyleRanges(styledString.getStyleRanges());
        }

        protected void measure(org.eclipse.swt.widgets.Event event, Object element) {
            super.measure(event, element);
        }
    }
    viewer.setLabelProvider(new MyStyledCellLabelProvider());

    viewer.setSorter(new ViewerSorter() {
        public int compare(Viewer viewer, Object e1, Object e2) {
            String name1 = ((Scope) e1).getFile().getName();
            String name2 = ((Scope) e2).getFile().getName();
            return name1.compareToIgnoreCase(name2);
        }
    });

    /*
     * Because the check states of the viewer items are maintained manually,
     * they have to be kept in sync with tree expansion events.
     */
    viewer.addTreeListener(new ITreeViewerListener() {
        public void treeExpanded(TreeExpansionEvent event) {
            Indexable[] newScopes = ((Scope) event.getElement()).getChildren();
            updateVisibleCheckStates(newScopes);
        }

        public void treeCollapsed(TreeExpansionEvent event) {
            // Do nothing
        }
    });

    /*
     * Check/uncheck children of checked/unchecked item and propagate
     * checkstate changes in viewer back to the model.
     */
    viewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            Event.hold();
            ((Scope) event.getElement()).setCheckedDeep(event.getChecked());
            Event.flush();
            updateVisibleCheckStates(new Object[] { event.getElement() });
        }

    });

    // Doubleclick on item in viewer results in expand/collapse of its children
    viewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent event) {
            Object[] objects = ((StructuredSelection) viewer.getSelection()).toArray();
            if (objects.length != 1)
                return;
            viewer.setExpandedState(objects[0], !viewer.getExpandedState(objects[0]));
            updateVisibleCheckStates(new Scope[0]);
        }
    });
}

From source file:net.tourbook.photo.internal.PicDirFolder.java

License:Open Source License

private void createUI_10_TreeView(final Composite parent) {

    /*//from   ww  w  .ja v a 2 s .c  om
     * create tree layout
     */

    final Composite layoutContainer = new Composite(parent, SWT.NONE);
    GridDataFactory.fillDefaults()//
            .grab(true, true).hint(200, 100).applyTo(layoutContainer);

    final TreeColumnLayout treeLayout = new TreeColumnLayout();
    layoutContainer.setLayout(treeLayout);

    /*
     * create viewer
     */
    final Tree tree = new Tree(layoutContainer, SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION);

    tree.setHeaderVisible(false);

    tree.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseDown(final MouseEvent e) {
            _doAutoCollapseExpand = true;
            _isMouseContextMenu = e.button == 3;
        }
    });

    _folderViewer = new TreeViewer(tree);

    _folderViewer.setContentProvider(new FolderContentProvider());
    _folderViewer.setComparer(new FolderComparer());
    _folderViewer.setUseHashlookup(true);

    _folderViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(final DoubleClickEvent event) {

            // expand/collapse current item
            final Object selection = ((IStructuredSelection) _folderViewer.getSelection()).getFirstElement();

            final TVIFolderFolder treeItem = (TVIFolderFolder) selection;

            expandCollapseFolder(treeItem);
        }
    });

    _folderViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(final SelectionChangedEvent event) {
            onSelectFolder((ITreeSelection) event.getSelection());
        }
    });

    /*
     * create columns
     */
    TreeViewerColumn tvc;
    TreeColumn tvcColumn;

    // column: os folder
    tvc = new TreeViewerColumn(_folderViewer, SWT.TRAIL);
    tvcColumn = tvc.getColumn();
    tvc.setLabelProvider(new StyledCellLabelProvider() {

        @Override
        public void update(final ViewerCell cell) {

            final Object element = cell.getElement();

            if (element instanceof TVIFolderFolder) {
                final TVIFolderFolder folderItem = (TVIFolderFolder) element;

                final StyledString styledString = new StyledString();

                styledString.append(folderItem._folderName);

                if (_isStateShowFileFolderInFolderItem) {

                    if (folderItem.isFolderLoaded()) {

                        final int folderCounter = folderItem.getFolderCounter();
                        if (folderCounter > 0) {
                            styledString.append(UI.SPACE2);
                            styledString.append(Integer.toString(folderCounter), PhotoUI.PHOTO_FOLDER_STYLER);
                        }

                        final int fileCounter = folderItem.getFileCounter();
                        if (fileCounter > 0) {
                            styledString.append(net.tourbook.common.UI.SPACE2);
                            styledString.append(Integer.toString(fileCounter), PhotoUI.PHOTO_FILE_STYLER);
                        }

                    } else {

                        // force that file list is loaded and number of files is available

                        putFolderInWaitingQueue(folderItem, false);

                        styledString.append(UI.SPACE2 + Messages.Pic_Dir_StatusLable_LoadingFolder_InFolderTree,
                                PhotoUI.PHOTO_FOLDER_STYLER);
                    }
                }

                cell.setText(styledString.getString());
                cell.setStyleRanges(styledString.getStyleRanges());
            }
        }
    });
    treeLayout.setColumnData(tvcColumn, new ColumnWeightData(100, true));
}

From source file:net.tourbook.preferences.PrefPageTags.java

License:Open Source License

private void createUI_20_TagViewer(final Composite parent) {

    /*//w  w  w.java2s  .c  om
     * create tree layout
     */

    final Composite layoutContainer = new Composite(parent, SWT.NONE);
    GridDataFactory.fillDefaults()//
            .grab(true, true).hint(200, 100).applyTo(layoutContainer);

    final TreeColumnLayout treeLayout = new TreeColumnLayout();
    layoutContainer.setLayout(treeLayout);

    /*
     * create viewer
     */
    final Tree tree = new Tree(layoutContainer, SWT.H_SCROLL | SWT.V_SCROLL
    //            | SWT.BORDER
            | SWT.MULTI | SWT.FULL_SELECTION);

    tree.setHeaderVisible(false);
    tree.setLinesVisible(getPreferenceStore().getBoolean(ITourbookPreferences.VIEW_LAYOUT_DISPLAY_LINES));

    _tagViewer = new TreeViewer(tree);

    _tagViewer.setContentProvider(new TagViewerContentProvicer());
    _tagViewer.setComparator(new TagViewerComparator());
    _tagViewer.setUseHashlookup(true);

    _tagViewer.addDoubleClickListener(new IDoubleClickListener() {
        @Override
        public void doubleClick(final DoubleClickEvent event) {

            final Object selection = ((IStructuredSelection) _tagViewer.getSelection()).getFirstElement();

            if (selection instanceof TVIPrefTag) {

                // tag is selected

                onRenameTourTag();

            } else if (selection instanceof TVIPrefTagCategory) {

                // expand/collapse current item

                final TreeViewerItem tourItem = (TreeViewerItem) selection;

                if (_tagViewer.getExpandedState(tourItem)) {
                    _tagViewer.collapseToLevel(tourItem, 1);
                } else {
                    _tagViewer.expandToLevel(tourItem, 1);
                }
            }
        }
    });

    _tagViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(final SelectionChangedEvent event) {
            enableButtons();
        }
    });

    _tagViewer.addDragSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() },
            new DragSourceListener() {

                @Override
                public void dragFinished(final DragSourceEvent event) {

                    final LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer();

                    if (event.doit == false) {
                        return;
                    }

                    transfer.setSelection(null);
                    transfer.setSelectionSetTime(0);
                }

                @Override
                public void dragSetData(final DragSourceEvent event) {
                    // data are set in LocalSelectionTransfer
                }

                @Override
                public void dragStart(final DragSourceEvent event) {

                    final LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer();
                    final ISelection selection = _tagViewer.getSelection();

                    //                  System.out.println("dragStart");
                    transfer.setSelection(selection);
                    transfer.setSelectionSetTime(_dragStartTime = event.time & 0xFFFFFFFFL);

                    event.doit = !selection.isEmpty();
                }
            });

    _tagViewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() },
            new TagDropAdapter(this, _tagViewer));

    /*
     * create columns
     */
    TreeViewerColumn tvc;
    TreeColumn tvcColumn;

    // column: tags + tag categories
    tvc = new TreeViewerColumn(_tagViewer, SWT.TRAIL);
    tvcColumn = tvc.getColumn();
    tvc.setLabelProvider(new StyledCellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {

            final StyledString styledString = new StyledString();

            final Object element = cell.getElement();
            if (element instanceof TVIPrefTag) {

                final TourTag tourTag = ((TVIPrefTag) element).getTourTag();

                styledString.append(tourTag.getTagName(), UI.TAG_STYLER);
                cell.setImage(tourTag.isRoot() ? _imgTagRoot : _imgTag);

            } else if (element instanceof TVIPrefTagCategory) {

                final TVIPrefTagCategory tourTagCategoryItem = (TVIPrefTagCategory) element;
                final TourTagCategory tourTagCategory = tourTagCategoryItem.getTourTagCategory();

                cell.setImage(_imgTagCategory);

                styledString.append(tourTagCategory.getCategoryName(), UI.TAG_CATEGORY_STYLER);

                // get number of categories
                final int categoryCounter = tourTagCategory.getCategoryCounter();
                final int tagCounter = tourTagCategory.getTagCounter();
                if (categoryCounter == -1 && tagCounter == -1) {

                    //                  styledString.append("  ...", StyledString.COUNTER_STYLER);

                } else {

                    String categoryString = UI.EMPTY_STRING;
                    if (categoryCounter > 0) {
                        categoryString = "/" + categoryCounter; //$NON-NLS-1$
                    }
                    styledString.append("   " + tagCounter + categoryString, StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
                }

            } else {
                styledString.append(element.toString());
            }

            cell.setText(styledString.getString());
            cell.setStyleRanges(styledString.getStyleRanges());
        }
    });
    treeLayout.setColumnData(tvcColumn, new ColumnWeightData(100, true));
}