From: <cs-...@li...> - 2012-01-31 21:18:12
|
details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgrepo/c/cs/cs-studio/cs-studio/rev/2b8434b6fb98 changeset: 13793:2b8434b6fb98 user: xihui <ch...@or...> date: Tue Jan 31 16:10:13 2012 -0500 description: csdata.clipboard: Copy PV name to Clip board: popup an error dialog if PV name is empty instead of throwing an exception. details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgrepo/c/cs/cs-studio/cs-studio/rev/9456c08d0c92 changeset: 13794:9456c08d0c92 user: xihui <ch...@or...> date: Tue Jan 31 16:15:47 2012 -0500 description: BOY: Adapt widget as PV array provider also. diffstat: applications/plugins/org.csstudio.csdata.clipboard/src/org/csstudio/csdata/clipboard/CopyPvToClipboard.java | 8 +++- applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/AbstractPVWidgetEditPart.java | 19 +++++++++- applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/PVWidgetAdapterFactory.java | 18 +++++++- 3 files changed, 40 insertions(+), 5 deletions(-) diffs (100 lines): diff -r 72d66f553890 -r 9456c08d0c92 applications/plugins/org.csstudio.csdata.clipboard/src/org/csstudio/csdata/clipboard/CopyPvToClipboard.java --- a/applications/plugins/org.csstudio.csdata.clipboard/src/org/csstudio/csdata/clipboard/CopyPvToClipboard.java Tue Jan 31 15:42:12 2012 -0500 +++ b/applications/plugins/org.csstudio.csdata.clipboard/src/org/csstudio/csdata/clipboard/CopyPvToClipboard.java Tue Jan 31 16:15:47 2012 -0500 @@ -12,6 +12,7 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; @@ -32,7 +33,7 @@ { final ISelection selection = HandlerUtil.getActiveMenuSelection(event); final ProcessVariable[] pv_names = AdapterUtil.convert(selection, ProcessVariable.class); - + // Create string with "PV" or "PV1, PV2, PV3" final StringBuilder pvs = new StringBuilder(); for (ProcessVariable pv : pv_names) @@ -41,6 +42,11 @@ pvs.append(", "); pvs.append(pv.getName()); } + + if(pvs.length() ==0){ + MessageDialog.openError(null, "Empty PV Name", "PV name is empty! Nothing will be copied."); + return null; + } // Copy as text to clipboard final Clipboard clipboard = new Clipboard( diff -r 72d66f553890 -r 9456c08d0c92 applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/AbstractPVWidgetEditPart.java --- a/applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/AbstractPVWidgetEditPart.java Tue Jan 31 15:42:12 2012 -0500 +++ b/applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/AbstractPVWidgetEditPart.java Tue Jan 31 16:15:47 2012 -0500 @@ -276,13 +276,30 @@ return pvMap.get(controlPVPropId); return null; } + /** + * @return the first PV name. + */ public String getName() { if(getWidgetModel().getPVMap().isEmpty()) - return ""; + return ""; //$NON-NLS-1$ return (String)((StringProperty)getWidgetModel().getPVMap().keySet().toArray()[0]) .getPropertyValue(); } + /** + * @return A String array with all PV names from PV properties. + */ + public String[] getAllPVNames(){ + if(getWidgetModel().getPVMap().isEmpty()) + return new String[]{""}; //$NON-NLS-1$ + String[] result = new String[getWidgetModel().getPVMap().size()]; + int i=0; + for(StringProperty sp : getWidgetModel().getPVMap().keySet()){ + result[i++] = (String) sp.getPropertyValue(); + } + return result; + } + /**Get the PV corresponding to the <code>PV Name</code> property. * It is same as calling <code>getPV("pv_name")</code>. * @return the PV corresponding to the <code>PV Name</code> property. diff -r 72d66f553890 -r 9456c08d0c92 applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/PVWidgetAdapterFactory.java --- a/applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/PVWidgetAdapterFactory.java Tue Jan 31 15:42:12 2012 -0500 +++ b/applications/plugins/org.csstudio.opibuilder/src/org/csstudio/opibuilder/editparts/PVWidgetAdapterFactory.java Tue Jan 31 16:15:47 2012 -0500 @@ -10,14 +10,26 @@ public class PVWidgetAdapterFactory implements IAdapterFactory { public Object getAdapter(Object adaptableObject, @SuppressWarnings("rawtypes") Class adapterType) { - if(adapterType == ProcessVariable.class && adaptableObject instanceof AbstractPVWidgetEditPart){ - return new ProcessVariable(((AbstractPVWidgetEditPart)adaptableObject).getName()); + if(adaptableObject instanceof AbstractPVWidgetEditPart){ + if (adapterType == ProcessVariable.class) { + return new ProcessVariable(((AbstractPVWidgetEditPart) adaptableObject).getName()); + }else if(adapterType == ProcessVariable[].class) { + String[] allPVNames = ((AbstractPVWidgetEditPart) adaptableObject) + .getAllPVNames(); + ProcessVariable[] pvs = new ProcessVariable[allPVNames.length]; + int i = 0; + for (String s : allPVNames) { + pvs[i++] = new ProcessVariable(s); + } + return pvs; + } + } return null; } public Class<?>[] getAdapterList() { - return new Class<?>[] { ProcessVariable.class }; + return new Class<?>[] { ProcessVariable.class, ProcessVariable[].class }; } } |