private void CapabilityListControl_OnEdit()
 {
     if (SelectedItems.Count > 0)
     {
         ListViewItem lvi = SelectedItems[0];
         object obj = lvi.Tag;
         if (obj is Capability)
         {
             var capability = obj as Capability;
             object dataObject = GetDataObject();
             if (dataObject != null)
             {
                 var form = new CapabilityForm(dataObject);
                 form.Capability = capability;
                 form.Closed += form_Closed;
                 form.CloseOnSave = true;
                 form.Show();
             }
         }
         else if (obj is DocumentReference)
         {
             var reference = obj as DocumentReference;
             var form = new CapabilityReferenceForm();
             form.InstrumentDescription = _instrumentDescription;
             form.DocumentReference = reference;
             form.Closed += form_Closed;
             form.Show();
         }
     }
 }
        private void lvCapabilities_DragDrop(object sender, DragEventArgs de)
        {
            if (de.Data.GetDataPresent(DataFormats.Text))
            {
                TSFType tsf = TSFType.Deserialize((string) de.Data.GetData(DataFormats.Text));
                var capability = new Capability();
                capability.name = tsf.name;
                object item = tsf.model.Item;
                if (item is Signal)
                {
                    var signal = (Signal) item;
                    XmlElement elm = XmlUtils.Object2XmlElement(item);
                    capability.SignalDescription = new Extension();
                    if (capability.SignalDescription.Any == null)
                        capability.SignalDescription.Any = new List<XmlElement>();
                    capability.SignalDescription.Any.Add(elm);
                    capability.Interface = new Interface();

                    if (signal.In != null)
                    {
                        String[] ins = signal.In.Split(' ');
                        foreach (String i in ins)
                        {
                            var p = new Port();
                            p.name = i;
                            p.direction = PortDirection.Input;
                            p.directionSpecified = true;
                            capability.Interface.Ports.Add(p);
                        }
                    }
                    if (signal.Out != null)
                    {
                        String[] outs = signal.Out.Split(' ');
                        foreach (String o in outs)
                        {
                            var p = new Port();
                            p.name = o;
                            p.direction = PortDirection.Output;
                            p.directionSpecified = true;
                            if (capability.Interface.Ports == null)
                                capability.Interface.Ports = new List<Port>();
                            capability.Interface.Ports.Add(p);
                        }
                    }

                    var form = new CapabilityForm(_instrumentDescription);
                    form.Capability = capability;
                    if (DialogResult.OK == form.ShowDialog())
                    {
                        String reference = EMPTYCHAR;
                        String uuid = EMPTYCHAR;
                        capability = form.Capability;
                        _capabilityItems.Add(capability);
                        var lvi = new ListViewItem(reference);
                        lvi.SubItems.Add(capability.name);
                        lvi.SubItems.Add(uuid);
                        lvi.Tag = capability;
                        Items.Add(lvi);
                    }
                }
            }
        }
        private void CapabilityListControl_OnAdd()
        {
            object data = GetDataObject();

            if (data != null)
            {
                var form = new CapabilityForm(data);
                form.Closed += add_form_closed;
                form.CloseOnSave = true;
                form.Show();
            }
        }