Example #1
0
        /// <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);
                        }
                    }
                }
            }
        }
Example #2
0
        /// <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);
            }
        }
Example #4
0
        /// <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;
            }
        }