Example usage for org.eclipse.jface.viewers ViewerDropAdapter setFeedbackEnabled

List of usage examples for org.eclipse.jface.viewers ViewerDropAdapter setFeedbackEnabled

Introduction

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

Prototype

public void setFeedbackEnabled(boolean value) 

Source Link

Document

Sets whether visible insertion feedback should be presented to the user.

Usage

From source file:bndtools.wizards.bndfile.JarListWizardPage.java

License:Open Source License

@Override
public void createControl(final Composite parent) {
    setTitle("Select JARs");
    final Composite composite = new Composite(parent, SWT.NONE);

    Label lblHint = new Label(composite, SWT.WRAP);
    lblHint.setText("Selected files (hint: drag files from an external application into this list):");

    final Table table = new Table(composite, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER);
    viewer = new TableViewer(table);
    viewer.setContentProvider(new ArrayContentProvider());
    viewer.setLabelProvider(new ClassPathLabelProvider());

    btnAdd = new Button(composite, SWT.PUSH);
    btnAdd.setText("Add");
    btnAddExternal = new Button(composite, SWT.PUSH);
    btnAddExternal.setText("Add External");
    btnRemove = new Button(composite, SWT.PUSH);
    btnRemove.setText("Remove");

    viewer.setInput(paths);//from w  w  w. ja  va2  s.c o m
    update();

    // Listeners
    ViewerDropAdapter dropAdapter = new ViewerDropAdapter(viewer) {
        @Override
        public void dragEnter(DropTargetEvent event) {
            super.dragEnter(event);
            event.detail = DND.DROP_COPY;
        }

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            return true;
        }

        @Override
        public boolean performDrop(Object data) {
            if (data instanceof String[]) {
                String[] newPaths = (String[]) data;
                List<IPath> added = new ArrayList<IPath>(newPaths.length);
                for (String path : newPaths) {
                    added.add(new Path(path));
                }

                if (!added.isEmpty()) {
                    addToPaths(added);
                    viewer.add(added.toArray());

                    update();
                }
            }

            return true;
        }
    };
    dropAdapter.setFeedbackEnabled(false);
    dropAdapter.setSelectionFeedbackEnabled(false);
    viewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, new Transfer[] { FileTransfer.getInstance() },
            dropAdapter);
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(final SelectionChangedEvent event) {
            update();
        }
    });
    btnAdd.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            // IResource newFile = ResourcesPlugin.getWorkspace().getRoot();
            // if(newFile != null) {
            ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(),
                    new WorkbenchLabelProvider(), new WorkbenchContentProvider());
            dialog.setValidator(new ISelectionStatusValidator() {
                @Override
                public IStatus validate(Object[] selection) {
                    if (selection.length > 0 && selection[0] instanceof IFile) {
                        return new Status(IStatus.OK, Plugin.PLUGIN_ID, IStatus.OK, "", null); //$NON-NLS-1$
                    }
                    return new Status(IStatus.ERROR, Plugin.PLUGIN_ID, IStatus.ERROR, "", null); //$NON-NLS-1$
                }
            });
            dialog.setAllowMultiple(true);
            dialog.setTitle("JAR File Selection");
            dialog.setMessage("Select one or more JAR files.");
            dialog.addFilter(new FileExtensionFilter("jar")); //$NON-NLS-1$
            dialog.setInput(ResourcesPlugin.getWorkspace());

            if (dialog.open() == Window.OK) {
                Object[] files = dialog.getResult();
                List<IPath> added = new ArrayList<IPath>(files.length);
                for (Object file : files) {
                    added.add(((IResource) file).getFullPath().makeRelative());
                }
                if (!added.isEmpty()) {
                    addToPaths(added);
                    viewer.add(added.toArray());
                }
            }
            // }
            update();
        }
    });
    btnAddExternal.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            FileDialog dialog = new FileDialog(getShell(), SWT.OPEN | SWT.MULTI);
            dialog.setFilterExtensions(new String[] { "*.jar" //$NON-NLS-1$
            });
            String res = dialog.open();
            if (res != null) {
                IPath filterPath = new Path(dialog.getFilterPath());

                String[] fileNames = dialog.getFileNames();
                List<IPath> added = new ArrayList<IPath>(fileNames.length);
                for (String fileName : fileNames) {
                    added.add(filterPath.append(fileName));
                }
                if (!added.isEmpty()) {
                    addToPaths(added);
                    viewer.add(added.toArray());
                }
            }
            update();
        }
    });
    btnRemove.addSelectionListener(new SelectionAdapter() {
        @SuppressWarnings("unchecked")
        @Override
        public void widgetSelected(SelectionEvent e) {
            removeFromPaths(((IStructuredSelection) viewer.getSelection()).toList());
            viewer.remove(((IStructuredSelection) viewer.getSelection()).toArray());
            update();
        }
    });

    // Layout
    composite.setLayout(new GridLayout(2, false));
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3));
    btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
    btnAddExternal.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
    btnRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
    lblHint.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 2, 1));

    setControl(composite);
}

From source file:com.microsoft.tfs.client.common.ui.controls.CommonStructureControl.java

License:Open Source License

private void addDragDropSupport() {
    viewer.addDragSupport(DND.DROP_MOVE, new Transfer[] { TextTransfer.getInstance() },
            new DragSourceAdapter() {

                @Override/*from  w w  w .ja  v a  2s . c  om*/
                public void dragFinished(final DragSourceEvent event) {
                    setInDragDrop(false);
                }

                @Override
                public void dragSetData(final DragSourceEvent event) {
                    final CSSNode node = (CSSNode) ((IStructuredSelection) viewer.getSelection())
                            .getFirstElement();
                    event.data = node.getPath();
                }

                @Override
                public void dragStart(final DragSourceEvent event) {
                    final CSSNode node = (CSSNode) ((IStructuredSelection) viewer.getSelection())
                            .getFirstElement();
                    event.doit = node.getParentURI() != null && node.getParentURI().length() > 0;
                    setInDragDrop(true);
                }

            });
    final ViewerDropAdapter dropAdapter = new ViewerDropAdapter(viewer) {
        @Override
        public boolean performDrop(final Object data) {
            final CSSNode newParent = (CSSNode) getCurrentTarget();
            final CSSNode node = CSSNode.resolveNode(rootNode, data.toString());
            if (node == null || !node.getPath().equals(data.toString())) {
                // This is not the node that you are looking for.
                return false;
            }
            if (newParent != null && !node.equals(newParent) && !node.getParentNode().equals(newParent)) {
                moveNode(node, newParent);
                return true;
            }
            return false;
        }

        @Override
        public boolean validateDrop(final Object target, final int operation, final TransferData transferType) {
            return TextTransfer.getInstance().isSupportedType(transferType);
        }
    };
    dropAdapter.setFeedbackEnabled(false);
    dropAdapter.setScrollExpandEnabled(true);

    viewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { TextTransfer.getInstance() }, dropAdapter);
}

From source file:de.fu_berlin.inf.jtourbus.view.TourBusRoutesView.java

License:Open Source License

/**
 * This is a callback that will allow us to create the viewer and initialize
 * it./*from w w  w  .j  av a2  s.co m*/
 * 
 * @JTourBusStop 0.0, Interaction, createPartControl - Entry Point of the
 *               plugin:
 * 
 * This is the setup-entry-point for this plugin. The Eclipse Platform calls
 * this method when it initializes this view.
 * 
 * The following connections between the classes get established here: - A
 * new treeviewer is created for showing the routes later on. - The
 * associated ContentProvider is created and connected to the viewer. - A
 * label provider is created and connected also. - The view-part subscribes
 * to selection listener here (so when the user selects something new we can
 * change our view)
 */
public void createPartControl(Composite parent) {

    fJavaProject = null;

    if (log != null) {
        log("START");
    }

    { // Create TreeViewer
        fViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        fContentProvider = new TourBusRoutesContentProvider(getViewSite());
        fViewer.setContentProvider(fContentProvider);
        fViewer.setLabelProvider(new TourBusRoutesLabelProvider());
        fViewer.setInput(getViewSite());

        // Selection Handling
        fViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(SelectionChangedEvent event) {
                Object obj = ((IStructuredSelection) event.getSelection()).getFirstElement();

                fActionNextStop.setEnabled(
                        obj instanceof BusStop && fContentProvider.fTourPlan.getNext((BusStop) obj) != null);
                fActionPreviousStop.setEnabled(obj instanceof BusStop
                        && fContentProvider.fTourPlan.getPrevious((BusStop) obj) != null);
            }
        });

        // Drag and Drop Handling
        int ops = DND.DROP_MOVE;

        Transfer[] types = new Transfer[] { LocalSelectionTransfer.getTransfer() };
        de.fu_berlin.inf.jtourbus.utility.ViewerDropAdapter vda = new de.fu_berlin.inf.jtourbus.utility.ViewerDropAdapter(
                fViewer) {

            public boolean performDrop(Object data) {

                IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer()
                        .getSelection();

                @SuppressWarnings("unchecked")
                Vector<BusStop> stops = new Vector(selection.toList());

                BusStop target = (BusStop) getCurrentTarget();
                boolean before = getCurrentLocation() == ViewerDropAdapter.LOCATION_BEFORE;

                BusStop other = (before ? fContentProvider.fTourPlan.getPrevious(target)
                        : fContentProvider.fTourPlan.getNext(target));

                double delta;
                if (other == null) {
                    delta = (before ? -1.0 : 1.0);
                } else {
                    delta = (other.getStopNumber() - target.getStopNumber()) / (stops.size() + 1);
                }

                String targetRoute = target.getRoute();
                double targetStopNumber = target.getStopNumber();
                int i = 0;
                for (BusStop stop : stops) {
                    fContentProvider.fTourPlan.remove(stop);
                    stop.setRoute(targetRoute);
                    stop.setStopNumber(targetStopNumber + delta * ++i);
                    fContentProvider.fTourPlan.add(stop);
                }

                double d = 1;
                for (BusStop stop : fContentProvider.fTourPlan.routes.get(targetRoute)) {
                    if (stop.getStopNumber() != d) {
                        stop.setStopNumber(d);
                        if (!stops.contains(stop)) {
                            stops.add(stop);
                        }
                    }
                    d++;
                }

                UpdateStopsOperation op = new UpdateStopsOperation(stops);
                op.run();

                return true;
            }

            public boolean validateDrop(Object target, int operation, TransferData transferType) {
                return target instanceof BusStop;
            }
        };

        // We do care about DND-sorting in this case.
        vda.setFeedbackEnabled(true);

        fViewer.addDropSupport(ops, types, vda);

        fViewer.addDragSupport(ops, types, new DragSourceListener() {
            public void dragStart(DragSourceEvent arg0) {
                IStructuredSelection selection = (IStructuredSelection) fViewer.getSelection();

                arg0.doit = true;
                Iterator<?> i = selection.iterator();
                while (i.hasNext()) {
                    if (!(i.next() instanceof BusStop)) {
                        arg0.doit = false;
                        break;
                    }
                }
            }

            // List<BusStop> stops;

            public void dragSetData(DragSourceEvent arg0) {
                IStructuredSelection selection = (IStructuredSelection) fViewer.getSelection();
                // List<BusStop>stops = (List<BusStop>)selection.toList();
                LocalSelectionTransfer.getTransfer().setSelection(selection);
            }

            public void dragFinished(DragSourceEvent arg0) {
                // Not needed because of incremental update
                // fActionRefresh.run();
            }
        });
    }

    makeActions();
    hookActions(getViewSite().getActionBars().getToolBarManager());
    hookContextMenu();

}

From source file:net.sf.logsaw.ui.views.LogResourcesView.java

License:Open Source License

@Override
public void createPartControl(Composite parent) {
    viewer = new TreeViewer(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
    viewer.setContentProvider(new BaseWorkbenchContentProvider() {

        private Object[] input;

        /* (non-Javadoc)
         * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#getElements(java.lang.Object)
         *//*  w ww .ja  v a2 s .  c o m*/
        @Override
        public Object[] getElements(Object element) {
            if (input == null) {
                return new Object[0];
            }
            return input;
        }

        /* (non-Javadoc)
         * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
         */
        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            //Assert.isTrue(newInput instanceof Object[], "input must be instance of java.lang.Object[]");
            input = (Object[]) newInput;
            super.inputChanged(viewer, oldInput, newInput);
        }
    });
    viewer.setLabelProvider(new WorkbenchLabelProvider());
    viewer.addOpenListener(new IOpenListener() {

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.IOpenListener#open(org.eclipse.jface.viewers.OpenEvent)
         */
        @Override
        public void open(OpenEvent event) {
            IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
            try {
                handlerService.executeCommand("net.sf.logsaw.ui.commands.OpenLogResourceCommand", //$NON-NLS-1$
                        null);
            } catch (CommandException e) {
                // log and show error
                UIPlugin.logAndShowError(new CoreException(new Status(IStatus.ERROR, UIPlugin.PLUGIN_ID,
                        Messages.Generic_errorExecutingCommand, e)), false);
            }
        }
    });
    ViewerDropAdapter dropAdapter = new ViewerDropAdapter(viewer) {

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
         */
        @Override
        public boolean performDrop(final Object target) {
            Display.getDefault().asyncExec(new Runnable() {

                /* (non-Javadoc)
                 * @see java.lang.Runnable#run()
                 */
                @Override
                public void run() {
                    IHandlerService handlerService = (IHandlerService) getSite()
                            .getService(IHandlerService.class);
                    ICommandService commandService = (ICommandService) getSite()
                            .getService(ICommandService.class);
                    Command cmd = commandService.getCommand("net.sf.logsaw.ui.commands.AddLogResourceCommand"); //$NON-NLS-1$
                    try {
                        Parameterization param = new Parameterization(
                                cmd.getParameter("net.sf.logsaw.ui.commands.AddLogResourceCommand.filename"), //$NON-NLS-1$
                                ((String[]) target)[0]);
                        ParameterizedCommand paraCmd = new ParameterizedCommand(cmd,
                                new Parameterization[] { param });
                        handlerService.executeCommand(paraCmd, null);
                    } catch (CommandException e) {
                        // log and show error
                        UIPlugin.logAndShowError(new CoreException(new Status(IStatus.ERROR, UIPlugin.PLUGIN_ID,
                                Messages.Generic_errorExecutingCommand, e)), false);
                    }
                }
            });
            // Always return true
            return true;
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
         */
        @Override
        public boolean validateDrop(Object target, int op, TransferData type) {
            return FileTransfer.getInstance().isSupportedType(type) && (getCurrentTarget() == null);
        }
    };
    dropAdapter.setFeedbackEnabled(false);
    viewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, new Transfer[] { FileTransfer.getInstance() },
            dropAdapter);
    getSite().setSelectionProvider(viewer);

    // Setup popup menu
    hookContextMenu();

    // Refresh
    refresh();

    // Enable dynamic help
    PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContexts.LOG_RESOURCES_VIEW);
}

From source file:org.eclipse.handly.ui.viewer.ViewerDropSupport.java

License:Open Source License

/**
 * Sets whether visible insertion feedback should be presented to the user.
 * Typical insertion feedback is the horizontal insertion bars that appear
 * between adjacent items while dragging.
 * <p>//from  w  ww  .  j a  va 2s.  c o m
 * Default implementation calls {@link ViewerDropAdapter#setFeedbackEnabled 
 * setFeedbackEnabled} for every <code>TransferDropTargetListener</code> 
 * that is a <code>ViewerDropAdapter</code>.
 * </p> 
 * 
 * @param value <code>true</code> if visual feedback is desired, 
 *  and <code>false</code> if not
 */
public void setFeedbackEnabled(boolean value) {
    for (ViewerDropAdapter dropAdapter : dropAdapters) {
        dropAdapter.setFeedbackEnabled(value);
    }
}

From source file:org.eclipse.jubula.client.ui.rcp.editors.CentralTestDataEditor.java

License:Open Source License

/** {@inheritDoc} */
protected void createPartControlImpl(Composite parent) {
    createMainPart(parent);//from w  ww . j  av a2s. c  o  m
    GridData gridData = new GridData(GridData.FILL_BOTH);
    getMainTreeViewer().getControl().setLayoutData(gridData);
    setControl(getMainTreeViewer().getControl());
    getMainTreeViewer().setContentProvider(new CentralTestDataContentProvider());

    DecoratingLabelProvider lp = new DecoratingLabelProvider(new CentralTestDataLabelProvider(),
            Plugin.getDefault().getWorkbench().getDecoratorManager().getLabelDecorator());

    getMainTreeViewer().setLabelProvider(lp);
    getMainTreeViewer().setComparator(new ViewerComparator() {
        @Override
        public int category(Object element) {
            if (element instanceof ITestDataCategoryPO) {
                return 0;
            }

            if (element instanceof ITestDataCubePO) {
                return 1;
            }

            return 2;
        }
    });

    int ops = DND.DROP_MOVE;
    Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer() };
    ViewerDropAdapter dropSupport = new CentralTestDataDropSupport(getMainTreeViewer());
    dropSupport.setFeedbackEnabled(false);
    getMainTreeViewer().addDragSupport(ops, transfers,
            new LimitingDragSourceListener(getMainTreeViewer(), null));
    getMainTreeViewer().addDropSupport(ops, transfers, dropSupport);

    addDoubleClickListener(RCPCommandIDs.EDIT_PARAMETERS, getMainTreeViewer());
    addFocusListener(getMainTreeViewer());
    getEditorHelper().addListeners();
    setActionHandlers();
    setInitialInput();
    DataEventDispatcher ded = DataEventDispatcher.getInstance();
    ded.addPropertyChangedListener(this, true);
    ded.addParamChangedListener(this, true);
    GuiEventDispatcher.getInstance().addEditorDirtyStateListener(this, true);
}

From source file:org.eclipse.wb.internal.core.databinding.ui.BindingElementsComposite.java

License:Open Source License

private void setupDragAndDrop() {
    Transfer[] transfers = new Transfer[] { TreeTransfer.INSTANCE };
    final IBindingInfo[] binding = new IBindingInfo[1];
    m_bindingViewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceAdapter() {
        @Override//from w  w  w  .j  a  va  2 s.  co  m
        public void dragStart(DragSourceEvent event) {
            List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
            event.doit = bindings.size() > 1;
            binding[0] = getSelectionBinding();
        }
    });
    ViewerDropAdapter adapter = new ViewerDropAdapter(m_bindingViewer) {
        @Override
        protected int determineLocation(DropTargetEvent event) {
            int location = super.determineLocation(event);
            if (location == LOCATION_BEFORE || location == LOCATION_AFTER) {
                location = LOCATION_ON;
            }
            return location;
        }

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            if (binding[0] != target && target != null) {
                List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
                return m_databindingsProvider.canMoveBinding(binding[0], bindings.indexOf(target), false);
            }
            return false;
        }

        @Override
        public boolean performDrop(Object data) {
            List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
            int sourceIndex = bindings.indexOf(binding[0]);
            int targetIndex = bindings.indexOf(getCurrentTarget());
            //
            m_databindingsProvider.moveBinding(binding[0], sourceIndex, targetIndex, false);
            //
            m_bindingViewer.refresh();
            handleBindingSelection((IStructuredSelection) m_bindingViewer.getSelection());
            //
            return true;
        }
    };
    adapter.setFeedbackEnabled(true);
    m_bindingViewer.addDropSupport(DND.DROP_MOVE | DND.DROP_DEFAULT, transfers, adapter);
}

From source file:org.eclipse.wb.internal.core.model.property.order.ReorderDialog.java

License:Open Source License

private void setupDragAndDrop() {
    int ops = DND.DROP_MOVE;
    Transfer[] transfers = new Transfer[] { TreeTransfer.INSTANCE };
    ///* ww  w .j ava  2 s.c o  m*/
    final AbstractComponentInfo dragWidget[] = new AbstractComponentInfo[1];
    m_viewer.addDragSupport(ops, transfers, new DragSourceAdapter() {
        @Override
        public void dragStart(DragSourceEvent event) {
            dragWidget[0] = getSelectionElement();
        }
    });
    ViewerDropAdapter adapter = new ViewerDropAdapter(m_viewer) {
        private AbstractComponentInfo m_targetWidget;

        @Override
        protected int determineLocation(DropTargetEvent event) {
            int location = super.determineLocation(event);
            if (location == LOCATION_BEFORE || location == LOCATION_AFTER) {
                location = LOCATION_ON;
            }
            return location;
        }

        @Override
        public boolean performDrop(Object data) {
            int sourceIndex = m_allInfos.indexOf(dragWidget[0]);
            int targetIndex = m_allInfos.indexOf(m_targetWidget);
            m_allInfos.remove(sourceIndex);
            if (m_targetWidget == null) {
                m_allInfos.add(dragWidget[0]);
            } else if (sourceIndex < targetIndex) {
                m_allInfos.add(targetIndex - 1, dragWidget[0]);
            } else {
                m_allInfos.add(targetIndex, dragWidget[0]);
            }
            m_viewer.refresh();
            return true;
        }

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            m_targetWidget = (AbstractComponentInfo) target;
            return true;
        }
    };
    adapter.setFeedbackEnabled(true);
    m_viewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
}

From source file:org.eclipse.wb.internal.rcp.model.rcp.CategoriesAndViewsDialog.java

License:Open Source License

private void setupDragAndDropSupport() {
    final IPluginElement dragElement[] = new IPluginElement[1];
    int ops = DND.DROP_MOVE;
    Transfer[] transfers = new Transfer[] { EmptyTransfer.INSTANCE };
    // drag/*from  www  .j a va  2 s  .  c o  m*/
    m_viewer.addDragSupport(ops, transfers, new DragSourceAdapter() {
        @Override
        public void dragStart(DragSourceEvent event) {
            IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
            if (selection.isEmpty() || !(selection.getFirstElement() instanceof IPluginElement)) {
                event.doit = false;
                return;
            }
            dragElement[0] = (IPluginElement) selection.getFirstElement();
            event.doit = dragElement[0].getName().equals("view");
        }

        @Override
        public void dragSetData(DragSourceEvent event) {
        }

        @Override
        public void dragFinished(DragSourceEvent event) {
        }
    });
    // drop
    ViewerDropAdapter adapter = new ViewerDropAdapter(m_viewer) {
        private int m_location;
        private Object m_target;

        @Override
        protected int determineLocation(DropTargetEvent event) {
            m_location = super.determineLocation(event);
            if (m_location == LOCATION_AFTER || m_location == LOCATION_BEFORE) {
                m_location = LOCATION_ON;
            }
            return m_location;
        }

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            m_target = target;
            // check for category "other"
            if (target == OTHER_CATEGORY) {
                return true;
            }
            // check for some category
            if (target instanceof IPluginElement) {
                IPluginElement targetElement = (IPluginElement) target;
                return isCategoryElement(targetElement);
            }
            //
            return false;
        }

        @Override
        public boolean performDrop(Object data) {
            // update "category" attribute of moved "view"
            ExecutionUtils.runLog(new RunnableEx() {
                public void run() throws Exception {
                    if (m_target == OTHER_CATEGORY) {
                        m_utils.setAttribute(dragElement[0], "category", null);
                    } else if (m_target instanceof IPluginElement) {
                        IPluginElement targetElement = (IPluginElement) m_target;
                        String categoryId = PdeUtils.getAttribute(targetElement, "id");
                        m_utils.setAttribute(dragElement[0], "category", categoryId);
                    }
                }
            });
            // show and select dragged object
            {
                m_viewer.refresh();
                m_viewer.setExpandedState(m_target, true);
                m_viewer.setSelection(new StructuredSelection(dragElement[0]));
            }
            return true;
        }
    };
    adapter.setFeedbackEnabled(true);
    m_viewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
}

From source file:org.rssowl.ui.internal.dialogs.CustomizeToolbarDialog.java

License:Open Source License

@Override
protected Control createDialogArea(Composite parent) {
    Composite container = createContainer(parent);

    Label infoLabel = new Label(container, SWT.None);
    infoLabel.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1));
    infoLabel.setText(Messages.CustomizeToolbarDialog_DIALOG_INFO);

    /* Table showing Tool Items */
    Composite tableContainer = new Composite(container, SWT.NONE);
    tableContainer.setLayout(LayoutUtils.createGridLayout(1, 0, 0));
    tableContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    CTable cTable = new CTable(tableContainer, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);

    fItemViewer = new TableViewer(cTable.getControl());
    fItemViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    fItemViewer.getTable().setHeaderVisible(false);
    ((GridData) fItemViewer.getTable().getLayoutData()).heightHint = fItemViewer.getTable().getItemHeight()
            * 24;/*from   www  .ja v a  2  s. co  m*/
    fItemViewer.getTable().setFocus();
    fItemViewer.getTable().setData(ApplicationWorkbenchWindowAdvisor.FOCUSLESS_SCROLL_HOOK, new Object());

    /* Custom Owner Drawn Category */
    if (!OwlUI.isHighContrast()) {
        fItemViewer.getControl().addListener(SWT.EraseItem, new Listener() {
            public void handleEvent(Event event) {
                ToolBarItem item = (ToolBarItem) event.item.getData();
                if (item.item == CoolBarItem.SEPARATOR) {
                    Scrollable scrollable = (Scrollable) event.widget;
                    GC gc = event.gc;

                    Rectangle area = scrollable.getClientArea();
                    Rectangle rect = event.getBounds();

                    /* Paint the selection beyond the end of last column */
                    OwlUI.codExpandRegion(event, scrollable, gc, area);

                    /* Draw Gradient Rectangle */
                    Color oldForeground = gc.getForeground();
                    Color oldBackground = gc.getBackground();

                    /* Gradient */
                    gc.setBackground(fSeparatorBg);
                    gc.fillRectangle(0, rect.y, area.width, rect.height);

                    /* Top / Bottom Line */
                    gc.setForeground(fSeparatorBorderFg);
                    gc.drawLine(0, rect.y + rect.height - 1, area.width, rect.y + rect.height - 1);
                    gc.drawLine(0, rect.y, area.width, rect.y);

                    gc.setForeground(oldForeground);
                    gc.setBackground(oldBackground);

                    /* Mark as Background being handled */
                    event.detail &= ~SWT.BACKGROUND;
                }
            }
        });
    }

    TableColumn nameCol = new TableColumn(fItemViewer.getTable(), SWT.NONE);

    CColumnLayoutData data = new CColumnLayoutData(Size.FILL, 100);
    cTable.manageColumn(nameCol, data, Messages.CustomizeToolbarDialog_VISIBLE_ITEMS, null, null, false, false);

    /* ContentProvider returns all selected Items */
    fItemViewer.setContentProvider(new IStructuredContentProvider() {
        public Object[] getElements(Object inputElement) {
            int[] itemIds = fPreferences.getIntegers(DefaultPreferences.TOOLBAR_ITEMS);
            ToolBarItem[] items = new ToolBarItem[itemIds.length];
            for (int i = 0; i < itemIds.length; i++) {
                items[i] = new ToolBarItem(CoolBarItem.values()[itemIds[i]]);
            }
            return items;
        }

        public void dispose() {
        }

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

    /* Label Provider */
    fItemViewer.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(ViewerCell cell) {
            CoolBarItem item = ((ToolBarItem) cell.getElement()).item;
            cell.setText(item.getName());

            if (item.getImg() != null)
                cell.setImage(fResources.createImage(item.getImg()));

            if (!OwlUI.isHighContrast() && item == CoolBarItem.SPACER)
                cell.setForeground(getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
        }
    });

    /* Selection */
    fItemViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            updateButtonEnablement();
        }
    });

    /* Support Keyboard Remove */
    fItemViewer.getTable().addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.DEL || (Application.IS_MAC && e.keyCode == SWT.BS))
                onRemove();
        }
    });

    /* Drag Support */
    fItemViewer.addDragSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() },
            new DragSourceAdapter() {
                @Override
                public void dragStart(final DragSourceEvent event) {
                    SafeRunnable.run(new LoggingSafeRunnable() {
                        public void run() throws Exception {
                            IStructuredSelection selection = (IStructuredSelection) fItemViewer.getSelection();
                            event.doit = (selection.size() < fItemViewer.getTable().getItemCount());

                            if (event.doit) {
                                LocalSelectionTransfer.getTransfer().setSelection(selection);
                                LocalSelectionTransfer.getTransfer()
                                        .setSelectionSetTime(event.time & 0xFFFFFFFFL);
                            }
                            ;
                        }
                    });
                }

                @Override
                public void dragSetData(final DragSourceEvent event) {
                    SafeRunnable.run(new LoggingSafeRunnable() {
                        public void run() throws Exception {
                            if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType))
                                event.data = LocalSelectionTransfer.getTransfer().getSelection();
                        }
                    });
                }

                @Override
                public void dragFinished(DragSourceEvent event) {
                    SafeRunnable.run(new LoggingSafeRunnable() {
                        public void run() throws Exception {
                            LocalSelectionTransfer.getTransfer().setSelection(null);
                            LocalSelectionTransfer.getTransfer().setSelectionSetTime(0);
                        }
                    });
                }
            });

    /* Drop Support */
    ViewerDropAdapter dropSupport = new ViewerDropAdapter(fItemViewer) {

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            return true;
        }

        @Override
        public boolean performDrop(Object data) {
            ToolBarItem target = (ToolBarItem) getCurrentTarget();
            if (target != null) {
                onMove((StructuredSelection) data, target, getCurrentLocation());
                return true;
            }

            return false;
        }
    };
    dropSupport.setFeedbackEnabled(true);
    dropSupport.setScrollEnabled(true);
    dropSupport.setSelectionFeedbackEnabled(true);
    fItemViewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() },
            dropSupport);

    /* Set Dummy Input */
    fItemViewer.setInput(this);

    /* Container for the Buttons to Manage Providers */
    Composite buttonContainer = new Composite(container, SWT.None);
    buttonContainer.setLayout(LayoutUtils.createGridLayout(1, 0, 0));
    buttonContainer.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, false));

    /* Add */
    fAddMenu = new Menu(getShell(), SWT.POP_UP);
    fAddMenu.addMenuListener(new MenuListener() {
        public void menuShown(MenuEvent e) {
            MenuItem[] items = fAddMenu.getItems();
            for (MenuItem item : items) {
                item.dispose();
            }

            /* Fill not yet visible Items */
            int[] toolbarItemIds = fPreferences.getIntegers(DefaultPreferences.TOOLBAR_ITEMS);
            List<CoolBarItem> visibleItems = new ArrayList<CoolBarItem>();
            for (int toolbarItemId : toolbarItemIds) {
                visibleItems.add(CoolBarItem.values()[toolbarItemId]);
            }

            CoolBarItem[] toolItems = getSortedItems();
            int currentGroup = -1;
            for (final CoolBarItem toolItem : toolItems) {
                if (!visibleItems.contains(toolItem) || toolItem == CoolBarItem.SEPARATOR
                        || toolItem == CoolBarItem.SPACER) {

                    /* Divide Groups by Separators */
                    if (currentGroup >= 0 && currentGroup != toolItem.getGroup())
                        new MenuItem(fAddMenu, SWT.SEPARATOR);

                    /* Create Menu Item */
                    MenuItem item = new MenuItem(fAddMenu, SWT.PUSH);
                    if (StringUtils.isSet(toolItem.getTooltip()))
                        item.setText(toolItem.getTooltip());
                    else
                        item.setText(toolItem.getName());
                    if (toolItem.getImg() != null)
                        item.setImage(fResources.createImage(toolItem.getImg()));

                    item.addSelectionListener(new SelectionAdapter() {
                        @Override
                        public void widgetSelected(SelectionEvent e) {

                            /* Add Item */
                            onAdd(toolItem);

                            /* Re-Open Menu for More */
                            JobRunner.runInUIThread(fAddMenu, new Runnable() {
                                public void run() {
                                    fAddMenu.setVisible(true);
                                };
                            });
                        }
                    });

                    currentGroup = toolItem.getGroup();
                }
            }
        }

        public void menuHidden(MenuEvent e) {
        }
    });

    fAddButton = new Button(buttonContainer, SWT.DOWN);
    fAddButton.setText(Messages.CustomizeToolbarDialog_ADD);
    applyDialogFont(fAddButton);
    setButtonLayoutData(fAddButton);
    fAddButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Rectangle rect = fAddButton.getBounds();
            Point pt = new Point(rect.x, rect.y + rect.height);
            pt = fAddButton.toDisplay(pt);
            fAddMenu.setLocation(pt.x, pt.y);
            fAddMenu.setVisible(true);
        }
    });

    /* Remove */
    fRemoveButton = new Button(buttonContainer, SWT.PUSH);
    fRemoveButton.setText(Messages.CustomizeToolbarDialog_REMOVE);
    fRemoveButton.setEnabled(false);
    applyDialogFont(fRemoveButton);
    setButtonLayoutData(fRemoveButton);
    fRemoveButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            onRemove();
        }
    });

    /* Move Provider Up */
    fMoveUpButton = new Button(buttonContainer, SWT.PUSH);
    fMoveUpButton.setText(Messages.CustomizeToolbarDialog_MOVE_UP);
    fMoveUpButton.setEnabled(false);
    applyDialogFont(fMoveUpButton);
    setButtonLayoutData(fMoveUpButton);
    ((GridData) fMoveUpButton.getLayoutData()).verticalIndent = 10;
    fMoveUpButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            onMove(true);
        }
    });

    /* Move Provider Down */
    fMoveDownButton = new Button(buttonContainer, SWT.PUSH);
    fMoveDownButton.setText(Messages.CustomizeToolbarDialog_MOVE_DOWN);
    fMoveDownButton.setEnabled(false);
    applyDialogFont(fMoveDownButton);
    setButtonLayoutData(fMoveDownButton);
    fMoveDownButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            onMove(false);
        }
    });

    /* Restore Defaults */
    fRestoreDefaults = new Button(buttonContainer, SWT.PUSH);
    fRestoreDefaults.setText(Messages.CustomizeToolbarDialog_RESTORE_DEFAULTS);
    applyDialogFont(fRestoreDefaults);
    setButtonLayoutData(fRestoreDefaults);
    ((GridData) fRestoreDefaults.getLayoutData()).grabExcessVerticalSpace = true;
    ((GridData) fRestoreDefaults.getLayoutData()).verticalAlignment = SWT.END;
    fRestoreDefaults.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            onRestoreDefaults();
        }
    });

    /* Toolbar Mode */
    Composite modeContainer = new Composite(container, SWT.None);
    modeContainer.setLayout(LayoutUtils.createGridLayout(2, 5, 0));
    modeContainer.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, false, 2, 1));

    Label showLabel = new Label(modeContainer, SWT.NONE);
    showLabel.setText(Messages.CustomizeToolbarDialog_SHOW);

    fModeViewer = new ComboViewer(modeContainer, SWT.READ_ONLY | SWT.BORDER);
    fModeViewer.setContentProvider(new ArrayContentProvider());
    fModeViewer.setLabelProvider(new LabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof CoolBarMode) {
                switch ((CoolBarMode) element) {
                case IMAGE:
                    return Messages.CustomizeToolbarDialog_ICONS;
                case TEXT:
                    return Messages.CustomizeToolbarDialog_TEXT;
                case IMAGE_TEXT_VERTICAL:
                    return Messages.CustomizeToolbarDialog_ICONS_AND_TEXT;
                case IMAGE_TEXT_HORIZONTAL:
                    return Messages.CustomizeToolbarDialog_ICONS_AND_TEXT_SMALL;
                }
            }

            return super.getText(element);
        }
    });

    fModeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            Object selection = ((IStructuredSelection) event.getSelection()).getFirstElement();
            CoolBarMode mode = (CoolBarMode) selection;
            fPreferences.putInteger(DefaultPreferences.TOOLBAR_MODE, mode.ordinal());
        }
    });

    fModeViewer.setInput(CoolBarAdvisor.CoolBarMode.values());
    fModeViewer.setSelection(new StructuredSelection(
            CoolBarMode.values()[fPreferences.getInteger(DefaultPreferences.TOOLBAR_MODE)]));

    /* Separator */
    new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL)
            .setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

    applyDialogFont(container);

    return container;
}