Example usage for org.eclipse.jface.viewers TreeViewerColumn getColumn

List of usage examples for org.eclipse.jface.viewers TreeViewerColumn getColumn

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers TreeViewerColumn getColumn.

Prototype

public TreeColumn getColumn() 

Source Link

Usage

From source file:org.eclipse.sirius.table.ui.tools.internal.editor.DTableViewerManager.java

License:Open Source License

/**
 * Add a new column in the table.<BR>
 * /*  w  w w  .  j  a  v a  2  s . c  o  m*/
 * @param newColumn
 *            The new targetColumn
 * @param index
 *            the index at which to place the newly created column
 * @param changeInput
 *            true if we must change the input of the SWT tree to null
 *            before adding the SWT column, false otherwise
 */
public void addNewColumn(final DColumn newColumn, final int index, final boolean changeInput) {
    DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.ADD_SWT_COLUMN_KEY);

    if (treeViewer.getTree() != null) {
        for (TreeColumn tCol : treeViewer.getTree().getColumns()) {
            Object data = tCol.getData(TABLE_COLUMN_DATA);
            if (data != null && data.equals(newColumn)) {
                return;
            }
        }
    }

    final TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT, index);
    if (newColumn.getLabel() != null) {
        DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.SET_COLUMN_NAME_KEY);

        TreeColumn treeColumn = treeViewerColumn.getColumn();

        ILabelProvider dTableColumnHeaderLabelProvider = new DTableColumnHeaderLabelProvider();

        String text = dTableColumnHeaderLabelProvider.getText(newColumn);
        treeColumn.setText(text);

        Image image = dTableColumnHeaderLabelProvider.getImage(newColumn);
        treeColumn.setImage(image);

        DslCommonPlugin.PROFILER.stopWork(SiriusTasksKey.SET_COLUMN_NAME_KEY);
    }
    if (newColumn.isVisible()) {
        if (newColumn.getWidth() != 0) {
            ((TreeColumnLayout) treeViewer.getControl().getParent().getLayout())
                    .setColumnData(treeViewerColumn.getColumn(), new ColumnPixelData(newColumn.getWidth()));
            if (treeViewerColumn.getColumn().getWidth() != newColumn.getWidth()) {
                treeViewerColumn.getColumn().setWidth(newColumn.getWidth());
            }
        } else {
            ((TreeColumnLayout) treeViewer.getControl().getParent().getLayout())
                    .setColumnData(treeViewerColumn.getColumn(), new ColumnWeightData(1));
            if (IS_GTK_OS) {
                // Do not launch treeViewerColumn.getColumn().pack() here
                // for windows because the size is computed only with the
                // headerText and under windows this size is fixed with this
                // value for the next pack. Under linux it's better with
                // this pack() here.
                // Not really understood...
                treeViewerColumn.getColumn().pack();
            }
        }
    } else {
        // Set the size of the column to 0
        ((TreeColumnLayout) treeViewer.getControl().getParent().getLayout())
                .setColumnData(treeViewerColumn.getColumn(), new ColumnPixelData(0));
    }

    // Add the LabelProvider with decorating feature
    ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
    DTableDecoratingLabelProvider labelProvider = new DTableDecoratingLabelProvider(newColumn, decorator);
    treeViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider));

    if (newColumn instanceof DFeatureColumn) {
        treeViewerColumn.setEditingSupport(
                new DFeatureColumnEditingSupport(treeViewer, (DFeatureColumn) newColumn, getEditingDomain(),
                        getAccessor(), getTableCommandFactory(), (AbstractDTableEditor) tableEditor));
    } else if (newColumn instanceof DTargetColumn) {
        treeViewerColumn.setEditingSupport(
                new DTargetColumnEditingSupport(treeViewer, (DTargetColumn) newColumn, getEditingDomain(),
                        getAccessor(), tableCommandFactory, (AbstractDTableEditor) tableEditor));
    }
    treeViewerColumn.getColumn().setData(TABLE_COLUMN_DATA, newColumn);
    treeViewerColumn.getColumn().addControlListener(tableViewerListener);
    treeViewerColumn.getColumn().addListener(SWT.Selection, sortListener);
    DslCommonPlugin.PROFILER.stopWork(SiriusTasksKey.ADD_SWT_COLUMN_KEY);
}

From source file:org.eclipse.team.internal.ccvs.ui.CVSHistoryTableProvider.java

License:Open Source License

/**
 * Creates the columns for the history table.
 *//*from   w  w  w  . j  av  a2  s.com*/
private void createColumns(TreeViewer tree, TableLayout layout) {
    SelectionListener headerListener = getColumnListener(viewer);

    // revision
    TreeViewerColumn viewerCol = new TreeViewerColumn(tree, SWT.NONE);
    viewerCol.setLabelProvider(new HistoryLabelProvider(COL_REVISIONID, this));
    TreeColumn col = viewerCol.getColumn();
    col.setData(COL_NAME, COL_REVISIONID_NAME);
    col.setResizable(true);
    col.setText(TeamUIMessages.GenericHistoryTableProvider_Revision);
    col.addSelectionListener(headerListener);

    // branches
    viewerCol = new TreeViewerColumn(tree, SWT.NONE);
    viewerCol.setLabelProvider(new HistoryLabelProvider(COL_BRANCHES, this));
    col = viewerCol.getColumn();
    col.setData(COL_NAME, COL_BRANCHES_NAME);
    col.setResizable(true);
    col.setText(CVSUIMessages.HistoryView_branches);
    col.addSelectionListener(headerListener);

    // tags
    viewerCol = new TreeViewerColumn(tree, SWT.NONE);
    viewerCol.setLabelProvider(new HistoryLabelProvider(COL_TAGS, this));
    col = viewerCol.getColumn();
    col.setData(COL_NAME, COL_TAGS_NAME);
    col.setResizable(true);
    col.setText(CVSUIMessages.HistoryView_tags);
    col.addSelectionListener(headerListener);

    // creation date
    viewerCol = new TreeViewerColumn(tree, SWT.NONE);
    viewerCol.setLabelProvider(new HistoryLabelProvider(COL_DATE, this));
    col = viewerCol.getColumn();
    col.setData(COL_NAME, COL_DATE_NAME);
    col.setResizable(true);
    col.setText(TeamUIMessages.GenericHistoryTableProvider_RevisionTime);
    col.addSelectionListener(headerListener);

    // author
    viewerCol = new TreeViewerColumn(tree, SWT.NONE);
    viewerCol.setLabelProvider(new HistoryLabelProvider(COL_AUTHOR, this));
    col = viewerCol.getColumn();
    col.setData(COL_NAME, COL_AUTHOR_NAME);
    col.setResizable(true);
    col.setText(TeamUIMessages.GenericHistoryTableProvider_Author);
    col.addSelectionListener(headerListener);

    //comment
    viewerCol = new TreeViewerColumn(tree, SWT.NONE);
    viewerCol.setLabelProvider(new HistoryLabelProvider(COL_COMMENT, this));
    col = viewerCol.getColumn();
    col.setData(COL_NAME, COL_COMMENT_NAME);
    col.setResizable(true);
    col.setText(TeamUIMessages.GenericHistoryTableProvider_Comment);
    col.addSelectionListener(headerListener);

    loadColumnLayout(layout);
}

From source file:org.eclipse.tracecompass.extension.internal.callstack.ui.views.stacktable.CallStackTableView.java

License:Open Source License

@Override
public void createPartControl(@Nullable Composite parent) {
    super.createPartControl(parent);
    SashForm sf = new SashForm(parent, SWT.NONE);
    /* Build the tree viewer part of the view */
    TreeViewer treeViewer = new TreeViewer(sf, SWT.FULL_SELECTION | SWT.H_SCROLL);
    fTreeViewer = treeViewer;//from www.ja v  a2  s .c o m
    treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
    final Tree tree = treeViewer.getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);
    TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT);
    column.getColumn().setText("CallSite");
    column.getColumn().setWidth(50);
    treeViewer.setContentProvider(new TreeContentProvider());
    treeViewer.setLabelProvider(new TreeLabelProvider());
}

From source file:org.eclipse.tracecompass.extension.internal.virtual.machine.analysis.ui.views.fusedvmview.SelectMachineDialog.java

License:Open Source License

private TreeViewer doCreateTreeViewer(Composite parent, Map<String, Machine> machines) {
    fCheckboxTreeViewer = new CheckboxTreeViewer(parent, SWT.BORDER);

    fContentProvider = new TmfNavigatorContentProvider() {

        @Override/*from   w  ww  .j  a v  a  2  s  .c o m*/
        public Object getParent(Object element) {
            if (element instanceof Machine) {
                Machine host = ((Machine) element).getHost();
                if (host != null) {
                    return host;
                }
                return element;
            } else if (element instanceof Processor) {
                return ((Processor) element).getMachine();
            }
            return null;
        }

        @Override
        public Object[] getElements(Object inputElement) {
            return getChildren(inputElement);
        }

        @Override
        public synchronized Object[] getChildren(Object parentElement) {
            if (parentElement instanceof List) {
                return ((List<?>) parentElement).toArray();
            } else if (parentElement instanceof Machine) {
                Machine m = (Machine) parentElement;
                Set<Processor> cpus = m.getCpus();
                if (!cpus.isEmpty()) {
                    Object[] array = { cpus, m.getContainers() };
                    return array;
                }
            } else if (parentElement instanceof Set) {
                return ((Set<?>) parentElement).toArray();
            }
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            Object[] children = getChildren(element);
            return children != null && children.length > 0;
        }

    };
    fCheckboxTreeViewer.setContentProvider(fContentProvider);
    fLabelProvider = new TmfNavigatorLabelProvider() {
        @Override
        public String getText(Object arg0) {
            if (arg0 instanceof Set<?>) {
                Set<?> set = (Set<?>) arg0;
                if (!set.isEmpty()) {
                    for (Object o : set) {
                        if (o instanceof Machine) {
                            return Attributes.CONTAINERS;
                        } else if (o instanceof Processor) {
                            return Attributes.CPUS;
                        }
                    }
                }
            }
            return arg0.toString();
        }
    };
    fCheckboxTreeViewer.setLabelProvider(fLabelProvider);
    fCheckboxTreeViewer.setComparator(new ViewerComparator());

    final Tree tree = fCheckboxTreeViewer.getTree();
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    tree.setLayoutData(gd);
    tree.setHeaderVisible(true);

    final TreeViewerColumn column = new TreeViewerColumn(fCheckboxTreeViewer, SWT.NONE);
    column.getColumn().setText(Messages.FusedVMView_SelectMachineActionNameText);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof String) {
                return (String) element;
            }
            return fLabelProvider.getText(element);
        }

        @Override
        public Image getImage(Object element) {
            return fLabelProvider.getImage(element);
        }
    });

    // Populate the list with the machines' names
    List<Machine> listMachines = new ArrayList<>(machines.values());
    fCheckboxTreeViewer.setInput(listMachines);
    column.getColumn().pack();

    fCheckboxTreeViewer.addCheckStateListener(new ICheckStateListener() {
        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            Object element = event.getElement();
            Object root = null;
            if (element instanceof Machine) {
                Machine m = (Machine) element;
                Machine host = m.getHost();
                if (host == null) {
                    /* We are the root of a machine */
                    m.setHighlighted(event.getChecked());
                    Set<Processor> cpus = m.getCpus();
                    for (Processor cpu : cpus) {
                        cpu.setHighlighted(event.getChecked());
                    }
                    Set<Machine> containers = m.getContainers();
                    for (Machine container : containers) {
                        container.setHighlighted(event.getChecked());
                    }
                } else {
                    /* We are at a container */
                    m.setHighlighted(event.getChecked());
                    host.setHighlighted(host.isChecked());
                }
            } else if (element instanceof Processor) {
                Boolean checked = event.getChecked();
                ((Processor) element).setHighlighted(checked);
                Object ancestor = fContentProvider.getParent(element);
                if (ancestor instanceof Machine) {
                    Machine m = (Machine) ancestor;
                    m.setHighlighted(m.isChecked());
                }
            } else if (element instanceof Set<?>) {
                /* We are looking at a set of containers or cpus */
                Set<?> set = (Set<?>) element;
                if (!set.isEmpty()) {
                    for (Object o : set) {
                        if (o instanceof Machine) {
                            ((Machine) o).setHighlighted(event.getChecked());
                        } else if (o instanceof Processor) {
                            ((Processor) o).setHighlighted(event.getChecked());
                        }
                        root = fContentProvider.getParent(o);
                    }
                }
            }
            if (root == null) {
                root = fContentProvider.getParent(element);
            }
            ((Machine) root).setHighlighted(((Machine) root).isChecked());
            /* Update the view because the selection changed */
            updateCheckedNodes(root);
        }
    });

    /* Initial setting of the checked state when we open the dialog */
    for (Machine m : listMachines) {
        updateCheckedNodes(m);
    }

    return fCheckboxTreeViewer;
}

From source file:org.eclipse.tracecompass.internal.tmf.ui.project.dialogs.offset.OffsetDialog.java

License:Open Source License

private void createViewer(Composite parent) {

    // Define the TableViewer
    fViewer = new FilteredTree(parent,
            SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER, new PatternFilter() {
                @Override//from  ww  w . j  a v  a 2 s .  co  m
                protected boolean isLeafMatch(Viewer viewer, Object element) {
                    return wordMatches(((TmfTraceElement) element).getElementPath());
                }
            }, true);

    // Make lines and make header visible
    final Tree tree = fViewer.getViewer().getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(fViewer.getViewer(),
            new FocusCellOwnerDrawHighlighter(fViewer.getViewer()));
    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
            fViewer.getViewer());
    TreeViewerEditor.create(fViewer.getViewer(), focusCellManager, actSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    final TextCellEditor textCellEditor = new TextCellEditor(fViewer.getViewer().getTree(), SWT.RIGHT);

    fViewer.getViewer().setColumnProperties(new String[] { Messages.OffsetDialog_TraceName,
            Messages.OffsetDialog_ReferenceTime, Messages.OffsetDialog_OffsetTime });

    TreeViewerColumn column = createTreeViewerColumn(Messages.OffsetDialog_TraceName, SWT.NONE);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return ((TmfTraceElement) element).getElementPath();
        }
    });

    column = createTreeViewerColumn(Messages.OffsetDialog_OffsetTime, SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (fOffsetMap.get(element) != 0) {
                return super.getText(OFFSET_FORMAT.format((long) fOffsetMap.get(element)));
            }
            return ""; //$NON-NLS-1$
        }
    });
    column.setEditingSupport(new OffsetEditingSupport(fViewer.getViewer(), textCellEditor));

    column = createTreeViewerColumn("", SWT.NONE); //$NON-NLS-1$
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return ""; //$NON-NLS-1$
        }
    });
    column.getColumn().setWidth(TREE_EDITOR_MIN_WIDTH);
    column.getColumn().setResizable(false);
    fButtonViewerColumn = column;

    column = createTreeViewerColumn(Messages.OffsetDialog_ReferenceTime, SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return super.getText(fRefTimeMap.get(element));
        }
    });
    column.setEditingSupport(new RefTimeEditingSupport(fViewer.getViewer(), textCellEditor));
    fRefTimeColumn = column.getColumn();

    column = createTreeViewerColumn(Messages.OffsetDialog_TargetTime, SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return super.getText(fTargetTimeMap.get(element));
        }
    });
    column.setEditingSupport(new TargetTimeEditingSupport(fViewer.getViewer(), textCellEditor));
    fTargetTimeColumn = column.getColumn();

    List<TmfTraceElement> traces = new ArrayList<>(fOffsetMap.keySet());
    Collections.sort(traces, new Comparator<TmfTraceElement>() {
        @Override
        public int compare(TmfTraceElement o1, TmfTraceElement o2) {
            IPath folder1 = new Path(o1.getElementPath()).removeLastSegments(1);
            IPath folder2 = new Path(o2.getElementPath()).removeLastSegments(1);
            if (folder1.equals(folder2)) {
                return o1.getName().compareToIgnoreCase(o2.getName());
            }
            if (folder1.isPrefixOf(folder2)) {
                return 1;
            } else if (folder2.isPrefixOf(folder1)) {
                return -1;
            }
            return folder1.toString().compareToIgnoreCase(folder2.toString());
        }
    });

    fViewer.getViewer().setContentProvider(new ArrayTreeContentProvider());
    fViewer.getViewer().setInput(traces);

    /* add button as tree editors to fourth column of every item */
    for (TreeItem treeItem : tree.getItems()) {
        TreeEditor treeEditor = new TreeEditor(tree);
        Button applyButton = new Button(tree, SWT.PUSH);
        applyButton.setText("<<"); //$NON-NLS-1$
        applyButton.setData(treeItem.getData());
        applyButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                TmfTraceElement traceElement = (TmfTraceElement) e.widget.getData();
                ITmfTimestamp targetTime = fTargetTimeMap.get(traceElement);
                ITmfTimestamp refTime = fRefTimeMap.get(traceElement);
                if (targetTime != null && refTime != null) {
                    long offset = new TmfNanoTimestamp(targetTime).getValue()
                            - new TmfNanoTimestamp(refTime).getValue();
                    fOffsetMap.put(traceElement, offset);
                    fViewer.getViewer().update(traceElement, null);
                }
            }
        });
        treeEditor.grabHorizontal = true;
        treeEditor.minimumWidth = TREE_EDITOR_MIN_WIDTH;
        treeEditor.setEditor(applyButton, treeItem, 2);
        treeItem.setData(EDITOR_KEY, applyButton);
    }

    /* put temporary values in maps to pack according to time formats */
    fRefTimeMap.put(traces.get(0), new TmfNanoTimestamp());
    fTargetTimeMap.put(traces.get(0), new TmfNanoTimestamp());
    fViewer.getViewer().update(traces.get(0), null);
    for (final TreeColumn treeColumn : tree.getColumns()) {
        if (treeColumn.getResizable()) {
            treeColumn.pack();
        }
    }
    fRefTimeMap.clear();
    fTargetTimeMap.clear();
    fViewer.getViewer().update(traces.get(0), null);

    for (TmfTraceElement traceElement : fOffsetMap.keySet()) {
        for (ITmfTrace parentTrace : TmfTraceManager.getInstance().getOpenedTraces()) {
            for (ITmfTrace trace : TmfTraceManager.getTraceSet(parentTrace)) {
                if (traceElement.getResource().equals(trace.getResource())) {
                    fRefTimeMap.put(traceElement, trace.getStartTime());
                    fViewer.getViewer().update(traceElement, null);
                    break;
                }
            }
            if (fRefTimeMap.get(traceElement) != null) {
                break;
            }
        }
    }

    /* open trace when double-clicking a tree item */
    tree.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            TmfTraceElement traceElement = (TmfTraceElement) e.item.getData();
            TmfOpenTraceHelper.openTraceFromElement(traceElement);
        }
    });

    tree.setFocus();
}

From source file:org.eclipse.tracecompass.internal.tmf.ui.project.dialogs.offset.OffsetDialog.java

License:Open Source License

private TreeViewerColumn createTreeViewerColumn(String title, int style) {
    final TreeViewerColumn viewerColumn = new TreeViewerColumn(fViewer.getViewer(), style);
    final TreeColumn column = viewerColumn.getColumn();
    column.setText(title);/*from www  . ja v  a  2s . c o m*/
    column.setResizable(true);
    return viewerColumn;
}

From source file:org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.TmfStatisticsViewer.java

License:Open Source License

/**
 * Initialize the content that will be drawn in this viewer
 *
 * @param parent/*from   ww w.j  av  a  2 s .c  o  m*/
 *            The parent of the control to create
 */
protected void initContent(Composite parent) {

    final List<TmfBaseColumnData> columnDataList = getColumnDataProvider().getColumnData();

    fSash = new SashForm(parent, SWT.HORIZONTAL);

    fTreeViewer = new TreeViewer(fSash, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    fPieChartViewer = new TmfPieChartViewer(fSash);
    fPieChartViewer.addEventTypeSelectionListener(new Listener() {

        @Override
        public void handleEvent(Event event) {
            String eventTypeName = event.text;
            if (getStatisticData().getRootNode() == null || fTreeViewer.getTree() == null) {
                return;
            }
            /* Get all the nodes corresponding to the event name */
            List<TmfStatisticsTreeNode> nodes = (List<TmfStatisticsTreeNode>) getStatisticData().getRootNode()
                    .findChildren(eventTypeName, true);
            if (nodes.isEmpty()) {
                /* Shouldn't happen, except for when selecting "Others" */
                return;
            }
            /* Only select the first in the collection */
            fTreeViewer.setSelection(new StructuredSelection(nodes.get(0)), true);
        }
    });

    /* Make sure the sash is split in 2 equal parts */
    fSash.setWeights(new int[] { 100, 100 });

    fTreeViewer.setContentProvider(new TmfTreeContentProvider());
    fTreeViewer.getTree().setHeaderVisible(true);
    fTreeViewer.setUseHashlookup(true);

    // Creates the columns defined by the column data provider
    for (final TmfBaseColumnData columnData : columnDataList) {
        final TreeViewerColumn treeColumn = new TreeViewerColumn(fTreeViewer, columnData.getAlignment());
        treeColumn.getColumn().setText(columnData.getHeader());
        treeColumn.getColumn().setWidth(columnData.getWidth());
        treeColumn.getColumn().setToolTipText(columnData.getTooltip());

        // If is dummy column
        if (columnData == columnDataList.get(TmfBaseColumnDataProvider.StatsColumn.DUMMY.getIndex())) {
            treeColumn.getColumn().setResizable(false);
        }

        // A comparator is defined.
        if (columnData.getComparator() != null) {
            // Adds a listener on the columns header for sorting purpose.
            treeColumn.getColumn().addSelectionListener(new SelectionAdapter() {

                private ViewerComparator reverseComparator;

                @Override
                public void widgetSelected(SelectionEvent e) {
                    // Initializes the reverse comparator once.
                    if (reverseComparator == null) {
                        reverseComparator = new ViewerComparator() {
                            @Override
                            public int compare(Viewer viewer, Object e1, Object e2) {
                                return -1 * columnData.getComparator().compare(viewer, e1, e2);
                            }
                        };
                    }

                    if (fTreeViewer.getTree().getSortDirection() == SWT.UP
                            || fTreeViewer.getTree().getSortColumn() != treeColumn.getColumn()) {
                        /*
                         * Puts the descendant order if the old order was up
                         * or if the selected column has changed.
                         */
                        fTreeViewer.setComparator(columnData.getComparator());
                        fTreeViewer.getTree().setSortDirection(SWT.DOWN);
                    } else {
                        /*
                         * Puts the ascendant ordering if the selected
                         * column hasn't changed.
                         */
                        fTreeViewer.setComparator(reverseComparator);
                        fTreeViewer.getTree().setSortDirection(SWT.UP);
                    }
                    fTreeViewer.getTree().setSortColumn(treeColumn.getColumn());
                }
            });
        }
        treeColumn.setLabelProvider(columnData.getLabelProvider());
    }

    // Handler that will draw the percentages and the bar charts.
    fTreeViewer.getTree().addListener(SWT.EraseItem, new Listener() {
        @Override
        public void handleEvent(Event event) {
            if (columnDataList.get(event.index).getPercentageProvider() != null) {

                TmfStatisticsTreeNode node = (TmfStatisticsTreeNode) event.item.getData();

                // If node is hidden, exit immediately.
                if (TmfBaseColumnDataProvider.HIDDEN_FOLDER_LEVELS.contains(node.getName())) {
                    return;
                }

                // Otherwise, get percentage and draw bar and text if
                // applicable.
                double percentage = columnDataList.get(event.index).getPercentageProvider().getPercentage(node);

                // The item is selected.
                if ((event.detail & SWT.SELECTED) > 0) {
                    // Draws our own background to avoid overwriting the
                    // bar.
                    event.gc.fillRectangle(event.x, event.y, event.width, event.height);
                    event.detail &= ~SWT.SELECTED;
                }

                // Drawing the percentage text
                // if events are present in top node
                // and the current node is not the top node
                // and if is total or partial events column.
                // If not, exit the method.
                if (!((event.index == TmfBaseColumnDataProvider.StatsColumn.TOTAL.getIndex()
                        || event.index == TmfBaseColumnDataProvider.StatsColumn.PARTIAL.getIndex())
                        && node != node.getTop())) {
                    return;
                }

                long eventValue = event.index == TmfBaseColumnDataProvider.StatsColumn.TOTAL.getIndex()
                        ? node.getTop().getValues().getTotal()
                        : node.getTop().getValues().getPartial();

                if (eventValue != 0) {

                    int oldAlpha = event.gc.getAlpha();
                    Color oldForeground = event.gc.getForeground();
                    Color oldBackground = event.gc.getBackground();

                    // Bar to draw
                    if (percentage != 0) {
                        /*
                         * Draws a transparent gradient rectangle from the
                         * color of foreground and background.
                         */
                        int barWidth = (int) ((fTreeViewer.getTree().getColumn(event.index).getWidth() - 8)
                                * percentage);
                        event.gc.setAlpha(64);
                        event.gc.setForeground(event.item.getDisplay().getSystemColor(SWT.COLOR_BLUE));
                        event.gc.setBackground(
                                event.item.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
                        event.gc.fillGradientRectangle(event.x, event.y, barWidth, event.height, true);
                        event.gc.drawRectangle(event.x, event.y, barWidth, event.height);

                        // Restore old values
                        event.gc.setBackground(oldBackground);
                        event.gc.setAlpha(oldAlpha);
                        event.detail &= ~SWT.BACKGROUND;

                    }

                    String percentageText = TmfStatisticsFormatter.toPercentageText(percentage);
                    String absoluteNumberText = TmfStatisticsFormatter.toColumnData(node,
                            TmfBaseColumnDataProvider.StatsColumn.getColumn(event.index));

                    if (event.width > event.gc.stringExtent(percentageText).x
                            + event.gc.stringExtent(absoluteNumberText).x) {
                        int textHeight = event.gc.stringExtent(percentageText).y;
                        event.gc.setForeground(event.item.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
                        event.gc.drawText(percentageText, event.x, event.y + (event.height - textHeight) / 2,
                                true);
                    }

                    // Restores old values
                    event.gc.setForeground(oldForeground);

                }
            }
        }

    });

    // Initializes the comparator parameters
    fTreeViewer.setComparator(columnDataList.get(0).getComparator());
    fTreeViewer.getTree().setSortColumn(fTreeViewer.getTree().getColumn(0));
    fTreeViewer.getTree().setSortDirection(SWT.DOWN);
}

From source file:org.eclipse.tracecompass.tmf.ui.project.dialogs.offset.internal.OffsetDialog.java

License:Open Source License

private void createViewer(Composite parent) {

    // Define the TableViewer
    fViewer = new FilteredTree(parent,
            SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER, new PatternFilter() {
                @Override/*www .  ja va  2  s.co  m*/
                protected boolean isLeafMatch(Viewer viewer, Object element) {
                    return wordMatches(((TmfTraceElement) element).getElementPath());
                }
            }, true);

    // Make lines and make header visible
    final Tree tree = fViewer.getViewer().getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(fViewer.getViewer(),
            new FocusCellOwnerDrawHighlighter(fViewer.getViewer()));
    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
            fViewer.getViewer());
    TreeViewerEditor.create(fViewer.getViewer(), focusCellManager, actSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    final TextCellEditor textCellEditor = new TextCellEditor(fViewer.getViewer().getTree(), SWT.RIGHT);

    fViewer.getViewer().setColumnProperties(new String[] { Messages.OffsetDialog_TraceName,
            Messages.OffsetDialog_ReferenceTime, Messages.OffsetDialog_OffsetTime });

    TreeViewerColumn column = createTreeViewerColumn(Messages.OffsetDialog_TraceName, SWT.NONE);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return ((TmfTraceElement) element).getElementPath();
        }
    });

    column = createTreeViewerColumn(Messages.OffsetDialog_OffsetTime, SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            Long offset = fOffsetMap.get(element);
            if (offset == null || offset == 0) {
                return ""; //$NON-NLS-1$
            }
            return super.getText(OFFSET_FORMAT.format(offset.longValue()));
        }
    });
    column.setEditingSupport(new OffsetEditingSupport(fViewer.getViewer(), textCellEditor));

    column = createTreeViewerColumn("", SWT.NONE); //$NON-NLS-1$
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return ""; //$NON-NLS-1$
        }
    });
    column.getColumn().setWidth(TREE_EDITOR_MIN_WIDTH);
    column.getColumn().setResizable(false);
    fButtonViewerColumn = column;

    column = createTreeViewerColumn(Messages.OffsetDialog_ReferenceTime, SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return super.getText(fRefTimeMap.get(element));
        }
    });
    column.setEditingSupport(new RefTimeEditingSupport(fViewer.getViewer(), textCellEditor));
    fRefTimeColumn = column.getColumn();

    column = createTreeViewerColumn(Messages.OffsetDialog_TargetTime, SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return super.getText(fTargetTimeMap.get(element));
        }
    });
    column.setEditingSupport(new TargetTimeEditingSupport(fViewer.getViewer(), textCellEditor));
    fTargetTimeColumn = column.getColumn();

    List<TmfTraceElement> traces = new ArrayList<>(fOffsetMap.keySet());
    Collections.sort(traces, new Comparator<TmfTraceElement>() {
        @Override
        public int compare(TmfTraceElement o1, TmfTraceElement o2) {
            IPath folder1 = new Path(o1.getElementPath()).removeLastSegments(1);
            IPath folder2 = new Path(o2.getElementPath()).removeLastSegments(1);
            if (folder1.equals(folder2)) {
                return o1.getName().compareToIgnoreCase(o2.getName());
            }
            if (folder1.isPrefixOf(folder2)) {
                return 1;
            } else if (folder2.isPrefixOf(folder1)) {
                return -1;
            }
            return folder1.toString().compareToIgnoreCase(folder2.toString());
        }
    });

    fViewer.getViewer().setContentProvider(new ArrayTreeContentProvider());
    fViewer.getViewer().setInput(traces);

    /* add button as tree editors to fourth column of every item */
    for (TreeItem treeItem : tree.getItems()) {
        TreeEditor treeEditor = new TreeEditor(tree);
        Button applyButton = new Button(tree, SWT.PUSH);
        applyButton.setText("<<"); //$NON-NLS-1$
        applyButton.setData(treeItem.getData());
        applyButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                TmfTraceElement traceElement = (TmfTraceElement) e.widget.getData();
                ITmfTimestamp targetTime = fTargetTimeMap.get(traceElement);
                ITmfTimestamp refTime = fRefTimeMap.get(traceElement);
                if (targetTime != null && refTime != null) {
                    long offset = targetTime.toNanos() - refTime.toNanos();
                    fOffsetMap.put(traceElement, offset);
                    fViewer.getViewer().update(traceElement, null);
                }
            }
        });
        treeEditor.grabHorizontal = true;
        treeEditor.minimumWidth = TREE_EDITOR_MIN_WIDTH;
        treeEditor.setEditor(applyButton, treeItem, 2);
        treeItem.setData(EDITOR_KEY, applyButton);
    }

    /* put temporary values in maps to pack according to time formats */
    fRefTimeMap.put(traces.get(0), TmfTimestamp.fromNanos(0));
    fTargetTimeMap.put(traces.get(0), TmfTimestamp.fromNanos(0));
    fViewer.getViewer().update(traces.get(0), null);
    for (final TreeColumn treeColumn : tree.getColumns()) {
        if (treeColumn.getResizable()) {
            treeColumn.pack();
        }
    }
    fRefTimeMap.clear();
    fTargetTimeMap.clear();
    fViewer.getViewer().update(traces.get(0), null);

    for (TmfTraceElement traceElement : fOffsetMap.keySet()) {
        for (ITmfTrace parentTrace : TmfTraceManager.getInstance().getOpenedTraces()) {
            for (ITmfTrace trace : TmfTraceManager.getTraceSet(parentTrace)) {
                if (traceElement.getResource().equals(trace.getResource())) {
                    fRefTimeMap.put(traceElement, trace.getStartTime());
                    fViewer.getViewer().update(traceElement, null);
                    break;
                }
            }
            if (fRefTimeMap.get(traceElement) != null) {
                break;
            }
        }
    }

    /* open trace when double-clicking a tree item */
    tree.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            TmfTraceElement traceElement = (TmfTraceElement) e.item.getData();
            TmfOpenTraceHelper.openTraceFromElement(traceElement);
        }
    });

    tree.setFocus();
}

From source file:org.eclipse.tracecompass.tmf.ui.project.wizards.SelectRootNodeWizardPage.java

License:Open Source License

private TreeViewer doCreateTreeViewer(Composite parent) {
    fCheckboxTreeViewer = new CheckboxTreeViewer(parent, SWT.BORDER);

    fContentProvider = new TmfNavigatorContentProvider() {

        @Override// ww  w .  ja  va 2s  . c o  m
        public Object[] getElements(Object inputElement) {
            return getChildren(inputElement);
        }

        @Override
        public synchronized Object[] getChildren(Object parentElement) {
            if (parentElement instanceof TmfExperimentElement) {
                return ((TmfExperimentElement) parentElement).getTraces().toArray();
            }
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            if (element instanceof TmfExperimentElement) {
                return !(((TmfExperimentElement) element).getTraces().isEmpty());
            }
            return false;
        }
    };
    fCheckboxTreeViewer.setContentProvider(fContentProvider);
    fLabelProvider = new TmfNavigatorLabelProvider();
    fCheckboxTreeViewer.setLabelProvider(fLabelProvider);
    fCheckboxTreeViewer.setComparator(new ViewerComparator());

    final Tree tree = fCheckboxTreeViewer.getTree();
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    tree.setLayoutData(gd);
    tree.setHeaderVisible(true);

    final TreeViewerColumn column = new TreeViewerColumn(fCheckboxTreeViewer, SWT.NONE);
    column.getColumn().setText(Messages.SelectRootNodeWizardPage_TraceColumnHeader);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return fLabelProvider.getText(element);
        }

        @Override
        public Image getImage(Object element) {
            return fLabelProvider.getImage(element);
        }
    });

    // Populate the list of traces from the experiment
    fCheckboxTreeViewer.setInput(fExperiment);
    column.getColumn().pack();

    fCheckboxTreeViewer.addCheckStateListener(new ICheckStateListener() {
        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            Object element = event.getElement();
            // Uncheck all elements
            for (Object checkedElement : fCheckboxTreeViewer.getCheckedElements()) {
                fCheckboxTreeViewer.setChecked(checkedElement, false);
            }
            fCheckboxTreeViewer.setChecked(element, event.getChecked());
            setPageComplete(event.getChecked());
        }
    });

    setPageComplete(true);
    // Checks the first element by default
    fCheckboxTreeViewer.getTree().getItem(0).setChecked(true);
    return fCheckboxTreeViewer;
}

From source file:org.eclipse.tracecompass.tmf.ui.project.wizards.SelectTracesWizardPage.java

License:Open Source License

private TreeViewer doCreateTreeViewer(Composite parent) {
    fCheckboxTreeViewer = new CheckboxTreeViewer(parent, SWT.BORDER);
    fContentProvider = new TmfNavigatorContentProvider() {

        @Override/* ww  w  .  j av a 2  s .  c  o  m*/
        public Object[] getElements(Object inputElement) {
            return getChildren(inputElement);
        }

        @Override
        public synchronized Object[] getChildren(Object parentElement) {
            // We only care about the content of trace folders
            if (parentElement instanceof TmfTraceFolder) {
                Object[] children = super.getChildren(parentElement);
                List<ITmfProjectModelElement> filteredChildren = new ArrayList<>();
                for (Object child : children) {
                    if (child instanceof TmfTraceElement) {
                        TmfTraceElement traceElement = (TmfTraceElement) child;
                        String traceType = traceElement.getTraceType();
                        if (traceType != null && TmfTraceType.getTraceType(traceType) != null) {
                            filteredChildren.add(traceElement);
                        }
                    } else if (child instanceof TmfTraceFolder) {
                        filteredChildren.add((TmfTraceFolder) child);
                    }
                }
                return filteredChildren.toArray();
            }
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            Object[] children = getChildren(element);
            return children != null && children.length > 0;
        }
    };
    fCheckboxTreeViewer.setContentProvider(fContentProvider);
    fLabelProvider = new TmfNavigatorLabelProvider();
    fCheckboxTreeViewer.setLabelProvider(fLabelProvider);
    fCheckboxTreeViewer.setSorter(new ViewerSorter());

    final Tree tree = fCheckboxTreeViewer.getTree();
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    tree.setLayoutData(gd);
    tree.setHeaderVisible(true);

    final TreeViewerColumn column = new TreeViewerColumn(fCheckboxTreeViewer, SWT.NONE);
    column.getColumn().setWidth(COLUMN_WIDTH);
    column.getColumn().setText(Messages.SelectTracesWizardPage_TraceColumnHeader);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return fLabelProvider.getText(element);
        }

        @Override
        public Image getImage(Object element) {
            return fLabelProvider.getImage(element);
        }
    });

    // Get the list of traces already part of the experiment
    fPreviousTraces = new HashMap<>();
    for (ITmfProjectModelElement child : fExperiment.getChildren()) {
        if (child instanceof TmfTraceElement) {
            TmfTraceElement trace = (TmfTraceElement) child;
            String name = trace.getElementPath();
            fPreviousTraces.put(name, trace);
        }
    }

    // Populate the list of traces to choose from
    Set<String> keys = fPreviousTraces.keySet();
    TmfTraceFolder traceFolder = fProject.getTracesFolder();
    fCheckboxTreeViewer.setInput(traceFolder);

    // Set the checkbox for the traces already included
    setCheckedAlreadyIncludedTraces(keys, fContentProvider.getElements(fCheckboxTreeViewer.getInput()));

    fCheckboxTreeViewer.addCheckStateListener(new ICheckStateListener() {
        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            Object element = event.getElement();
            setSubtreeChecked(element, event.getChecked());
            maintainCheckIntegrity(element);
        }
    });

    return fCheckboxTreeViewer;
}