List of usage examples for org.eclipse.jface.viewers ViewerDropAdapter setFeedbackEnabled
public void setFeedbackEnabled(boolean value)
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; }