This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
---
source_files:
- Common/DTS.CommonCore/Interface/DTS.Viewer/ChartOptions/IChartOptionsView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ChartOptions/IChartOptionsViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ChartOptions/IChartOptionsModel.cs
generated_at: "2026-04-16T02:34:12.071463+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "a0d576d041a71e53"
---
# ChartOptions
## Documentation Page: Chart Options Module
### 1. Purpose
This module defines the core interfaces for the chart options UI layer in the DTS Viewer subsystem. It establishes the MVVM (Model-View-ViewModel) contract for configuring chart display parameters—such as timebase, voltage range, filtering, cursor visibility, and data export—within a charting context. The interfaces `IChartOptionsView`, `IChartOptionsViewModel`, and `IChartOptionsModel` collectively enable separation of concerns between UI presentation, state management, and business logic, supporting features like zoom/t-scale resets, PDF export, and dynamic unit display (e.g., V vs. mV).
---
### 2. Public Interface
#### `IChartOptionsView`
- **Inherits**: `IBaseView`
- **Description**: Marker interface for the view (UI) component of the chart options panel. No additional members beyond base view contract.
#### `IChartOptionsViewModel`
- **Inherits**: `IBaseViewModel`
- **Properties**:
- `IBaseView View { get; set; }` Reference to the associated view instance.
- `IBaseViewModel Parent { get; set; }` Reference to the parent view model (e.g., main chart view model).
- `IChartOptionsModel Model { get; set; }` Reference to the underlying data model.
- `object ContextSearchRegion { get; set; }` Context object for search/region operations (type not specified; likely used for interop or region selection).
- **Methods**:
- `void PublishChanges()` Commits pending configuration changes (e.g., updated filters, scale, units).
- `void ResetZoomMethod()` Resets Y-axis zoom to default/full scale.
- `void ResetTMethod()` Resets T-axis (timebase) zoom/limits to default.
- `void SaveToPDFMethod()` Triggers export of the current chart view to PDF.
- `void ShowCusor(bool value)` Controls visibility of the primary cursor (note: typo in method name—`Cusor` instead of `Cursor`).
- `void ShowMinMaxCursor(bool value)` Controls visibility of min/max cursor indicators.
#### `IChartOptionsModel`
- **Inherits**: `IBaseModel`
- **Properties**:
- `bool SupportsADC { get; set; }` True if all channels support analog-to-digital conversion.
- `bool SupportsMV { get; set; }` True if all channels support millivolt measurements.
- `bool DisplayingVolts { get; set; }` True if units are displayed in Volts; false implies mV.
- `string MVOrV { get; }` Returns `"V"` or `"mV"` based on `DisplayingVolts`.
- `List<double> FullScaleValues { get; set; }` Available full-scale range options (e.g., [1, 5, 10] for Volts).
- `double SelectedFullScaleValue { get; set; }` Currently selected full-scale value.
- `double MinFixedY { get; set; }` / `MaxFixedY { get; set; }` Fixed Y-axis range limits.
- `double MinFixedT { get; set; }` / `MaxFixedT { get; set; }` Fixed T-axis (time) range limits.
- `bool LockedT { get; set; }` True if T-axis range is locked (immutable).
- `bool LockedY { get; set; }` True if Y-axis range is locked.
- `bool ShowCursor { get; set; }` Controls primary cursor visibility.
- `string CurrentCursorValues { get; set; }` String representation of current cursor positions (e.g., "t=1.23s, y=4.56mV").
- `YRangeScaleEnum YRange { get; set; }` Enumerated Y-axis scaling mode (e.g., Auto, Fixed, Full).
- `ChartUnitTypeEnum UnitType { get; set; }` Enumerated unit type for Y-axis (e.g., Voltage, Current).
- `TimeUnitTypeEnum TimeUnitType { get; set; }` Enumerated unit type for T-axis (e.g., Seconds, Milliseconds).
- `string UnitTypeDescription { get; }` Human-readable description of `UnitType` (e.g., "Voltage (mV)").
- `FilterOptionEnum Filter { get; set; }` Selected filter option (e.g., None, Lowpass, Highpass).
- `IFilterClass SelectedFilter { get; set; }` Concrete filter instance corresponding to `Filter`.
- `bool IsCursorsAvailable { get; set; }` True if cursor functionality is enabled for the current chart.
- `bool CanPublishChanges { get; set; }` Indicates whether `PublishChanges()` should be allowed (e.g., after validation).
- `bool ReadData { get; set; }` Controls whether live data acquisition is active.
- `bool IsDigitalChannel { get; set; }` True if the chart displays digital (logic) channel data.
- `bool DecimateData { get; set; }` True if data decimation is applied for performance.
- `long WidthPoints { get; set; }` Number of data points displayed horizontally (resolution).
- **Commands (Prism `DelegateCommand`)**:
- `DelegateCommand ResetZoomCommand { get; }` Binds to `ResetZoomMethod()` (via ViewModel).
- `DelegateCommand ResetTCommand { get; }` Binds to `ResetTMethod()` (via ViewModel).
- `DelegateCommand SaveToPDFCommand { get; }` Binds to `SaveToPDFMethod()` (via ViewModel).
- **Relationships**:
- `IChartOptionsViewModel Parent { get; set; }` Back-reference to the owning view model.
---
### 3. Invariants
- `IChartOptionsModel.MVOrV` is derived from `DisplayingVolts` and must return `"V"` when `DisplayingVolts == true`, otherwise `"mV"`.
- `IChartOptionsModel.UnitTypeDescription` is derived from `UnitType` and must reflect the current unit types human-readable form.
- `IChartOptionsModel.Filter` and `SelectedFilter` must be kept in sync: setting `Filter` should update `SelectedFilter` to a corresponding `IFilterClass` instance.
- `IChartOptionsModel.IsCursorsAvailable` must be `false` for digital channels (`IsDigitalChannel == true`), as cursors are typically analog-only.
- `IChartOptionsModel.LockedT` and `LockedY` imply that `MinFixedT/MaxFixedT` and `MinFixedY/MaxFixedY` are immutable during the lock period.
- `IChartOptionsViewModel.Model` must be non-null and consistent with `IChartOptionsModel.Parent`.
---
### 4. Dependencies
- **Dependencies *of* this module**:
- `DTS.Common.Base` (provides `IBaseView`, `IBaseViewModel`, `IBaseModel`).
- `DTS.Common.Enums.Viewer` (provides `YRangeScaleEnum`, `ChartUnitTypeEnum`, `TimeUnitTypeEnum`).
- `DTS.Common.Interface.Sensors.SoftwareFilters` (provides `IFilterClass`).
- `Microsoft.Practices.Prism.Commands` (provides `DelegateCommand`).
- **Dependencies *on* this module**:
- Any charting UI component requiring configuration (e.g., `IChartView`/`IChartViewModel`) likely consumes `IChartOptionsViewModel` and/or `IChartOptionsModel`.
- Data acquisition or rendering logic may depend on `IChartOptionsModel` properties (e.g., `DecimateData`, `ReadData`, `SelectedFilter`).
---
### 5. Gotchas
- **Typo in method name**: `ShowCusor(bool)` (should be `ShowCursor`). This is consistent across the source and likely reflects legacy naming.
- **Ambiguous `ContextSearchRegion`**: Type is `object` with no documentation—consumers must infer contract (e.g., likely expects a region object from a parent view model or chart control).
- **`MVOrV` and `UnitTypeDescription` are read-only**: Their values are computed from other properties; direct assignment is impossible.
- **`SelectedFilter` is of type `IFilterClass`**: Implementation must ensure the selected filter instance matches the `Filter` enum value (per comment: "FB 13120 Updated to use IFilterClass").
- **No validation rules exposed**: `CanPublishChanges` is a boolean flag but its update logic (e.g., when it becomes `true`) is not defined in this interface.
- **No thread-safety guarantees**: All methods/properties assume single-threaded access (common in WPF MVVM but not explicit here).
- **None identified from source alone** for digital channel behavior beyond `IsCursorsAvailable`.