/// <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); }
/// <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(); }
/// <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); }
/// <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; }
/// <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(); }