Example usage for org.eclipse.jface.viewers AbstractTreeViewer ALL_LEVELS

List of usage examples for org.eclipse.jface.viewers AbstractTreeViewer ALL_LEVELS

Introduction

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

Prototype

int ALL_LEVELS

To view the source code for org.eclipse.jface.viewers AbstractTreeViewer ALL_LEVELS.

Click Source Link

Document

Constant indicating that all levels of the tree should be expanded or collapsed.

Usage

From source file:ext.org.eclipse.jdt.internal.ui.text.JavaOutlineInformationControl.java

License:Open Source License

/**
 * {@inheritDoc}//  w w  w . ja va  2s.c  o m
 */
@Override
protected TreeViewer createTreeViewer(Composite parent, int style) {
    Tree tree = new Tree(parent, SWT.SINGLE | (style & ~SWT.MULTI));
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.heightHint = tree.getItemHeight() * 12;
    tree.setLayoutData(gd);

    final TreeViewer treeViewer = new OutlineTreeViewer(tree);

    // Hard-coded filters
    treeViewer.addFilter(new NamePatternFilter());
    treeViewer.addFilter(new MemberFilter());

    fInnerLabelProvider = new OutlineLabelProvider();
    fInnerLabelProvider.addLabelDecorator(new ProblemsLabelDecorator(null));
    IDecoratorManager decoratorMgr = PlatformUI.getWorkbench().getDecoratorManager();
    if (decoratorMgr.getEnabled("org.eclipse.jdt.ui.override.decorator")) //$NON-NLS-1$
        fInnerLabelProvider.addLabelDecorator(new OverrideIndicatorLabelDecorator(null));

    treeViewer.setLabelProvider(new ColoringLabelProvider(fInnerLabelProvider));

    fLexicalSortingAction = new LexicalSortingAction(treeViewer);
    fSortByDefiningTypeAction = new SortByDefiningTypeAction(treeViewer);
    fShowOnlyMainTypeAction = new ShowOnlyMainTypeAction(treeViewer);
    fCategoryFilterActionGroup = new CategoryFilterActionGroup(treeViewer, getId(), getInputForCategories());

    fOutlineContentProvider = new OutlineContentProvider(false);
    treeViewer.setContentProvider(fOutlineContentProvider);
    fOutlineSorter = new OutlineSorter();
    treeViewer.setComparator(fOutlineSorter);
    treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);

    treeViewer.getTree().addKeyListener(getKeyAdapter());

    return treeViewer;
}

From source file:ext.org.eclipse.jdt.internal.ui.typehierarchy.HierarchyInformationControl.java

License:Open Source License

@Override
protected TreeViewer createTreeViewer(Composite parent, int style) {
    Tree tree = new Tree(parent, SWT.SINGLE | (style & ~SWT.MULTI));
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.heightHint = tree.getItemHeight() * 12;
    tree.setLayoutData(gd);//from   w w w.  j  av a2s. co  m

    TreeViewer treeViewer = new TreeViewer(tree);
    treeViewer.addFilter(new ViewerFilter() {
        @Override
        public boolean select(Viewer viewer, Object parentElement, Object element) {
            return element instanceof IType;
        }
    });

    fLifeCycle = new TypeHierarchyLifeCycle(false);

    treeViewer.setComparator(new HierarchyViewerSorter(fLifeCycle));
    treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);

    fLabelProvider = new HierarchyLabelProvider(fLifeCycle);
    fLabelProvider.setFilter(new ViewerFilter() {
        @Override
        public boolean select(Viewer viewer, Object parentElement, Object element) {
            return hasFocusMethod((IType) element);
        }
    });

    fLabelProvider.setTextFlags(JavaElementLabels.ALL_DEFAULT | JavaElementLabels.T_POST_QUALIFIED
            | JavaElementLabels.P_COMPRESSED);
    fLabelProvider.addLabelDecorator(new ProblemsLabelDecorator(null));
    treeViewer.setLabelProvider(new ColoringLabelProvider(fLabelProvider));

    treeViewer.getTree().addKeyListener(getKeyAdapter());

    return treeViewer;
}

From source file:fr.inria.linuxtools.internal.tmf.ui.parsers.wizards.CustomXmlParserInputWizardPage.java

License:Open Source License

private void createButtonBar() {
    Composite buttonBar = new Composite(container, SWT.NONE);
    GridLayout buttonBarLayout = new GridLayout(6, false);
    buttonBarLayout.marginHeight = 0;//w ww.j a v a2  s .com
    buttonBarLayout.marginWidth = 0;
    buttonBar.setLayout(buttonBarLayout);

    removeButton = new Button(buttonBar, SWT.PUSH);
    removeButton.setImage(DELETE_IMAGE);
    removeButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_removeElement);
    removeButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (treeViewer.getSelection().isEmpty() || selectedElement == null) {
                return;
            }
            removeElement();
            InputElement inputElement = (InputElement) ((IStructuredSelection) treeViewer.getSelection())
                    .getFirstElement();
            if (inputElement == definition.rootInputElement) {
                definition.rootInputElement = null;
            } else {
                inputElement.parentElement.childElements.remove(inputElement);
            }
            treeViewer.refresh();
            validate();
            updatePreviews();
            removeButton.setEnabled(false);
            if (definition.rootInputElement == null) {
                addChildButton.setEnabled(true);
                addChildButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_addDocumentEleemnt);
            } else {
                addChildButton.setEnabled(false);
            }
            addNextButton.setEnabled(false);
            moveUpButton.setEnabled(false);
            moveDownButton.setEnabled(false);
        }
    });

    addChildButton = new Button(buttonBar, SWT.PUSH);
    addChildButton.setImage(ADD_CHILD_IMAGE);
    addChildButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_addChildElement);
    addChildButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            InputElement inputElement = new InputElement("", false, CustomXmlTraceDefinition.TAG_IGNORE, 0, "", //$NON-NLS-1$//$NON-NLS-2$
                    null);
            if (definition.rootInputElement == null) {
                definition.rootInputElement = inputElement;
                inputElement.elementName = getChildNameSuggestion(null);
            } else if (treeViewer.getSelection().isEmpty()) {
                return;
            } else {
                InputElement parentInputElement = (InputElement) ((IStructuredSelection) treeViewer
                        .getSelection()).getFirstElement();
                parentInputElement.addChild(inputElement);
                inputElement.elementName = getChildNameSuggestion(parentInputElement);
            }
            treeViewer.refresh();
            treeViewer.setSelection(new StructuredSelection(inputElement), true);
        }
    });

    addNextButton = new Button(buttonBar, SWT.PUSH);
    addNextButton.setImage(ADD_NEXT_IMAGE);
    addNextButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_addNextElement);
    addNextButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            InputElement inputElement = new InputElement("", false, CustomXmlTraceDefinition.TAG_IGNORE, 0, "", //$NON-NLS-1$//$NON-NLS-2$
                    null);
            if (definition.rootInputElement == null) {
                definition.rootInputElement = inputElement;
                inputElement.elementName = getChildNameSuggestion(null);
            } else if (treeViewer.getSelection().isEmpty()) {
                return;
            } else {
                InputElement previousInputElement = (InputElement) ((IStructuredSelection) treeViewer
                        .getSelection()).getFirstElement();
                if (previousInputElement == definition.rootInputElement) {
                    return;
                }
                previousInputElement.addNext(inputElement);
                inputElement.elementName = getChildNameSuggestion(inputElement.parentElement);
            }
            treeViewer.refresh();
            treeViewer.setSelection(new StructuredSelection(inputElement), true);
        }
    });

    Button feelingLuckyButton = new Button(buttonBar, SWT.PUSH);
    feelingLuckyButton.setImage(ADD_MANY_IMAGE);
    feelingLuckyButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_feelingLucky);
    feelingLuckyButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            InputElement inputElement = null;
            if (definition.rootInputElement == null) {
                if (getChildNameSuggestion(null).length() != 0) {
                    inputElement = new InputElement(getChildNameSuggestion(null), false,
                            CustomXmlTraceDefinition.TAG_IGNORE, 0, "", null); //$NON-NLS-1$
                    definition.rootInputElement = inputElement;
                    feelingLucky(inputElement);
                } else {
                    return;
                }
            } else if (treeViewer.getSelection().isEmpty()) {
                return;
            } else {
                inputElement = (InputElement) ((IStructuredSelection) treeViewer.getSelection())
                        .getFirstElement();
                feelingLucky(inputElement);
            }
            treeViewer.refresh();
            treeViewer.setSelection(new StructuredSelection(inputElement), true);
            treeViewer.expandToLevel(inputElement, AbstractTreeViewer.ALL_LEVELS);
        }
    });

    moveUpButton = new Button(buttonBar, SWT.PUSH);
    moveUpButton.setImage(MOVE_UP_IMAGE);
    moveUpButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_moveUp);
    moveUpButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (treeViewer.getSelection().isEmpty()) {
                return;
            }
            InputElement inputElement = (InputElement) ((IStructuredSelection) treeViewer.getSelection())
                    .getFirstElement();
            if (inputElement == definition.rootInputElement) {
                return;
            }
            inputElement.moveUp();
            treeViewer.refresh();
            validate();
            updatePreviews();
        }
    });

    moveDownButton = new Button(buttonBar, SWT.PUSH);
    moveDownButton.setImage(MOVE_DOWN_IMAGE);
    moveDownButton.setToolTipText(Messages.CustomXmlParserInputWizardPage_moveDown);
    moveDownButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (treeViewer.getSelection().isEmpty()) {
                return;
            }
            InputElement inputElement = (InputElement) ((IStructuredSelection) treeViewer.getSelection())
                    .getFirstElement();
            if (inputElement == definition.rootInputElement) {
                return;
            }
            inputElement.moveDown();
            treeViewer.refresh();
            validate();
            updatePreviews();
        }
    });
}

From source file:fr.inria.linuxtools.tmf.ui.viewers.tree.AbstractTmfTreeViewer.java

License:Open Source License

/**
 * Constructor//from  w  w  w  .  jav  a 2  s .c om
 *
 * @param parent
 *            The parent composite that holds this viewer
 * @param allowMultiSelect
 *            Whether multiple selections are allowed
 */
public AbstractTmfTreeViewer(Composite parent, boolean allowMultiSelect) {
    super(parent);

    int flags = SWT.FULL_SELECTION | SWT.H_SCROLL;
    if (allowMultiSelect) {
        flags |= SWT.MULTI;
    }

    /* Build the tree viewer part of the view */
    fTreeViewer = new TreeViewer(parent, flags);
    fTreeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
    final Tree tree = fTreeViewer.getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);
    fTreeViewer.setContentProvider(new TreeContentProvider());
    fTreeViewer.setLabelProvider(new TreeLabelProvider());
    List<TmfTreeColumnData> columns = getColumnDataProvider().getColumnData();
    this.setTreeColumns(columns);
}

From source file:fr.inria.linuxtools.tmf.ui.views.statesystem.TmfStateSystemViewer.java

License:Open Source License

/**
 * Set the filter status of the viewer. By default, all entries of all state
 * system are present, and the values that changed since last refresh are
 * shown in yellow. When the filter status is true, only the entries with
 * values modified at current time are displayed.
 *///from  w w  w.jav  a  2  s  .c  o  m
public void changeFilterStatus() {
    fFilterStatus = !fFilterStatus;
    if (fFilterStatus) {
        getTreeViewer().setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
    } else {
        getTreeViewer().setAutoExpandLevel(DEFAULT_AUTOEXPAND);
        clearContent();
    }
    updateContent(getSelectionBeginTime(), getSelectionEndTime(), true);
}

From source file:fr.inria.linuxtools.tmf.ui.widgets.timegraph.TimeGraphCombo.java

License:Open Source License

/**
 * Constructs a new instance of this class given its parent and a style
 * value describing its behavior and appearance.
 *
 * @param parent/* w  ww.  j  a  v  a 2 s .  c o m*/
 *            a widget which will be the parent of the new instance (cannot
 *            be null)
 * @param style
 *            the style of widget to construct
 * @param weights
 *            The relative weights of each side of the sash form
 * @since 2.1
 */
public TimeGraphCombo(Composite parent, int style, int[] weights) {
    super(parent, style);
    setLayout(new FillLayout());

    final SashForm sash = new SashForm(this, SWT.NONE);

    fTreeViewer = new TreeViewer(sash, SWT.FULL_SELECTION | SWT.H_SCROLL);
    fTreeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
    final Tree tree = fTreeViewer.getTree();
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);

    fTimeGraphViewer = new TimeGraphViewer(sash, SWT.NONE);
    fTimeGraphViewer.setItemHeight(getItemHeight(tree));
    fTimeGraphViewer.setHeaderHeight(tree.getHeaderHeight());
    fTimeGraphViewer.setBorderWidth(tree.getBorderWidth());
    fTimeGraphViewer.setNameWidthPref(0);

    fFilter = new RawViewerFilter();
    addFilter(fFilter);

    fFilterDialog = new TimeGraphFilterDialog(getShell());

    // Feature in Windows. The tree vertical bar reappears when
    // the control is resized so we need to hide it again.
    // Bug in Linux. The tree header height is 0 in constructor,
    // so we need to reset it later when the control is resized.
    tree.addControlListener(new ControlAdapter() {
        private int depth = 0;

        @Override
        public void controlResized(ControlEvent e) {
            if (depth == 0) {
                depth++;
                tree.getVerticalBar().setEnabled(false);
                // this can trigger controlResized recursively
                tree.getVerticalBar().setVisible(false);
                depth--;
            }
            fTimeGraphViewer.setHeaderHeight(tree.getHeaderHeight());
        }
    });

    // TODO propose patch
    // double click @Framesoc
    fTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
        @Override
        public void doubleClick(DoubleClickEvent event) {
            IStructuredSelection selection = (IStructuredSelection) event.getSelection();
            ITimeGraphEntry node = (ITimeGraphEntry) selection.getFirstElement();
            if (node.hasChildren()) {
                boolean expanded = fTreeViewer.getExpandedState(node);
                fTreeViewer.setExpandedState(node, !expanded);
                if (expanded) {
                    collapseTimeGraphTree(node);
                } else {
                    expandTimeGraphTree(node);
                }
            }
        }
    });

    // ensure synchronization of expanded items between tree and time graph
    fTreeViewer.addTreeListener(new ITreeViewerListener() {
        @Override
        public void treeCollapsed(TreeExpansionEvent event) {
            fTimeGraphViewer.setExpandedState((ITimeGraphEntry) event.getElement(), false);
            // @Framesoc
            collapseTimeGraphTree((ITimeGraphEntry) event.getElement());
        }

        @Override
        public void treeExpanded(TreeExpansionEvent event) {
            ITimeGraphEntry entry = (ITimeGraphEntry) event.getElement();
            // @Framesoc
            expandTimeGraphTree(entry);
        }
    });

    // ensure synchronization of expanded items between tree and time graph
    fTimeGraphViewer.addTreeListener(new ITimeGraphTreeListener() {
        @Override
        public void treeCollapsed(TimeGraphTreeExpansionEvent event) {
            fTreeViewer.setExpandedState(event.getEntry(), false);
            alignTreeItems(true);
        }

        @Override
        public void treeExpanded(TimeGraphTreeExpansionEvent event) {
            ITimeGraphEntry entry = event.getEntry();
            fTreeViewer.setExpandedState(entry, true);
            Set<Object> expandedElements = new HashSet<>(Arrays.asList(fTreeViewer.getExpandedElements()));
            for (ITimeGraphEntry child : entry.getChildren()) {
                if (child.hasChildren()) {
                    boolean expanded = expandedElements.contains(child);
                    fTimeGraphViewer.setExpandedState(child, expanded);
                }
            }
            alignTreeItems(true);
        }
    });

    // prevent mouse button from selecting a filler tree item
    tree.addListener(SWT.MouseDown, new Listener() {
        @Override
        public void handleEvent(Event event) {
            TreeItem treeItem = tree.getItem(new Point(event.x, event.y));
            if (treeItem == null || treeItem.getData() == FILLER) {
                event.doit = false;
                List<TreeItem> treeItems = getVisibleExpandedItems(tree, false);
                if (treeItems.size() == 0) {
                    fTreeViewer.setSelection(new StructuredSelection());
                    fTimeGraphViewer.setSelection(null);
                    return;
                }
                // this prevents from scrolling up when selecting
                // the partially visible tree item at the bottom
                tree.select(treeItems.get(treeItems.size() - 1));
                fTreeViewer.setSelection(new StructuredSelection());
                fTimeGraphViewer.setSelection(null);
            }
        }
    });

    // prevent mouse wheel from scrolling down into filler tree items
    tree.addListener(SWT.MouseWheel, new Listener() {
        @Override
        public void handleEvent(Event event) {
            event.doit = false;
            Slider scrollBar = fTimeGraphViewer.getVerticalBar();
            fTimeGraphViewer.setTopIndex(scrollBar.getSelection() - event.count);
            alignTreeItems(false);
        }
    });

    // prevent key stroke from selecting a filler tree item
    tree.addListener(SWT.KeyDown, new Listener() {
        @Override
        public void handleEvent(Event event) {
            List<TreeItem> treeItems = getVisibleExpandedItems(tree, false);
            if (treeItems.size() == 0) {
                fTreeViewer.setSelection(new StructuredSelection());
                event.doit = false;
                return;
            }
            if (event.keyCode == SWT.ARROW_DOWN) {
                int index = Math.min(fTimeGraphViewer.getSelectionIndex() + 1, treeItems.size() - 1);
                fTimeGraphViewer.setSelection((ITimeGraphEntry) treeItems.get(index).getData());
                event.doit = false;
            } else if (event.keyCode == SWT.PAGE_DOWN) {
                int height = tree.getSize().y - tree.getHeaderHeight() - tree.getHorizontalBar().getSize().y;
                int countPerPage = height / getItemHeight(tree);
                int index = Math.min(fTimeGraphViewer.getSelectionIndex() + countPerPage - 1,
                        treeItems.size() - 1);
                fTimeGraphViewer.setSelection((ITimeGraphEntry) treeItems.get(index).getData());
                event.doit = false;
            } else if (event.keyCode == SWT.END) {
                fTimeGraphViewer.setSelection((ITimeGraphEntry) treeItems.get(treeItems.size() - 1).getData());
                event.doit = false;
            }
            if (fTimeGraphViewer.getSelectionIndex() >= 0) {
                fTreeViewer.setSelection(new StructuredSelection(fTimeGraphViewer.getSelection()));
            } else {
                fTreeViewer.setSelection(new StructuredSelection());
            }
            alignTreeItems(false);
        }
    });

    // ensure alignment of top item between tree and time graph
    fTimeGraphViewer.getTimeGraphControl().addControlListener(new ControlAdapter() {
        @Override
        public void controlResized(ControlEvent e) {
            alignTreeItems(false);
        }
    });

    // ensure synchronization of selected item between tree and time graph
    fTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            if (fInhibitTreeSelection) {
                return;
            }
            if (event.getSelection() instanceof IStructuredSelection) {
                Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
                if (selection instanceof ITimeGraphEntry) {
                    fTimeGraphViewer.setSelection((ITimeGraphEntry) selection);
                }
                alignTreeItems(false);
            }
        }
    });

    // ensure synchronization of selected item between tree and time graph
    fTimeGraphViewer.addSelectionListener(new ITimeGraphSelectionListener() {
        @Override
        public void selectionChanged(TimeGraphSelectionEvent event) {
            ITimeGraphEntry entry = fTimeGraphViewer.getSelection();
            fInhibitTreeSelection = true; // block the tree selection
                                          // changed listener
            if (entry != null) {
                StructuredSelection selection = new StructuredSelection(entry);
                fTreeViewer.setSelection(selection);
            } else {
                fTreeViewer.setSelection(new StructuredSelection());
            }
            fInhibitTreeSelection = false;
            alignTreeItems(false);
        }
    });

    // ensure alignment of top item between tree and time graph
    fTimeGraphViewer.getVerticalBar().addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            alignTreeItems(false);
        }
    });

    // ensure alignment of top item between tree and time graph
    fTimeGraphViewer.getTimeGraphControl().addMouseWheelListener(new MouseWheelListener() {
        @Override
        public void mouseScrolled(MouseEvent e) {
            alignTreeItems(false);
        }
    });

    // ensure the tree has focus control when mouse is over it if the time
    // graph had control
    fTreeViewer.getControl().addMouseTrackListener(new MouseTrackAdapter() {
        @Override
        public void mouseEnter(MouseEvent e) {
            if (fTimeGraphViewer.getTimeGraphControl().isFocusControl()) {
                fTreeViewer.getControl().setFocus();
            }
        }
    });

    // ensure the time graph has focus control when mouse is over it if the
    // tree had control
    fTimeGraphViewer.getTimeGraphControl().addMouseTrackListener(new MouseTrackAdapter() {
        @Override
        public void mouseEnter(MouseEvent e) {
            if (fTreeViewer.getControl().isFocusControl()) {
                fTimeGraphViewer.getTimeGraphControl().setFocus();
            }
        }
    });
    fTimeGraphViewer.getTimeGraphScale().addMouseTrackListener(new MouseTrackAdapter() {
        @Override
        public void mouseEnter(MouseEvent e) {
            if (fTreeViewer.getControl().isFocusControl()) {
                fTimeGraphViewer.getTimeGraphControl().setFocus();
            }
        }
    });

    // The filler rows are required to ensure alignment when the tree does
    // not have a
    // visible horizontal scroll bar. The tree does not allow its top item
    // to be set
    // to a value that would cause blank space to be drawn at the bottom of
    // the tree.
    fNumFillerRows = Display.getDefault().getBounds().height / getItemHeight(tree);

    sash.setWeights(weights);
}

From source file:fr.inria.soctrace.tools.ocelotl.microdesc.ui.DistributionBaseView.java

License:Open Source License

@Override
protected Control createDialogArea(Composite parent) {
    Composite all = (Composite) super.createDialogArea(parent);

    final SashForm sashFormGlobal = new SashForm(all, SWT.VERTICAL);
    sashFormGlobal.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    sashFormGlobal.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));

    TabFolder tabFolder = new TabFolder(sashFormGlobal, SWT.NONE);

    TabItem tbtmNewItem = new TabItem(tabFolder, SWT.NONE);
    tbtmNewItem.setText("Event Types");

    final Group groupEventTypes = new Group(tabFolder, SWT.NONE);
    tbtmNewItem.setControl(groupEventTypes);
    groupEventTypes.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    groupEventTypes.setText("Set Event Types");
    final GridLayout gl_groupEventTypes = new GridLayout(2, false);
    gl_groupEventTypes.horizontalSpacing = 0;
    groupEventTypes.setLayout(gl_groupEventTypes);

    listViewerEventTypes = new ListViewer(groupEventTypes, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    listViewerEventTypes.setContentProvider(new ArrayContentProvider());
    listViewerEventTypes.setLabelProvider(new EventTypeLabelProvider());
    listViewerEventTypes.setComparator(new ViewerComparator());
    final List listEventTypes = listViewerEventTypes.getList();
    listEventTypes.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    listEventTypes.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    final ScrolledComposite scrCompositeEventTypeButtons = new ScrolledComposite(groupEventTypes,
            SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    scrCompositeEventTypeButtons.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
    scrCompositeEventTypeButtons.setExpandHorizontal(true);
    scrCompositeEventTypeButtons.setExpandVertical(true);

    final Composite compositeEventTypeButtons = new Composite(scrCompositeEventTypeButtons, SWT.NONE);
    compositeEventTypeButtons.setLayout(new GridLayout(1, false));

    final Button btnAddEventTypes = new Button(compositeEventTypeButtons, SWT.NONE);
    btnAddEventTypes.setText("Add");
    btnAddEventTypes.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnAddEventTypes.setImage(null);//from  w  ww.  ja va2s .  co m
    btnAddEventTypes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnAddEventTypes.addSelectionListener(new TypesSelectionAdapter());

    final Button btnRemoveEventTypes = new Button(compositeEventTypeButtons, SWT.NONE);
    btnRemoveEventTypes.setText("Remove");
    btnRemoveEventTypes.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnRemoveEventTypes.setImage(null);
    btnRemoveEventTypes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    scrCompositeEventTypeButtons.setContent(compositeEventTypeButtons);
    scrCompositeEventTypeButtons.setMinSize(compositeEventTypeButtons.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    btnRemoveEventTypes.addSelectionListener(new RemoveSelectionAdapter(listViewerEventTypes));
    Button btnResetEventTypes = new Button(compositeEventTypeButtons, SWT.NONE);
    btnResetEventTypes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnResetEventTypes.setText("Reset");
    btnResetEventTypes.addSelectionListener(new ResetSelectionAdapter(listViewerEventTypes));
    btnResetEventTypes.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnResetEventTypes.setImage(null);

    // Tab event producers selection
    TabItem tbtmNewItem_2 = new TabItem(tabFolder, SWT.NONE);
    tbtmNewItem_2.setText("Event Producers");

    final Group groupEventProducers = new Group(tabFolder, SWT.NONE);
    tbtmNewItem_2.setControl(groupEventProducers);
    groupEventProducers.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    groupEventProducers.setText("Event Producers");
    groupEventProducers.setLayout(new GridLayout());

    // Tree viewer
    treeViewerEventProducer = new CheckboxTreeViewer(groupEventProducers, SWT.BORDER | SWT.MULTI);
    treeViewerEventProducer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);

    GridData data = new GridData(GridData.FILL_BOTH);
    data.widthHint = convertWidthInCharsToPixels(60);
    data.heightHint = convertHeightInCharsToPixels(18);

    final Tree tree = treeViewerEventProducer.getTree();
    tree.setLinesVisible(true);
    tree.setLayoutData(data);
    tree.setFont(parent.getFont());

    treeViewerEventProducer.setContentProvider(new FilterTreeContentProvider());
    treeViewerEventProducer.setLabelProvider(new SimpleEventProducerLabelProvider());
    treeViewerEventProducer.expandAll();
    treeViewerEventProducer.setComparator(new ViewerComparator());
    treeViewerEventProducer.addCheckStateListener(new CheckStateListener());
    treeViewerEventProducer.setComparator(new ViewerComparator(new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return AlphanumComparator.compare(o1, o2);
        }
    }));

    // Buttons
    Composite buttonComposite = new Composite(groupEventProducers, SWT.RIGHT);
    GridLayout layout = new GridLayout();
    layout.marginWidth = 0;
    layout.horizontalSpacing = convertHorizontalDLUsToPixels(5);
    buttonComposite.setLayout(layout);
    buttonComposite.setFont(groupEventProducers.getFont());
    GridData data2 = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL);
    data2.grabExcessHorizontalSpace = true;
    buttonComposite.setLayoutData(data2);

    final Button btnCheckEventProducer = new Button(buttonComposite, SWT.NONE);
    btnCheckEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnCheckEventProducer.setText("Check");
    btnCheckEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnCheckEventProducer.setImage(null);
    btnCheckEventProducer.addSelectionListener(new AddProducerNodeAdapter());

    Button btnCheckAllEventProducer = new Button(buttonComposite, SWT.NONE);
    btnCheckAllEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    btnCheckAllEventProducer.setText("Check All");
    btnCheckAllEventProducer.setImage(null);
    btnCheckAllEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnCheckAllEventProducer.addSelectionListener(new CheckAllEventProducersAdapter());

    final Button btnAddResult = new Button(buttonComposite, SWT.NONE);
    btnAddResult.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnAddResult.setText("Add Result");
    btnAddResult.setImage(null);
    btnAddResult.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnAddResult.addSelectionListener(new AddResultsEventProducersAdapter());

    final Button btnUncheckEventProducer = new Button(buttonComposite, SWT.NONE);
    btnUncheckEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnUncheckEventProducer.setText("Uncheck");
    btnUncheckEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnUncheckEventProducer.setImage(null);
    btnUncheckEventProducer.setImage(null);
    btnUncheckEventProducer.addSelectionListener(new UncheckEventProducerAdapter());

    Button btnUncheckAllEventProducer = new Button(buttonComposite, SWT.NONE);
    btnUncheckAllEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnUncheckAllEventProducer.setText("Uncheck All");
    btnUncheckAllEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnUncheckAllEventProducer.setImage(null);
    btnUncheckAllEventProducer.addSelectionListener(new UnCheckAllEventProducersAdapter());

    Button btnCheckSubtreeEventProducer = new Button(buttonComposite, SWT.NONE);
    btnCheckSubtreeEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnCheckSubtreeEventProducer.setText("Check Subtree");
    btnCheckSubtreeEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnCheckSubtreeEventProducer.setImage(null);
    btnCheckSubtreeEventProducer.addSelectionListener(new CheckSubtreeEventProducersAdapter());

    Button btnUncheckSubtreeEventProducer = new Button(buttonComposite, SWT.NONE);
    btnUncheckSubtreeEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnUncheckSubtreeEventProducer.setText("Uncheck Subtree");
    btnUncheckSubtreeEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnUncheckSubtreeEventProducer.setImage(null);
    btnUncheckSubtreeEventProducer.addSelectionListener(new UncheckSubtreeEventProducersAdapter());

    Button btnAddEventProducer = new Button(buttonComposite, SWT.NONE);
    btnAddEventProducer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    btnAddEventProducer.setText("Add");
    btnAddEventProducer.setFont(SWTResourceManager.getFont("Cantarell", 11, SWT.NORMAL));
    btnAddEventProducer.setImage(null);
    btnAddEventProducer.addSelectionListener(new AddEventProducerAdapter());

    layout.numColumns = 4;
    buttonComposite.setLayout(layout);

    sashFormGlobal.setWeights(new int[] { 1 });

    initSettings();

    return sashFormGlobal;
}

From source file:fr.sanofi.fcl4transmart.model.classes.workUI.clinicalData.LoadDataUI.java

License:Open Source License

@Override
public Composite createUI(Composite parent) {
    this.display = WorkPart.display();
    Shell shell = new Shell(this.display);
    shell.setSize(50, 100);//w ww  . j  a va 2s . c o m
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 1;
    shell.setLayout(gridLayout);
    ProgressBar pb = new ProgressBar(shell, SWT.HORIZONTAL | SWT.INDETERMINATE);
    pb.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    Label searching = new Label(shell, SWT.NONE);
    searching.setText("Searching...");
    shell.open();
    this.isSearching = true;
    new Thread() {
        public void run() {
            testTm_cz = RetrieveData.testTm_czConnection();
            testTm_lz = RetrieveData.testTm_lzConnection();
            root = new TreeNode("Dataset explorer", null, false);
            studyTree = new StudyTree(root);
            topNodeController = new TopNodeController(root, dataType, studyTree);
            root = topNodeController.buildTree();
            topNode = dataType.getStudy().getTopNode();
            isSearching = false;
        }
    }.start();
    this.display = WorkPart.display();
    while (this.isSearching) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    shell.close();

    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout gd = new GridLayout();
    gd.numColumns = 1;
    gd.horizontalSpacing = 0;
    gd.verticalSpacing = 0;
    composite.setLayout(gd);

    ScrolledComposite scroller = new ScrolledComposite(composite, SWT.H_SCROLL | SWT.V_SCROLL);
    scroller.setLayoutData(new GridData(GridData.FILL_BOTH));
    gd = new GridLayout();
    gd.numColumns = 1;
    gd.horizontalSpacing = 0;
    gd.verticalSpacing = 0;
    scroller.setLayout(gd);

    Composite scrolledComposite = new Composite(scroller, SWT.NONE);
    scroller.setContent(scrolledComposite);
    GridLayout layout = new GridLayout();
    layout.numColumns = 1;
    scrolledComposite.setLayout(layout);

    if (topNode != null && topNode.compareTo("") != 0) {
        viewer = new TreeViewer(scrolledComposite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
        viewer.setContentProvider(new StudyContentProvider());
        viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);

        viewer.setInput(this.studyTree);
        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.horizontalAlignment = SWT.FILL;
        gridData.verticalAlignment = SWT.FILL;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;
        gridData.heightHint = 300;
        gridData.widthHint = 250;
        this.viewer.getControl().setLayoutData(gridData);
        viewer.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return element.toString();
            }

            @Override
            public Color getBackground(Object element) {
                if (((TreeNode) element).isStudyRoot()) {
                    return new Color(Display.getCurrent(), 237, 91, 67);
                }
                if (((TreeNode) element).isLabel()) {
                    return new Color(Display.getCurrent(), 212, 212, 212);
                }
                return null;
            }
        });
    } else {
        Label label = new Label(scrolledComposite, SWT.NONE);
        label.setText("Please first choose a study node in the description data type");
    }
    Button button = new Button(scrolledComposite, SWT.PUSH);
    button.setText("Load data");
    if (topNode != null && topNode.compareTo("") != 0) {
        if (this.testTm_cz && this.testTm_lz) {
            button.addListener(SWT.Selection, new LoadClinicalDataListener(this, this.dataType));
            Label dbLabel = new Label(scrolledComposite, SWT.NONE);
            dbLabel.setText("You are connected to database '" + PreferencesHandler.getDb() + "'");
        } else {
            button.setEnabled(false);
            Label warn = new Label(scrolledComposite, SWT.NONE);
            warn.setText("Warning: connection to database is not possible");
        }
    } else {
        button.setEnabled(false);
    }

    scrolledComposite.setSize(scrolledComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    return composite;
}

From source file:fr.sanofi.fcl4transmart.model.classes.workUI.clinicalData.SetStudyTreeUI.java

License:Open Source License

@Override
public Composite createUI(Composite parent) {
    Shell shell = new Shell();
    shell.setSize(50, 100);/*from  w  w w  .  java2s.  c o m*/
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 1;
    shell.setLayout(gridLayout);
    ProgressBar pb = new ProgressBar(shell, SWT.HORIZONTAL | SWT.INDETERMINATE);
    pb.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    Label searching = new Label(shell, SWT.NONE);
    searching.setText("Searching...");
    shell.open();
    this.isSearching = true;
    new Thread() {
        public void run() {
            root = new TreeNode(dataType.getStudy().toString(), null, false);
            studyTree = new StudyTree(root);
            if (((ClinicalData) dataType).getCMF() != null) {
                root = new StudyTreeController(root, dataType).buildTree(((ClinicalData) dataType).getCMF());
            }
            isSearching = false;
        }
    }.start();
    Display display = WorkPart.display();
    while (this.isSearching) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    shell.close();

    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout gd = new GridLayout();
    gd.numColumns = 1;
    gd.horizontalSpacing = 0;
    gd.verticalSpacing = 0;
    composite.setLayout(gd);

    ScrolledComposite scroller = new ScrolledComposite(composite, SWT.H_SCROLL | SWT.V_SCROLL);
    scroller.setLayoutData(new GridData(GridData.FILL_BOTH));
    gd = new GridLayout();
    gd.numColumns = 1;
    gd.horizontalSpacing = 0;
    gd.verticalSpacing = 0;

    Composite scrolledComposite = new Composite(scroller, SWT.NONE);
    scroller.setContent(scrolledComposite);
    GridLayout layout = new GridLayout();
    layout.numColumns = 1;
    scrolledComposite.setLayout(layout);

    Composite body = new Composite(scrolledComposite, SWT.NONE);
    body.setLayoutData(new GridData(GridData.FILL_BOTH));
    gd = new GridLayout();
    gd.numColumns = 2;
    body.setLayout(gd);

    viewer = new TreeViewer(body, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new StudyContentProvider());
    viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);

    viewer.setInput(this.studyTree);
    GridData gridData = new GridData(GridData.FILL_BOTH);
    gridData.horizontalAlignment = SWT.FILL;
    gridData.verticalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.heightHint = 300;
    gridData.widthHint = 250;
    this.viewer.getControl().setLayoutData(gridData);
    viewer.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return element.toString();
        }

        @Override
        public Color getBackground(Object element) {
            if (((TreeNode) element).isLabel()) {
                return new Color(Display.getCurrent(), 212, 212, 212);
            }
            return null;
        }
    });

    Composite leftPart = new Composite(body, SWT.NONE);
    leftPart.setLayout(new RowLayout(SWT.VERTICAL));
    gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.verticalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    leftPart.setLayoutData(new GridData(GridData.FILL_BOTH));

    Composite newChildPart = new Composite(leftPart, SWT.NONE);
    gd = new GridLayout();
    gd.numColumns = 2;
    newChildPart.setLayout(gd);
    Label newChildLabel = new Label(newChildPart, SWT.NONE);
    newChildLabel.setText("Free text: ");
    this.newChildField = new Text(newChildPart, SWT.BORDER);
    gridData = new GridData();
    gridData.widthHint = 100;
    this.newChildField.setLayoutData(gridData);

    Button addChild = new Button(leftPart, SWT.PUSH);
    addChild.setText("Add free text");

    addChild.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            // TODO Auto-generated method stub
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            TreeNode node;
            if (selection.iterator().hasNext()) {
                node = (TreeNode) selection.iterator().next();
            } else {
                displayMessage("Select a node first");
                return;
            }
            if (selection.size() > 1) {
                displayMessage("Several nodes selected");
                return;
            }
            if (node.isLabel()) {
                displayMessage("It is not possible to add a node to a label");
                return;
            }
            if (newChildField.getText().compareTo("") == 0) {
                displayMessage("Node name is empty");
                return;
            }
            if (node.getChild(newChildField.getText()) != null) {
                displayMessage("This node already exists");
            }
            node.addChild(new TreeNode(newChildField.getText(), node, false));
            viewer.setExpandedState(node, true);
            viewer.refresh();
        }
    });

    Composite newLabelPart = new Composite(leftPart, SWT.NONE);
    gd = new GridLayout();
    gd.numColumns = 2;
    newLabelPart.setLayout(gd);
    //Label newLabelLabel=new Label(newLabelPart, SWT.NONE);
    //newLabelLabel.setText("Choose a property");

    /*this.newLabelField=new Combo(newLabelPart, SWT.DROP_DOWN | SWT.BORDER | SWT.WRAP);
     this.newLabelField.addListener(SWT.KeyDown, new Listener(){ 
        public void handleEvent(Event event) { 
     event.doit = false; 
        } 
     }); 
     gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    this.newLabelField.setLayoutData(gridData);
    for(File file: ((ClinicalData)this.dataType).getRawFiles()){
       for(String s: FileHandler.getHeaders(file)){
     this.newLabelField.add(file.getName()+" - "+s);
        }
    }*/
    this.labels = new Vector<String>();
    for (File file : ((ClinicalData) this.dataType).getRawFiles()) {
        for (String s : FileHandler.getHeaders(file)) {
            labels.add(file.getName() + " - " + s);
        }
    }
    this.listViewer = new ListViewer(newLabelPart, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
    this.listViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
    this.listViewer.setContentProvider(new IStructuredContentProvider() {
        public Object[] getElements(Object inputElement) {
            @SuppressWarnings("rawtypes")
            Vector v = (Vector) inputElement;
            return v.toArray();
        }

        public void dispose() {
        }

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
    });
    this.listViewer.setInput(labels);

    Button addLabel = new Button(leftPart, SWT.PUSH);
    addLabel.setText("Add selected properties");
    addLabel.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            String[] selected = listViewer.getList().getSelection();
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            TreeNode node;
            if (selection.iterator().hasNext()) {
                node = (TreeNode) selection.iterator().next();
            } else {
                displayMessage("Select a node first");
                return;
            }
            if (selection.size() > 1) {
                displayMessage("Several nodes selected");
                return;
            }
            if (labels.size() < 1) {
                displayMessage("Choose at least a property");
                return;
            }
            if (node.getParent() != null && node.getParent().getParent() != null
                    && node.getParent().isLabel()) {
                displayMessage("This node parent is already a property");
                return;
            }
            for (int i = 0; i < selected.length; i++) {
                if (node.getChild(selected[i]) != null) {
                    displayMessage("The property '" + selected[i] + "' already exists");
                    return;
                }
            }
            for (int i = 0; i < selected.length; i++) {
                node.addChild(new TreeNode(selected[i], node, true));
            }
            viewer.setExpandedState(node, true);
            viewer.refresh();
        }
    });

    Label spacer = new Label(leftPart, SWT.NONE);

    Button remove = new Button(leftPart, SWT.PUSH);
    remove.setText("Remove selected items");
    remove.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            Vector<TreeNode> nodes = new Vector<TreeNode>();
            Iterator it = selection.iterator();
            while (it.hasNext()) {
                nodes.add((TreeNode) it.next());
            }
            if (nodes.size() < 1) {
                displayMessage("Select a node first");
                return;
            }
            for (TreeNode node : nodes) {
                if (node.getParent() == null) {
                    displayMessage("You can not remove the root of the study");
                    return;
                }
            }
            for (TreeNode node : nodes) {
                node.getParent().removeChild(node);
            }
            viewer.refresh();
        }
    });

    Button ok = new Button(scrolledComposite, SWT.PUSH);
    ok.setText("OK");
    ok.addListener(SWT.Selection, new SetStudyTreeListener(this, this.dataType));

    scrolledComposite.setSize(scrolledComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    return composite;
}

From source file:fr.sanofi.fcl4transmart.model.classes.workUI.description.SetTopNodeUI.java

License:Open Source License

@Override
public Composite createUI(Composite parent) {
    Shell shell = new Shell();
    shell.setSize(50, 100);//from   w  w  w .j  a  v a 2  s .com
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 1;
    shell.setLayout(gridLayout);
    ProgressBar pb = new ProgressBar(shell, SWT.HORIZONTAL | SWT.INDETERMINATE);
    pb.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    Label searching = new Label(shell, SWT.NONE);
    searching.setText("Searching...");
    shell.open();
    this.isSearching = true;
    new Thread() {
        public void run() {
            testDemodata = RetrieveData.testDemodataConnection();
            testMetadata = RetrieveData.testMetadataConnection();
            root = new TreeNode("Dataset explorer", null, false);
            studyTree = new StudyTree(root);
            controller = new TopNodeController(root, dataType, studyTree);
            root = controller.buildTree();
            isSearching = false;
        }
    }.start();
    Display display = WorkPart.display();
    while (this.isSearching) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    shell.close();

    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout gd = new GridLayout();
    gd.numColumns = 1;
    gd.horizontalSpacing = 0;
    gd.verticalSpacing = 0;
    composite.setLayout(gd);

    ScrolledComposite scroller = new ScrolledComposite(composite, SWT.H_SCROLL | SWT.V_SCROLL);
    scroller.setLayoutData(new GridData(GridData.FILL_BOTH));
    gd = new GridLayout();
    gd.numColumns = 1;
    gd.horizontalSpacing = 0;
    gd.verticalSpacing = 0;

    Composite scrolledComposite = new Composite(scroller, SWT.NONE);
    scroller.setContent(scrolledComposite);
    GridLayout layout = new GridLayout();
    layout.numColumns = 1;
    scrolledComposite.setLayout(layout);

    Composite body = new Composite(scrolledComposite, SWT.NONE);
    body.setLayoutData(new GridData(GridData.FILL_BOTH));
    gd = new GridLayout();
    gd.numColumns = 2;
    body.setLayout(gd);

    viewer = new TreeViewer(body, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new StudyContentProvider());
    viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);

    viewer.setInput(this.studyTree);
    GridData gridData = new GridData(GridData.FILL_BOTH);
    gridData.horizontalAlignment = SWT.FILL;
    gridData.verticalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.heightHint = 300;
    gridData.widthHint = 300;
    this.viewer.getControl().setLayoutData(gridData);
    viewer.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return element.toString();
        }

        @Override
        public Color getBackground(Object element) {
            if (((TreeNode) element).isStudyRoot()) {
                return new Color(Display.getCurrent(), 237, 91, 67);
            }
            if (((TreeNode) element).isLabel()) {
                return new Color(Display.getCurrent(), 212, 212, 212);
            }
            return null;
        }
    });

    Composite leftPart = new Composite(body, SWT.NONE);
    leftPart.setLayout(new RowLayout(SWT.VERTICAL));
    gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.verticalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    leftPart.setLayoutData(new GridData(GridData.FILL_BOTH));

    Composite newChildPart = new Composite(leftPart, SWT.NONE);
    gd = new GridLayout();
    gd.numColumns = 2;
    newChildPart.setLayout(gd);
    Label newChildLabel = new Label(newChildPart, SWT.NONE);
    newChildLabel.setText("Free text: ");
    this.newTextField = new Text(newChildPart, SWT.BORDER);
    gridData = new GridData();
    gridData.widthHint = 100;
    this.newTextField.setLayoutData(gridData);

    Button addChild = new Button(leftPart, SWT.PUSH);
    addChild.setText("Add free text");

    addChild.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            // TODO Auto-generated method stub
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            TreeNode node;
            if (selection.iterator().hasNext()) {
                node = (TreeNode) selection.iterator().next();
            } else {
                displayMessage("Select a node first");
                return;
            }
            if (node.isLabel()) {
                displayMessage("It is not possible to add a node to a study");
                return;
            }
            if (newTextField.getText().compareTo("") == 0) {
                displayMessage("Node name is empty");
                return;
            }
            if (node.getChild(newTextField.getText()) != null) {
                displayMessage("This node already exists");
            }
            node.addChild(new TreeNode(newTextField.getText(), node, false));
            viewer.setExpandedState(node, true);
            viewer.refresh();
        }
    });

    Composite newLabelPart = new Composite(leftPart, SWT.NONE);
    gd = new GridLayout();
    gd.numColumns = 2;
    newLabelPart.setLayout(gd);
    Label newLabelLabel = new Label(newLabelPart, SWT.NONE);
    newLabelLabel.setText("Study title");
    this.titleField = new Text(newLabelPart, SWT.BORDER);
    gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.widthHint = 100;
    this.titleField.setLayoutData(gridData);

    Button addLabel = new Button(leftPart, SWT.PUSH);
    addLabel.setText("Add the study");
    addLabel.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            // TODO Auto-generated method stub
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            TreeNode node;
            if (selection.iterator().hasNext()) {
                node = (TreeNode) selection.iterator().next();
            } else {
                displayMessage("Select a node first");
                return;
            }
            if (titleField.getText().compareTo("") == 0) {
                displayMessage("Choose a title");
                return;
            }
            if (node.isLabel()) {
                displayMessage("This node is already a study");
                return;
            }
            if (controller.getTopNode(root).compareTo("") != 0) {
                displayMessage("The study has already been added");
                return;
            }
            TreeNode newNode = new TreeNode(titleField.getText(), node, true);
            newNode.setIsStudyTree(true);
            studyTree.setHasStudy(true);
            node.addChild(newNode);
            viewer.setExpandedState(node, true);
            viewer.refresh();
        }
    });

    Button remove = new Button(leftPart, SWT.PUSH);
    remove.setText("Remove a node");
    remove.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
            TreeNode node;
            if (selection.iterator().hasNext()) {
                node = (TreeNode) selection.iterator().next();
            } else {
                displayMessage("Select a node first");
                return;
            }
            if (node.isLabel() && !node.isStudyRoot()) {
                displayMessage("You can not remove another study");
                return;
            }
            if (!checkRemoveNode(node)) {
                displayMessage("This node contains a study");
                return;
            }
            if (node.getParent() == null) {
                displayMessage("You can not remove the root of the studies");
                return;
            }
            node.getParent().removeChild(node);
            viewer.refresh();
        }
    });

    Button ok = new Button(scrolledComposite, SWT.PUSH);
    ok.setText("OK");
    ok.addListener(SWT.Selection, new Listener() {
        @Override
        public void handleEvent(Event event) {
            controller.writeTopNode();
            displayMessage("Top node has been saved");
        }
    });

    if (this.testDemodata && this.testMetadata) {
        Label dbLabel = new Label(scrolledComposite, SWT.NONE);
        dbLabel.setText("You are connected to database '" + PreferencesHandler.getDb() + "'");
    } else {
        Label warn = new Label(scrolledComposite, SWT.NONE);
        warn.setText("Warning: connection to database is not possible");
        ok.setEnabled(false);
    }

    scrolledComposite.setSize(scrolledComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    return composite;
}