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

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

Introduction

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

Prototype

protected ViewerDropAdapter(Viewer viewer) 

Source Link

Document

Creates a new drop adapter for the given viewer.

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 .  j  a va 2 s.  c om
    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.android.ddmuilib.explorer.DeviceExplorer.java

License:Apache License

/**
 * Creates a control capable of displaying some information.  This is
 * called once, when the application is initializing, from the UI thread.
 *//*from w  ww.  j  a  v  a2  s. com*/
@Override
protected Control createControl(Composite parent) {
    mParent = parent;
    parent.setLayout(new FillLayout());

    ImageLoader loader = ImageLoader.getDdmUiLibLoader();
    if (mFileImage == null) {
        mFileImage = loader.loadImage("file.png", mParent.getDisplay());
    }
    if (mFolderImage == null) {
        mFolderImage = loader.loadImage("folder.png", mParent.getDisplay());
    }
    if (mPackageImage == null) {
        mPackageImage = loader.loadImage("android.png", mParent.getDisplay());
    }
    if (mOtherImage == null) {
        // TODO: find a default image for other.
    }

    mTree = new Tree(parent, SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL);
    mTree.setHeaderVisible(true);

    IPreferenceStore store = DdmUiPreferences.getStore();

    // create columns
    TableHelper.createTreeColumn(mTree, "Name", SWT.LEFT, "0000drwxrwxrwx", COLUMN_NAME, store); //$NON-NLS-2$
    TableHelper.createTreeColumn(mTree, "Size", SWT.RIGHT, "000000", COLUMN_SIZE, store); //$NON-NLS-2$
    TableHelper.createTreeColumn(mTree, "Date", SWT.LEFT, "2007-08-14", COLUMN_DATE, store); //$NON-NLS-2$
    TableHelper.createTreeColumn(mTree, "Time", SWT.LEFT, "20:54", COLUMN_TIME, store); //$NON-NLS-2$
    TableHelper.createTreeColumn(mTree, "Permissions", SWT.LEFT, "drwxrwxrwx", COLUMN_PERMISSIONS, store); //$NON-NLS-2$
    TableHelper.createTreeColumn(mTree, "Info", SWT.LEFT, "drwxrwxrwx", COLUMN_INFO, store); //$NON-NLS-2$

    // create the jface wrapper
    mTreeViewer = new TreeViewer(mTree);

    // setup data provider
    mContentProvider = new DeviceContentProvider();
    mTreeViewer.setContentProvider(mContentProvider);
    mTreeViewer.setLabelProvider(new FileLabelProvider(mFileImage, mFolderImage, mPackageImage, mOtherImage));

    // setup a listener for selection
    mTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            ISelection sel = event.getSelection();
            if (sel.isEmpty()) {
                mPullAction.setEnabled(false);
                mPushAction.setEnabled(false);
                mDeleteAction.setEnabled(false);
                mCreateNewFolderAction.setEnabled(false);
                return;
            }
            if (sel instanceof IStructuredSelection) {
                IStructuredSelection selection = (IStructuredSelection) sel;
                Object element = selection.getFirstElement();
                if (element == null)
                    return;
                if (element instanceof FileEntry) {
                    mPullAction.setEnabled(true);
                    mPushAction.setEnabled(selection.size() == 1);
                    if (selection.size() == 1) {
                        FileEntry entry = (FileEntry) element;
                        setDeleteEnabledState(entry);
                        mCreateNewFolderAction.setEnabled(entry.isDirectory());
                    } else {
                        mDeleteAction.setEnabled(false);
                    }
                }
            }
        }
    });

    // add support for double click
    mTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
        @Override
        public void doubleClick(DoubleClickEvent event) {
            ISelection sel = event.getSelection();

            if (sel instanceof IStructuredSelection) {
                IStructuredSelection selection = (IStructuredSelection) sel;

                if (selection.size() == 1) {
                    FileEntry entry = (FileEntry) selection.getFirstElement();
                    String name = entry.getName();

                    FileEntry parentEntry = entry.getParent();

                    // can't really do anything with no parent
                    if (parentEntry == null) {
                        return;
                    }

                    // check this is a file like we want.
                    Matcher m = mKeyFilePattern.matcher(name);
                    if (m.matches()) {
                        // get the name w/o the extension
                        String baseName = m.group(1);

                        // add the data extension
                        String dataName = baseName + TRACE_DATA_EXT;

                        FileEntry dataEntry = parentEntry.findChild(dataName);

                        handleTraceDoubleClick(baseName, entry, dataEntry);

                    } else {
                        m = mDataFilePattern.matcher(name);
                        if (m.matches()) {
                            // get the name w/o the extension
                            String baseName = m.group(1);

                            // add the key extension
                            String keyName = baseName + TRACE_KEY_EXT;

                            FileEntry keyEntry = parentEntry.findChild(keyName);

                            handleTraceDoubleClick(baseName, keyEntry, entry);
                        }
                    }
                }
            }
        }
    });

    // setup drop listener
    mTreeViewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, new Transfer[] { FileTransfer.getInstance() },
            new ViewerDropAdapter(mTreeViewer) {
                @Override
                public boolean performDrop(Object data) {
                    // get the item on which we dropped the item(s)
                    FileEntry target = (FileEntry) getCurrentTarget();

                    // in case we drop at the same level as root
                    if (target == null) {
                        return false;
                    }

                    // if the target is not a directory, we get the parent directory
                    if (target.isDirectory() == false) {
                        target = target.getParent();
                    }

                    if (target == null) {
                        return false;
                    }

                    // get the list of files to drop
                    String[] files = (String[]) data;

                    // do the drop
                    pushFiles(files, target);

                    // we need to finish with a refresh
                    refresh(target);

                    return true;
                }

                @Override
                public boolean validateDrop(Object target, int operation, TransferData transferType) {
                    if (target == null) {
                        return false;
                    }

                    // convert to the real item
                    FileEntry targetEntry = (FileEntry) target;

                    // if the target is not a directory, we get the parent directory
                    if (targetEntry.isDirectory() == false) {
                        target = targetEntry.getParent();
                    }

                    if (target == null) {
                        return false;
                    }

                    return true;
                }
            });

    // create and start the refresh thread
    new Thread("Device Ls refresher") {
        @Override
        public void run() {
            while (true) {
                try {
                    sleep(FileListingService.REFRESH_RATE);
                } catch (InterruptedException e) {
                    return;
                }

                if (mTree != null && mTree.isDisposed() == false) {
                    Display display = mTree.getDisplay();
                    if (display.isDisposed() == false) {
                        display.asyncExec(new Runnable() {
                            @Override
                            public void run() {
                                if (mTree.isDisposed() == false) {
                                    mTreeViewer.refresh(true);
                                }
                            }
                        });
                    } else {
                        return;
                    }
                } else {
                    return;
                }
            }

        }
    }.start();

    return mTree;
}

From source file:com.bdaum.zoom.ui.internal.views.HierarchyView.java

License:Open Source License

@Override
public void createPartControl(Composite parent) {
    viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    UiUtilities.installDoubleClickExpansion(viewer);
    getControl().addKeyListener(new KeyAdapter() {
        @Override/*from w w  w.ja  v a 2  s . c  om*/
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.CTRL)
                cntrlDwn = true;
        }

        @Override
        public void keyReleased(KeyEvent e) {
            if (e.keyCode == SWT.CTRL)
                cntrlDwn = false;
        }
    });
    viewer.addSelectionChangedListener(this);
    // Create the help context id for the viewer's control
    PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), HelpContextIds.HIERARCHY_VIEW);
    // Drag & Drop
    viewer.addDropSupport(OPERATIONS, transferTypes, new ViewerDropAdapter(viewer) {
        @Override
        public void dragEnter(DropTargetEvent event) {
            super.dragEnter(event);
            UiActivator.getDefault().setDropTargetEffect(event, viewer.getControl());
        }

        @Override
        public void dragLeave(DropTargetEvent event) {
            UiActivator.getDefault().hideDropTargetEffect();
            super.dragLeave(event);
        }

        @Override
        public void dragOver(DropTargetEvent event) {
            super.dragOver(event);
        }

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            return (textTransfer.isSupportedType(transferType) && (operation & OPERATIONS) != 0);
        }

        @Override
        public boolean performDrop(Object data) {
            if (data instanceof String) {
                List<String> list = Core.fromStringList((String) data, "\n"); //$NON-NLS-1$
                Object target = getCurrentTarget();
                if (target == null && !list.isEmpty())
                    setInput(CoreActivator.getDefault().getDbManager().obtainAsset(list.get(0)));
                else if (target instanceof Node) {
                    String[] ids = list.toArray(new String[list.size()]);
                    String errorMsg = ((Node) target).acceptChildren(ids);
                    if (errorMsg != null) {
                        AcousticMessageDialog.openError(getSite().getShell(),
                                Messages.getString("HierarchyView.drag_error"), errorMsg); //$NON-NLS-1$
                        return false;
                    }
                }
            }
            return true;
        }
    });
    // Listeners
    addKeyListener();
    addGestureListener(viewer.getTree());
    addExplanationListener(true);
    addPartListener();
    addClipboard(viewer.getControl());
    addDragSupport();
    // Other actions
    makeActions(getViewSite().getActionBars());
    installListeners();
    hookContextMenu();
    contributeToActionBars();
    // Hover
    installHoveringController();
    // Action state
    updateActions(false);
}

From source file:com.google.gdt.eclipse.designer.mobile.preferences.device.DevicesPreferencePage.java

License:Open Source License

/**
 * Configures DND in {@link #m_viewer}.//from   w  ww. j a v  a  2  s . co  m
 */
private void configureDND() {
    Transfer[] transfers = new Transfer[] { EmptyTransfer.INSTANCE };
    m_viewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
        public void dragStart(DragSourceEvent event) {
            m_dragElements = getSelectedElements();
            m_dragCategory = m_dragElements.get(0) instanceof CategoryInfo;
            // check that we drag only categories or only entries
            for (Object element : m_dragElements) {
                if (m_dragCategory != element instanceof CategoryInfo) {
                    event.doit = false;
                }
            }
        }

        public void dragSetData(DragSourceEvent event) {
        }

        public void dragFinished(DragSourceEvent event) {
        }
    });
    ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_viewer) {
        @Override
        protected int determineLocation(DropTargetEvent event) {
            if (event.item instanceof Item) {
                Item item = (Item) event.item;
                Point coordinates = m_viewer.getControl().toControl(event.x, event.y);
                Rectangle bounds = getBounds(item);
                // when drag device, relation with category can be only ON
                if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
                    return LOCATION_ON;
                }
                // in all other cases, drop before/after
                return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
            }
            return LOCATION_NONE;
        }

        @Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            // category can be dragged only relative other category
            if (m_dragCategory) {
                return target instanceof CategoryInfo;
            }
            // all other cases are valid
            return true;
        }

        @Override
        public boolean performDrop(Object data) {
            Object target = getCurrentTarget();
            int location = getCurrentLocation();
            if (m_dragCategory) {
                Assert.instanceOf(CategoryInfo.class, target);
                Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
                // prepare next category
                CategoryInfo nextCategory;
                {
                    List<CategoryInfo> categories = DeviceManager.getCategories();
                    int index = categories.indexOf(target);
                    if (location == LOCATION_BEFORE) {
                        nextCategory = categories.get(index);
                    } else {
                        nextCategory = GenericsUtils.getNextOrNull(categories, index);
                    }
                }
                // add commands
                for (Object element : m_dragElements) {
                    CategoryInfo category = (CategoryInfo) element;
                    commands_add(new CategoryMoveCommand(category, nextCategory));
                }
            } else if (target instanceof CategoryInfo) {
                Assert.isTrue(location == LOCATION_ON);
                CategoryInfo targetCategory = (CategoryInfo) target;
                for (Object element : m_dragElements) {
                    DeviceInfo device = (DeviceInfo) element;
                    commands_add(new DeviceMoveCommand(device, targetCategory, null));
                }
            } else {
                DeviceInfo targetDevice = (DeviceInfo) target;
                CategoryInfo targetCategory = targetDevice.getCategory();
                // prepare next device
                DeviceInfo nextDevice;
                {
                    List<DeviceInfo> entries = targetCategory.getDevices();
                    int index = entries.indexOf(targetDevice);
                    if (location == LOCATION_BEFORE) {
                        nextDevice = entries.get(index);
                    } else {
                        nextDevice = GenericsUtils.getNextOrNull(entries, index);
                    }
                }
                // add commands
                for (Object element : m_dragElements) {
                    DeviceInfo device = (DeviceInfo) element;
                    commands_add(new DeviceMoveCommand(device, targetCategory, nextDevice));
                }
            }
            // refresh viewer to show result of applying commands
            refreshViewer();
            return true;
        }
    };
    dropAdapter.setScrollExpandEnabled(false);
    m_viewer.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
}

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// w  ww  .j a  v a  2 s  .  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:com.siteview.mde.internal.ui.editor.category.CategorySection.java

License:Open Source License

public void createClient(Section section, FormToolkit toolkit) {
    fModel = (ISiteModel) getPage().getModel();
    fModel.addModelChangedListener(this);

    Composite container = createClientContainer(section, 2, toolkit);
    createViewerPartControl(container, SWT.MULTI, 2, toolkit);
    fCategoryTreePart = getTreePart();//  w w  w. j av  a2  s .co  m
    fCategoryViewer = fCategoryTreePart.getTreeViewer();
    fCategoryViewer.setContentProvider(new CategoryContentProvider());
    fSiteLabelProvider = new CategoryLabelProvider();
    fCategoryViewer.setLabelProvider(fSiteLabelProvider);

    fCategoryViewer.setInput(fModel.getSite());
    int ops = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_DEFAULT;
    Transfer[] transfers = new Transfer[] { ModelDataTransfer.getInstance() };
    if (isEditable()) {
        fCategoryViewer.addDropSupport(ops, transfers, new ViewerDropAdapter(fCategoryViewer) {
            public void dragEnter(DropTargetEvent event) {
                Object target = determineTarget(event);
                if (target == null && event.detail == DND.DROP_COPY) {
                    event.detail = DND.DROP_MOVE;
                }
                super.dragEnter(event);
            }

            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOperationChanged(org.eclipse.swt.dnd.DropTargetEvent)
             */
            public void dragOperationChanged(DropTargetEvent event) {
                Object target = determineTarget(event);
                if (target == null && event.detail == DND.DROP_COPY) {
                    event.detail = DND.DROP_MOVE;
                }
                super.dragOperationChanged(event);
            }

            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
             */
            public void dragOver(DropTargetEvent event) {
                Object target = determineTarget(event);
                if (target == null && event.detail == DND.DROP_COPY) {
                    event.detail = DND.DROP_MOVE;
                }
                super.dragOver(event);
            }

            /**
             * Returns the position of the given event's coordinates
             * relative to its target. The position is determined to
             * be before, after, or on the item, based on some
             * threshold value.
             * 
             * @param event
             *            the event
             * @return one of the <code>LOCATION_* </code>
             *         constants defined in this class
             */
            protected int determineLocation(DropTargetEvent event) {
                if (!(event.item instanceof Item)) {
                    return LOCATION_NONE;
                }
                Item item = (Item) event.item;
                Point coordinates = new Point(event.x, event.y);
                coordinates = getViewer().getControl().toControl(coordinates);
                if (item != null) {
                    Rectangle bounds = getBounds(item);
                    if (bounds == null) {
                        return LOCATION_NONE;
                    }
                }
                return LOCATION_ON;
            }

            public boolean performDrop(Object data) {
                if (!(data instanceof Object[]))
                    return false;
                Object target = getCurrentTarget();

                int op = getCurrentOperation();
                Object[] objects = (Object[]) data;
                if (objects.length > 0 && objects[0] instanceof SiteFeatureAdapter) {
                    if (op == DND.DROP_COPY && target != null) {
                        copyFeature((SiteFeatureAdapter) objects[0], target);
                    } else {
                        moveFeature((SiteFeatureAdapter) objects[0], target);
                    }
                    return true;
                }
                return false;
            }

            public boolean validateDrop(Object target, int operation, TransferData transferType) {
                return (target instanceof ISiteCategoryDefinition || target == null);
            }

        });
    }

    fCategoryViewer.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY, transfers, new DragSourceListener() {
        public void dragStart(DragSourceEvent event) {
            IStructuredSelection ssel = (IStructuredSelection) fCategoryViewer.getSelection();
            if (ssel == null || ssel.isEmpty() || !(ssel.getFirstElement() instanceof SiteFeatureAdapter)) {
                event.doit = false;
            }
        }

        public void dragSetData(DragSourceEvent event) {
            IStructuredSelection ssel = (IStructuredSelection) fCategoryViewer.getSelection();
            event.data = ssel.toArray();
        }

        public void dragFinished(DragSourceEvent event) {
        }
    });

    fCategoryTreePart.setButtonEnabled(BUTTON_ADD_CATEGORY, isEditable());
    fCategoryTreePart.setButtonEnabled(BUTTON_ADD_FEATURE, isEditable());

    // fCategoryViewer.expandAll();
    toolkit.paintBordersFor(container);
    section.setClient(container);
    initialize();
}

From source file:com.siteview.mde.internal.ui.editor.site.CategorySection.java

License:Open Source License

public void createClient(Section section, FormToolkit toolkit) {
    fModel = (ISiteModel) getPage().getModel();
    fModel.addModelChangedListener(this);

    Composite container = createClientContainer(section, 2, toolkit);
    createViewerPartControl(container, SWT.MULTI, 2, toolkit);
    fCategoryTreePart = getTreePart();//from   w w  w .j  a v a2  s. co  m
    fCategoryViewer = fCategoryTreePart.getTreeViewer();
    fCategoryViewer.setContentProvider(new CategoryContentProvider());
    fSiteLabelProvider = new SiteLabelProvider();
    fCategoryViewer.setLabelProvider(fSiteLabelProvider);

    fCategoryViewer.setInput(fModel.getSite());
    int ops = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_DEFAULT;
    Transfer[] transfers = new Transfer[] { ModelDataTransfer.getInstance() };
    if (isEditable()) {
        fCategoryViewer.addDropSupport(ops, transfers, new ViewerDropAdapter(fCategoryViewer) {
            public void dragEnter(DropTargetEvent event) {
                Object target = determineTarget(event);
                if (target == null && event.detail == DND.DROP_COPY) {
                    event.detail = DND.DROP_MOVE;
                }
                super.dragEnter(event);
            }

            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOperationChanged(org.eclipse.swt.dnd.DropTargetEvent)
             */
            public void dragOperationChanged(DropTargetEvent event) {
                Object target = determineTarget(event);
                if (target == null && event.detail == DND.DROP_COPY) {
                    event.detail = DND.DROP_MOVE;
                }
                super.dragOperationChanged(event);
            }

            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
             */
            public void dragOver(DropTargetEvent event) {
                Object target = determineTarget(event);
                if (target == null && event.detail == DND.DROP_COPY) {
                    event.detail = DND.DROP_MOVE;
                }
                super.dragOver(event);
            }

            /**
             * Returns the position of the given event's coordinates
             * relative to its target. The position is determined to
             * be before, after, or on the item, based on some
             * threshold value.
             * 
             * @param event
             *            the event
             * @return one of the <code>LOCATION_* </code>
             *         constants defined in this class
             */
            protected int determineLocation(DropTargetEvent event) {
                if (!(event.item instanceof Item)) {
                    return LOCATION_NONE;
                }
                Item item = (Item) event.item;
                Point coordinates = new Point(event.x, event.y);
                coordinates = getViewer().getControl().toControl(coordinates);
                if (item != null) {
                    Rectangle bounds = getBounds(item);
                    if (bounds == null) {
                        return LOCATION_NONE;
                    }
                }
                return LOCATION_ON;
            }

            public boolean performDrop(Object data) {
                if (!(data instanceof Object[]))
                    return false;
                Object target = getCurrentTarget();

                int op = getCurrentOperation();
                Object[] objects = (Object[]) data;
                if (objects.length > 0 && objects[0] instanceof SiteFeatureAdapter) {
                    if (op == DND.DROP_COPY && target != null) {
                        copyFeature((SiteFeatureAdapter) objects[0], target);
                    } else {
                        moveFeature((SiteFeatureAdapter) objects[0], target);
                    }
                    return true;
                }
                return false;
            }

            public boolean validateDrop(Object target, int operation, TransferData transferType) {
                return (target instanceof ISiteCategoryDefinition || target == null);
            }

        });
    }

    fCategoryViewer.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY, transfers, new DragSourceListener() {
        public void dragStart(DragSourceEvent event) {
            IStructuredSelection ssel = (IStructuredSelection) fCategoryViewer.getSelection();
            if (ssel == null || ssel.isEmpty() || !(ssel.getFirstElement() instanceof SiteFeatureAdapter)) {
                event.doit = false;
            }
        }

        public void dragSetData(DragSourceEvent event) {
            IStructuredSelection ssel = (IStructuredSelection) fCategoryViewer.getSelection();
            event.data = ssel.toArray();
        }

        public void dragFinished(DragSourceEvent event) {
        }
    });

    fCategoryTreePart.setButtonEnabled(BUTTON_ADD_CATEGORY, isEditable());
    fCategoryTreePart.setButtonEnabled(BUTTON_ADD_FEATURE, isEditable());
    fCategoryTreePart.setButtonEnabled(BUTTON_BUILD_FEATURE, isEditable());
    fCategoryTreePart.setButtonEnabled(BUTTON_BUILD_ALL, isEditable());

    // fCategoryViewer.expandAll();
    toolkit.paintBordersFor(container);
    section.setClient(container);
    initialize();
}

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

License:Open Source License

private void createUILayer20Viewer(final Composite parent, final PixelConverter pixelConverter) {

    final TableColumnLayout tableLayout = new TableColumnLayout();
    _viewerContainer = new Composite(parent, SWT.NONE);
    _viewerContainer.setLayout(tableLayout);
    GridDataFactory.fillDefaults().grab(true, true).applyTo(_viewerContainer);

    /*/*from www. j  av a  2  s. co m*/
     * create table
     */
    final Table table = new Table(_viewerContainer, SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);

    table.setLayout(new TableLayout());
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    _layerViewer = new CheckboxTableViewer(table);

    /*
     * create columns
     */
    TableViewerColumn tvc;
    TableColumn tvcColumn;

    // column: layer title
    tvc = new TableViewerColumn(_layerViewer, SWT.LEAD);
    tvcColumn = tvc.getColumn();
    tvcColumn.setText(Messages.Dialog_WmsConfig_Column_LayerName);
    tvc.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {

            final MtLayer mtLayer = (MtLayer) cell.getElement();

            cell.setText(mtLayer.getGeoLayer().getTitle());
        }
    });
    tableLayout.setColumnData(tvcColumn, new ColumnWeightData(20, true));

    // column: layer id
    tvc = new TableViewerColumn(_layerViewer, SWT.LEAD);
    tvcColumn = tvc.getColumn();
    tvcColumn.setText(Messages.Dialog_WmsConfig_Column_LayerId);
    tvc.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {

            final MtLayer mtLayer = (MtLayer) cell.getElement();

            cell.setText(mtLayer.getGeoLayer().getName());
        }
    });
    tableLayout.setColumnData(tvcColumn, new ColumnWeightData(10, true));

    // column: bbox
    tvc = new TableViewerColumn(_layerViewer, SWT.LEAD);
    tvcColumn = tvc.getColumn();
    tvcColumn.setText(Messages.Dialog_WmsConfig_Column_Bbox);
    tvc.setLabelProvider(new CellLabelProvider() {
        @Override
        public void update(final ViewerCell cell) {

            final MtLayer mtLayer = (MtLayer) cell.getElement();

            final GeoPosition lowerPosition = mtLayer.getLowerGeoPosition();
            final GeoPosition upperPosition = mtLayer.getUpperGeoPosition();

            final StringBuilder sb = new StringBuilder();

            sb.append(lowerPosition.latitude);
            sb.append(", "); //$NON-NLS-1$
            sb.append(lowerPosition.longitude);
            sb.append(" / "); //$NON-NLS-1$
            sb.append(upperPosition.latitude);
            sb.append(", "); //$NON-NLS-1$
            sb.append(upperPosition.longitude);

            cell.setText(sb.toString());
        }
    });
    tableLayout.setColumnData(tvcColumn, new ColumnWeightData(20, true));

    _layerViewer.setContentProvider(new IStructuredContentProvider() {
        public void dispose() {
        }

        public Object[] getElements(final Object inputElement) {
            final int mtLayerSize = _allMtLayers.size();
            if (mtLayerSize == 0) {
                return null;
            } else {
                return _allMtLayers.toArray(new MtLayer[mtLayerSize]);
            }
        }

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

    _layerViewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(final CheckStateChangedEvent event) {

            // select the checked item
            _layerViewer.setSelection(new StructuredSelection(event.getElement()));

            // set focus to selected layer
            table.setSelection(table.getSelectionIndex());

            onCheckLayer(event.getElement());
        }
    });

    _layerViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(final SelectionChangedEvent event) {
            onSelectLayer();
        }
    });

    /*
     * set drag adapter
     */
    _layerViewer.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 ISelection selection = _layerViewer.getSelection();

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

                    event.doit = !selection.isEmpty();
                }
            });

    /*
     * set drop adapter
     */
    final ViewerDropAdapter viewerDropAdapter = new ViewerDropAdapter(_layerViewer) {

        private Widget fTableItem;

        @Override
        public void dragOver(final DropTargetEvent event) {

            // keep table item
            fTableItem = event.item;

            super.dragOver(event);
        }

        @Override
        public boolean performDrop(final Object droppedData) {

            if (droppedData instanceof StructuredSelection) {

                final Object firstElement = ((StructuredSelection) droppedData).getFirstElement();
                if (firstElement instanceof MtLayer) {

                    final MtLayer mtLayer = (MtLayer) firstElement;

                    final int location = getCurrentLocation();
                    final Table layerTable = _layerViewer.getTable();

                    /*
                     * check if drag was startet from this filter, remove the filter item before
                     * the new filter is inserted
                     */
                    if (LocalSelectionTransfer.getTransfer().getSelectionSetTime() == _dragStartViewerLeft) {
                        _layerViewer.remove(mtLayer);
                    }

                    int tableIndex;

                    if (fTableItem == null) {

                        _layerViewer.add(mtLayer);
                        tableIndex = layerTable.getItemCount() - 1;

                    } else {

                        // get index of the target in the table
                        tableIndex = layerTable.indexOf((TableItem) fTableItem);
                        if (tableIndex == -1) {
                            return false;
                        }

                        if (location == LOCATION_BEFORE) {
                            _layerViewer.insert(mtLayer, tableIndex);
                        } else if (location == LOCATION_AFTER) {
                            _layerViewer.insert(mtLayer, ++tableIndex);
                        }
                    }

                    // set check state
                    _layerViewer.setChecked(mtLayer, mtLayer.isDisplayedInMap());

                    // reselect filter item
                    _layerViewer.setSelection(new StructuredSelection(mtLayer));

                    // set focus to selection
                    layerTable.setSelection(tableIndex);
                    layerTable.setFocus();

                    // update new layer topology in the map
                    updateMap(false);

                    return true;
                }
            }

            return false;
        }

        @Override
        public boolean validateDrop(final Object target, final int operation, final TransferData transferType) {

            final ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
            if (selection instanceof StructuredSelection) {
                final Object draggedItem = ((StructuredSelection) selection).getFirstElement();
                if (target == draggedItem) {
                    return false;
                }
            }

            if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType) == false) {
                return false;
            }

            // check drop location
            final int location = getCurrentLocation();
            if (((location == LOCATION_AFTER) || (location == LOCATION_BEFORE)) == false) {
                return false;
            }

            return true;
        }

    };

    _layerViewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() },
            viewerDropAdapter);
}

From source file:fr.inrialpes.exmo.align.plugin.neontk.NavigationView.java

License:Open Source License

private void createDropSupport() {
    int operations = DND.DROP_MOVE;
    Transfer[] transferTypes = new Transfer[] { SelectionTransfer.getInstance() };

    //System.out.println("drop support ... ");

    //drop support for adding ontology from Ontology Navigator
    viewer.addDropSupport(operations, transferTypes, new ViewerDropAdapter(viewer) {
        //new PluginDropAdapter(viewer){
        //@Override
        public boolean performDrop(Object data) {
            System.out.println("check 1 ...");
            if (data instanceof IStructuredSelection) {
                System.out.println("check 2 ...");
                Object[] elems = ((IStructuredSelection) data).toArray();
                for (int i = 0; i < elems.length; i++) {
                    if (elems[i] instanceof TreeItem) {
                        TreeItem ti = (TreeItem) elems[i];
                        System.out.println("reading tree ...");
                        if (ti.getData() instanceof ModuleTreeElement) {

                            ModuleTreeElement modElement = (ModuleTreeElement) ti.getData();
                            //NavigationView target = (NavigationView)getCurrentTarget();
                            //if (target == null){
                            //target = (NavigationView) viewer;
                            //target = (NavigationView)getViewer().getInput();
                            //System.out.println("current viewer null ");
                            //}
                            //else System.out.println("current viewer non null ");
                            System.out.println("Set Element");
                            viewer.setInput(modElement);
                            //System.out.println("Id=" + modElement.getModuleId());
                            //TreeObject root = new TreeObject(modElement);
                            //viewer.setInput(createDummyModel());
                            //viewer.add(target, modElement);
                            //viewer.reveal(modElement);
                            //return true;
                        }/* w w  w  .  j  av  a  2s  . c  om*/
                    }
                }
            }
            return false;
        }

        //@Override
        public boolean validateDrop(Object target, int operation, TransferData transferType) {
            // check for Drop from Ontology Navigator
            if (SelectionTransfer.getInstance().isSupportedType(transferType)) {
                this.setFeedbackEnabled(false);
                System.out.println(" dropped ok ");
                return true;
            }

            System.out.println("no drop ");

            return false;
        }
    });

}

From source file:net.bioclipse.qsar.ui.editors.MoleculesPage.java

License:Open Source License

private void addDragAndDrop() {
    int ops = DND.DROP_COPY | DND.DROP_MOVE;
    Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
    molViewer.addDropSupport(ops, transfers, new ViewerDropAdapter(molViewer) {

        @Override/*from w w w.j  a  v  a 2  s. c  om*/
        public boolean performDrop(Object data) {

            if (!((data instanceof String[]) || (data instanceof IStructuredSelection))) {
                return false;
            }

            final Object indata = data;

            WorkspaceJob job = new WorkspaceJob("Adding resources to QSAR project") {

                @Override
                public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {

                    List<IResource> resources = new ArrayList<IResource>();

                    //Handle selections within Bioclipse
                    if (indata instanceof String[]) {

                        List<IResource> newRes = handleDropOfFiles((String[]) indata, monitor);
                        if (newRes != null && newRes.size() > 0)
                            resources.addAll(newRes);
                    }

                    //Handle selections within Bioclipse
                    else if (indata instanceof IStructuredSelection) {

                        IStructuredSelection ssel = (IStructuredSelection) indata;
                        for (Object obj : ssel.toList()) {
                            if (obj instanceof IResource) {
                                IResource res = (IResource) obj;
                                resources.add(res);
                            }
                        }
                    }

                    //If none, return error
                    if (resources.size() <= 0)
                        return Status.CANCEL_STATUS;

                    //Add resources to model and molecules folder is necessary
                    try {
                        addResources(resources.toArray(new IResource[0]), monitor);
                    } catch (final UnsupportedOperationException e) {
                        Display.getDefault().syncExec(new Runnable() {
                            public void run() {
                                showError("Error adding files: " + e.getMessage());
                            }
                        });
                    }

                    Display.getDefault().syncExec(new Runnable() {

                        public void run() {
                            molViewer.getTable().setFocus();
                        }

                    });
                    return Status.OK_STATUS;

                }

            };

            job.setUser(true);
            job.schedule();

            return true;

        }

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