/// <summary> /// Shows a detailed view for array values. /// </summary> private void ViewMI_Click(object sender, System.EventArgs e) { if (ItemListLV.SelectedItems.Count > 0) { object tag = ItemListLV.SelectedItems[0].Tag; if (tag != null && tag.GetType() == typeof(TsCDaItemValueResult)) { TsCDaItemValueResult item = (TsCDaItemValueResult)tag; if (item.Value != null) { TsCCpxComplexItem complexItem = TsCCpxComplexTypeCache.GetComplexItem(item); if (complexItem != null) { new EditComplexValueDlg().ShowDialog(complexItem, item.Value, true, true); } else if (item.Value.GetType().IsArray) { new EditArrayDlg().ShowDialog(item.Value, true); } } } } }
/// <summary> /// Shows a detailed view for array values. /// </summary> private void ViewMI_Click(object sender, System.EventArgs e) { if (propertiesLv_.SelectedItems.Count > 0) { object tag = propertiesLv_.SelectedItems[0].Tag; if (tag != null && tag.GetType() == typeof(TsCDaItemProperty)) { TsCDaItemProperty property = (TsCDaItemProperty)tag; if (property.Value != null) { if (property.ID == TsDaProperty.VALUE) { TsCCpxComplexItem complexItem = TsCCpxComplexTypeCache.GetComplexItem(mElement_); if (complexItem != null) { new EditComplexValueDlg().ShowDialog(complexItem, property.Value, true, true); } } else if (property.Value.GetType().IsArray) { new EditArrayDlg().ShowDialog(property.Value, true); } } } } }
/// <summary> /// Updates the state of context menus based on the current selection. /// </summary> private void BrowseTV_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { // ignore left button actions. if (e.Button != MouseButtons.Right) { return; } // selects the item that was right clicked on. TreeNode clickedNode = BrowseTV.GetNodeAt(e.X, e.Y); // no item clicked on - do nothing. if (clickedNode == null) { return; } // force selection to clicked node. BrowseTV.SelectedNode = clickedNode; // disable everything. PickMI.Enabled = false; EditFiltersMI.Enabled = false; RefreshMI.Enabled = false; SetLoginMI.Enabled = false; ConnectMI.Enabled = false; DisconnectMI.Enabled = false; ViewComplexTypeMI.Enabled = false; if (clickedNode == m_localNetwork || IsHostNode(clickedNode)) { RefreshMI.Enabled = true; SetLoginMI.Enabled = true; return; } if (IsServerNode(clickedNode)) { PickMI.Enabled = true; ConnectMI.Enabled = !((TsCDaServer)clickedNode.Tag).IsConnected; DisconnectMI.Enabled = ((TsCDaServer)clickedNode.Tag).IsConnected; EditFiltersMI.Enabled = true; RefreshMI.Enabled = true; return; } if (IsBrowseElementNode(clickedNode)) { PickMI.Enabled = true; EditFiltersMI.Enabled = true; RefreshMI.Enabled = true; ViewComplexTypeMI.Enabled = (TsCCpxComplexTypeCache.GetComplexItem((TsCDaBrowseElement)clickedNode.Tag) != null); return; } }
/// <summary> /// Displays a dialog with the complex type information. /// </summary> private void ViewComplexType(TreeNode node) { if (!IsBrowseElementNode(node)) { return; } try { TsCCpxComplexItem complexItem = TsCCpxComplexTypeCache.GetComplexItem((TsCDaBrowseElement)node.Tag); if (complexItem != null) { new EditComplexValueDlg().ShowDialog(complexItem, null, true, true); } } catch (Exception e) { MessageBox.Show(e.Message); } }
/// <summary> /// Called when the edit array button is clicked. /// </summary> private void EditBTN_Click(object sender, System.EventArgs e) { try { object value = null; TsCCpxComplexItem complexItem = TsCCpxComplexTypeCache.GetComplexItem(m_itemID); if (complexItem != null) { value = new EditComplexValueDlg().ShowDialog(complexItem, m_value, m_readOnly, true); } else if (m_value.GetType().IsArray) { value = new EditArrayDlg().ShowDialog(m_value, m_readOnly); } if (m_readOnly || value == null) { return; } // update the array. Set(value, m_readOnly); // send change notification. if (ValueChanged != null) { ValueChanged(this, m_value); } } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Shows a detailed view for array values. /// </summary> private void ViewMI_Click(object sender, System.EventArgs e) { if (ItemListLV.SelectedItems.Count > 0) { ListViewItem listItem = ItemListLV.SelectedItems[0]; object tag = listItem.Tag; if (tag != null && tag.GetType() == typeof(TsCDaItemValueResult)) { TsCDaItemValueResult item = (TsCDaItemValueResult)tag; if (item.Value != null) { TsCCpxComplexItem complexItem = TsCCpxComplexTypeCache.GetComplexItem(item); if (complexItem != null) { EditComplexValueDlg dialog = (EditComplexValueDlg)m_viewers[listItem]; if (dialog == null) { m_viewers[listItem] = dialog = new EditComplexValueDlg(); dialog.Disposed += new EventHandler(OnViewerClosed); } dialog.ShowDialog(complexItem, item.Value, true, false); } else if (item.Value.GetType().IsArray) { new EditArrayDlg().ShowDialog(item.Value, true); } } } } }
/// <summary> /// Enables/disables items in the popup menu before it is displayed. /// </summary> private void ItemListLV_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { // ignore left button actions. if (e.Button != MouseButtons.Right) { return; } // disable everything. ViewMI.Enabled = false; // selects the item that was right clicked on. ListViewItem clickedItem = ItemListLV.GetItemAt(e.X, e.Y); // no item clicked on - do nothing. if (clickedItem == null) { return; } // force selection to clicked node. clickedItem.Selected = true; if (ItemListLV.SelectedItems.Count == 1) { if (clickedItem.Tag != null && clickedItem.Tag.GetType() == typeof(TsCDaItemValueResult)) { TsCDaItemValueResult item = (TsCDaItemValueResult)clickedItem.Tag; if (item.Value != null) { ViewMI.Enabled = ((TsCCpxComplexTypeCache.GetComplexItem(item) != null) || (item.Value.GetType().IsArray)); } } } }
/// <summary> /// Displays the dialog with the specified complex item. /// </summary> public object ShowDialog(TsCCpxComplexItem item, object rawValue, bool readOnly, bool modal) { if (item == null) { throw new ArgumentNullException("item"); } try { m_readOnly = readOnly; m_item = item; m_rawValue = rawValue; // fetch complex type information for the item. string dictionary = TsCCpxComplexTypeCache.GetTypeDictionary(item); if (dictionary == null) { return(null); } // initialize dialog controls. TypeTV.Nodes.Clear(); FieldsLV.Items.Clear(); RawTB.Text = null; // display the dictionary and type description. TypeDictionaryTB.Text = FormatXml(dictionary); TypeDescriptionTB.Text = FormatXml(TsCCpxComplexTypeCache.GetTypeDescription(item)); if (rawValue == null) { ViewMI_Click(TypeDictionaryMI, null); } else { // parse binary value. if (rawValue.GetType() == typeof(byte[])) { m_binaryValue = new BinaryValue(); try { m_complexValue = m_binaryValue.Init(rawValue, dictionary, item.TypeID); } catch (Exception e) { MessageBox.Show(e.Message); m_complexValue = null; } } else { m_binaryValue = null; m_complexValue = null; } UpdateView(); if (TypeTV.SelectedNode != null) { TypeTV.SelectedNode = TypeTV.Nodes[0]; TypeTV.SelectedNode.Expand(); ViewMI_Click(FormattedMI, null); } else { ViewMI_Click(RawMI, null); } } if (modal) { // show dialog. if (ShowDialog() != DialogResult.OK) { return(null); } return(m_rawValue); } // display non-model window. Show(); return(null); } catch (Exception e) { MessageBox.Show(e.Message); return(null); } }
/// <summary> /// Updates the complex data properties affected by the item. /// </summary> private void GetComplexItem(OpcItem itemId) { if (mItem_ == null) { return; } TsCCpxComplexItem item = mItem_; // clear any existing data filter. if (!dataFilterSpecifiedCb_.Checked || !dataFilterSpecifiedCb_.Enabled || dataFilterTb_.Text == "") { if (mItem_.UnfilteredItemID != null) { mItem_.UpdateDataFilter(TsCCpxComplexTypeCache.Server, ""); if (mItem_.UnconvertedItemID != null) { item = TsCCpxComplexTypeCache.GetComplexItem(mItem_.UnconvertedItemID); } else { item = TsCCpxComplexTypeCache.GetComplexItem(mItem_.UnfilteredItemID); } } } // clear any existing type conversion. if (!typeConversionSpecifiedCb_.Checked || typeConversionCb_.SelectedItem == null) { // check if type conversion removed. if (mItem_.UnconvertedItemID != null) { item = TsCCpxComplexTypeCache.GetComplexItem(mItem_.UnconvertedItemID); } } else { // check if the type conversion changed. TsCCpxComplexItem conversion = (TsCCpxComplexItem)typeConversionCb_.SelectedItem; if (conversion.Key != item.Key) { if (item.UnfilteredItemID == null || conversion.Key != item.UnfilteredItemID.Key) { item = conversion; } } } // apply the new filter value. if (dataFilterSpecifiedCb_.Checked && dataFilterSpecifiedCb_.Enabled && dataFilterTb_.Text != "") { // update an existing data filter. if (item.UnfilteredItemID != null) { item.UpdateDataFilter(TsCCpxComplexTypeCache.Server, dataFilterTb_.Text); } else { // get the existing data filters. TsCCpxComplexItem[] filters = item.GetDataFilters(TsCCpxComplexTypeCache.Server); // assign a unique filter name. int ii = 0; string filterName = null; do { filterName = String.Format("Filter{0:00}", ii++); foreach (TsCCpxComplexItem filter in filters) { if (filter.Name == filterName) { filterName = null; break; } } }while (filterName == null); // create the filter. item = item.CreateDataFilter(TsCCpxComplexTypeCache.Server, filterName, dataFilterTb_.Text); } } // update the item id. if (item != null) { itemId.ItemPath = item.ItemPath; itemId.ItemName = item.ItemName; } }
/// <summary> /// Initializes the control with information specified to a complex item. /// </summary> private void SetComplexItem(OpcItem itemId) { mItem_ = TsCCpxComplexTypeCache.GetComplexItem(itemId); // do nothing for items that are not complex. if (mItem_ == null) { reqTypePn_.Visible = true; complexItemPn_.Visible = false; return; } // display complex item controls. reqTypePn_.Visible = false; complexItemPn_.Visible = true; // initialize controls. typeConversionCb_.Items.Clear(); typeConversionCb_.Text = null; typeConversionSpecifiedCb_.Checked = false; dataFilterTb_.Text = null; dataFilterSpecifiedCb_.Checked = false; // fetch the available type conversions. Technosoftware.DaAeHdaClient.Cpx.TsCCpxComplexItem[] conversions = mItem_.GetRootItem().GetTypeConversions(TsCCpxComplexTypeCache.Server); // no conversions available. if (conversions == null || conversions.Length == 0) { typeConversionSpecifiedCb_.Enabled = false; } // populate conversions drop down menu. else { Technosoftware.DaAeHdaClient.Cpx.TsCCpxComplexItem item = mItem_; if (item.UnfilteredItemID != null) { item = TsCCpxComplexTypeCache.GetComplexItem(item.UnfilteredItemID); } foreach (TsCCpxComplexItem conversion in conversions) { typeConversionCb_.Items.Add(conversion); if (conversion.Key == item.Key) { typeConversionCb_.SelectedItem = conversion; typeConversionSpecifiedCb_.Checked = true; } } if (typeConversionCb_.SelectedItem == null) { typeConversionCb_.SelectedIndex = 0; } } // display the active data filter. if (mItem_.UnfilteredItemID != null) { dataFilterTb_.Text = mItem_.DataFilterValue; dataFilterSpecifiedCb_.Checked = true; } }
/// <summary> /// Initializes the control with information specified to a complex item. /// </summary> private void SetComplexItem(OpcItem itemID) { m_item = TsCCpxComplexTypeCache.GetComplexItem(itemID); // do nothing for items that are not complex. if (m_item == null) { ReqTypePN.Visible = true; ComplexItemPN.Visible = false; return; } // display complex item controls. ReqTypePN.Visible = false; ComplexItemPN.Visible = true; // initialize controls. TypeConversionCB.Items.Clear(); TypeConversionCB.Text = null; TypeConversionSpecifiedCB.Checked = false; DataFilterTB.Text = null; DataFilterSpecifiedCB.Checked = false; // fetch the available type conversions. OpcClientSdk.Cpx.TsCCpxComplexItem[] conversions = m_item.GetRootItem().GetTypeConversions(TsCCpxComplexTypeCache.Server); // no conversions available. if (conversions == null || conversions.Length == 0) { TypeConversionSpecifiedCB.Enabled = false; } // populate conversions drop down menu. else { OpcClientSdk.Cpx.TsCCpxComplexItem item = m_item; if (item.UnfilteredItemID != null) { item = TsCCpxComplexTypeCache.GetComplexItem(item.UnfilteredItemID); } foreach (TsCCpxComplexItem conversion in conversions) { TypeConversionCB.Items.Add(conversion); if (conversion.Key == item.Key) { TypeConversionCB.SelectedItem = conversion; TypeConversionSpecifiedCB.Checked = true; } } if (TypeConversionCB.SelectedItem == null) { TypeConversionCB.SelectedIndex = 0; } } // display the active data filter. if (m_item.UnfilteredItemID != null) { DataFilterTB.Text = m_item.DataFilterValue; DataFilterSpecifiedCB.Checked = true; } }