/// <summary> /// Sets the individual listView column widths based on the visibleColumns settings. /// </summary> /// <param name="visibleColumns">SummaryColumnFlags</param> private void UpdateVisibleColumns(SummaryColumnFlags visibleColumns) { Array fieldColumns = Enum.GetValues(typeof(FieldListColumns)); // skip first two (Field Name, Value) and last (Unit). These columns are always displayed. for (int i = 1; i < fieldColumns.GetLength(0) - 1; i++) { FieldListColumns fieldColumnsEnumValue = (FieldListColumns)fieldColumns.GetValue(i); SummaryColumnFlags summaryColumnFlagValue = fieldColumnsEnumValue.GetSummaryFieldColumn(); lvFieldList.Columns[(int)fieldColumnsEnumValue].Width = (visibleColumns.HasFlag(summaryColumnFlagValue) ? DefaultSummaryColumnWidth : 0); } }
private void ResizeSeriesListColumns() { int characterWidth = (int)(lvFieldList.Font.Size * 1.5); Size startingListViewSize = lvFieldList.Size; int[] maxFieldSizes = new int[lvFieldList.Columns.Count]; int totalVisibleColumnWidth = 0; float widthDelta = 0F; foreach (ListViewItem lvi in lvFieldList.Items) { Array fieldColumns = Enum.GetValues(typeof(FieldListColumns)); /* These three columns have minimum sizes, and are never hidden */ int fieldNameColumnIdx = 0; int fieldColumnMinimumCharacters = 5; // Allow room for the warning image int valueColumnIdx = 1; int valueColumnMinimumCharacters = 6; // No header text in this column int unitColumnIdx = lvFieldList.Columns.Count - 1; int unitColumnMinimumCharacters = 5; // Allow room for the warning image maxFieldSizes[fieldNameColumnIdx] = GetMaxWidthForColumn(lvi, fieldNameColumnIdx, fieldColumnMinimumCharacters); maxFieldSizes[valueColumnIdx] = GetMaxWidthForColumn(lvi, valueColumnIdx, valueColumnMinimumCharacters); maxFieldSizes[unitColumnIdx] = GetMaxWidthForColumn(lvi, unitColumnIdx, unitColumnMinimumCharacters); // skip first two (Field Name, Value) and last (Unit). These columns are always displayed. for (int i = 2; i < fieldColumns.GetLength(0) - 1; i++) { FieldListColumns fieldColumnsEnumValue = (FieldListColumns)fieldColumns.GetValue(i); SummaryColumnFlags summaryColumnFlagValue = fieldColumnsEnumValue.GetSummaryFieldColumn(); if (lvFieldList.Columns[(int)fieldColumnsEnumValue].Width > 0) { maxFieldSizes[(int)fieldColumnsEnumValue] = GetMaxWidthForColumn(lvi, (int)fieldColumnsEnumValue, _maxFieldSizes[(int)fieldColumnsEnumValue]); } } } for (int i = 0; i < maxFieldSizes.Length; i++) { if (maxFieldSizes[i] > _maxFieldSizes[i] || lvFieldList.Columns[i].Width != (int)(maxFieldSizes[i] * characterWidth)) { widthDelta += (_maxFieldSizes[i] - maxFieldSizes[i]) * characterWidth; _maxFieldSizes[i] = maxFieldSizes[i]; lvFieldList.Columns[i].Width = (int)(maxFieldSizes[i] * characterWidth); } totalVisibleColumnWidth += lvFieldList.Columns[i].Width; } if (widthDelta != 0) { int scrollBarMargin = 5; // to get rid of scroll bar at bottom of ListView Size newListViewSize = new Size(totalVisibleColumnWidth + scrollBarMargin, lvFieldList.Height); int listViewSizeDelta = newListViewSize.Width - startingListViewSize.Width; splitContainer1.SplitterDistance = totalVisibleColumnWidth + scrollBarMargin; lvFieldList.Size = newListViewSize; if (Parent != null) { Parent.Size = new Size(Parent.Width + listViewSizeDelta, Parent.Height); } } }
/// <summary> /// Updates the value columns in the listview from the selected frame data. /// </summary> /// <param name="frameIdx"></param> private void UpdateSeriesListValues(int frameIdx) { if (!(TelemetryData?.HasValues).GetValueOrDefault(false)) { // default settings - clear out all columns except field name and unit foreach (ILineGraphSeries series in Model.SeriesCollection) { ListViewItem listItem = lvFieldList.Items[series.FieldIndex]; for (int i = 1; i < lvFieldList.Columns.Count - 1; i++) { listItem.SubItems[i].Text = String.Empty; } } } else { // display telemetry values foreach (ILineGraphSeries series in Model.SeriesCollection) { ListViewItem listItem = lvFieldList.Items[series.FieldIndex]; float minWarning = series.ShowMinimumWarning ? series.MinWarning : 0; float maxWarning = series.ShowMaximumWarning ? series.MaxWarning : 0; FrameFieldValues frameFieldValues = GetFrameFieldValues( series.SummaryColumnFlags, _selectedLapIdx, frameIdx, series.FieldIndex, minWarning, maxWarning); if (frameFieldValues.HasValues) { listItem.SubItems[(int)FieldListColumns.Value].Text = frameFieldValues.Value.ToString(series.Format); if (frameFieldValues.MinWarning) { listItem.ImageIndex = MinWarningImageIndex; } else if (frameFieldValues.MaxWarning) { listItem.ImageIndex = MaxWarningImageIndex; } else { listItem.ImageIndex = NoWarningImageIndex; } Array fieldColumns = Enum.GetValues(typeof(FieldListColumns)); for (int i = 2; i < fieldColumns.GetLength(0) - 1; i++) { FieldListColumns fieldColumnsEnumValue = (FieldListColumns)fieldColumns.GetValue(i); SummaryColumnFlags summaryColumnFlagValue = fieldColumnsEnumValue.GetSummaryFieldColumn(); listItem.SubItems[(int)fieldColumnsEnumValue].Text = series.SummaryColumnFlags.HasFlag(summaryColumnFlagValue) ? frameFieldValues.SummaryValues[summaryColumnFlagValue].ToString(series.Format) : MissingSummaryValueDisplay; } } } } ResizeSeriesListColumns(); }