Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Scanner config discovery - fix for PR 65449

Patch for PR 65449: [Scanner Config] Editing discovered path lacks 
select-copy

Thanks,
Vmir

Index: src/org/eclipse/cdt/make/internal/ui/MakeResources.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeResources.properties,v
retrieving revision 1.24
diff -u -r1.24 MakeResources.properties
--- src/org/eclipse/cdt/make/internal/ui/MakeResources.properties	22 Jun 2004 12:43:48 -0000	1.24
+++ src/org/eclipse/cdt/make/internal/ui/MakeResources.properties	24 Jun 2004 15:34:57 -0000
@@ -240,3 +240,7 @@
 DiscoveredScannerConfigurationContainerPage.title=Edit container
 DiscoveredScannerConfigurationContainerPage.description=Manage discovered scanner configuration
 DiscoveredScannerConfigurationContainerPage.list.title=Discovered include paths and symbol definitions
+
+CopyDiscoveredPathAction.title=Copy
+CopyDiscoveredPathAction.description=Copy as text
+CopyDiscoveredPathAction.tooltip=Copy as text
Index: src/org/eclipse/cdt/make/ui/dialogs/DiscoveredPathContainerPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/DiscoveredPathContainerPage.java,v
retrieving revision 1.3
diff -u -r1.3 DiscoveredPathContainerPage.java
--- src/org/eclipse/cdt/make/ui/dialogs/DiscoveredPathContainerPage.java	22 Jun 2004 13:19:46 -0000	1.3
+++ src/org/eclipse/cdt/make/ui/dialogs/DiscoveredPathContainerPage.java	24 Jun 2004 15:34:58 -0000
@@ -41,13 +41,30 @@
 import org.eclipse.cdt.make.internal.ui.scannerconfig.DiscoveredElementSorter;
 import org.eclipse.cdt.ui.wizards.ICPathContainerPage;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ActionHandler;
+import org.eclipse.ui.commands.HandlerSubmission;
+import org.eclipse.ui.commands.IWorkbenchCommandSupport;
+import org.eclipse.ui.commands.Priority;
+import org.eclipse.ui.contexts.IWorkbenchContextSupport;
 
 /**
  * A dialog page to manage discovered scanner configuration
@@ -86,6 +103,8 @@
 
 	private TreeListDialogField fDiscoveredContainerList;
 	private boolean dirty;
+	private CopyTextAction copyTextAction;
+	private HandlerSubmission submission;
 	
 	public DiscoveredPathContainerPage() {
 		super("DiscoveredScannerConfigurationContainerPage"); //$NON-NLS-1$
@@ -112,6 +131,15 @@
 		fDiscoveredContainerList.setViewerSorter(new DiscoveredElementSorter());
 		dirty = false;
 	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#dispose()
+	 */
+	public void dispose() {
+		deregisterActionHandlers();
+		super.dispose();
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.ui.wizards.ICPathContainerPage#initialize(org.eclipse.cdt.core.model.ICProject, org.eclipse.cdt.core.model.IPathEntry[])
 	 */
@@ -289,6 +317,50 @@
 		});
 
 		setControl(composite);
+		
+		fDiscoveredContainerList.selectFirstElement();
+		
+		// Create copy text action
+		Shell shell = fDiscoveredContainerList.getTreeViewer().getControl().getShell();
+		copyTextAction = new CopyTextAction(shell);
+		hookContextMenu();
+		registerActionHandler(shell, copyTextAction);
+	}
+
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+//				if (copyTextAction.canBeApplied(fDiscoveredContainerList.getSelectedElements())) {
+					manager.add(copyTextAction);
+//				}
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(fDiscoveredContainerList.getTreeViewer().getControl());
+		fDiscoveredContainerList.getTreeViewer().getControl().setMenu(menu);
+	}
+
+	private void registerActionHandler(Shell shell, IAction action) {
+		IWorkbench workbench = PlatformUI.getWorkbench();
+		
+		IWorkbenchContextSupport contextSupport = workbench.getContextSupport();
+		IWorkbenchCommandSupport commandSupport = workbench.getCommandSupport();
+		
+		submission = new HandlerSubmission(null, shell, null,
+				CopyTextAction.ACTION_ID, new ActionHandler(action), Priority.MEDIUM);
+		commandSupport.addHandlerSubmission(submission);
+		contextSupport.registerShell(shell, IWorkbenchContextSupport.TYPE_DIALOG);
+	}
+
+	private void deregisterActionHandlers() {
+		IWorkbench workbench = PlatformUI.getWorkbench();
+		
+		IWorkbenchContextSupport contextSupport = workbench.getContextSupport();
+		IWorkbenchCommandSupport commandSupport = workbench.getCommandSupport();
+		
+		commandSupport.removeHandlerSubmission(submission);
+		contextSupport.unregisterShell(fDiscoveredContainerList.getTreeViewer().getControl().getShell());
 	}
 
 	/**
@@ -318,6 +390,9 @@
 		 * @see org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter#selectionChanged(org.eclipse.cdt.internal.ui.wizards.dialogfields.TreeListDialogField)
 		 */
 		public void selectionChanged(TreeListDialogField field) {
+			if (copyTextAction != null) {
+				copyTextAction.canBeApplied(field.getSelectedElements());
+			}
 			containerPageSelectionChanged(field);
 		}
 
@@ -399,10 +474,12 @@
 				dirty |= deleteEntry();
 				break;
 		}
+		if (dirty) {
+			fDiscoveredContainerList.refresh();
+			fDiscoveredContainerList.setFocus();
+		}
 	}
-	/**
-	 * 
-	 */
+
 	private boolean moveUp() {
 		boolean rc = false;
 		List selElements = fDiscoveredContainerList.getSelectedElements();
@@ -425,14 +502,10 @@
 			}
 			parent.setChildren(children);
 		}
-		fDiscoveredContainerList.refresh();
 		fDiscoveredContainerList.postSetSelection(new StructuredSelection(selElements));
-		fDiscoveredContainerList.setFocus();
 		return rc;
 	}
-	/**
-	 * 
-	 */
+
 	private boolean moveDown() {
 		boolean rc = false;
 		List selElements = fDiscoveredContainerList.getSelectedElements();
@@ -457,14 +530,13 @@
 			}
 			parent.setChildren(children);
 		}
-		fDiscoveredContainerList.refresh();
 		fDiscoveredContainerList.postSetSelection(new StructuredSelection(selElements));
-		fDiscoveredContainerList.setFocus();
 		return rc;
 	}
+	
 	/**
-	 * 
-	 * @param remove
+	 * @param action
+	 * @return
 	 */
 	private boolean enableDisableEntry(int action) {
 		boolean rc = false;
@@ -479,13 +551,9 @@
 					rc = true;
 			}
 		}
-		fDiscoveredContainerList.refresh();
-		fDiscoveredContainerList.setFocus();
 		return rc;
 	}
-	/**
-	 * 
-	 */
+
 	private boolean deleteEntry() {
 		boolean rc = false;
 		List newSelection = new ArrayList();
@@ -533,9 +601,7 @@
 				}
 			}
 		}
-		fDiscoveredContainerList.refresh();
 		fDiscoveredContainerList.postSetSelection(new StructuredSelection(newSelection));
-		fDiscoveredContainerList.setFocus();
 		return rc;
 	}
 
@@ -543,15 +609,17 @@
 	 * @param field
 	 */
 	private void containerPageSelectionChanged(TreeListDialogField field) {
-		List selElements = fDiscoveredContainerList.getSelectedElements();
+		List selElements = field.getSelectedElements();
 		fDiscoveredContainerList.enableButton(IDX_UP, canMoveUpDown(selElements, DISC_UP));
 		fDiscoveredContainerList.enableButton(IDX_DOWN, canMoveUpDown(selElements, DISC_DOWN));
 		fDiscoveredContainerList.enableButton(IDX_DISABLE, canRemoveRestore(selElements));
 		fDiscoveredContainerList.enableButton(IDX_ENABLE, canRemoveRestore(selElements));
 		fDiscoveredContainerList.enableButton(IDX_DELETE, canDelete(selElements));
 	}
+
 	/**
 	 * @param selElements
+	 * @param direction
 	 * @return
 	 */
 	private boolean canMoveUpDown(List selElements, int direction) {
@@ -581,6 +649,7 @@
 		}
 		return true;
 	}
+
 	/**
 	 * @param selElements
 	 * @return
@@ -600,6 +669,7 @@
 		}
 		return true;
 	}
+
 	/**
 	 * @param selElements
 	 * @return
@@ -615,5 +685,57 @@
 			}
 		}
 		return true;
+	}
+	
+	/**
+	 * Support for text copy/paste
+	 * 
+	 * @author vhirsl
+	 */
+	public class CopyTextAction extends Action {
+		static final String ACTION_ID = "org.eclipse.ui.edit.copy";	//$NON-NLS-1$
+		private Shell shell;
+		private Clipboard clipboard;
+		private String discoveredEntry = null;
+
+		public CopyTextAction(Shell shell) {
+			super(MakeUIPlugin.getResourceString("CopyDiscoveredPathAction.title")); //$NON-NLS-1$
+			setDescription(MakeUIPlugin.getResourceString("CopyDiscoveredPathAction.description")); //$NON-NLS-1$
+			setToolTipText(MakeUIPlugin.getResourceString("CopyDiscoveredPathAction.tooltip")); //$NON-NLS-1$
+			setActionDefinitionId(ACTION_ID);
+			clipboard = new Clipboard(shell.getDisplay());
+			this.shell = shell;
+		}
+
+		/**
+		 * @param selectedElements
+		 * @return
+		 */
+		boolean canBeApplied(List selElements) {
+			boolean rc = false;
+			if (selElements != null && selElements.size() == 1) {
+				DiscoveredElement elem = (DiscoveredElement) selElements.get(0);
+				switch (elem.getEntryKind()) {
+					case DiscoveredElement.INCLUDE_PATH:
+					case DiscoveredElement.SYMBOL_DEFINITION:
+						discoveredEntry = elem.getEntry();
+						rc = true;
+				}
+			}
+			setEnabled(rc);
+			return rc;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.action.IAction#run()
+		 */
+		public void run() {
+			if (discoveredEntry != null) {
+				// copy to clipboard
+				clipboard.setContents(new Object[] {discoveredEntry}, 
+									  new Transfer[] {TextTransfer.getInstance()});
+				discoveredEntry = null;
+			}
+		}
 	}
 }

Back to the top