【聚杰网数据库编程】拖放 Eclipse Workbench 标签
清单 5. 取消其他拖放操作
public void dragFinished(DragSourceEvent dsEvent) { dragSource.dispose(); // inhibit the action of CTabFolder's default drag-drop-listeners draggedFolder.notifyListeners(SWT.MouseUp, null); } |
对视图标签的拖放行为进行定制
由于视图通常都存放在 CTabFolder 容器中,因此上面用来定制编辑器的拖放行为的方法也可以用来定制视图的拖放行为。要像上面的 图 1 和 图 2 中所显示的那样对视图的拖放行为进行定制,则需要执行以下操作:当用户拖动一个视图标签时,捕获底层视图的 view-id,并将其设置为拖放过程中正在转移的对象。下面黑色字体表示的代码是应该在上面 清单 3 和 清单 4 的基础上添加的代码。
清单 6. 定制编辑器和视图标签的拖放行为
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.DragDetect, new Listener() { public void handleEvent(Event event) { //ignore drag of widgets other than tab-folders (which host //editor and view tabs) if(!(event.widget instanceof CTabFolder)) return; final CTabFolder draggedFolder = (CTabFolder)event.widget; //Handle special case where no editors are open but editor area //(and hence containing tab-folder) are still visible. Now try //dragging the tab-folder. This drag should be ignored. if( draggedFolder.getItemCount() < 1 ) return; int operations = DND.DROP_COPY | DND.DROP_DEFAULT; final DragSource dragSource = new DragSource(draggedFolder, operations); //get a reference to the workbench-part that is being dragged IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); final IWorkbenchPart workbenchPartBeingDragged = workbenchWindow.getActivePage().getActivePart(); Transfer[] transferTypes = null; if(workbenchPartBeingDragged instanceof IEditorPart) transferTypes = new Transfer[] {EditorInputTransfer.getInstance()}; else transferTypes = new Transfer[] {TextTransfer.getInstance()}; dragSource.setTransfer(transferTypes); dragSource.addDragListener(new DragSourceListener() { public void dragStart(DragSourceEvent dsEvent) { } public void dragSetData(DragSourceEvent dsEvent) { if(workbenchPartBeingDragged instanceof IEditorPart) { String editorId = workbenchPartBeingDragged.getSite().getId(); IEditorInput editorInput = ((IEditorPart)workbenchPartBeingDragged).getEditorInput(); EditorInputTransfer.EditorInputData data = EditorInputTransfer.createEditorInputData(editorId, editorInput); dsEvent.data = new EditorInputTransfer.EditorInputData[] { data }; } else if(workbenchPartBeingDragged instanceof IViewPart) { String viewId = workbenchPartBeingDragged.getSite().getId(); dsEvent.data = viewId; } } public void dragFinished(DragSourceEvent dsEvent) { dragSource.dispose(); // inhibit the action of CTabFolder's default drag-detect-listeners draggedFolder.notifyListeners(SWT.MouseUp, null); } }); } }); |




