/* * Copyright (c) 2008 Stiftung Deutsches Elektronen-Synchrotron, * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. * * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM */ package org.csstudio.dal.ui.dnd.rfc; import org.csstudio.dal.ui.internal.dnd.ChooseControlSystemPrefixDialog; import org.csstudio.dal.ui.internal.dnd.ProcessVariableAdressDragSourceAdapter; import org.csstudio.dal.ui.internal.dnd.ProcessVariableAdressDropTargetAdapter; import org.csstudio.platform.SimpleDalPluginActivator; import org.csstudio.platform.model.pvs.ControlSystemEnum; import org.csstudio.platform.model.pvs.IProcessVariableAddress; import org.csstudio.platform.model.pvs.IProcessVariableAdressProvider; import org.csstudio.platform.model.pvs.ProcessVariableAdressFactory; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.window.Window; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.preferences.ScopedPreferenceStore; public class ProcessVariableExchangeUtil { public static void addProcessVariableAdressDragSupport(Control control, final int style, IProcessVariableAdressProvider provider) { DragSource dragSource = new DragSource(control, style); Transfer[] types = new Transfer[] { ProcessVariableAddressTransfer.getInstance(), TextTransfer.getInstance() }; dragSource.setTransfer(types); dragSource.addDragListener(new ProcessVariableAdressDragSourceAdapter( provider)); } public static void addProcessVariableAddressDropSupport(Control control, final int style, IProcessVariableAdressReceiver receiver) { addProcessVariableAddressDropSupport(control, style, receiver, new IShowControlSystemDialogStrategy() { @Override public boolean showControlSystem(String rawName) { return true; } }); } public static void addProcessVariableAddressDropSupport(Control control, final int style, IProcessVariableAdressReceiver receiver, IShowControlSystemDialogStrategy showControlSystemDialogStrategy) { assert control != null; assert receiver != null; assert showControlSystemDialogStrategy != null; DropTarget dropTarget = new DropTarget(control, style); Transfer[] transferTypes = new Transfer[] { TextTransfer.getInstance(), ProcessVariableAddressTransfer.getInstance() }; dropTarget.setTransfer(transferTypes); dropTarget.addDropListener(new ProcessVariableAdressDropTargetAdapter( receiver, showControlSystemDialogStrategy)); } public static IProcessVariableAddress parseProcessVariableAdress( String rawName, boolean showControlSystemDialog) { IProcessVariableAddress pv = null; if (ProcessVariableAdressFactory.getInstance() .hasValidControlSystemPrefix(rawName)) { pv = ProcessVariableAdressFactory.getInstance() .createProcessVariableAdress(rawName); } else { if (showControlSystemDialog && ProcessVariableAdressFactory.getInstance() .askForControlSystem()) { ChooseControlSystemPrefixDialog dialog = new ChooseControlSystemPrefixDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getShell()); if (dialog.open() == Window.OK) { // set preferences boolean askAgain = !dialog.dontAskAgain(); getCorePreferenceStore() .setValue(ProcessVariableAdressFactory.PROP_ASK_FOR_CONTROL_SYSTEM, askAgain); SimpleDalPluginActivator.getDefault().savePluginPreferences(); ControlSystemEnum controlSystem = dialog .getSelectedControlSystem(); pv = ProcessVariableAdressFactory .getInstance() .createProcessVariableAdress(rawName, controlSystem); } } else { pv = ProcessVariableAdressFactory.getInstance() .createProcessVariableAdress(rawName); } } return pv; } public static IPreferenceStore getCorePreferenceStore() { return new ScopedPreferenceStore(new InstanceScope(), SimpleDalPluginActivator.getDefault() .getBundle().getSymbolicName()); } }