/// <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> /// 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> /// 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> /// Updates the data filter whenever the selected index changed. /// </summary> private void TypeConversionCB_SelectedIndexChanged(object sender, System.EventArgs e) { typeConversionCb_.Enabled = typeConversionSpecifiedCb_.Checked; TsCCpxComplexItem item = null; if (typeConversionSpecifiedCb_.Checked) { item = (TsCCpxComplexItem)typeConversionCb_.SelectedItem; } else { if (mItem_ != null) { item = mItem_.GetRootItem(); } } if (item != null) { dataFilterSpecifiedCb_.Enabled = (item.DataFilterItem != null); dataFilterTb_.Enabled = dataFilterSpecifiedCb_.Enabled && dataFilterSpecifiedCb_.Checked; } }
/// <summary> /// Updates the data filter whenever the selected index changed. /// </summary> private void TypeConversionCB_SelectedIndexChanged(object sender, System.EventArgs e) { TypeConversionCB.Enabled = TypeConversionSpecifiedCB.Checked; TsCCpxComplexItem item = null; if (TypeConversionSpecifiedCB.Checked) { item = (TsCCpxComplexItem)TypeConversionCB.SelectedItem; } else { if (m_item != null) { item = m_item.GetRootItem(); } } if (item != null) { DataFilterSpecifiedCB.Enabled = (item.DataFilterItem != null); DataFilterTB.Enabled = DataFilterSpecifiedCB.Enabled && DataFilterSpecifiedCB.Checked; } }
/// <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; } }