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

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

Introduction

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

Prototype

public TreeViewerColumn(TreeViewer viewer, TreeColumn column) 

Source Link

Document

Creates a new viewer column for the given TreeViewer on the given TreeColumn .

Usage

From source file:org.eclipse.birt.report.designer.internal.ui.views.attributes.widget.AdvancePropertyDescriptor.java

License:Open Source License

public Control createControl(Composite parent) {
    container = new Composite(parent, SWT.NONE);
    GridLayout layout = UIUtil.createGridLayoutWithoutMargin(1, false);
    layout.marginTop = 2;/*ww  w .  j  ava  2  s.  co m*/
    layout.marginWidth = layout.marginBottom = 1;
    container.setLayout(layout);
    container.setLayoutData(new GridData(GridData.FILL_BOTH));

    initSortingType();

    viewer = new CustomTreeViewer(container, SWT.FULL_SELECTION);

    tableTree = viewer.getTree();
    GridData gd = new GridData(GridData.FILL_BOTH);
    tableTree.setLayoutData(gd);
    tableTree.setHeaderVisible(true);
    tableTree.setLinesVisible(true);

    viewer.setContentProvider(provider.getContentProvier());

    TreeViewerColumn tvc1 = new TreeViewerColumn(viewer, SWT.NONE);
    tvc1.getColumn().setText(COLUMN_TITLE_PROPERTY);
    tvc1.getColumn().setWidth(300);
    tvc1.setLabelProvider(new DelegatingStyledCellLabelProvider(provider.getNameLabelProvier()));

    TreeViewerColumn tvc2 = new TreeViewerColumn(viewer, SWT.NONE);
    tvc2.getColumn().setText(COLUMN_TITLE_VALUE);
    tvc2.getColumn().setWidth(400);
    tvc2.setLabelProvider(new DelegatingStyledCellLabelProvider(provider.getValueLabelProvier()));

    AlphabeticallyViewSorter sorter = new AlphabeticallyViewSorter();
    sorter.setAscending(true);
    viewer.setSorter(sorter);

    hookControl();

    // create a new table tree editor
    tableTreeEditor = new TreeEditor(tableTree);

    // create the editor listener
    createEditorListener();

    MementoBuilder builder = new MementoBuilder();
    if ((propertySheetMemento = builder.getRootMemento().getChild(IPageLayout.ID_PROP_SHEET)) == null) {
        propertySheetMemento = builder.getRootMemento().createChild(IPageLayout.ID_PROP_SHEET,
                MementoElement.Type_View);
    }

    if ((viewerMemento = propertySheetMemento.getChild(propertyViewerID)) == null) {
        viewerMemento = propertySheetMemento.createChild(propertyViewerID, MementoElement.Type_Viewer);
    }

    return container;
}

From source file:org.eclipse.birt.report.designer.internal.ui.views.property.ReportPropertySheetPage.java

License:Open Source License

public void createControl(Composite parent) {
    container = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.marginWidth = layout.marginHeight = 0;
    container.setLayout(layout);/* www.  jav a 2s  .c  o  m*/
    title = new TabbedPropertyTitle(container, FormWidgetFactory.getInstance());
    title.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    title.setActions(
            new Action[] { new GroupSortingAction(), new AlphabeticSortingAction(), new LocalModelAction() });

    Composite viewerContainer = new Composite(container, SWT.NONE);
    layout = new GridLayout();
    layout.marginWidth = 10;
    layout.marginHeight = 3;
    viewerContainer.setLayout(layout);
    viewerContainer.setLayoutData(new GridData(GridData.FILL_BOTH));

    viewer = new CustomTreeViewer(viewerContainer, SWT.FULL_SELECTION);
    tableTree = viewer.getTree();
    tableTree.setLayoutData(new GridData(GridData.FILL_BOTH));
    tableTree.setHeaderVisible(true);
    tableTree.setLinesVisible(true);

    viewer.setContentProvider(provider);

    TreeViewerColumn tvc1 = new TreeViewerColumn(viewer, SWT.NONE);
    tvc1.getColumn().setText(COLUMN_TITLE_PROPERTY);
    tvc1.getColumn().setWidth(300);
    tvc1.setLabelProvider(new DelegatingStyledCellLabelProvider(new ReportPropertySheetNameLabelProvider()));

    TreeViewerColumn tvc2 = new TreeViewerColumn(viewer, SWT.NONE);
    tvc2.getColumn().setText(COLUMN_TITLE_VALUE);
    tvc2.getColumn().setWidth(400);
    tvc2.setLabelProvider(new DelegatingStyledCellLabelProvider(new ReportPropertySheetValueLabelProvider()));

    AlphabeticallyViewSorter sorter = new AlphabeticallyViewSorter();
    sorter.setAscending(true);
    viewer.setSorter(sorter);

    hookControl();

    // create a new table tree editor
    tableTreeEditor = new TreeEditor(tableTree);

    // create the editor listener
    createEditorListener();

    handleGlobalAction();

    // suport the mediator
    SessionHandleAdapter.getInstance().getMediator(moduleHandle).addColleague(this);

    FormWidgetFactory.getInstance().paintFormStyle(parent);
    FormWidgetFactory.getInstance().adapt(parent);

    IWorkbenchPage page = getSite().getPage();

    MementoBuilder builder = new MementoBuilder();
    if ((propertySheetMemento = builder.getRootMemento().getChild(IPageLayout.ID_PROP_SHEET)) == null) {
        propertySheetMemento = builder.getRootMemento().createChild(IPageLayout.ID_PROP_SHEET,
                MementoElement.Type_View);
    }

    if ((viewerMemento = propertySheetMemento.getChild(propertyViewerID)) == null) {
        viewerMemento = propertySheetMemento.createChild(propertyViewerID, MementoElement.Type_Viewer);
    }

    page.addSelectionListener(this);
    // handleSelectionChanged( page.getSelection( ) );
}

From source file:org.eclipse.buildship.ui.view.execution.ExecutionPage.java

License:Open Source License

@Override
public FilteredTree createPageWithResult(Composite parent) {
    // configure tree
    FilteredTree filteredTree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL,
            new PatternFilter(true));
    filteredTree.setShowFilterControls(false);
    filteredTree.getViewer().getTree().setHeaderVisible(this.state.isShowTreeHeader());

    this.nameColumn = new TreeViewerColumn(filteredTree.getViewer(), SWT.NONE);
    this.nameColumn.getColumn().setText(ExecutionViewMessages.Tree_Column_Operation_Name_Text);
    this.nameColumn.getColumn().setWidth(this.state.getHeaderNameColumnWidth());

    this.durationColumn = new TreeViewerColumn(filteredTree.getViewer(), SWT.RIGHT);
    this.durationColumn.getColumn().setText(ExecutionViewMessages.Tree_Column_Operation_Duration_Text);
    this.durationColumn.getColumn().setWidth(this.state.getHeaderDurationColumnWidth());

    // configure data binding
    IListProperty childrenProperty = new OperationItemChildrenListProperty();
    ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
            childrenProperty.listFactory(), null);
    filteredTree.getViewer().setContentProvider(contentProvider);

    IObservableSet knownElements = contentProvider.getKnownElements();
    attachLabelProvider(OperationItem.FIELD_NAME, OperationItem.FIELD_IMAGE, knownElements, this.nameColumn);
    attachLabelProvider(OperationItem.FIELD_DURATION, null, knownElements, this.durationColumn);

    // keep header size synchronized between pages
    this.nameColumn.getColumn().addControlListener(new ControlAdapter() {

        @Override/*  w w  w  . java2 s .  co m*/
        public void controlResized(ControlEvent e) {
            int newWidth = ExecutionPage.this.nameColumn.getColumn().getWidth();
            ExecutionPage.this.state.setHeaderNameColumnWidth(newWidth);
            ExecutionsView view = (ExecutionsView) getSite().getViewSite().getPart();
            for (ExecutionPage page : FluentIterable.from(view.getPages()).filter(ExecutionPage.class)) {
                if (page != ExecutionPage.this) {
                    page.nameColumn.getColumn().setWidth(newWidth);
                }
            }
        }
    });

    this.durationColumn.getColumn().addControlListener(new ControlAdapter() {

        @Override
        public void controlResized(ControlEvent e) {
            int newWidth = ExecutionPage.this.durationColumn.getColumn().getWidth();
            ExecutionPage.this.state.setHeaderDurationColumnWidth(newWidth);
            ExecutionsView view = (ExecutionsView) getSite().getViewSite().getPart();
            for (ExecutionPage page : FluentIterable.from(view.getPages()).filter(ExecutionPage.class)) {
                if (page != ExecutionPage.this) {
                    page.durationColumn.getColumn().setWidth(newWidth);
                }
            }
        }
    });

    // manage the selection history
    this.selectionHistoryManager = new SelectionHistoryManager(filteredTree.getViewer());

    // set tree root node
    OperationItem root = new OperationItem();
    filteredTree.getViewer().setInput(root);

    // listen to progress events
    this.request.addTypedProgressListeners(new ExecutionProgressListener(this, root));

    // return the tree as the outermost page control
    return filteredTree;
}

From source file:org.eclipse.buildship.ui.view.task.TaskView.java

License:Open Source License

@Override
public void createPartControl(Composite parent) {
    // the top-level control changing its content depending on whether the content provider
    // contains task data to display or not
    this.pages = new PageBook(parent, SWT.NONE);

    // if there is no task data to display, show only a label
    this.emptyInputPage = new Label(this.pages, SWT.NONE);
    this.emptyInputPage.setText(TaskViewMessages.Label_No_Gradle_Projects);

    // if there is a problem loading the task data, show an error label
    this.errorInputPage = new Label(this.pages, SWT.NONE);
    this.errorInputPage.setText(TaskViewMessages.Label_Reload_Error);
    this.errorInputPage.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));

    // if there is task data to display, show the task tree and the search label on the bottom
    this.nonEmptyInputPage = new Composite(this.pages, SWT.NONE);
    GridLayout gridLayout = new GridLayout(1, false);
    gridLayout.marginWidth = gridLayout.marginHeight = gridLayout.verticalSpacing = 0;
    this.nonEmptyInputPage.setLayout(gridLayout);

    // add tree with two columns
    this.filteredTree = new FilteredTree(this.nonEmptyInputPage, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI,
            new PatternFilter(true));
    this.filteredTree.setShowFilterControls(false);
    this.treeViewer = this.filteredTree.getViewer();
    this.treeViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));

    // set filter, comparator, and content provider
    this.treeViewer.addFilter(TaskNodeViewerFilter.createFor(getState()));
    this.treeViewer.setComparator(TaskNodeViewerSorter.createFor(this.state));
    this.treeViewer.setContentProvider(new TaskViewContentProvider(this, CorePlugin.modelRepositoryProvider(),
            CorePlugin.processStreamsProvider(), CorePlugin.workspaceOperations()));

    // add columns to the tree and configure label providers
    ILabelDecorator labelDecorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();

    TreeViewerColumn treeViewerNameColumn = new TreeViewerColumn(this.treeViewer, SWT.LEFT);
    treeViewerNameColumn.setLabelProvider(
            new TaskDecoratingStyledCellLabelProvider(new TaskNameLabelProvider(), labelDecorator, null));
    final TreeColumn taskNameColumn = treeViewerNameColumn.getColumn();
    taskNameColumn.setText(TaskViewMessages.Tree_Column_Name_Text);
    taskNameColumn.setWidth(this.state.getHeaderNameColumnWidth());

    TreeViewerColumn treeViewerDescriptionColumn = new TreeViewerColumn(this.treeViewer, SWT.LEFT);
    treeViewerDescriptionColumn.setLabelProvider(new TaskDescriptionLabelProvider());
    final TreeColumn taskDescriptionColumn = treeViewerDescriptionColumn.getColumn();
    taskDescriptionColumn.setText(TaskViewMessages.Tree_Column_Description_Text);
    taskDescriptionColumn.setWidth(this.state.getHeaderDescriptionColumnWidth());

    // when changed save the header width into the state
    taskNameColumn.addControlListener(new ControlAdapter() {

        @Override/*  w  w  w  .j  a v  a2  s  . c o  m*/
        public void controlResized(ControlEvent e) {
            TaskView.this.state.setHeaderNameColumnWidth(taskNameColumn.getWidth());
        }
    });

    taskDescriptionColumn.addControlListener(new ControlAdapter() {
        @Override
        public void controlResized(ControlEvent e) {
            TaskView.this.state.setHeaderDescriptionColumnWidth(taskDescriptionColumn.getWidth());
        }
    });

    // manage the selection history as required for the task execution and let the
    // SelectionHistoryManager propagate the NodeSelection to the Workbench
    this.selectionHistoryManager = new SelectionHistoryManager(this.treeViewer);
    getSite().setSelectionProvider(this.selectionHistoryManager);

    // create toolbar actions, menu items, event listeners, etc.
    this.uiContributionManager = new UiContributionManager(this);
    this.uiContributionManager.wire();

    // set initial content (use fetch strategy LOAD_IF_NOT_CACHED since
    // the model might already be available in case a project import has
    // just happened)
    reload(FetchStrategy.LOAD_IF_NOT_CACHED);
}

From source file:org.eclipse.cdt.codan.internal.ui.preferences.ProblemsTreeEditor.java

License:Open Source License

public ProblemsTreeEditor(Composite parent, IProblemProfile profile) {
    super(PreferenceConstants.P_PROBLEMS, CodanUIMessages.ProblemsTreeEditor_Problems, parent);
    setEmptySelectionAllowed(true);//  w w  w  .j  a v  a 2s . c  o m
    getTreeViewer().getTree().setHeaderVisible(true);
    // getTreeViewer().getTree().
    getTreeViewer().setContentProvider(new ProblemsContentProvider());
    getTreeViewer().setCheckStateProvider(new ProblemsCheckStateProvider());
    //getTreeViewer().getTree().
    ColumnViewerToolTipSupport.enableFor(getTreeViewer(), ToolTip.RECREATE);
    // column Name
    TreeViewerColumn column1 = new TreeViewerColumn(getTreeViewer(), SWT.NONE);
    column1.getColumn().setWidth(300);
    column1.getColumn().setText(CodanUIMessages.ProblemsTreeEditor_NameColumn);
    column1.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof IProblem) {
                IProblem p = (IProblem) element;
                return p.getName();
            }
            if (element instanceof IProblemCategory) {
                IProblemCategory p = (IProblemCategory) element;
                return p.getName();
            }
            return null;
        }

        @Override
        public boolean useNativeToolTip(Object object) {
            return true;
        }

        @Override
        public String getToolTipText(Object element) {
            if (element instanceof IProblem) {
                IProblem p = (IProblem) element;
                String sampleMessage = getSampleMessage(p);
                int wrapLen = sampleMessage.length();
                if (wrapLen < 60)
                    wrapLen = 60;
                if (wrapLen > 100)
                    wrapLen = 100;
                String toolTip = ""; //$NON-NLS-1$
                String description = p.getDescription();
                if (description != null) {
                    toolTip = wrapText(description, wrapLen);
                    toolTip += "\n\n"; //$NON-NLS-1$
                }
                toolTip += CodanUIMessages.ProblemsTreeEditor_ToolTip;
                toolTip += "\n  "; //$NON-NLS-1$
                toolTip += wrapText(sampleMessage, wrapLen);
                return toolTip;
            }
            return super.getToolTipText(element);
        }

        private String wrapText(String description, int i) {
            String result = ""; //$NON-NLS-1$
            while (description.length() > i) {
                int k = description.lastIndexOf(' ', i);
                if (k < 0)
                    k = i;
                result += description.substring(0, k);
                result += '\n';
                description = description.substring(k);
            }
            return result + description;
        }
    });
    // column Severity
    TreeViewerColumn column2 = new TreeViewerColumn(getTreeViewer(), SWT.NONE);
    column2.getColumn().setWidth(100);
    column2.getColumn().setText(CodanUIMessages.ProblemsTreeEditor_SeverityColumn);
    column2.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public Image getImage(Object element) {
            if (element instanceof IProblem) {
                IProblem p = (IProblem) element;
                switch (p.getSeverity().intValue()) {
                case IMarker.SEVERITY_INFO:
                    return CodanUIActivator.getDefault().getImage(ImageConstants.ICON_INFO);
                case IMarker.SEVERITY_WARNING:
                    return CodanUIActivator.getDefault().getImage(ImageConstants.ICON_WARNING);
                case IMarker.SEVERITY_ERROR:
                    return CodanUIActivator.getDefault().getImage(ImageConstants.ICON_ERROR);
                }
            }
            return null;
        }

        @Override
        public String getText(Object element) {
            if (element instanceof IProblem) {
                IProblem p = (IProblem) element;
                return p.getSeverity().toTranslatableString();
            }
            return null;
        }
    });
    column2.setEditingSupport(new EditingSupport(getTreeViewer()) {
        @Override
        protected boolean canEdit(Object element) {
            return element instanceof IProblem;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            return new ComboBoxCellEditor(getTreeViewer().getTree(), CodanSeverity.stringValues());
        }

        @Override
        protected Object getValue(Object element) {
            return ((IProblem) element).getSeverity().intValue();
        }

        @Override
        protected void setValue(Object element, Object value) {
            int index = ((Integer) value).intValue();
            CodanSeverity val = CodanSeverity.values()[index];
            ((IProblemWorkingCopy) element).setSeverity(val);
            getTreeViewer().update(element, null);
        }
    });
    getTreeViewer().setAutoExpandLevel(2);
    codanPreferencesLoader.setInput(profile);
    getViewer().setInput(profile);
}

From source file:org.eclipse.cdt.embsysregview.views.EmbSysRegView.java

License:Open Source License

/**
 * This is a callback that creates the viewer and initialize it.
 *//*from w ww.j a v  a  2  s . co m*/
public void createPartControl(final Composite parent) {
    Bundle bundle = Platform.getBundle("org.eclipse.cdt.embsysregview");
    URL fileURL = bundle.getEntry("icons/selected_register.png");
    URL fileURL2 = bundle.getEntry("icons/unselected_register.png");
    URL fileURL3 = bundle.getEntry("icons/selected_field.png");
    URL fileURL4 = bundle.getEntry("icons/unselected_field.png");
    URL fileURL5 = bundle.getEntry("icons/info.png");
    URL fileURL6 = bundle.getEntry("icons/interpretation.png");
    URL fileURL7 = bundle.getEntry("icons/config.png");

    try {
        selectedImage = new Image(parent.getDisplay(), fileURL.openStream());
        unselectedImage = new Image(parent.getDisplay(), fileURL2.openStream());
        selectedFieldImage = new Image(parent.getDisplay(), fileURL3.openStream());
        unselectedFieldImage = new Image(parent.getDisplay(), fileURL4.openStream());
        infoImage = new Image(parent.getDisplay(), fileURL5.openStream());
        interpretationImage = new Image(parent.getDisplay(), fileURL6.openStream());
        configButtonImage = new Image(parent.getDisplay(), fileURL7.openStream());
    } catch (Exception e) {
        selectedImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
        unselectedImage = PlatformUI.getWorkbench().getSharedImages()
                .getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
        selectedFieldImage = PlatformUI.getWorkbench().getSharedImages()
                .getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
        unselectedFieldImage = PlatformUI.getWorkbench().getSharedImages()
                .getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
        infoImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
        interpretationImage = PlatformUI.getWorkbench().getSharedImages()
                .getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
        configButtonImage = PlatformUI.getWorkbench().getSharedImages()
                .getImage(ISharedImages.IMG_DEC_FIELD_ERROR);
    }

    TreeViewerColumn column;
    parent.setLayout(new MigLayout("fill", "", ""));

    header = new Composite(parent, SWT.NONE);
    /*header.setLayout(new MigLayout("fill","",""));*/
    header.setLayoutData("dock north,height 16px,width 100%,wmin 0,hmin 16,gap 0 0 -5 0");
    RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);

    rowLayout.marginLeft = -1;
    rowLayout.marginRight = 0;
    rowLayout.marginTop = -1;
    rowLayout.marginBottom = 0;
    rowLayout.fill = true;
    rowLayout.wrap = false;
    rowLayout.spacing = 5;
    header.setLayout(rowLayout);

    configButton = new Button(header, SWT.FLAT);
    configButton.setImage(configButtonImage);
    configButton.setSize(17, 17);
    RowData data = new RowData();
    data.width = 17;
    data.height = 17;
    configButton.setLayoutData(data);
    configButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            if (e.type == SWT.Selection) {
                IPreferencePage page = new PreferencePageEmbSys();
                page.setTitle("EmbSysRegView");
                IPreferencePage page2 = new PreferencePageEmbSysBehavior();
                page2.setTitle("Behavior");
                PreferenceManager mgr = new PreferenceManager();
                IPreferenceNode node = new PreferenceNode("1", page);
                node.add(new PreferenceNode("2", page2));
                mgr.addToRoot(node);
                PreferenceDialog dialog = new PreferenceDialog(
                        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), mgr);
                dialog.create();
                dialog.setMessage(page.getTitle());
                dialog.open();
            }
        }
    });

    collapseButton = new Button(header, SWT.FLAT);
    collapseButton.setLayoutData(new RowData(17, 17));
    collapseButton
            .setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ELCL_COLLAPSEALL));
    collapseButton.setToolTipText("Collapse all open tree nodes");
    collapseButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            if (e.type == SWT.Selection) {
                viewer.collapseAll();
            }
        }
    });

    activateAllButton = new Button(header, SWT.FLAT);
    activateAllButton.setLayoutData(new RowData(17, 17));
    activateAllButton.setText("*"); // Not very clear, should/could be some custom graphics featuring the color green, perhaps?
    activateAllButton.setToolTipText(
            "Activate all registers (or none, if Control is pressed); press Shift to only affect visible registers");
    activateAllButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            if (e.type == SWT.Selection) {
                activateAll((e.stateMask & SWT.CONTROL) == 0, (e.stateMask & SWT.SHIFT) != 0);
            }
        }
    });

    copyButton = new Button(header, SWT.FLAT);
    copyButton.setLayoutData(new RowData(17, 17));
    copyButton.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_COPY));
    copyButton.setToolTipText("Copy active (green) register values to clipboard");
    copyButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            if (e.type == SWT.Selection) {
                final StringBuilder sb = new StringBuilder();
                copyRegisters(sb);
                if (sb.length() > 0) {
                    final Clipboard cb = new Clipboard(Display.getCurrent());
                    final TextTransfer tt = TextTransfer.getInstance();
                    cb.setContents(new Object[] { sb.toString() }, new Transfer[] { tt });
                }
            }
        }
    });

    infoLabel = new Label(header, SWT.NONE);

    viewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
    viewer.getControl().setLayoutData("height 100%,width 100%,hmin 0,wmin 0");
    viewer.getTree().setLinesVisible(true);
    viewer.getTree().setHeaderVisible(true);

    // Registername
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setWidth(250);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Register");
    column.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public Color getForeground(Object element) {
            if (element instanceof TreeRegister)
                if (((TreeRegister) element).isRetrievalActive())
                    return parent.getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN);
            if (element instanceof TreeField)
                if (((TreeRegister) ((TreeField) element).getParent()).isRetrievalActive())
                    return parent.getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN);

            return null;
        }

        public String getText(Object element) {
            if (element instanceof TreeField) {
                final int bitOffset = ((TreeField) element).getBitOffset();
                final int bitLength = ((TreeField) element).getBitLength();

                if (bitLength == 1)
                    return element.toString() + " (bit " + String.valueOf(bitOffset) + ")";
                else
                    return element.toString() + " (bits " + String.valueOf(bitOffset + bitLength - 1) + "-"
                            + String.valueOf(bitOffset) + ")";
            } else
                return element.toString();
        }

        public Image getImage(Object obj) {
            if (obj instanceof TreeParent) {
                if (obj instanceof TreeRegister)
                    if (((TreeRegister) obj).isRetrievalActive())
                        return selectedImage;
                    else
                        return unselectedImage;
            }
            if (obj instanceof TreeField) {
                if (((TreeRegister) ((TreeField) obj).getParent()).isRetrievalActive())
                    return selectedFieldImage;
                else
                    return unselectedFieldImage;
            }
            return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
        }

    });

    // Hex Value
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setWidth(80);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Hex");
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public Color getForeground(Object element) {
            if (element instanceof TreeRegister)
                if (!((TreeRegister) element).isWriteOnly())
                    if (((TreeRegister) element).hasValueChanged())
                        return parent.getShell().getDisplay().getSystemColor(SWT.COLOR_RED);
            if (element instanceof TreeField)
                if (!((TreeRegister) ((TreeField) element).getParent()).isWriteOnly())
                    if (((TreeField) element).hasValueChanged())
                        return parent.getShell().getDisplay().getSystemColor(SWT.COLOR_RED);
            return null;
        }

        public String getText(Object element) {
            if (element instanceof TreeGroup)
                return "";
            if (element instanceof TreeRegisterGroup)
                return "";
            if (element instanceof TreeRegister)
                if (((TreeRegister) element).getValue() == -1)
                    return "";
                else if (((TreeRegister) element).isWriteOnly())
                    return "- write only -";
                else
                    return Utils.longtoHexString(((TreeRegister) element).getValue(),
                            ((TreeRegister) element).getBitSize());
            if (element instanceof TreeField)
                if (((TreeRegister) ((TreeField) element).getParent()).getValue() == -1)
                    return "";
                else if (((TreeRegister) ((TreeField) element).getParent()).isWriteOnly())
                    return "- write only -";
                else
                    return Utils.longtoHexString(((TreeField) element).getValue(),
                            ((TreeField) element).getBitLength());
            else
                return element.toString();
        }

    });

    final TextCellEditor textCellEditor = new TextCellEditor(viewer.getTree());
    textCellEditor.setValidator(new HexCellEditorValidator(viewer));
    final ComboBoxCellEditor comboBoxCellEditor = new ComboBoxCellEditor(viewer.getTree(), new String[0],
            SWT.NONE);

    comboBoxCellEditor.setValidator(new HexCellEditorValidator(viewer));

    ((CCombo) comboBoxCellEditor.getControl()).addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            int selectionIndex = ((CCombo) comboBoxCellEditor.getControl()).getSelectionIndex();

            TreeElement obj = currentEditedElement;
            if (obj instanceof TreeField) {
                long value = -1;

                if (selectionIndex != -1) {
                    value = ((TreeField) obj).getInterpretations()
                            .getValue(((CCombo) comboBoxCellEditor.getControl()).getItem(selectionIndex));
                } else {
                    String svalue = ((CCombo) comboBoxCellEditor.getControl()).getText();
                    if (svalue.startsWith("0x"))
                        value = Long.valueOf(svalue.substring(2, svalue.length()), 16);

                }
                if (value != -1)
                    ((TreeField) obj).setValue(value);

            }

            if (((TreeRegister) obj.getParent()).isWriteOnly())
                updateTreeFields(invisibleRoot);
            viewer.refresh();

        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
        }
    });
    comboBoxCellEditor.addListener(new ICellEditorListener() {

        @Override
        public void applyEditorValue() {
            int selectionIndex = ((CCombo) comboBoxCellEditor.getControl()).getSelectionIndex();

            TreeElement obj = currentEditedElement;
            if (obj instanceof TreeField) {
                long value = -1;

                if (selectionIndex != -1) {
                    value = ((TreeField) obj).getInterpretations()
                            .getValue(((CCombo) comboBoxCellEditor.getControl()).getItem(selectionIndex));
                } else {
                    String svalue = ((CCombo) comboBoxCellEditor.getControl()).getText();
                    if (svalue.startsWith("0x"))
                        value = Long.valueOf(svalue.substring(2, svalue.length()), 16);

                }
                if (value != -1)
                    ((TreeField) obj).setValue(value);

            }

            if (((TreeRegister) obj.getParent()).isWriteOnly())
                updateTreeFields(invisibleRoot);
            viewer.refresh();
        }

        @Override
        public void cancelEditor() {
        }

        @Override
        public void editorValueChanged(boolean oldValidState, boolean newValidState) {
        }
    });

    column.setEditingSupport(new EditingSupport(viewer) {
        @Override
        protected boolean canEdit(Object element) {
            if (element instanceof TreeField
                    && ((((TreeRegister) ((TreeField) element).getParent()).isReadWrite())
                            || (((TreeRegister) ((TreeField) element).getParent()).isWriteOnly())))
                return true;
            if (element instanceof TreeRegister
                    && (((TreeRegister) element).isReadWrite() || ((TreeRegister) element).isWriteOnly()))
                return true;
            return false;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            if (element instanceof TreeField && ((TreeField) element).hasInterpretations()) {
                comboBoxCellEditor.setItems(((TreeField) element).getInterpretations().getInterpretations());
                IPreferenceStore store = Activator.getDefault().getPreferenceStore();
                int store_combolength = store.getInt("combolength");
                if (store_combolength > 0)
                    ((CCombo) comboBoxCellEditor.getControl()).setVisibleItemCount(store_combolength);
                currentEditedElement = (TreeElement) element;
                return comboBoxCellEditor;
            } else
                return textCellEditor;
        }

        @Override
        protected Object getValue(Object element) {
            if (element instanceof TreeField && ((TreeField) element).hasInterpretations()) {
                // TODO: check if the Integer is for index in the combobox
                return new Integer((int) ((TreeField) element).getValue()); // TODO: what to do on large bitfield ?
            } else {
                if (element instanceof TreeField && ((TreeField) element).getValue() != -1)
                    return Utils.longtoHexString(((TreeField) element).getValue(),
                            ((TreeField) element).getBitLength());

                if (element instanceof TreeRegister && ((TreeRegister) element).getValue() != -1)
                    return Utils.longtoHexString(((TreeRegister) element).getValue(),
                            ((TreeRegister) element).getBitSize());
            }
            return null;
        }

        @Override
        protected void setValue(Object element, Object value) {
            if (value == null)
                return;
            if (value instanceof String) {
                if (element instanceof TreeRegister && ((String) value).startsWith("0x")) {
                    String svalue = ((String) value);
                    long lvalue = Long.valueOf(svalue.substring(2, svalue.length()), 16);

                    TreeRegister treeRegister = ((TreeRegister) element);
                    if (treeRegister.getValue() != -1 && treeRegister.getValue() != lvalue) {
                        // Update Value on device
                        treeRegister.setAndWriteValue(lvalue);
                        if (((TreeRegister) element).isWriteOnly())
                            updateTreeFields(invisibleRoot);
                        viewer.refresh();
                    }
                }

                if (element instanceof TreeField && ((String) value).startsWith("0x")) {
                    String svalue = ((String) value);
                    long fvalue = Long.valueOf(svalue.substring(2, svalue.length()), 16);

                    TreeField treeField = ((TreeField) element);
                    if (treeField.getValue() != -1 && treeField.getValue() != fvalue) {
                        TreeRegister treeRegister = ((TreeRegister) treeField.getParent());

                        // calculate register value + modified field to write into register
                        long rvalue = treeRegister.getValue();
                        int bitLength = treeField.getBitLength();
                        int bitOffset = treeField.getBitOffset();
                        long mask;

                        mask = (0xFFFFFFFFL >> (32 - bitLength)) << bitOffset;
                        rvalue = rvalue & (~mask); // clear field bits in register value
                        fvalue = fvalue << bitOffset; // shift field value into its position in the register
                        fvalue = fvalue & mask; // just to be sure, cut everything but the field
                        rvalue = rvalue | fvalue; // blend the field value into the register value

                        // Update Value in Target
                        treeRegister.setAndWriteValue(rvalue);
                        if (((TreeRegister) (((TreeField) element).getParent())).isWriteOnly())
                            updateTreeFields(invisibleRoot);
                        viewer.refresh(treeRegister);
                    }
                }
            }
            //TODO: why...what for...
            //viewer.refresh(element);
        }
    });

    // Binary Value
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setWidth(200);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Bin");
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public Color getForeground(Object element) {
            if (element instanceof TreeRegister)
                if (!((TreeRegister) element).isWriteOnly())
                    if (((TreeRegister) element).hasValueChanged())
                        return parent.getShell().getDisplay().getSystemColor(SWT.COLOR_RED);
            if (element instanceof TreeField)
                if (!((TreeRegister) ((TreeField) element).getParent()).isWriteOnly())
                    if (((TreeField) element).hasValueChanged())
                        return parent.getShell().getDisplay().getSystemColor(SWT.COLOR_RED);

            return null;
        }

        public String getText(Object element) {
            if (element instanceof TreeGroup)
                return "";
            if (element instanceof TreeRegisterGroup)
                return "";
            if (element instanceof TreeRegister)
                if (((TreeRegister) element).getValue() == -1)
                    return "";
                else if (((TreeRegister) element).isWriteOnly())
                    return "------------- write only -------------";
                else
                    return Utils.longtobinarystring(((TreeRegister) element).getValue(),
                            ((TreeRegister) element).getBitSize());
            if (element instanceof TreeField)
                if (((TreeRegister) ((TreeField) element).getParent()).getValue() == -1)
                    return "";
                else if (((TreeRegister) ((TreeField) element).getParent()).isWriteOnly())
                    return "------------- write only -------------";
                else
                    return Utils.longtobinarystring(((TreeField) element).getValue(),
                            ((TreeField) element).getBitLength());
            else
                return element.toString();
        }

    });

    column.setEditingSupport(new EditingSupport(viewer) {
        @Override
        protected boolean canEdit(Object element) {
            if (element instanceof TreeField
                    && ((((TreeRegister) ((TreeField) element).getParent()).isReadWrite())
                            || (((TreeRegister) ((TreeField) element).getParent()).isWriteOnly())))
                return true;
            if (element instanceof TreeRegister
                    && (((TreeRegister) element).isReadWrite() || ((TreeRegister) element).isWriteOnly()))
                return true;
            return false;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            return new BinaryButtonsCellEditor(viewer.getTree(), viewer);
        }

        @Override
        protected Object getValue(Object element) {
            return element;
        }

        @Override
        protected void setValue(Object element, Object value) {
            viewer.refresh(element);
        }
    });

    // Register Reset Value (hex)
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setWidth(80);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Reset");
    column.setLabelProvider(new ColumnLabelProvider() {
        public String getText(Object element) {
            if (element instanceof TreeGroup)
                return "";
            if (element instanceof TreeRegisterGroup)
                return "";
            if (element instanceof TreeRegister)
                return Utils.longtoHexString(((TreeRegister) element).getResetValue(),
                        ((TreeRegister) element).getBitSize());
            if (element instanceof TreeField)
                return "";
            else
                return "";
        }

    });

    // Register Access
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setAlignment(SWT.CENTER);
    column.getColumn().setWidth(50);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Access");
    column.setLabelProvider(new ColumnLabelProvider() {
        public String getText(Object element) {
            if (element instanceof TreeGroup)
                return "";
            if (element instanceof TreeRegisterGroup)
                return "";
            if (element instanceof TreeRegister)
                return ((TreeRegister) element).getType().toUpperCase();
            if (element instanceof TreeField)
                return "";
            else
                return "";
        }

    });

    // Register Address (hex)
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setWidth(80);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Address");
    column.setLabelProvider(new ColumnLabelProvider() {
        public String getText(Object element) {
            if (element instanceof TreeGroup)
                return "";
            if (element instanceof TreeRegisterGroup)
                return "";
            if (element instanceof TreeRegister)
                return Utils.longtoHexString(((TreeRegister) element).getRegisterAddress(), 32); //TODO: get address width from xml ...
            if (element instanceof TreeField)
                return "";
            else
                return "";
        }

    });

    // Description
    column = new TreeViewerColumn(viewer, SWT.NONE);
    column.getColumn().setWidth(300);
    column.getColumn().setMoveable(false);
    column.getColumn().setText("Description");
    ColumnViewerToolTipSupport.enableFor(viewer);

    column.setLabelProvider(new CellLabelProvider() {

        public String getToolTipText(Object element) {
            if (element instanceof TreeRegister) { // only display if more than one line is found
                if (org.eclipse.cdt.embsysregview.views.Utils
                        .countTextLines(((TreeRegister) element).getDescription()) > 1)
                    return ((TreeRegister) element).getDescription();
                else
                    return null;
            }
            if (element instanceof TreeField) { // display tooltip if more than one line is found, or an interpretation is shown instead of this one line
                if (org.eclipse.cdt.embsysregview.views.Utils
                        .countTextLines(((TreeField) element).getDescription()) > 1
                        || ((TreeField) element).hasInterpretation())
                    return ((TreeField) element).getDescription();
                else
                    return null;
            }
            return null;
        }

        public Point getToolTipShift(Object object) {
            return new Point(5, 5);
        }

        public int getToolTipDisplayDelayTime(Object object) {
            return 200;
        }

        public int getToolTipTimeDisplayed(Object object) {
            return 0;
        }

        public void update(ViewerCell cell) {
            Object element = cell.getElement();
            if (element instanceof TreeGroup)
                cell.setText(((TreeGroup) element).getDescription());
            if (element instanceof TreeRegisterGroup)
                cell.setText(((TreeRegisterGroup) element).getDescription());
            if (element instanceof TreeRegister) {
                cell.setText(org.eclipse.cdt.embsysregview.views.Utils
                        .getFirstNotEmptyTextLine(((TreeRegister) element).getDescription()).trim());
            }

            if (element instanceof TreeField)
                if (((TreeField) element).hasInterpretation()) {
                    cell.setText(((TreeField) element).getInterpretation());
                    cell.setImage(interpretationImage);
                } else {
                    // Display first line
                    cell.setText(org.eclipse.cdt.embsysregview.views.Utils
                            .getFirstNotEmptyTextLine(((TreeField) element).getDescription()).trim());
                    // Display Icon if there are more than one line
                    if (org.eclipse.cdt.embsysregview.views.Utils
                            .countTextLines(((TreeField) element).getDescription()) > 1)
                        cell.setImage(infoImage);
                }
        }
    });

    doubleClickAction = new Action() {
        public void run() {
            ISelection selection = viewer.getSelection();

            Object obj = ((IStructuredSelection) selection).getFirstElement();

            int selectedColumn = -1;

            Tree tree = viewer.getTree();
            Point pt = tree.toControl(Display.getCurrent().getCursorLocation());
            viewer.getTree().getColumnCount();
            for (int i = 0; i < tree.getColumnCount(); i++) {
                TreeItem item = tree.getItem(pt);
                if (item != null) {
                    if (item.getBounds(i).contains(pt)) {
                        selectedColumn = i;
                    }
                }
            }

            if (obj instanceof TreeRegisterGroup && selectedColumn == 0) {
                TreeRegisterGroup treeRegisterGroup = ((TreeRegisterGroup) obj);
                TreeElement[] treeElements = treeRegisterGroup.getChildren();
                for (TreeElement treeElement : treeElements) {
                    TreeRegister treeRegister = ((TreeRegister) treeElement);
                    if (!treeRegister.isWriteOnly()) {
                        treeRegister.toggleRetrieval();
                        treeRegister.readValue();
                    }
                }
                viewer.refresh(obj);
            }

            if (obj instanceof TreeRegister && selectedColumn == 0) {
                TreeRegister treeRegister = ((TreeRegister) obj);
                if (!treeRegister.isWriteOnly()) {
                    treeRegister.toggleRetrieval();
                    treeRegister.readValue();
                    viewer.refresh(obj);
                }
            }
            if (obj instanceof TreeField && selectedColumn == 0) {
                TreeField treeField = ((TreeField) obj);
                TreeRegister treeRegister = ((TreeRegister) treeField.getParent());
                if (!treeRegister.isWriteOnly()) {
                    treeRegister.toggleRetrieval();
                    treeRegister.readValue();
                    viewer.refresh(treeField.getParent());
                }
            }
        }
    };

    viewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent event) {
            doubleClickAction.run();
        }
    });

    viewer.setContentProvider(new ViewContentProvider());
    updateInfoLabel();
    viewer.setInput(invisibleRoot);
}

From source file:org.eclipse.dawnsci.hdf5.editor.H5Editor.java

License:Open Source License

@Override
public void createPartControl(final Composite parent) {

    parent.setLayout(new GridLayout(1, false));

    //      TODO Searching not possible as tree is VIRTUAL and ILazy
    //      final Text searchText = new Text(parent, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL);
    //      searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
    //      searchText.setToolTipText("Search on data set name or expression value." );

    tree = new TreeViewer(parent, SWT.BORDER | SWT.VIRTUAL);
    tree.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    tree.getTree().setHeaderVisible(true);
    tree.setUseHashlookup(true);/*from   w  w w.  j a  v a  2s .  c o  m*/

    final String[] titles = { "Name", "Class", "Dims", "Description", "Size" };
    final int[] widths = { 250, 120, 80, 150, 150 };
    TreeViewerColumn tVCol;
    for (int i = 0; i < titles.length; i++) {
        tVCol = new TreeViewerColumn(tree, SWT.NONE);
        TreeColumn tCol = tVCol.getColumn();
        tCol.setText(titles[i]);
        tCol.setWidth(widths[i]);
        tCol.setMoveable(true);
    }

    final H5SelectionProvider provider = new H5SelectionProvider();
    getSite().setSelectionProvider(provider);

    /**
     * Allows double click to fire special tree events for DLS plotting
     */
    createTreeListeners(provider);

    //      final H5Filter filter = new H5Filter();
    //      searchText.addModifyListener(new ModifyListener() {      
    //         @Override
    //         public void modifyText(ModifyEvent e) {
    //            if (parent.isDisposed()) return;
    //            filter.setSearchText(searchText.getText());
    //            refresh();
    //         }
    //      });
}

From source file:org.eclipse.e4.internal.tools.context.spy.ContextDataPart.java

License:Open Source License

/**
 * Create contents of the view part.//from  w  ww. j a va  2s .c  om
 */
@PostConstruct
public void createControls(Composite parent, IEclipseContext ctx) {

    parent.setLayout(new GridLayout(1, false));

    // TreeViewer on the top
    contextDataViewer = new TreeViewer(parent);
    dataProvider = ContextInjectionFactory.make(ContextDataProvider.class, ctx);
    contextDataViewer.setContentProvider(dataProvider);
    contextDataViewer.setLabelProvider(dataProvider);
    // contextContentTv.setSorter(new ViewerSorter());

    final Tree cTree = contextDataViewer.getTree();
    cTree.setHeaderVisible(true);
    cTree.setLinesVisible(true);
    cTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    // tv.setInput(a);
    contextDataViewer.setInput("Foo"); // getElements starts alone

    // Add columns in the tree
    // Create the first column for the key
    TreeViewerColumn keyCol = new TreeViewerColumn(contextDataViewer, SWT.NONE);
    keyCol.getColumn().setWidth(400);
    keyCol.getColumn().setText("Key");
    ContextDataProvider keyLabelProvider = ContextInjectionFactory.make(ContextDataProvider.class, ctx);
    keyLabelProvider.setDisplayKey(true);
    keyCol.setLabelProvider(keyLabelProvider);
    keyCol.getColumn().setToolTipText("Key in context");
    keyCol.getColumn().addSelectionListener(
            getHeaderSelectionAdapter(contextDataViewer, keyCol.getColumn(), 0, keyLabelProvider));

    comparator = new ContextEntryComparator(0, keyLabelProvider);
    contextDataViewer.setComparator(comparator);

    // Create the second column for the value
    TreeViewerColumn valueCol = new TreeViewerColumn(contextDataViewer, SWT.NONE);
    valueCol.getColumn().setWidth(600);
    valueCol.getColumn().setText("Value");
    ContextDataProvider valueLabelProvider = ContextInjectionFactory.make(ContextDataProvider.class, ctx);
    valueCol.setLabelProvider(dataProvider);
    valueCol.getColumn().addSelectionListener(
            getHeaderSelectionAdapter(contextDataViewer, valueCol.getColumn(), 1, valueLabelProvider));

    // Open all the tree
    contextDataViewer.expandAll();

    ColumnViewerToolTipSupport.enableFor(contextDataViewer);

}

From source file:org.eclipse.e4.tools.css.spy.CssSpyDialog.java

License:Open Source License

/**
 * Create contents of the dialog./*from   w  w  w  .  java2s.c  o m*/
 *
 * @param parent
 */
@Override
protected Control createDialogArea(Composite parent) {
    Composite outer = (Composite) super.createDialogArea(parent);

    Composite top = new Composite(outer, SWT.NONE);
    GridLayoutFactory.swtDefaults().numColumns(2).applyTo(top);
    cssSearchBox = new Text(top, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH | SWT.ICON_CANCEL);
    cssSearchBox.setMessage("CSS Selector");
    cssSearchBox.setToolTipText("Highlight matching widgets");
    GridDataFactory.fillDefaults().grab(true, false).applyTo(cssSearchBox);

    showAllShells = new Button(top, SWT.CHECK);
    showAllShells.setText("All shells");
    GridDataFactory.swtDefaults().applyTo(showAllShells);
    GridDataFactory.fillDefaults().applyTo(top);

    SashForm sashForm = new SashForm(outer, SWT.VERTICAL);
    sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    // / THE WIDGET TREE
    Composite widgetsComposite = new Composite(sashForm, SWT.NONE);

    widgetTreeViewer = new TreeViewer(widgetsComposite, SWT.BORDER | SWT.MULTI);
    widgetTreeProvider = new WidgetTreeProvider();
    widgetTreeViewer.setContentProvider(widgetTreeProvider);
    widgetTreeViewer.setAutoExpandLevel(0);
    widgetTreeViewer.getTree().setLinesVisible(true);
    widgetTreeViewer.getTree().setHeaderVisible(true);
    ColumnViewerToolTipSupport.enableFor(widgetTreeViewer);

    TreeViewerColumn widgetTypeColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
    widgetTypeColumn.getColumn().setWidth(100);
    widgetTypeColumn.getColumn().setText("Widget");
    widgetTypeColumn.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object item) {
            CSSStylableElement element = CssSpyDialog.getCSSElement(item);
            return element.getLocalName() + " (" + element.getNamespaceURI() + ")";
        }
    });

    TreeViewerColumn widgetClassColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
    widgetClassColumn.getColumn().setText("CSS Class");
    widgetClassColumn.getColumn().setWidth(100);
    widgetClassColumn.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object item) {
            CSSStylableElement element = CssSpyDialog.getCSSElement(item);
            if (element.getCSSClass() == null) {
                return null;
            }
            String classes[] = element.getCSSClass().split(" +");
            return classes.length <= 1 ? classes[0] : classes[0] + " (+" + (classes.length - 1) + " others)";
        }

        @Override
        public String getToolTipText(Object item) {
            CSSStylableElement element = CssSpyDialog.getCSSElement(item);
            if (element == null) {
                return null;
            }
            StringBuilder sb = new StringBuilder();
            sb.append(element.getLocalName()).append(" (").append(element.getNamespaceURI()).append(")");
            if (element.getCSSClass() != null) {
                sb.append("\nClasses:\n  ");
                Activator.join(sb, element.getCSSClass().split(" +"), "\n  ");
            }
            return sb.toString();
        }
    });

    TreeViewerColumn widgetIdColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
    widgetIdColumn.getColumn().setWidth(100);
    widgetIdColumn.getColumn().setText("CSS Id");
    widgetIdColumn.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object item) {
            CSSStylableElement element = CssSpyDialog.getCSSElement(item);
            return element.getCSSId();
        }
    });

    TreeColumnLayout widgetsTableLayout = new TreeColumnLayout();
    widgetsTableLayout.setColumnData(widgetTypeColumn.getColumn(), new ColumnWeightData(50));
    widgetsTableLayout.setColumnData(widgetIdColumn.getColumn(), new ColumnWeightData(40));
    widgetsTableLayout.setColumnData(widgetClassColumn.getColumn(), new ColumnWeightData(40));
    widgetsComposite.setLayout(widgetsTableLayout);

    // / HEADERS
    Composite container = new Composite(sashForm, SWT.NONE);
    container.setLayout(new GridLayout(2, true));

    Label lblCssProperties = new Label(container, SWT.NONE);
    lblCssProperties.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
    lblCssProperties.setText("CSS Properties");

    Label lblCssRules = new Label(container, SWT.NONE);
    lblCssRules.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
    lblCssRules.setText("CSS Rules");

    // // THE CSS PROPERTIES TABLE
    Composite propsComposite = new Composite(container, SWT.BORDER);
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
    gridData.minimumHeight = 50;
    propsComposite.setLayoutData(gridData);

    cssPropertiesViewer = new TableViewer(propsComposite,
            SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
    cssPropertiesViewer.setContentProvider(new CSSPropertiesContentProvider());
    cssPropertiesViewer.getTable().setLinesVisible(true);
    cssPropertiesViewer.getTable().setHeaderVisible(true);
    cssPropertiesViewer.setComparator(new ViewerComparator());

    final TextCellEditor textCellEditor = new TextCellEditor(cssPropertiesViewer.getTable());
    TableViewerEditor.create(cssPropertiesViewer,
            new TableViewerFocusCellManager(cssPropertiesViewer,
                    new FocusCellOwnerDrawHighlighter(cssPropertiesViewer)),
            new ColumnViewerEditorActivationStrategy(cssPropertiesViewer),
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    TableViewerColumn propName = new TableViewerColumn(cssPropertiesViewer, SWT.NONE);
    propName.getColumn().setWidth(100);
    propName.getColumn().setText("Property");
    propName.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return ((CSSPropertyProvider) element).getPropertyName();
        }
    });

    TableViewerColumn propValue = new TableViewerColumn(cssPropertiesViewer, SWT.NONE);
    propValue.getColumn().setWidth(100);
    propValue.getColumn().setText("Value");
    propValue.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            try {
                return ((CSSPropertyProvider) element).getValue();
            } catch (Exception e) {
                System.err.println("Error fetching property: " + element + ": " + e);
                return null;
            }
        }
    });
    propValue.setEditingSupport(new EditingSupport(cssPropertiesViewer) {
        @Override
        protected CellEditor getCellEditor(Object element) {
            // do the fancy footwork here to return an appropriate editor to
            // the value-type
            return textCellEditor;
        }

        @Override
        protected boolean canEdit(Object element) {
            return true;
        }

        @Override
        protected Object getValue(Object element) {
            try {
                String value = ((CSSPropertyProvider) element).getValue();
                return value == null ? "" : value;
            } catch (Exception e) {
                return "";
            }
        }

        @Override
        protected void setValue(Object element, Object value) {
            try {
                if (value == null || ((String) value).trim().length() == 0) {
                    return;
                }
                CSSPropertyProvider provider = (CSSPropertyProvider) element;
                provider.setValue((String) value);
            } catch (Exception e) {
                MessageDialog.openError(getShell(), "Error", "Unable to set property:\n\n" + e.getMessage());
            }
            cssPropertiesViewer.update(element, null);
        }
    });

    TableColumnLayout propsTableLayout = new TableColumnLayout();
    propsTableLayout.setColumnData(propName.getColumn(), new ColumnWeightData(50));
    propsTableLayout.setColumnData(propValue.getColumn(), new ColumnWeightData(50));
    propsComposite.setLayout(propsTableLayout);

    // / THE CSS RULES
    cssRules = new Text(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
    cssRules.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    // / THE CSS PROPERTIES TABLE (again)
    showUnsetProperties = new Button(container, SWT.CHECK);
    showUnsetProperties.setText("Show unset properties");
    showCssFragment = new Button(container, SWT.PUSH);
    showCssFragment.setText("Show CSS fragment");
    showCssFragment.setToolTipText("Generates CSS rule block for the selected widget");

    // and for balance
    new Label(container, SWT.NONE);

    // / The listeners

    cssSearchBox.addModifyListener(new ModifyListener() {
        private Runnable updater;
        private IProgressMonitor monitor;

        public void modifyText(ModifyEvent e) {
            if (monitor != null) {
                monitor.setCanceled(false);
            }
            display.timerExec(200, updater = new Runnable() {
                public void run() {
                    if (updater == this) {
                        performCSSSearch(monitor = new NullProgressMonitor());
                    }
                }
            });
        }
    });
    cssSearchBox.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.ARROW_DOWN && (e.stateMask & SWT.MODIFIER_MASK) == 0) {
                widgetTreeViewer.getControl().setFocus();
            }
        }
    });

    widgetTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            updateForWidgetSelection(event.getSelection());
            showCssFragment.setEnabled(!event.getSelection().isEmpty());
        }
    });
    if (isLive()) {
        container.addMouseMoveListener(new MouseMoveListener() {
            public void mouseMove(MouseEvent e) {
                update();
            }
        });
    }

    if (shouldDismissOnLostFocus()) {
        container.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent e) {
                setReturnCode(Window.OK);
                close();
            }
        });
    }
    container.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.character == SWT.ESC) {
                cancelPressed();
            } else if (e.character == SWT.CR | e.character == SWT.LF) {
                okPressed();
            }
        }
    });
    showAllShells.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            updateWidgetTreeInput();
        }
    });

    outer.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            dispose();
        }
    });

    showUnsetProperties.setSelection(true);
    showUnsetProperties.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (showUnsetProperties.getSelection()) {
                cssPropertiesViewer.removeFilter(unsetPropertyFilter);
            } else {
                cssPropertiesViewer.addFilter(unsetPropertyFilter);
            }
        }
    });

    showCssFragment.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            showCssFragment();
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
        }
    });

    update();
    sashForm.setWeights(new int[] { 50, 50 });
    widgetTreeViewer.getControl().setFocus();
    return outer;
}

From source file:org.eclipse.e4.tools.css.spy.CssSpyPart.java

License:Open Source License

/**
 * Create contents of the spy./* www  .  ja  va2 s.  co m*/
 *
 * @param parent
 */
@PostConstruct
protected Control createDialogArea(Composite parent, IEclipseContext ctx) {
    outer = parent;
    outer.setLayout(new GridLayout());
    outer.setLayoutData(new GridData(GridData.FILL_BOTH));

    Composite top = new Composite(outer, SWT.NONE);
    GridLayoutFactory.swtDefaults().numColumns(3).applyTo(top);
    cssSearchBox = new Text(top, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH | SWT.ICON_CANCEL);
    cssSearchBox.setMessage("CSS Selector");
    cssSearchBox.setToolTipText("Highlight matching widgets");
    GridDataFactory.fillDefaults().grab(true, false).applyTo(cssSearchBox);

    followSelection = new Button(top, SWT.CHECK);
    followSelection.setSelection(true);
    followSelection.setText("Follow UI Selection");
    GridDataFactory.swtDefaults().applyTo(followSelection);

    showAllShells = new Button(top, SWT.CHECK);
    showAllShells.setText("All shells");
    GridDataFactory.swtDefaults().applyTo(showAllShells);

    GridDataFactory.fillDefaults().applyTo(top);

    SashForm sashForm = new SashForm(outer, SWT.VERTICAL);
    sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    // / THE WIDGET TREE
    Composite widgetsComposite = new Composite(sashForm, SWT.NONE);

    widgetTreeViewer = new TreeViewer(widgetsComposite, SWT.BORDER | SWT.MULTI);
    widgetTreeProvider = new WidgetTreeProvider();
    widgetTreeViewer.setContentProvider(widgetTreeProvider);
    widgetTreeViewer.setAutoExpandLevel(0);
    widgetTreeViewer.getTree().setLinesVisible(true);
    widgetTreeViewer.getTree().setHeaderVisible(true);
    ColumnViewerToolTipSupport.enableFor(widgetTreeViewer);

    TreeViewerColumn widgetTypeColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
    widgetTypeColumn.getColumn().setWidth(100);
    widgetTypeColumn.getColumn().setText("Widget");
    widgetTypeColumn.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object item) {
            CSSStylableElement element = CssSpyPart.getCSSElement(item);
            return element.getLocalName() + " (" + element.getNamespaceURI() + ")";
        }
    });

    TreeViewerColumn widgetClassColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
    widgetClassColumn.getColumn().setText("CSS Class");
    widgetClassColumn.getColumn().setWidth(100);
    widgetClassColumn.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object item) {
            CSSStylableElement element = CssSpyPart.getCSSElement(item);
            if (element.getCSSClass() == null) {
                return null;
            }
            String classes[] = element.getCSSClass().split(" +");
            return classes.length <= 1 ? classes[0] : classes[0] + " (+" + (classes.length - 1) + " others)";
        }

        @Override
        public String getToolTipText(Object item) {
            CSSStylableElement element = CssSpyPart.getCSSElement(item);
            if (element == null) {
                return null;
            }
            StringBuilder sb = new StringBuilder();
            sb.append(element.getLocalName()).append(" (").append(element.getNamespaceURI()).append(")");
            if (element.getCSSClass() != null) {
                sb.append("\nClasses:\n  ");
                Util.join(sb, element.getCSSClass().split(" +"), "\n  ");
            }
            return sb.toString();
        }
    });

    TreeViewerColumn widgetIdColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
    widgetIdColumn.getColumn().setWidth(100);
    widgetIdColumn.getColumn().setText("CSS Id");
    widgetIdColumn.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object item) {
            CSSStylableElement element = CssSpyPart.getCSSElement(item);
            return element.getCSSId();
        }
    });

    TreeColumnLayout widgetsTableLayout = new TreeColumnLayout();
    widgetsTableLayout.setColumnData(widgetTypeColumn.getColumn(), new ColumnWeightData(50));
    widgetsTableLayout.setColumnData(widgetIdColumn.getColumn(), new ColumnWeightData(40));
    widgetsTableLayout.setColumnData(widgetClassColumn.getColumn(), new ColumnWeightData(40));
    widgetsComposite.setLayout(widgetsTableLayout);

    // / HEADERS
    Composite container = new Composite(sashForm, SWT.NONE);
    container.setLayout(new GridLayout(2, true));

    Label lblCssProperties = new Label(container, SWT.NONE);
    lblCssProperties.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
    lblCssProperties.setText("CSS Properties");

    Label lblCssRules = new Label(container, SWT.NONE);
    lblCssRules.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
    lblCssRules.setText("CSS Rules");

    // // THE CSS PROPERTIES TABLE
    Composite propsComposite = new Composite(container, SWT.BORDER);
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
    gridData.minimumHeight = 50;
    propsComposite.setLayoutData(gridData);

    cssPropertiesViewer = new TableViewer(propsComposite,
            SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
    cssPropertiesViewer.setContentProvider(new CSSPropertiesContentProvider());
    cssPropertiesViewer.getTable().setLinesVisible(true);
    cssPropertiesViewer.getTable().setHeaderVisible(true);
    cssPropertiesViewer.setComparator(new ViewerComparator());

    final TextCellEditor textCellEditor = new TextCellEditor(cssPropertiesViewer.getTable());
    TableViewerEditor.create(cssPropertiesViewer,
            new TableViewerFocusCellManager(cssPropertiesViewer,
                    new FocusCellOwnerDrawHighlighter(cssPropertiesViewer)),
            new ColumnViewerEditorActivationStrategy(cssPropertiesViewer),
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    TableViewerColumn propName = new TableViewerColumn(cssPropertiesViewer, SWT.NONE);
    propName.getColumn().setWidth(100);
    propName.getColumn().setText("Property");
    propName.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return ((CSSPropertyProvider) element).getPropertyName();
        }
    });

    TableViewerColumn propValue = new TableViewerColumn(cssPropertiesViewer, SWT.NONE);
    propValue.getColumn().setWidth(100);
    propValue.getColumn().setText("Value");
    propValue.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            try {
                return ((CSSPropertyProvider) element).getValue();
            } catch (Exception e) {
                System.err.println("Error fetching property: " + element + ": " + e);
                return null;
            }
        }
    });
    propValue.setEditingSupport(new EditingSupport(cssPropertiesViewer) {
        @Override
        protected CellEditor getCellEditor(Object element) {
            // do the fancy footwork here to return an appropriate
            // editor to
            // the value-type
            return textCellEditor;
        }

        @Override
        protected boolean canEdit(Object element) {
            return true;
        }

        @Override
        protected Object getValue(Object element) {
            try {
                String value = ((CSSPropertyProvider) element).getValue();
                return value == null ? "" : value;
            } catch (Exception e) {
                return "";
            }
        }

        @Override
        protected void setValue(Object element, Object value) {
            try {
                if (value == null || ((String) value).trim().length() == 0) {
                    return;
                }
                CSSPropertyProvider provider = (CSSPropertyProvider) element;
                provider.setValue((String) value);
            } catch (Exception e) {
                MessageDialog.openError(activeShell, "Error", "Unable to set property:\n\n" + e.getMessage());
            }
            cssPropertiesViewer.update(element, null);
        }
    });

    TableColumnLayout propsTableLayout = new TableColumnLayout();
    propsTableLayout.setColumnData(propName.getColumn(), new ColumnWeightData(50));
    propsTableLayout.setColumnData(propValue.getColumn(), new ColumnWeightData(50));
    propsComposite.setLayout(propsTableLayout);

    // / THE CSS RULES
    cssRules = new Text(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
    cssRules.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    // / THE CSS PROPERTIES TABLE (again)
    showUnsetProperties = new Button(container, SWT.CHECK);
    showUnsetProperties.setText("Show unset properties");
    showCssFragment = new Button(container, SWT.PUSH);
    showCssFragment.setText("Show CSS fragment");
    showCssFragment.setToolTipText("Generates CSS rule block for the selected widget");

    // and for balance
    new Label(container, SWT.NONE);

    // / The listeners

    cssSearchBox.addModifyListener(new ModifyListener() {
        private Runnable updater;
        private IProgressMonitor monitor;

        @Override
        public void modifyText(ModifyEvent e) {
            if (monitor != null) {
                monitor.setCanceled(false);
            }
            display.timerExec(200, updater = new Runnable() {
                @Override
                public void run() {
                    if (updater == this) {
                        performCSSSearch(monitor = new NullProgressMonitor());
                    }
                }
            });
        }
    });
    cssSearchBox.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.ARROW_DOWN && (e.stateMask & SWT.MODIFIER_MASK) == 0) {
                widgetTreeViewer.getControl().setFocus();
            }
        }
    });

    widgetTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            updateForWidgetSelection(event.getSelection());
            showCssFragment.setEnabled(!event.getSelection().isEmpty());
        }
    });
    if (isLive()) {
        container.addMouseMoveListener(e -> {
            if (followSelection.getSelection()) {
                update();
            }
        });
    }

    showAllShells.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            updateWidgetTreeInput();
        }
    });

    outer.addDisposeListener(e -> dispose());

    showUnsetProperties.setSelection(true);
    showUnsetProperties.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (showUnsetProperties.getSelection()) {
                cssPropertiesViewer.removeFilter(unsetPropertyFilter);
            } else {
                cssPropertiesViewer.addFilter(unsetPropertyFilter);
            }
        }
    });

    showCssFragment.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            showCssFragment();
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
        }
    });

    sashForm.setWeights(new int[] { 50, 50 });
    widgetTreeViewer.getControl().setFocus();

    return outer;
}