/// <summary>
        /// Instantiates a new <c>WatchControl</c> derived user control and configures the properties for each element of <paramref name="watchControls"/> based upon the 
        /// watch variables specified by <paramref name="oldIdentifierList"/>. Each user control is then added to the <c>Controls</c> property of <paramref name="panel"/>.
        /// </summary>
        /// <remarks>The length of the array should be equal to the count value associated with the list.</remarks>
        /// <param name="watchControls">The array of watch variable user controls that are to be configured.</param>
        /// <param name="panel">Reference to the <c>Panel</c> to which the user controls are to be added.</param>
        /// <param name="watchControlSize">The structure defining the size related parameters of the user control, <see cref="VariableControlSize_t"/>.</param>
        /// <param name="oldIdentifierList">The list of watch variable old identifiers.</param>
        /// <exception cref="ArgumentException">Thrown if the number of watch identifier entries in the list is incompatible with the length of the user control array.</exception>
        public void ConfigureWatchControls(WatchControl[] watchControls, Panel panel, VariableControlSize_t watchControlSize, List<short> oldIdentifierList)
        {
            // Skip, if the Dispose() method has been called.
            if (m_IsDisposed)
            {
                return;
            }

            Debug.Assert(oldIdentifierList.Count == watchControls.Length);

            // Work out the spacing between consecutive lines.
            int rowSpacing = watchControlSize.Size.Height + watchControlSize.Margin.Vertical;

            // Initialize the user controls.
            short oldIdentifier;
            WatchVariable watchVariable;
            for (int rowIndex = 0; rowIndex < oldIdentifierList.Count; rowIndex++)
            {
                oldIdentifier = oldIdentifierList[rowIndex];
                try
                {
                    watchVariable = Lookup.WatchVariableTableByOldIdentifier.Items[oldIdentifier];
                    if (watchVariable == null)
                    {
                        // The specified watch variable is not defined in the current data dictionary therefore display an empty user control showing the 'not-defined' text.
                        watchControls[rowIndex] = new WatchControl();
                    }
                    else
                    {
                        switch (watchVariable.VariableType)
                        {
                            case VariableType.Scalar:
                                watchControls[rowIndex] = new WatchScalarControl();
                                break;
                            case VariableType.Enumerator:
                                watchControls[rowIndex] = new WatchEnumeratorControl();
                                break;
                            case VariableType.Bitmask:
                                watchControls[rowIndex] = new WatchBitmaskControl();
                                break;
                            default:
                                break;
                        }
                    }
                }
                catch (Exception)
                {
                    watchVariable = null;

                    // The specified watch variable is not defined in the current data dictionary therefore display an empty user control showing the 'not-defined' text.
                    watchControls[rowIndex] = new WatchControl();
                }

                watchControls[rowIndex].WidthVariableNameField = watchControlSize.WidthVariableNameField;
                watchControls[rowIndex].WidthValueField = watchControlSize.WidthValueField;
                watchControls[rowIndex].WidthUnitsField = watchControlSize.WidthUnitsField;

                watchControls[rowIndex].ClientForm = m_Form;
                watchControls[rowIndex].TabIndex = m_TabIndex;
                watchControls[rowIndex].Location = new System.Drawing.Point(watchControlSize.Margin.Left, (rowIndex + 1) * rowSpacing);

                watchControls[rowIndex].ForeColorValueFieldZero = Color.ForestGreen;
                watchControls[rowIndex].ForeColorValueFieldNonZero = Color.ForestGreen;

                watchControls[rowIndex].Identifier = oldIdentifier;

                if (watchVariable == null)
                {
                    watchControls[rowIndex].AttributeFlags = AttributeFlags.PTUD_NOTUSED;
                }
                else
                {
                    watchControls[rowIndex].AttributeFlags = (AttributeFlags)watchVariable.AttributeFlags;
                }

                watchControls[rowIndex].Value = 0;

                // Add the user control to the specified panel.
                panel.Controls.Add(watchControls[rowIndex]);
            }
        }
        /// <summary>
        /// Writes the specified header text to the specified panel.
        /// </summary>
        /// <remarks>If <paramref name="headerText"/> is <c>null</c> or an empty string no headers are added.</remarks>
        /// <param name="headerText">The header text.</param>
        /// <param name="panel">Reference to the panel to which the header text is to be added.</param>
        /// <param name="watchControlSize">The structure defining the size related parameters of the label, <see cref="VariableControlSize_t"/>.</param>
        public void WriteColumnHeaders(string headerText, Panel panel, VariableControlSize_t watchControlSize)
        {
            // Skip, if the Dispose() method has been called.
            if (m_IsDisposed)
            {
                return;
            }

            if ((headerText == string.Empty) || (headerText == null) || (panel == null))
            {
                return;
            }

            Label lblColumnHeader = new Label();
            lblColumnHeader.Text = headerText;
            lblColumnHeader.Size = watchControlSize.Size;
            lblColumnHeader.BackColor = Color.LightSteelBlue;
            lblColumnHeader.TextAlign = ContentAlignment.MiddleLeft;
            lblColumnHeader.Location = new System.Drawing.Point(watchControlSize.Margin.Left, 0);

            // Add the Label to the display panel.
            panel.Controls.Add(lblColumnHeader);
        }
Beispiel #3
0
        /// <summary>
        /// Configure the watch user controls required to display the specified <paramref name="workset"/> and then add these to the specified 
        /// <paramref name="displayPanel"/>.
        /// </summary>
        /// <param name="workset">The workset that is to be used to configure the watch user controls.</param>
        /// <param name="displayPanel">The <c>Panel</c> to which the configured watch user controls are to be added.</param>
        /// <param name="watchControlSize">The size to make each watch user control.</param>
        /// <remarks>This method uses the <c>UserControl</c> class to: (a) layout and initialize all of the controls required to display the watch variables 
        /// associated with the specified worset and (b) add these to the tabpage/panel associated with the display.
        /// </remarks>
        protected void ConfigureDisplayPanel(Workset_t workset, Panel displayPanel, VariableControlSize_t watchControlSize)
        {
            // Skip, if the Dispose() method has been called.
            if (IsDisposed)
            {
                return;
            }

            // Clear the panel to which the controls are to be added.
            displayPanel.Hide();
            displayPanel.Controls.Clear();

            // Instantiate the watch control jagged array.
            m_WatchControls = new WatchControl[workset.Column.Length][];
            for (int columnIndex = 0; columnIndex < workset.Column.Length; columnIndex++)
            {
                m_WatchControls[columnIndex] = new WatchControl[workset.Column[columnIndex].OldIdentifierList.Count];
            }

            // Create a separate panel for each display column.
            Panel[] panelColumn = new Panel[workset.Column.Length];
            for (int columnIndex = 0; columnIndex < workset.Column.Length; columnIndex++)
            {
                panelColumn[columnIndex] = new Panel();
                panelColumn[columnIndex].AutoSize = true;
                panelColumn[columnIndex].Location = new Point(columnIndex * (watchControlSize.Size.Width + watchControlSize.Margin.Horizontal), 0);
                m_WatchControlLayout.WriteColumnHeaders(workset.Column[columnIndex].HeaderText, panelColumn[columnIndex], watchControlSize);
                m_WatchControlLayout.ConfigureWatchControls(m_WatchControls[columnIndex], panelColumn[columnIndex], watchControlSize,
                                                            workset.Column[columnIndex].OldIdentifierList);

                // Do not add the panel to the controls associated with the 'displayPanel' parameter if the last column of the workset does not contain any watch
                // variables AND no header text is defined. This ensures that the horizontal scroll bar is not displayed.
                if ((columnIndex == workset.Column.Length - 1) &&
                    (workset.Column[columnIndex].OldIdentifierList.Count == 0) &&
                    (workset.Column[columnIndex].HeaderText.Equals(string.Empty)))
                {
                    break;
                }
                else
                {
                    displayPanel.Controls.Add(panelColumn[columnIndex]);
                }
            }
            displayPanel.Show();
        }
Beispiel #4
0
        /// <summary>
        /// Form to view the watch variables in real time.
        /// </summary>
        public FormWatch(Workset_t workset) 
        {
            InitializeComponent();

            m_Workset = workset;

            #region - [WatchControlSize Definitions] -
            m_WatchControlSize = new VariableControlSize_t();
            m_WatchControlSize.Margin.Left = WatchControlLayout.MarginLeftWatchControl;
            m_WatchControlSize.Margin.Right = WatchControlLayout.MarginRightWatchControl;
            m_WatchControlSize.Margin.Top = WatchControlLayout.MarginTopWatchControl;
            m_WatchControlSize.Margin.Bottom = WatchControlLayout.MarginBottomWatchControl;
            m_WatchControlSize.WidthVariableNameField = WatchControlLayout.WidthWatchControlVariableNameField;
            m_WatchControlSize.WidthValueField = WatchControlLayout.WidthWatchControlValueField;
            m_WatchControlSize.WidthUnitsField = WatchControlLayout.WidthWatchControlUnitsField;
            m_WatchControlSize.Height = WatchControlLayout.HeightWatchControl;
            #endregion - [WatchControlSize Definitions] -

            // Instantiate the class that helps manage the user controls.
            m_WatchControlLayout = new WatchControlLayout(this);

            ConfigureDisplayPanel(m_Workset, m_TabPage1, m_WatchControlSize);
        }
Beispiel #5
0
        /// <summary>
        /// Initialize a new instance of the class. Intialize the size of the various components, set-up the function keys and initialize the list of event records.
        /// </summary>
        public FormOpenEventLog(EventLogFile_t eventLogFile)
        {
            InitializeComponent();

            m_MutexDataGridView = new Mutex();
            m_MutexEventCount = new Mutex();

            #region - [DataGridView] -
            // Ensure that the DataGridView is set up before performing a sort.
            m_DataGridViewEventLog.Columns[ColumnIndexCarIdentifier].Visible = true;
            m_DataGridViewEventLog.Columns[ColumnIndexLog].Visible = (Parameter.ShowLogName) ? true : false;
            #endregion - [DataGridView] -

            EventLogFile = eventLogFile;
            EventRecordList = EventLogFile.EventRecordList;

            // Sort the list of events, most recent event first. This ensures that the first row of the DataGridView is selected when the event log is first shown.
            EventRecordList.Sort(CompareByDateTimeDescending);

            #region - [Size Definitions] -
            m_EventVariableControlSize = new VariableControlSize_t();
            m_EventVariableControlSize.Margin.Left = MarginLeftEventControl;
            m_EventVariableControlSize.Margin.Right = MarginRightEventControl;
            m_EventVariableControlSize.Margin.Top = MarginTopEventControl;
            m_EventVariableControlSize.Margin.Bottom = MarginBottomEventControl;
            m_EventVariableControlSize.WidthVariableNameField = WidthEventControlVariableNameField;
            m_EventVariableControlSize.WidthValueField = WidthEventControlValueField;
            m_EventVariableControlSize.WidthUnitsField = WidthEventControlUnitsField;
            m_EventVariableControlSize.Height = HeightEventControl;
            #endregion - [Size Definitions] -

            #region - [Function Keys] -
            DisplayFunctionKey(F3, Resources.FunctionKeyTextSave, Resources.FunctionKeyToolTipSaveEventLogs, Resources.Save);
            F3.Enabled = false;
            DisplayFunctionKey(F4, Resources.FunctionKeyTextLoad, Resources.FunctionKeyToolTipLoad, Resources.FolderOpen);
            DisplayFunctionKey(F12, Resources.FunctionKeyTextInfo, Resources.FunctionKeyToolTipInfo, Resources.FileInformation);
            #endregion - [Function Keys] -

            // InformationLabel 1  - Event Count
            DisplayLabel(InformationLabel1, Resources.InformationLegendEventCount, Color.FromKnownColor(KnownColor.Info));

            #region - [Titles] -
            Text = string.Format(Resources.TitleOpenEventLog, EventLogFile.Filename);
            m_TabPage1.Text = string.Empty;
            #endregion - [Titles] -

            m_CommonEventVariableCount = Lookup.EventTable.CommonEventVariableCount;
        }
Beispiel #6
0
        /// <summary>
        /// Configure the watch user controls required to display the specified <paramref name="workset"/> and then add these to the specified 
        /// <paramref name="displayPanel"/>.
        /// </summary>
        /// <param name="workset">The workset that is to be used to configure the watch user controls.</param>
        /// <param name="displayPanel">The <c>Panel</c> to which the configured watch user controls are to be added.</param>
        /// <param name="watchControlSize">The size to make each watch user control.</param>
        /// <remarks>This method uses the <c>UserControl</c> class to: (a) layout and initialize all of the controls required to display the watch variables 
        /// associated with the specified worset and (b) add these to the tabpage/panel associated with the display.
        /// </remarks>
        protected void ConfigureDisplayPanel(Workset_t workset, Panel displayPanel, VariableControlSize_t watchControlSize)
        {
            // Skip, if the Dispose() method has been called.
            if (IsDisposed)
            {
                return;
            }

            // Clear the panel to which the controls are to be added.
            displayPanel.Hide();
            displayPanel.Controls.Clear();

            // Instantiate the watch control jagged array.
            m_WatchControls = new WatchControl[workset.Column.Length][];
            for (int columnIndex = 0; columnIndex < workset.Column.Length; columnIndex++)
            {
                m_WatchControls[columnIndex] = new WatchControl[workset.Column[columnIndex].OldIdentifierList.Count];
            }

            // Create a separate panel for each display column.
            Panel[] panelColumn = new Panel[workset.Column.Length];
            for (int columnIndex = 0; columnIndex < workset.Column.Length; columnIndex++)
            {
                panelColumn[columnIndex] = new Panel();
                panelColumn[columnIndex].AutoSize = true;
                panelColumn[columnIndex].Location = new Point(columnIndex * (watchControlSize.Size.Width + watchControlSize.Margin.Horizontal), 0);
                m_WatchControlLayout.WriteColumnHeaders(workset.Column[columnIndex].HeaderText, panelColumn[columnIndex], watchControlSize);
                m_WatchControlLayout.ConfigureWatchControls(m_WatchControls[columnIndex], panelColumn[columnIndex], watchControlSize,
                                                            workset.Column[columnIndex].OldIdentifierList);
                displayPanel.Controls.Add(panelColumn[columnIndex]);
            }
            displayPanel.Show();
        }