Example usage for org.eclipse.jface.viewers TreeViewerEditor create

List of usage examples for org.eclipse.jface.viewers TreeViewerEditor create

Introduction

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

Prototype

public static void create(TreeViewer viewer, SWTFocusCellManager focusCellManager,
        ColumnViewerEditorActivationStrategy editorActivationStrategy, int feature) 

Source Link

Document

Create a customized editor with focusable cells

Usage

From source file:Snippet048TreeViewerTabWithCheckboxFor3_3.java

License:Open Source License

public Snippet048TreeViewerTabWithCheckboxFor3_3(final Shell shell) {
    final TreeViewer v = new TreeViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
    v.getTree().setLinesVisible(true);//from  www . j av a2 s  .  c o  m
    v.getTree().setHeaderVisible(true);

    final TreeViewerFocusCellManager mgr = new TreeViewerFocusCellManager(v,
            new FocusCellOwnerDrawHighlighter(v));
    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(v) {
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
                    || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && (event.keyCode == SWT.CR || event.character == ' '))
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
        }
    };

    TreeViewerEditor.create(v, mgr, actSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    final TextCellEditor textCellEditor = new TextCellEditor(v.getTree());
    final CheckboxCellEditor checkboxCellEditor = new CheckboxCellEditor(v.getTree());

    TreeViewerColumn column = new TreeViewerColumn(v, SWT.NONE);
    column.getColumn().setWidth(200);
    column.getColumn().setMoveable(true);
    column.getColumn().setText("Column 1");
    column.setLabelProvider(new ColumnLabelProvider() {

        public String getText(Object element) {
            return "Column 1 => " + element.toString();
        }

    });
    column.setEditingSupport(new EditingSupport(v) {
        protected boolean canEdit(Object element) {
            return false;
        }

        protected CellEditor getCellEditor(Object element) {
            return textCellEditor;
        }

        protected Object getValue(Object element) {
            return ((MyModel) element).counter + "";
        }

        protected void setValue(Object element, Object value) {
            ((MyModel) element).counter = Integer.parseInt(value.toString());
            v.update(element, null);
        }
    });

    column = new TreeViewerColumn(v, SWT.NONE);
    column.getColumn().setWidth(200);
    column.getColumn().setMoveable(true);
    column.getColumn().setText("Column 2");
    column.setLabelProvider(new ColumnLabelProvider() {

        public String getText(Object element) {
            return "Column 2 => " + element.toString();
        }

    });
    column.setEditingSupport(new EditingSupport(v) {
        protected boolean canEdit(Object element) {
            return true;
        }

        protected CellEditor getCellEditor(Object element) {
            return textCellEditor;
        }

        protected Object getValue(Object element) {
            return ((MyModel) element).counter + "";
        }

        protected void setValue(Object element, Object value) {
            ((MyModel) element).counter = Integer.parseInt(value.toString());
            v.update(element, null);
        }
    });

    column = new TreeViewerColumn(v, SWT.NONE);
    column.getColumn().setWidth(200);
    column.getColumn().setMoveable(true);
    column.getColumn().setText("Column 3");
    column.setLabelProvider(new ColumnLabelProvider() {

        public String getText(Object element) {
            return ((MyModel) element).bool + "";
        }

    });
    column.setEditingSupport(new EditingSupport(v) {
        protected boolean canEdit(Object element) {
            return true;
        }

        protected CellEditor getCellEditor(Object element) {
            return checkboxCellEditor;
        }

        protected Object getValue(Object element) {
            return new Boolean(((MyModel) element).bool);
        }

        protected void setValue(Object element, Object value) {
            ((MyModel) element).bool = ((Boolean) value).booleanValue();
            v.update(element, null);
        }
    });

    v.setContentProvider(new MyContentProvider());
    v.setInput(createModel());
    v.getControl().addTraverseListener(new TraverseListener() {

        public void keyTraversed(TraverseEvent e) {
            if ((e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS)
                    && mgr.getFocusCell().getColumnIndex() == 2) {
                ColumnViewerEditor editor = v.getColumnViewerEditor();
                ViewerCell cell = mgr.getFocusCell();

                try {
                    Method m = ColumnViewerEditor.class.getDeclaredMethod("processTraverseEvent",
                            new Class[] { int.class, ViewerRow.class, TraverseEvent.class });
                    m.setAccessible(true);
                    m.invoke(editor,
                            new Object[] { new Integer(cell.getColumnIndex()), cell.getViewerRow(), e });
                } catch (SecurityException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (NoSuchMethodException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IllegalArgumentException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IllegalAccessException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (InvocationTargetException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        }

    });
}

From source file:com.ibm.etools.mft.conversion.esb.editor.parameter.SourceProjectEditor.java

License:Open Source License

@Override
public void createControls(Composite parent) {
    updateProjectsInModel();/*from w  w  w .j a v a2s .c  om*/

    Composite container = new Composite(parent, SWT.None);
    container.setLayout(new GridLayout(2, false));
    container.setLayoutData(new GridData(GridData.FILL_BOTH));
    rootComposite = container;

    importLink = new Link(container, SWT.None);
    importLink.setText(WESBConversionMessages.SourceProjectEditor_importLink);
    GridData data = new GridData();
    data.verticalAlignment = SWT.BEGINNING;
    data.horizontalSpan = 2;
    importLink.setLayoutData(data);
    importLink.addSelectionListener(this);

    viewer = new CheckboxTreeViewer(container, SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION);
    viewer.getTree().setLinesVisible(true);
    viewer.getTree().setHeaderVisible(true);
    data = new GridData(GridData.FILL_BOTH);
    data.horizontalSpan = 2;
    // data.heightHint = 200;
    viewer.getTree().setLayoutData(data);
    for (int i = 0; i < COLUMN_HEADINGS.length; i++) {
        TreeColumn column = new TreeColumn(viewer.getTree(), SWT.None);
        column.setText(COLUMN_HEADINGS[i]);
        column.setResizable(true);
        column.setWidth(WIDTHES[i]);
    }
    viewer.addCheckStateListener(this);

    viewer.setContentProvider(new WESBProjectContentProvider());
    viewer.setLabelProvider(new ProjectLabelProvider());
    CustomTextCellEditor cellEditor = new CustomTextCellEditor(viewer.getTree()) {
        @Override
        public String isValid(Object value) {
            return getErrorMessage();
        }
    };
    viewer.setCellEditors(new CellEditor[] { null, cellEditor });
    cellEditor.setValidator(new ICellEditorValidator() {
        @Override
        public String isValid(Object value) {
            return isValidTargetName(value.toString());
        }
    });

    viewer.setCellModifier(new ICellModifier() {

        @Override
        public void modify(Object element, String property, Object value) {
            IProject p = (IProject) ((TreeItem) element).getData();
            WESBProject wesbp = projectsInModel.get(p.getName());
            if (wesbp == null) {
                wesbp = new WESBProject();
                wesbp.setName(p.getName());
                getModel().getSourceProjects().add(wesbp);
                updateProjectsInModel();
            }
            if (value != null) {
                wesbp.setTargetName(value.toString());
                viewer.refresh(p);
                changed();
            }
        }

        @Override
        public Object getValue(Object element, String property) {
            IProject p = (IProject) element;
            WESBProject wesbp = projectsInModel.get(p.getName());
            if (wesbp == null) {
                return ""; //$NON-NLS-1$
            }
            String targetName = wesbp.getTargetName();
            return targetName == null ? "" : targetName; //$NON-NLS-1$
        }

        @Override
        public boolean canModify(Object element, String property) {
            projectBeingEditted = (IProject) element;
            return true;
        }
    });
    viewer.setInput(ResourcesPlugin.getWorkspace());
    viewer.setColumnProperties(PROPERTIES);

    FocusCellOwnerDrawHighlighter projectHighlighter = new FocusCellOwnerDrawHighlighter(viewer);

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(viewer, projectHighlighter);

    ColumnViewerEditorActivationStrategy activationSupport = new ColumnViewerEditorActivationStrategy(viewer) {

        @Override
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {

            return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION
                    || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.CR)
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
        }
    };

    activationSupport.setEnableEditorActivationWithKeyboard(true);

    TreeViewerEditor.create(viewer, focusCellManager, activationSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    Composite container2 = new Composite(container, SWT.None);
    GridLayout layout = new GridLayout(2, false);
    layout.marginWidth = 0;
    container2.setLayout(layout);
    data = new GridData();
    data.horizontalSpan = 2;
    data.horizontalIndent = 0;
    container2.setLayoutData(data);

    selectAll = new Button(container2, SWT.NONE);
    selectAll.setText(WESBConversionMessages.projectSelectionPage_SelectAll);
    data = new GridData();
    data.horizontalAlignment = SWT.BEGINNING;
    selectAll.setLayoutData(data);
    selectAll.addSelectionListener(this);

    deselectAll = new Button(container2, SWT.NONE);
    deselectAll.setText(WESBConversionMessages.projectSelectionPage_DeselectAll);
    data = new GridData();
    data.horizontalAlignment = SWT.BEGINNING;
    deselectAll.setLayoutData(data);
    deselectAll.addSelectionListener(this);

    includeReferencedProjectOption = new Button(container, SWT.CHECK);
    includeReferencedProjectOption
            .setText(WESBConversionMessages.projectSelectionPage_IncludeReferencedProject);
    includeReferencedProjectOption
            .setSelection(getModel().getGlobalConfiguration().isIncludeReferencedProject());

    updateViewer();

    if (includeReferencedProjectOption.getSelection()) {
        ensureAllReferencedProjectsAreChecked();
        updateModel();
    }

    includeReferencedProjectOption.addSelectionListener(this);
    ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);

}

From source file:com.rcpcompany.uibindings.internal.ViewerBindingImpl.java

License:Open Source License

@Override
public void finish1() {
    final ColumnViewer viewer = getViewer(); // TODO SWTB
    assertTrue(viewer != null, "No viewer set"); //$NON-NLS-1$
    assertTrue(getList() != null, "No model list"); //$NON-NLS-1$
    assertTrue(!getColumns().isEmpty(), "No columns in viewer"); //$NON-NLS-1$

    final Control control = getControl();
    assertTrue((control.getStyle() & SWT.FULL_SELECTION) != 0, "Viewer must have SWT.FULL_SELECTION set"); //$NON-NLS-1$
    // SWTEventUtils.swtListen(control);

    if (viewer instanceof TableViewer) {
        final ObservableListContentProvider contentProvider = new ObservableListContentProvider();
        viewer.setContentProvider(contentProvider);
        setElements(contentProvider.getKnownElements());
    } else if (viewer instanceof TreeViewer) {
        myTreeFactory = new ViewerBindingTreeFactory(getList(), getArgument(ARG_TREE_ID, String.class, null));
        final ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
                myTreeFactory, myTreeFactory);
        viewer.setContentProvider(contentProvider);
        myValidationLabelDecorator = new ValidationLabelDecorator();
        myValidationLabelDecorator.setPropagationAdapter(new ValidationLabelDecorator.IPropagationAdapter() {
            @Override/*from   ww w .  j  a v  a 2s .com*/
            public Object getParent(Object object) {
                if (isDisposed())
                    return null;
                return contentProvider.getParent(object);
            }
        });
        setElements(contentProvider.getKnownElements());
    } else {
        assertTrue(false, "Viewer not a Table or a Tree?"); //$NON-NLS-1$
    }

    IManager.Factory.getManager().eAdapters().add(myManagerAdapter);
    control.addListener(SWT.PaintItem, myPaintItemListener);
    if ((control.getStyle() & SWT.SINGLE) == SWT.SINGLE) {
        mySelectionChangedListener = new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                myLastReportedSelectedElement = ((IStructuredSelection) event.getSelection()).getFirstElement();
            }
        };
        viewer.addSelectionChangedListener(mySelectionChangedListener);
    }
    registerWidget(control);

    /*
     * More or less adapted (read "stolen") from Snippet026TreeViewerTabEditing...
     * 
     * Actually it is more and more less and less...
     */
    final ColumnViewerEditorActivationStrategy actSupport = new CellEditorActivationStrategy(this);

    final FocusCellOwnerDrawHighlighter focusDrawingDelegate = new FocusCellOwnerDrawHighlighter(viewer);
    final int feature = ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
            | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION;
    try {
        if (viewer instanceof TableViewer) {
            final Class<?> cls = Class.forName("org.eclipse.jface.viewers.MyTableViewerFocusCellManager");
            final Constructor<?> constructor = cls.getConstructor(TableViewer.class, FocusCellHighlighter.class,
                    CellNavigationStrategy.class);
            myViewerFocusCellManager = (IMyViewerFocusCellManager) constructor.newInstance(viewer,
                    focusDrawingDelegate, theCellNavigationStrategy);
            TableViewerEditor.create((TableViewer) viewer,
                    (TableViewerFocusCellManager) myViewerFocusCellManager, actSupport, feature);
        } else if (viewer instanceof TreeViewer) {
            final Class<?> cls = Class.forName("org.eclipse.jface.viewers.MyTreeViewerFocusCellManager");
            final Constructor<?> constructor = cls.getConstructor(TreeViewer.class, FocusCellHighlighter.class,
                    CellNavigationStrategy.class);
            myViewerFocusCellManager = (IMyViewerFocusCellManager) constructor.newInstance(viewer,
                    focusDrawingDelegate, theCellNavigationStrategy);
            TreeViewerEditor.create((TreeViewer) viewer, (TreeViewerFocusCellManager) myViewerFocusCellManager,
                    actSupport, feature);
        } else {
            // Not supported
        }
    } catch (final Exception ex) {
        // Do nothing
    }

    if (getList() instanceof IObserving && getList().getElementType() instanceof EReference) {
        // final EObject baseObject = (EObject) ((IObserving) getList()).getObserved();
        // final EReference elementType = (EReference) getList().getElementType();

        myMessagesOnlyValueBinding = getContext().addBinding()
                .ui(control, InternalConstants.ATTR_VIEWERS_MESSAGE_ONLY).model(getList())
                .type(InternalConstants.VIEWERS_MESSAGE_ONLY_TYPE)
                .arg(Constants.ARG_MODEL_OBJECT_MESSAGES, true);
    }
    ColumnViewerToolTipSupport.enableFor(viewer);
    DoubleClickAdapter.adapt(this);
}

From source file:de.byteholder.geoclipse.mapprovider.DialogMPProfile.java

License:Open Source License

private Control createUI114Viewer(final Composite parent, final PixelConverter pixelConverter) {

    final TreeColumnLayout treeLayout = new TreeColumnLayout();

    final Composite layoutContainer = new Composite(parent, SWT.NONE);
    layoutContainer.setLayout(treeLayout);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(layoutContainer);
    {/*from   ww  w  . j  a  v  a 2s .c  o m*/

        final Tree tree = new Tree(layoutContainer,
                SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);

        tree.setHeaderVisible(true);
        tree.setLinesVisible(true);

        /*
         * tree viewer
         */
        _treeViewer = new ContainerCheckedTreeViewer(tree);

        _treeViewer.setContentProvider(new MapContentProvider());
        _treeViewer.setUseHashlookup(true);

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

                final Object selectedItem = ((IStructuredSelection) _treeViewer.getSelection())
                        .getFirstElement();
                if (selectedItem != null) {

                    if (selectedItem instanceof TVIMapProvider) {

                        // expand/collapse current item

                        final MP mapProvider = ((TVIMapProvider) selectedItem).getMapProviderWrapper().getMP();

                        if ((mapProvider instanceof MPWms) == false) {

                            // all none wms map provider can be toggled

                            toggleMapVisibility(tree);

                        } else {

                            // expand/collapse item

                            if (_treeViewer.getExpandedState(selectedItem)) {
                                _treeViewer.collapseToLevel(selectedItem, 1);
                            } else {
                                _treeViewer.expandToLevel(selectedItem, 1);
                            }
                        }

                    } else if (selectedItem instanceof TVIWmsLayer) {
                        toggleMapVisibility(tree);
                    }
                }
            }
        });

        _treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(final SelectionChangedEvent event) {
                onSelectMP(event.getSelection());
            }
        });

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

                    public void dragFinished(final DragSourceEvent event) {

                        final LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer();

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

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

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

                    public void dragStart(final DragSourceEvent event) {

                        final LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer();
                        final ITreeSelection selection = (ITreeSelection) _treeViewer.getSelection();

                        transfer.setSelection(selection);
                        transfer.setSelectionSetTime(_dragStartTime = event.time & 0xFFFFFFFFL);

                        // only ONE map provider/layer is allowed to be dragged
                        final Object firstElement = selection.getFirstElement();
                        event.doit = (selection.size() == 1) && ((firstElement instanceof TVIMapProvider)
                                || (firstElement instanceof TVIWmsLayer));
                    }
                });

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

        tree.addKeyListener(new KeyListener() {

            public void keyPressed(final KeyEvent e) {

                /*
                 * toggle the visibility with the space key
                 */
                if (e.keyCode == ' ') {
                    toggleMapVisibility(tree);
                }
            }

            public void keyReleased(final KeyEvent e) {
            }
        });

        /*
         * add editing support for the tree
         */
        final TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(_treeViewer,
                new FocusCellOwnerDrawHighlighter(_treeViewer));

        final ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
                _treeViewer) {

            @Override
            protected boolean isEditorActivationEvent(final ColumnViewerEditorActivationEvent event) {
                return (event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL)
                        || (event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION)
                        || ((event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED)
                                && (event.keyCode == SWT.F2))
                        || (event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC);
            }
        };

        TreeViewerEditor.create(_treeViewer, //
                focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL //
                        | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR //
                        | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    }

    createUI116ViewerColumns(treeLayout, pixelConverter);

    return layoutContainer;
}

From source file:de.walware.ecommons.ui.util.ViewerUtil.java

License:Open Source License

public static void installDefaultEditBehaviour(final TreeViewer treeViewer) {
    final CellNavigationStrategy naviStrat = new CellNavigationStrategy() {
        @Override//w w  w.  j av  a2  s  .  c  om
        public ViewerCell findSelectedCell(final ColumnViewer viewer, final ViewerCell currentSelectedCell,
                final Event event) {
            final ViewerCell cell = super.findSelectedCell(viewer, currentSelectedCell, event);
            if (cell != null) {
                treeViewer.getTree().showColumn(treeViewer.getTree().getColumn(cell.getColumnIndex()));
            }
            return cell;
        }

    };
    final TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(treeViewer,
            new FocusCellOwnerDrawHighlighter(treeViewer), naviStrat);
    TreeViewerEditor.create(treeViewer, focusCellManager, createActivationStrategy(treeViewer),
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_VERTICAL
                    | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.KEYBOARD_ACTIVATION);
}

From source file:dslComponent.Snippet056BooleanCellEditor.java

License:Open Source License

public Snippet056BooleanCellEditor(final Shell shell) {

    final TreeViewer v = new TreeViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
    v.getTree().setLinesVisible(true);/*from  w w  w . java2  s  .c  o  m*/
    v.getTree().setHeaderVisible(true);

    FocusCellOwnerDrawHighlighter h = new FocusCellOwnerDrawHighlighter(v) {

        @Override
        protected Color getSelectedCellBackgroundColorNoFocus(ViewerCell cell) {
            return shell.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
        }

        @Override
        protected Color getSelectedCellForegroundColorNoFocus(ViewerCell cell) {
            return shell.getDisplay().getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
        }
    };

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(v, h);
    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(v);

    int feature = ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
            | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION;

    TreeViewerEditor.create(v, focusCellManager, actSupport, feature);

    final TextCellEditor textCellEditor = new TextCellEditor(v.getTree());
    final CheckboxCellEditor booleanCellEditor = new CheckboxCellEditor(v.getTree());

    TreeViewerColumn column = createColumnFor(v, "Column 1");
    column.setLabelProvider(new MyColumnLabelProvider("Column 1"));
    column.setEditingSupport(new MyEditingSupport(v, v, textCellEditor));

    column = createColumnFor(v, "Column 2");
    column.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            return ((MyModel) element).flag + "";
        }

    });
    column.setEditingSupport(new EditingSupport(v) {
        @Override
        protected boolean canEdit(Object element) {
            return true;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            return booleanCellEditor;
        }

        @Override
        protected Object getValue(Object element) {
            return new Boolean(((MyModel) element).flag);
        }

        @Override
        protected void setValue(Object element, Object value) {
            ((MyModel) element).flag = ((Boolean) value).booleanValue();
            v.update(element, null);
        }
    });
    column = createColumnFor(v, "Column 3");
    column.setLabelProvider(new MyColumnLabelProvider("Column 3"));
    column.setEditingSupport(new MyEditingSupport(v, v, textCellEditor));

    v.setContentProvider(new MyContentProvider());
    v.setInput(createModel());
}

From source file:fr.inria.atlanmod.emftocsp.ui.wizards.impl.ModelElementDomainPage.java

License:Open Source License

public void createControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NONE);
    container.setLayout(new FormLayout());
    setControl(container);/*from   www. j  a  v a 2 s  .  co  m*/

    FormData formData = new FormData();
    formData.left = new FormAttachment(0, 0);
    formData.top = new FormAttachment(0, 0);
    formData.right = new FormAttachment(100, -5);
    formData.bottom = new FormAttachment(100, 0);

    treeViewer = new TreeViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
    treeViewer.getControl().setLayoutData(formData);
    treeViewer.getTree().setLinesVisible(true);
    treeViewer.getTree().setHeaderVisible(true);
    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(treeViewer,
            new FocusCellOwnerDrawHighlighter(treeViewer));

    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(treeViewer) {
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
                    || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
                    || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
                            && event.keyCode == SWT.CR)
                    || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
        }
    };

    TreeViewerEditor.create(treeViewer, focusCellManager, actSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    final TextCellEditor textCellEditor = new TextCellEditor(treeViewer.getTree());
    TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.NONE);
    column.getColumn().setWidth(200);
    column.getColumn().setMoveable(true);
    column.getColumn().setText("Model Elements"); //$NON-NLS-1$

    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public String getText(Object element) {
            if (element instanceof StructuralNode)
                return ((StructuralNode) element).getNodeType() == CLASS ? "Classes" : "Associations"; //$NON-NLS-1$ //$NON-NLS-2$
            if (element instanceof EClass)
                return ((EClass) element).getName();
            if (element instanceof Class)
                return ((Class) element).getName();
            if (element instanceof Association) {
                IModelReader modelReader = modelSolver.getModelReader();
                return modelReader.getAssociationName(((Association) element));
            }
            if (element instanceof EAssociation) {
                IModelReader modelReader = modelSolver.getModelReader();
                return modelReader.getAssociationName(((EAssociation) element));
            }
            if (element instanceof EAttribute) {
                EAttribute a = (EAttribute) element;
                return ((EAttribute) element).getName() + ": " //$NON-NLS-1$
                        + ((EAttribute) element).getEAttributeType().getName();
            }
            if (element instanceof StringAttributeContainer) {
                StringAttributeContainer c = (StringAttributeContainer) element;
                String base = c.attribute.getName() + ": " + c.attribute.getEAttributeType().getName(); //$NON-NLS-1$
                if (c.kind == StringAttributeContainer.Kind.LENGTH) {
                    return base + " (length)";
                }
                if (c.kind == StringAttributeContainer.Kind.DOMAIN) {
                    return base + " (domain)";
                }
            }
            if (element instanceof Property)
                return ((Property) element).getName() + ": " + ((Property) element).getType().getName(); //$NON-NLS-1$
            return ""; //$NON-NLS-1$
        }

        public Image getImage(Object element) {
            return null;
        }
    });
    column = new TreeViewerColumn(treeViewer, SWT.NONE);
    column.getColumn().setWidth(200);
    column.getColumn().setMoveable(true);
    column.getColumn().setText("Value"); //$NON-NLS-1$
    column.setLabelProvider(new ColumnLabelProvider() {
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public String getText(Object element) {
            String result = ""; //$NON-NLS-1$
            if (element instanceof StringAttributeContainer)
                result = modelElementsDomain.get(((StringAttributeContainer) element).getKey());
            if (element instanceof EAttribute)
                result = modelElementsDomain.get(((EAttribute) element).getEContainingClass().getName() + "." //$NON-NLS-1$
                        + ((EAttribute) element).getName());
            if (element instanceof EClass)
                result = modelElementsDomain
                        .get(((EClass) element).getEPackage().getName() + "." + ((EClass) element).getName()); //$NON-NLS-1$
            if (element instanceof Class)
                result = modelElementsDomain
                        .get(((Class) element).getPackage().getName() + "." + ((Class) element).getName()); //$NON-NLS-1$
            if (element instanceof Property)
                result = modelElementsDomain
                        .get(((Property) element).getClass_().getName() + "." + ((Property) element).getName()); //$NON-NLS-1$
            if (element instanceof Association) {
                IModelReader modelReader = modelSolver.getModelReader();
                return modelElementsDomain.get(modelReader.getAssociationName(((Association) element)));
            }
            if (element instanceof EAssociation) {
                IModelReader modelReader = modelSolver.getModelReader();
                return modelElementsDomain.get(modelReader.getAssociationName(((EAssociation) element)));
            }
            return result != null ? result : ""; //$NON-NLS-1$
        }
    });
    column.setEditingSupport(new EditingSupport(treeViewer) {

        protected boolean canEdit(Object element) {
            return !(element instanceof StructuralNode);
        }

        protected CellEditor getCellEditor(Object element) {
            return textCellEditor;
        }

        @SuppressWarnings({ "rawtypes", "unchecked" })
        protected Object getValue(Object element) {
            String result = ""; //$NON-NLS-1$
            if (element instanceof EAttribute)
                result = modelElementsDomain.get(((EAttribute) element).getEContainingClass().getName() + "." //$NON-NLS-1$
                        + ((EAttribute) element).getName());
            if (element instanceof StringAttributeContainer)
                result = modelElementsDomain.get(((StringAttributeContainer) element).getKey());
            if (element instanceof EClass)
                result = modelElementsDomain
                        .get(((EClass) element).getEPackage().getName() + "." + ((EClass) element).getName()); //$NON-NLS-1$
            if (element instanceof Class)
                result = modelElementsDomain
                        .get(((Class) element).getPackage().getName() + "." + ((Class) element).getName()); //$NON-NLS-1$
            if (element instanceof Property)
                result = modelElementsDomain
                        .get(((Property) element).getClass_().getName() + "." + ((Property) element).getName()); //$NON-NLS-1$
            if (element instanceof Association) {
                IModelReader modelReader = modelSolver.getModelReader();
                return modelElementsDomain.get(modelReader.getAssociationName(((Association) element)));
            }
            if (element instanceof EAssociation) {
                IModelReader modelReader = modelSolver.getModelReader();
                return modelElementsDomain.get(modelReader.getAssociationName(((EAssociation) element)));
            }
            return result != null ? result : ""; //$NON-NLS-1$
        }

        @SuppressWarnings({ "rawtypes", "unchecked" })
        protected void setValue(Object element, Object value) {
            String key = ""; //$NON-NLS-1$
            if (element instanceof EAttribute)
                key = ((EAttribute) element).getEContainingClass().getName() + "." //$NON-NLS-1$
                        + ((EAttribute) element).getName();
            if (element instanceof StringAttributeContainer)
                key = ((StringAttributeContainer) element).getKey();
            if (element instanceof EClass)
                key = ((EClass) element).getEPackage().getName() + "." + ((EClass) element).getName(); //$NON-NLS-1$
            if (element instanceof Class)
                key = ((Class) element).getPackage().getName() + "." + ((Class) element).getName(); //$NON-NLS-1$
            if (element instanceof Property)
                key = ((Property) element).getClass_().getName() + "." + ((Property) element).getName(); //$NON-NLS-1$
            if (element instanceof Association) {
                IModelReader modelReader = modelSolver.getModelReader();
                key = modelReader.getAssociationName(((Association) element));
            }
            if (element instanceof EAssociation) {
                IModelReader modelReader = modelSolver.getModelReader();
                key = modelReader.getAssociationName(((EAssociation) element));
            }
            modelElementsDomain.remove(key);
            modelElementsDomain.put(key, (String) value);
            treeViewer.update(element, null);
            modelSolver.setModelElementsDomain(modelElementsDomain);
        }
    });
}

From source file:fr.inria.linuxtools.internal.tmf.ui.project.wizards.importtrace.ImportTraceWizardScanPage.java

License:Open Source License

@Override
public void createControl(Composite parent) {
    super.createControl(parent);
    final Composite control = (Composite) this.getControl();
    setTitle(Messages.ImportTraceWizardScanPageTitle);
    traceTypeViewer = new CheckboxTreeViewer(control, SWT.CHECK);
    traceTypeViewer.setContentProvider(getBatchWizard().getScannedTraces());
    traceTypeViewer.getTree().setHeaderVisible(true);
    traceTypeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    traceTypeViewer.setInput(getBatchWizard().getScannedTraces());
    traceTypeViewer.addCheckStateListener(new ImportTraceCheckStateListener());

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(traceTypeViewer,
            new FocusCellOwnerDrawHighlighter(traceTypeViewer));
    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
            traceTypeViewer) {// www .  ja  va2  s . c  om
    };
    TreeViewerEditor.create(traceTypeViewer, focusCellManager, actSupport,
            ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                    | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);

    final TextCellEditor textCellEditor = new TextCellEditor(traceTypeViewer.getTree());
    // --------------------
    // Column 1
    // --------------------
    TreeViewerColumn column = new TreeViewerColumn(traceTypeViewer, SWT.NONE);
    column.getColumn().setWidth(COL_WIDTH);
    column.getColumn().setText(Messages.ImportTraceWizardTraceDisplayName);
    column.setLabelProvider(new FirstColumnLabelProvider());
    column.setEditingSupport(new ColumnEditorSupport(traceTypeViewer, textCellEditor));

    // --------------------
    // Column 2
    // --------------------

    column = new TreeViewerColumn(traceTypeViewer, SWT.NONE);
    column.getColumn().setWidth(500);
    column.getColumn().setText(Messages.ImportTraceWizardImportCaption);
    column.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof FileAndName) {
                FileAndName elem = (FileAndName) element;
                return elem.getFile().getPath();
            }
            return null;
        }
    });
    // --------------------
    // Column 3
    // --------------------

    column = new TreeViewerColumn(traceTypeViewer, SWT.NONE);

    column.getColumn().setWidth(80);
    column.getColumn().setText(Messages.ImportTraceWizardScanPageSize);
    column.getColumn().setAlignment(SWT.RIGHT);
    column.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            if (element instanceof FileAndName) {

                FileAndName elem = (FileAndName) element;
                long len = recurseSize(elem.getFile());
                if (len > 0) {
                    double sizeb10 = Math.log10(len);
                    DecimalFormat df = new DecimalFormat();
                    df.setMaximumFractionDigits(2);
                    df.setMinimumFractionDigits(0);
                    if (sizeb10 > 12) {
                        final double tbSize = len / 1024.0 / 1024 / 1024 / 1024;
                        return df.format(tbSize) + Messages.ImportTraceWizardScanPageTerabyte;
                    }
                    if (sizeb10 > 9) {
                        final double gbSize = len / 1024.0 / 1024 / 1024;
                        return df.format(gbSize) + Messages.ImportTraceWizardScanPageGigabyte;
                    }
                    if (sizeb10 > 6) {
                        final double mbSize = len / 1024.0 / 1024;
                        return df.format(mbSize) + Messages.ImportTraceWizardScanPageMegabyte;
                    }
                    if (sizeb10 > 3) {
                        final double kbSize = len / 1024.0;
                        return df.format(kbSize) + Messages.ImportTraceWizardScanPageKilobyte;
                    }
                }
                return Long.toString(len) + Messages.ImportTraceWizardScanPagebyte;

            }
            return null;
        }

        private long recurseSize(File file) {
            if (file.isFile() && file.canRead()) {
                return file.length();
            }
            long size = 0;
            if (file.exists() && file.isDirectory() && file.canRead()) {
                final File[] listFiles = file.listFiles();
                if (listFiles != null) {
                    for (File child : listFiles) {
                        if (child.isFile() && child.canRead()) {
                            size += child.length();
                        } else if (child.isDirectory()) {
                            size += recurseSize(child);
                        } else {
                            Activator.getDefault()
                                    .logError("Unknown \"file\" type for " + child + ' ' + child.toString()); //$NON-NLS-1$
                        }
                    }
                }
            }
            return size;
        }
    });

    init();
    getBatchWizard().setTracesToScan(fTracesToScan);
    getBatchWizard().setTraceFolder(fTargetFolder);

    fRunnable.schedule();
    setErrorMessage(Messages.ImportTraceWizardScanPageSelectAtleastOne);
}

From source file:net.sf.smbt.ui.ableton.views.AbletonLiveView.java

License:LGPL

private void createDetailsPanel(Composite container) {
    container.setLayout(GridLayoutFactory.fillDefaults().create());
    container.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    detailsPanel = GUIToolkit.INSTANCE.createComposite(container, SWT.DOUBLE_BUFFERED);
    detailsPanel.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
    detailsPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    sash = new SashForm(detailsPanel, SWT.BORDER | SWT.VERTICAL);
    sash.setLayout(GridLayoutFactory.fillDefaults().create());
    sash.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    sash.setBackground(GUIToolkit.FG);/*  ww  w.  java 2s.c  o m*/

    Composite topPanel = GUIToolkit.INSTANCE.createComposite(detailsPanel, SWT.DOUBLE_BUFFERED);
    topPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    topPanel.setLayoutData(GridDataFactory.fillDefaults().grab(false, false).create());

    Composite timeDetails = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.DOUBLE_BUFFERED);
    timeDetails.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
    timeDetails.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(true, false).create());

    // Tempo (BPM) 
    /*
    Label tempoLabel = GUIToolkit.INSTANCE.createLabel(timeDetails, "Tempo: ");
    tempoLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.CENTER).grab(true, false).create());
            
    tempoValLabel = GUIToolkit.INSTANCE.createLabel(timeDetails, "-- Bpm");
    tempoValLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.CENTER).grab(true, false).create());
            
    timeSongLCD = new SevenSegmentsDisplay(timeDetails, 5, SWT.NONE);
    timeSongLCD.setLayout(GridLayoutFactory.fillDefaults().create());
    timeSongLCD.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).span(2, 1).hint(300, 75).grab(false, false).create());
    timeSongLCD.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
     */

    Composite masterButtons = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.DOUBLE_BUFFERED);
    masterButtons.setLayout(GridLayoutFactory.fillDefaults().create());
    masterButtons.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(true, false).create());

    final Button playStopButton = new Button(masterButtons, SWT.TOGGLE);
    playStopButton.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(64, 64).minSize(64, 64).create());
    playStopButton.setForeground(ColorsUtil.BG);
    playStopButton.setImage(playImageBig);
    playStopButton.addSelectionListener(new SelectionListener() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (playStopButton.getSelection()) {
                playStopButton.setImage(stopImageBig);
                liveController.handleMasterTrackState(MASTER_CTRL.PLAY);
            } else {
                playStopButton.setImage(playImageBig);
                liveController.handleMasterTrackState(MASTER_CTRL.STOP);
            }
        }

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

    /*
    Composite dbMeterPanel = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.DOUBLE_BUFFERED);
    dbMeterPanel.setLayout(GridLayoutFactory.fillDefaults().create());
    dbMeterPanel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(true, true).create());
            
            
    dbMeter = new UbiDbMeter(dbMeterPanel, SWT.HORIZONTAL);
    dbMeter.setMax(100f);
    dbMeter.setLayoutData(GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).hint(145, 145).grab(false, false).create());
    */

    //
    // Volume, Pan, Meter (R + L)
    //

    Composite upPanel = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.SHADOW_ETCHED_IN);
    upPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    upPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());

    Composite vPanel = GUIToolkit.INSTANCE.createComposite(upPanel, SWT.SHADOW_ETCHED_IN);
    vPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    vPanel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(true, false).create());

    masterVolume = new UbiKnob(vPanel, SWT.HORIZONTAL);
    masterVolume.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(48, 48).grab(false, false).create());
    masterVolume.setMax(100f);
    masterVolume.setSelection(50);
    masterVolume.addSelectionListener(new UbiSelectionListener() {
        @Override
        public void handle() {
            float value = new Float(masterVolume.getSelection()) / 100f;
            if (value != liveController.getLiveApp().getMasterTrack().getVolume()) {
                liveController.getLiveApp().getMasterTrack().setVolume(value);
            }
        }
    });
    masterVolume.addMenuAction(new LinkOscAbletonCommandAction(masterVolume,
            ABLETON_OSC_MAPPING.MASTER_VOLUME.getLiteral(), 100f));

    Label masterVolumeLabel = GUIToolkit.INSTANCE.createLabel(vPanel, "Vol");
    masterVolumeLabel.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(false, false).create());

    Composite pPanel = GUIToolkit.INSTANCE.createComposite(upPanel, SWT.DOUBLE_BUFFERED);
    pPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    pPanel.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).grab(true, false).create());

    masterPan = new UbiKnob(pPanel, SWT.HORIZONTAL);
    masterPan.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(48, 48).grab(false, false).create());
    masterPan.setMax(100f);
    masterPan.setSelection(50);
    masterPan.addSelectionListener(new UbiSelectionListener() {
        @Override
        public void handle() {
            float value = new Float(masterPan.getSelection() - 50) / 50f;
            if (value != liveController.getLiveApp().getMasterTrack().getPan()) {
                liveController.getLiveApp().getMasterTrack().setPan(value);
            }
        }
    });
    masterPan.addMenuAction(
            new LinkOscAbletonCommandAction(masterPan, ABLETON_OSC_MAPPING.MASTER_VOLUME.getLiteral(), 100f));

    Label masterPanLabel = GUIToolkit.INSTANCE.createLabel(pPanel, "Pan");
    masterPanLabel.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(false, false).create());

    //
    // Vu Meters
    //

    Composite vuMetersPanel = GUIToolkit.INSTANCE.createComposite(upPanel, SWT.DOUBLE_BUFFERED);
    vuMetersPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(2).create());
    vuMetersPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).create());

    //leftMasterVu.setLayoutData(GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.CENTER).hint(250, SWT.DEFAULT).grab(true, false).create());
    /*
          Label rightMasterVuLabel = GUIToolkit.INSTANCE.createLabel(vuMetersPanel, "L/R ");
          rightMasterVuLabel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(false, false).create());
       */
    masterVu = new UbiVuMeter(vuMetersPanel, SWT.VERTICAL);
    masterVu.setLevel(0);
    masterVu.setMax(100);
    masterVu.setLayout(GridLayoutFactory.fillDefaults().create());
    masterVu.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(20, 250).grab(true, false).create());

    Composite tracksPanel = GUIToolkit.INSTANCE.createComposite(sash, SWT.DOUBLE_BUFFERED);
    tracksPanel.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).create());
    tracksPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    subDetailsViewer = GUIToolkit.INSTANCE.createTreeViewer(tracksPanel, SWT.FULL_SELECTION);
    subDetailsViewer.getTree().setLinesVisible(true);
    subDetailsViewer.setLabelProvider(new AbletonLiveLabelProvider());

    AbletonLiveDetailsContentProvider abletonLiveDetailsContentProvider = new AbletonLiveDetailsContentProvider();

    subDetailsViewer.setContentProvider(abletonLiveDetailsContentProvider);
    subDetailsViewer.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    subDetailsViewer.getTree().setHeaderVisible(true);
    subDetailsViewer.getTree().setLinesVisible(true);
    subDetailsViewer.setInput(liveController.getLiveApp());

    subDetailsViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent event) {
            doubleClickAction2.run();
        }
    });

    /*
    subDetailsViewer.getControl().addListener (SWT.MouseDown, new Listener() {
       public void handleEvent (Event event) {
    Tree tree = (Tree) subDetailsViewer.getControl();
    Rectangle clientArea = tree.getClientArea ();
    Point pt = new Point(event.x, event.y);
    int index = 0;
    while (index < tree.getItemCount ()) {
       boolean visible = false;
       TreeItem item = ((Tree)subDetailsViewer.getControl()).getItem (index);
       for (int i=0; i < tree.getColumnCount(); i++) {
          Rectangle rect = item.getBounds (i);
          rect.width = 16;
          if (rect.contains (pt)) {
             handleToggleClip(index, i, item.getData());
          }
          if (!visible && rect.intersects (clientArea)) {
             visible = true;
          }
       }
       if (!visible) return;
       index++;
    }
       }
    });
    */

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(subDetailsViewer,
            new FocusCellOwnerDrawHighlighter(subDetailsViewer) {
                @Override
                public ViewerCell getFocusCell() {
                    ViewerCell cell = super.getFocusCell();
                    handleClipDetails(cell.getElement(), cell.getColumnIndex());
                    return cell;
                }
            });

    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
            subDetailsViewer) {
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return false;
        }
    };

    TreeViewerEditor.create(subDetailsViewer, focusCellManager, actSupport,
            ColumnViewerEditor.KEYBOARD_ACTIVATION);

    scXui = GUIToolkit.INSTANCE.createScrolledComposite(sash);
    scXui.setLayout(GridLayoutFactory.fillDefaults().create());
    scXui.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    scXui.getParent().setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

    xuiPanel = GUIToolkit.INSTANCE.createComposite(scXui, SWT.DOUBLE_BUFFERED);
    xuiPanelLayout = GridLayoutFactory.fillDefaults().numColumns(16).equalWidth(false).margins(0, 0)
            .extendedMargins(0, 0, 0, 0).spacing(0, 0).create();
    xuiPanel.setLayout(xuiPanelLayout);
    xuiPanel.setLayoutData(GridDataFactory.fillDefaults().grab(false, true).create());

    scXui.setExpandVertical(true);
    scXui.setExpandHorizontal(true);
    scXui.setAlwaysShowScrollBars(true);
    scXui.setOrientation(SWT.VERTICAL);

    scXui.setContent(xuiPanel);
    scXui.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent e) {
            Rectangle r = sash.getClientArea();
            scXui.setMinSize(xuiPanel.computeSize(r.width, SWT.DEFAULT));
        }
    });
    /*
    int realWidth = 0;
    for (TreeViewerColumn c : treeColumnsMap.values()) {
       realWidth += c.getColumn().getWidth();
    }
            
    ((GridData)xuiPanel.getLayoutData()).minimumWidth = realWidth;
            
    hbarScXui = new SelectionListener() {
       @Override
       public void widgetSelected(SelectionEvent e) {
    sc.getHorizontalBar().removeSelectionListener(hbarSc);
    sc.getHorizontalBar().setSelection(e.x);
    sc.getHorizontalBar().addSelectionListener(hbarSc);
       }
       @Override
       public void widgetDefaultSelected(SelectionEvent e) {
            
       }
    };
    if (scXui.getHorizontalBar() != null) {
       scXui.getHorizontalBar().addSelectionListener(
    hbarScXui
       );
    }
    */

    devicesPanel = GUIToolkit.INSTANCE.createComposite(sash, SWT.DOUBLE_BUFFERED);
    devicesPanel.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(false).create());
    devicesPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    bottomSash = new SashForm(devicesPanel, SWT.HORIZONTAL);
    bottomSash.setLayout(GridLayoutFactory.fillDefaults().create());
    bottomSash.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    bottomSash.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

    devicesViewer = GUIToolkit.INSTANCE.createTreeViewer(bottomSash, SWT.FULL_SELECTION);
    devicesViewer.setLabelProvider(new LabelProvider() {
        @Override
        public Image getImage(Object element) {
            if (element instanceof AbstractLiveDevice) {
                return deviceImage;
            } else if (element instanceof LiveParam) {
                return paramImage;
            }
            return deviceImage;
        }

        @Override
        public String getText(Object element) {
            if (element instanceof AbstractLiveDevice) {
                return ((AbstractLiveDevice) element).getDeviceName();
            } else if (element instanceof LiveParam) {
                LiveParam param = (LiveParam) element;
                return param.getName() + " : " + param.getValue() + " [" + param.getMin() + " .. "
                        + param.getMax() + "]";
            }
            return "???";
        }
    });

    devicesViewer.setContentProvider(new DevicesContentProvider());
    devicesViewer.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    sc = GUIToolkit.INSTANCE.createScrolledComposite(bottomSash);
    sc.setLayout(GridLayoutFactory.fillDefaults().create());
    sc.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    sc.getParent().setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

    deviceWidgetContainer = GUIToolkit.INSTANCE.createComposite(sc, SWT.DOUBLE_BUFFERED);
    deviceWidgetContainer.setLayout(GridLayoutFactory.fillDefaults().create());
    deviceWidgetContainer.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    deviceWidgetContainer.getParent().setBackground(GUIToolkit.BG);
    deviceWidgetContainer.addControlListener(new ControlListener() {
        @Override
        public void controlResized(ControlEvent e) {
        }

        @Override
        public void controlMoved(ControlEvent e) {
            System.out.println("moved");
        }
    });

    sc.setExpandVertical(true);
    sc.setAlwaysShowScrollBars(true);
    sc.setOrientation(SWT.VERTICAL);

    sc.setContent(deviceWidgetContainer);
    sc.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent e) {
            Rectangle r = sc.getClientArea();
            sc.setMinSize(devicesPanel.computeSize(r.width, SWT.DEFAULT));
        }
    });

    hbarSc = new SelectionListener() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            scXui.getHorizontalBar().removeSelectionListener(hbarScXui);
            scXui.getHorizontalBar().setSelection(e.x);
            scXui.getHorizontalBar().addSelectionListener(hbarScXui);
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {

        }
    };
    if (scXui.getHorizontalBar() != null) {
        sc.getHorizontalBar().addSelectionListener(hbarSc);
    }
    Rectangle r = sc.getClientArea();
    sc.setMinSize(devicesPanel.computeSize(r.width, SWT.DEFAULT));

    devicesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            ISelection selection = devicesViewer.getSelection();
            if (selection instanceof IStructuredSelection) {
                Object obj = null;
                StructuredSelection ssel = (StructuredSelection) selection;
                if (!ssel.isEmpty()) {
                    obj = ssel.getFirstElement();
                }
                AbstractDeviceWidget w = AbletonWidgetManager.INSTANCE.getNullWidget();
                AbstractLiveDevice device = null;
                if (obj instanceof AbstractLiveDevice) {
                    device = (AbstractLiveDevice) obj;
                    w = AbletonWidgetManager.INSTANCE.getWidget(device.getDeviceName());
                }

                if (w instanceof AbstractDeviceWidget) {
                    deviceWidgetContainer.setVisible(true);
                    AbstractDeviceWidget widget = (AbstractDeviceWidget) w;
                    for (Control c : deviceWidgetContainer.getChildren()) {
                        c.setVisible(false);
                        if (!c.isDisposed()) {
                            c.dispose();
                        }
                    }
                    Control control = widget.createControl(deviceWidgetContainer, SWT.NONE);
                    if (!control.isDisposed() && control != null) {
                        control.setVisible(true);
                    }
                    if (device != null) {
                        widget.init(((LiveTrack) device.eContainer()), device);
                    }
                    deviceWidgetContainer.layout(true);
                    widget.redraw();
                } else {
                    sc.setVisible(false);
                    for (Control c : sc.getChildren()) {
                        c.setVisible(false);
                        if (!c.isDisposed()) {
                            c.dispose();
                        }
                    }
                }
                sc.redraw();
            } else {
                deviceWidgetContainer.setVisible(false);
                for (Control c : deviceWidgetContainer.getChildren()) {
                    c.setVisible(false);
                    if (!c.isDisposed()) {
                        c.dispose();
                    }
                }
            }
        }
    });

    bottomSash.setWeights(new int[] { 1, 5 });

    UIJob refreshDetailsJob = new UbiJob("Refresh Details") {
        @Override
        public IStatus runInUIThread(IProgressMonitor monitor) {
            synchronized (liveController.getLiveApp()) {
                synchronized (liveController.getLiveApp().getTracks()) {
                    for (LiveTrack t : treeColumnsMap.keySet()) {
                        if (!liveController.getLiveApp().getTracks().contains(t)) {
                            TreeViewerColumn col = treeColumnsMap.get(t);
                            treeColumnsMap.remove(t);
                            col.getColumn().dispose();

                            XUITrack xui = xuiTrackMap.get(t);
                            xuiTrackMap.remove(t);
                            xui.dispose();
                        }
                    }
                    for (LiveTrack track : liveController.getLiveApp().getTracks()) {
                        if (!treeColumnsMap.containsKey(track)) {
                            TreeViewerColumn tc = createTableViewerColumn(track.getTrackName(), 110);
                            treeColumnsMap.put(track, tc);
                            xuiTrackMap.put(track, new XUITrack(xuiPanel, track, tc, liveController));
                        } else {
                            treeColumnsMap.get(track).getColumn().setText(track.getTrackName());
                            int w = treeColumnsMap.get(track).getColumn().getWidth();
                            Rectangle rect = xuiTrackMap.get(track).getBounds();
                            xuiTrackMap.get(track).setBounds(rect.x, rect.y, w, rect.height);
                            GridData gd = (GridData) xuiTrackMap.get(track).getLayoutData();
                            gd.horizontalIndent = 0;
                            gd.widthHint = w;
                            gd.minimumWidth = SWT.DEFAULT;
                        }
                    }
                    xuiPanelLayout.numColumns = liveController.getLiveApp().getTracks().size();
                    if (xuiPanel != null && !xuiPanel.isDisposed()) {
                        xuiPanel.layout(true);
                        if (subDetailsViewer != null && subDetailsViewer.getControl() != null
                                && !subDetailsViewer.getControl().isDisposed()) {
                            if (subDetailsViewer != null && subDetailsViewer.getContentProvider() != null) {
                                if (subDetailsViewer.getInput() != liveController.getLiveApp()) {
                                    subDetailsViewer.setInput(liveController.getLiveApp());
                                    if (deviceWidgetContainer != null && !deviceWidgetContainer.isDisposed()) {
                                        deviceWidgetContainer.layout(true);
                                    }
                                }
                                subDetailsViewer.refresh(true);
                            }
                            devicesPanel.setVisible(liveController.isMonitorDevices());
                        }
                    }
                }
            }
            schedule(1000);
            return Status.OK_STATUS;
        }
    };
    refreshDetailsJob.setSystem(true);
    refreshDetailsJob.setPriority(Job.INTERACTIVE);
    refreshDetailsJob.schedule(1000);

    if (liveController != null && liveController.getAbletonOscEngine() != null) {
        liveController.monitorDevices(true);
    }
    if (devicesPanel != null) {
        deviceWidgetContainer.setVisible(true);
        devicesPanel.setVisible(liveController.isMonitorDevices());
        devicesPanel.setSize(sash.getSize().x, 250);
        devicesPanel.layout(true);
        deviceWidgetContainer.setSize(sash.getSize().x, 250);
        deviceWidgetContainer.redraw();
        deviceWidgetContainer.layout(true);
        deviceWidgetContainer.redraw();
        devicesPanel.layout(true);
        devicesPanel.redraw();

        if (devicesViewer.getTree() != null && devicesViewer.getTree().getItemCount() > 0) {
            @SuppressWarnings({ "rawtypes", "unused" })
            List lst = (List) devicesViewer.getInput();
            devicesViewer.getTree().select(devicesViewer.getTree().getItem(0));
            subDetailsViewer.refresh(true);
        }
        devicesPanel.layout(true);
        devicesPanel.redraw();
        for (Control c : devicesPanel.getChildren()) {
            if (c instanceof Control) {
                c.redraw();
            }
        }
    }

    sash.setWeights(new int[] { 2, 2, 2 });
}

From source file:net.sf.smbt.ui.audio.view.FmodexLiveView.java

License:LGPL

private void createDetailsPanel(Composite container) {
    container.setLayout(GridLayoutFactory.fillDefaults().create());
    container.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    detailsPanel = GUIToolkit.INSTANCE.createComposite(container, SWT.DOUBLE_BUFFERED);
    detailsPanel.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
    detailsPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    sash = new SashForm(detailsPanel, SWT.BORDER | SWT.VERTICAL);
    sash.setLayout(GridLayoutFactory.fillDefaults().create());
    sash.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    sash.setBackground(GUIToolkit.FG);/*w w  w.  j  ava2  s.c  o m*/

    Composite topPanel = GUIToolkit.INSTANCE.createComposite(detailsPanel, SWT.DOUBLE_BUFFERED);
    topPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    topPanel.setLayoutData(GridDataFactory.fillDefaults().grab(false, false).create());

    Composite timeDetails = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.DOUBLE_BUFFERED);
    timeDetails.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
    timeDetails.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.END, SWT.CENTER).grab(true, false).create());

    Composite masterButtons = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.DOUBLE_BUFFERED);
    masterButtons.setLayout(GridLayoutFactory.fillDefaults().create());
    masterButtons.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(true, false).create());

    final Button playStopButton = new Button(masterButtons, SWT.TOGGLE);
    playStopButton.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(64, 64).minSize(64, 64).create());
    playStopButton.setForeground(ColorsUtil.BG);
    playStopButton.setImage(playImageBig);
    playStopButton.addSelectionListener(new SelectionListener() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if (playStopButton.getSelection()) {
                playStopButton.setImage(stopImageBig);
            } else {
                playStopButton.setImage(playImageBig);
            }
            for (AudioScene s : project.getScenes()) {
                for (AudioClip c : s.getClips()) {
                    if (c != null) {
                        AudioSound sound = c.getSound();
                        AudioTrack track = c.getTrack();
                        if (sound instanceof AudioSound && track instanceof AudioTrack) {
                            if (track.getChannel() instanceof AudioChannel) {
                                AudioChannel channel = (AudioChannel) track.getChannel();
                                if (channel != null && channel.getFmodex() != null) {
                                    if (AudioUtils.INSTANCE.isPlaying(channel)) {
                                        channel.getFmodex().setPaused(true);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

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

    Composite upPanel = GUIToolkit.INSTANCE.createComposite(topPanel, SWT.SHADOW_ETCHED_IN);
    upPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    upPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());

    Composite vPanel = GUIToolkit.INSTANCE.createComposite(upPanel, SWT.SHADOW_ETCHED_IN);
    vPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    vPanel.setLayoutData(GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(true, false).create());

    masterVolume = new UbiKnob(vPanel, SWT.HORIZONTAL);
    masterVolume.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(48, 48).grab(false, false).create());
    masterVolume.setMax(100f);
    masterVolume.setSelection(50);
    masterVolume.addSelectionListener(new UbiSelectionListener() {
        @Override
        public void handle() {
            float value = new Float(masterVolume.getSelection()) / 100f;
            //            if (value != liveController.getLiveApp().getMasterTrack().getVolume()) {
            //               liveController.getLiveApp().getMasterTrack().setVolume(value);
            //            }
        }
    });

    Label masterVolumeLabel = GUIToolkit.INSTANCE.createLabel(vPanel, "Vol");
    masterVolumeLabel.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(false, false).create());

    Composite pPanel = GUIToolkit.INSTANCE.createComposite(upPanel, SWT.DOUBLE_BUFFERED);
    pPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).create());
    pPanel.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).grab(true, false).create());

    masterPan = new UbiKnob(pPanel, SWT.HORIZONTAL);
    masterPan.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(48, 48).grab(false, false).create());
    masterPan.setMax(100f);
    masterPan.setSelection(50);
    masterPan.addSelectionListener(new UbiSelectionListener() {
        @Override
        public void handle() {
            float value = new Float(masterPan.getSelection() - 50) / 50f;
            //            if (value != liveController.getLiveApp().getMasterTrack().getPan()) {
            //               liveController.getLiveApp().getMasterTrack().setPan(value);
            //            }
        }
    });
    //      masterPan.addMenuAction(
    //         new LinkOscAbletonCommandAction(
    //            masterPan, 
    //            ABLETON_OSC_MAPPING.MASTER_VOLUME.getLiteral(),
    //            100f
    //         )
    //      );

    Label masterPanLabel = GUIToolkit.INSTANCE.createLabel(pPanel, "Pan");
    masterPanLabel.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).grab(false, false).create());

    //
    // Vu Meters
    //

    Composite vuMetersPanel = GUIToolkit.INSTANCE.createComposite(upPanel, SWT.DOUBLE_BUFFERED);
    vuMetersPanel.setLayout(GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(2).create());
    vuMetersPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).create());

    masterVu = new UbiVuMeter(vuMetersPanel, SWT.VERTICAL);
    masterVu.setLevel(0);
    masterVu.setMax(100);
    masterVu.setLayout(GridLayoutFactory.fillDefaults().create());
    masterVu.setLayoutData(
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.TOP).hint(20, 250).grab(true, false).create());

    Composite tracksPanel = GUIToolkit.INSTANCE.createComposite(sash, SWT.DOUBLE_BUFFERED);
    tracksPanel.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).create());
    tracksPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    subDetailsViewer = GUIToolkit.INSTANCE.createTreeViewer(tracksPanel, SWT.FULL_SELECTION);
    subDetailsViewer.setLabelProvider(fmodexLabelProvider);

    FmodexContentProvider fmodexContentProvider = new FmodexContentProvider();

    subDetailsViewer.setContentProvider(fmodexContentProvider);
    subDetailsViewer.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    subDetailsViewer.getTree().setForeground(GUIToolkit.FG);
    subDetailsViewer.getTree().setBackground(GUIToolkit.BG);
    subDetailsViewer.getTree().setHeaderVisible(true);
    subDetailsViewer.getTree().setLinesVisible(true);
    subDetailsViewer.setInput(project);

    //
    // Drag and drop support
    //

    Transfer[] dndTransferTypes = new Transfer[] { FmodexAudioFileTransfert.INSTANCE };

    subDetailsViewer.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT, dndTransferTypes,
            new FmodexAudioFileDragAdapter(subDetailsViewer));
    subDetailsViewer.addDropSupport(DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT, dndTransferTypes,
            new net.sf.smbt.ui.audio.dnd.FmodexAudioFileDropAdapter(subDetailsViewer));

    subDetailsViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent event) {
            doubleClickAction2.run();
        }
    });

    TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(subDetailsViewer,
            new FocusCellOwnerDrawHighlighter(subDetailsViewer) {
                @Override
                public ViewerCell getFocusCell() {
                    ViewerCell cell = super.getFocusCell();
                    handleClipDetails(cell.getElement(), cell.getColumnIndex());
                    return cell;
                }
            });

    UIJob refreshDetailsJob = new UbiJob("Refresh Details") {
        @Override
        public IStatus runInUIThread(IProgressMonitor monitor) {
            synchronized (project) {
                synchronized (project.getTracks()) {
                    for (AudioTrack t : treeColumnsMap.keySet()) {
                        if (!project.getTracks().contains(t)) {
                            TreeViewerColumn col = treeColumnsMap.get(t);
                            treeColumnsMap.remove(t);
                            col.getColumn().dispose();

                            XUITrack xui = xuiTrackMap.get(t);
                            xuiTrackMap.remove(t);
                            xui.dispose();
                        }
                    }
                    int i = 1;
                    for (AudioTrack track : project.getTracks()) {
                        if (!treeColumnsMap.containsKey(track)) {
                            TreeViewerColumn tc = createTableViewerColumn("Track " + i, 110);
                            treeColumnsMap.put(track, tc);
                            xuiTrackMap.put(track, new XUITrack(xuiPanel, track, tc, project));
                        } else {
                            treeColumnsMap.get(track).getColumn().setText("Track " + i);
                            int w = treeColumnsMap.get(track).getColumn().getWidth();
                            Rectangle rect = xuiTrackMap.get(track).getBounds();
                            xuiTrackMap.get(track).setBounds(rect.x, rect.y, w, rect.height);
                            GridData gd = (GridData) xuiTrackMap.get(track).getLayoutData();
                            gd.horizontalIndent = 0;
                            gd.widthHint = w;
                            gd.minimumWidth = SWT.DEFAULT;
                        }
                        i++;
                    }
                    xuiPanelLayout.numColumns = project.getTracks().size();
                    xuiPanel.layout(true);
                    if (subDetailsViewer != null && subDetailsViewer.getContentProvider() != null) {
                        if (subDetailsViewer.getInput() != project) {
                            subDetailsViewer.setInput(project);
                            deviceWidgetContainer.layout(true);
                        }
                        subDetailsViewer.refresh(true);
                    }
                    devicesPanel.setVisible(true);
                }
            }
            schedule(1000);
            return Status.OK_STATUS;
        }
    };
    refreshDetailsJob.setSystem(true);
    refreshDetailsJob.setPriority(Job.INTERACTIVE);
    refreshDetailsJob.schedule(1000);

    ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
            subDetailsViewer) {
        protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
            return false;
        }
    };

    TreeViewerEditor.create(subDetailsViewer, focusCellManager, actSupport,
            ColumnViewerEditor.KEYBOARD_ACTIVATION);

    scXui = GUIToolkit.INSTANCE.createScrolledComposite(sash);
    scXui.setLayout(GridLayoutFactory.fillDefaults().create());
    scXui.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    scXui.getParent().setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

    xuiPanel = GUIToolkit.INSTANCE.createComposite(scXui, SWT.DOUBLE_BUFFERED);
    xuiPanelLayout = GridLayoutFactory.fillDefaults().numColumns(16).equalWidth(false).margins(0, 0)
            .extendedMargins(0, 0, 0, 0).spacing(0, 0).create();
    xuiPanel.setLayout(xuiPanelLayout);
    xuiPanel.setLayoutData(GridDataFactory.fillDefaults().grab(false, true).create());

    scXui.setExpandVertical(true);
    scXui.setExpandHorizontal(true);
    scXui.setAlwaysShowScrollBars(true);
    scXui.setOrientation(SWT.VERTICAL);

    scXui.setContent(xuiPanel);
    scXui.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent e) {
            Rectangle r = sash.getClientArea();
            scXui.setMinSize(xuiPanel.computeSize(r.width, SWT.DEFAULT));
        }
    });

    devicesPanel = GUIToolkit.INSTANCE.createComposite(sash, SWT.DOUBLE_BUFFERED);
    devicesPanel.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(false).create());
    devicesPanel.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    bottomSash = new SashForm(devicesPanel, SWT.HORIZONTAL);
    bottomSash.setLayout(GridLayoutFactory.fillDefaults().create());
    bottomSash.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    bottomSash.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

    devicesViewer = GUIToolkit.INSTANCE.createTreeViewer(bottomSash, SWT.FULL_SELECTION);
    devicesViewer.setLabelProvider(new LabelProvider() {
        @Override
        public Image getImage(Object element) {
            return deviceImage;
        }

        @Override
        public String getText(Object element) {
            if (element instanceof Device) {
                return ((Device) element).getID();
            }
            return "???";
        }
    });

    devicesViewer.setContentProvider(new DevicesContentProvider());
    devicesViewer.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());

    sc = GUIToolkit.INSTANCE.createScrolledComposite(bottomSash);
    sc.setLayout(GridLayoutFactory.fillDefaults().create());
    sc.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    sc.getParent().setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

    deviceWidgetContainer = GUIToolkit.INSTANCE.createComposite(sc, SWT.DOUBLE_BUFFERED);
    deviceWidgetContainer.setLayout(GridLayoutFactory.fillDefaults().create());
    deviceWidgetContainer.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
    deviceWidgetContainer.getParent().setBackground(GUIToolkit.BG);
    deviceWidgetContainer.addControlListener(new ControlListener() {
        @Override
        public void controlResized(ControlEvent e) {
        }

        @Override
        public void controlMoved(ControlEvent e) {
        }
    });

    sc.setExpandVertical(true);
    sc.setAlwaysShowScrollBars(true);
    sc.setOrientation(SWT.VERTICAL);

    sc.setContent(deviceWidgetContainer);
    sc.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent e) {
            Rectangle r = sc.getClientArea();
            sc.setMinSize(devicesPanel.computeSize(r.width, SWT.DEFAULT));
        }
    });

    hbarSc = new SelectionListener() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            scXui.getHorizontalBar().removeSelectionListener(hbarScXui);
            scXui.getHorizontalBar().setSelection(e.x);
            scXui.getHorizontalBar().addSelectionListener(hbarScXui);
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {

        }
    };
    if (scXui.getHorizontalBar() != null) {
        sc.getHorizontalBar().addSelectionListener(hbarSc);
    }
    Rectangle r = sc.getClientArea();
    sc.setMinSize(devicesPanel.computeSize(r.width, SWT.DEFAULT));

    devicesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            ISelection selection = devicesViewer.getSelection();
            if (selection instanceof IStructuredSelection) {
                Object obj = null;
                StructuredSelection ssel = (StructuredSelection) selection;
                if (!ssel.isEmpty()) {
                    obj = ssel.getFirstElement();
                }
                AbstractDeviceWidget w = FmodexWidgetManager.INSTANCE.getNullWidget();
                if (obj instanceof Device) {
                    device = (Device) obj;
                    w = FmodexWidgetManager.INSTANCE.getWidget(device.getID());
                }

                if (w instanceof AbstractDeviceWidget) {
                    deviceWidgetContainer.setVisible(true);
                    AbstractDeviceWidget widget = (AbstractDeviceWidget) w;
                    for (Control c : deviceWidgetContainer.getChildren()) {
                        c.setVisible(false);
                        if (!c.isDisposed()) {
                            c.dispose();
                        }
                    }
                    Control control = widget.createControl(deviceWidgetContainer, SWT.NONE);
                    if (!control.isDisposed() && control != null) {
                        control.setVisible(true);
                    }
                    if (device != null) {
                        if (device.getTrack() != null && device.getTrack().getChannel() != null
                                && clip != null) {
                            IChannel channel = device.getTrack().getChannel();
                            if (channel instanceof AudioChannel) {
                                widget.init((AudioChannel) channel, clip.getSound());
                            }
                        }
                    }
                    deviceWidgetContainer.layout(true);
                    widget.redraw();
                } else {
                    sc.setVisible(false);
                    for (Control c : sc.getChildren()) {
                        c.setVisible(false);
                        if (!c.isDisposed()) {
                            c.dispose();
                        }
                    }
                }
                sc.redraw();
            } else {
                deviceWidgetContainer.setVisible(false);
                for (Control c : deviceWidgetContainer.getChildren()) {
                    c.setVisible(false);
                    if (!c.isDisposed()) {
                        c.dispose();
                    }
                }
            }
        }
    });

    bottomSash.setWeights(new int[] { 1, 5 });

    if (devicesPanel != null) {
        deviceWidgetContainer.setVisible(true);
        devicesPanel.setVisible(true);
        devicesPanel.setSize(sash.getSize().x, 250);
        devicesPanel.layout(true);
        deviceWidgetContainer.setSize(sash.getSize().x, 250);
        deviceWidgetContainer.redraw();
        deviceWidgetContainer.layout(true);
        deviceWidgetContainer.redraw();
        devicesPanel.layout(true);
        devicesPanel.redraw();

        if (devicesViewer.getTree() != null && devicesViewer.getTree().getItemCount() > 0) {
            @SuppressWarnings("rawtypes")
            List lst = (List) devicesViewer.getInput();
            devicesViewer.getTree().select(devicesViewer.getTree().getItem(0));
            subDetailsViewer.refresh(true);
        }
        devicesPanel.layout(true);
        devicesPanel.redraw();
        for (Control c : devicesPanel.getChildren()) {
            if (c instanceof Control) {
                c.redraw();
            }
        }
    }

    sash.setWeights(new int[] { 2, 2, 2 });
}