Files

269 lines
10 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- Common/DTS.CommonCore/Interface/DTS.Viewer/ITabView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IDiagView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ITestsView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IStatsView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ICursorView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IViewerView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ITabItemView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IPropertyView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IViewerShellView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IGraphPropertyView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IDockPanelVerticalView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IDockPanelHorizontalView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/GroupChannelReadCalcDelegate.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ITabViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IDiagViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IStatsViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ICursorViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ITestsViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IViewerViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IPropertyViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IViewerModule.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IPSDReportModule .cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IGraphPropertyViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IDockPanelVerticalViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IDockPanelHorizontalViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ITabItemViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IViewerShellViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IMainLiteView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IMainViewerView.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/ISelectedDataViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IMainLiteViewModel.cs
- Common/DTS.CommonCore/Interface/DTS.Viewer/IMainViewModel.cs
generated_at: "2026-04-16T12:14:43.492195+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "fed47436f7c090f0"
---
# DTS.Common.Interface Viewer Module Documentation
## 1. Purpose
This module defines the contract layer for the DTS Viewer application's presentation components. It establishes a Model-View-ViewModel (MVVM) architecture through a comprehensive set of interfaces for views, view models, and modules. The interfaces enable loose coupling between UI components and their controllers, supporting a modular, plugin-based architecture built on Microsoft Prism. This abstraction layer allows different concrete implementations of views and view models to be swapped without affecting dependent code.
---
## 2. Public Interface
### View Interfaces
All view interfaces inherit from `IBaseView` (defined in `DTS.Common.Base`) and are currently marker interfaces with no additional members:
| Interface | Description |
|-----------|-------------|
| `ITabView` | Marker interface for tab views |
| `IDiagView` | Marker interface for diagnostic views |
| `ITestsView` | Marker interface for test views |
| `IStatsView` | Marker interface for statistics views |
| `ICursorView` | Marker interface for cursor views |
| `IViewerView` | Marker interface for viewer views |
| `ITabItemView` | Marker interface for individual tab item views |
| `IPropertyView` | Marker interface for property views |
| `IViewerShellView` | Marker interface for the main shell view |
| `IGraphPropertyView` | Marker interface for graph property views |
| `IDockPanelVerticalView` | Marker interface for vertical dock panel views |
| `IDockPanelHorizontalView` | Marker interface for horizontal dock panel views |
#### `IMainLiteView`
```csharp
public interface IMainLiteView : IBaseView
{
StackPanel MainShell { get; set; }
ContentControl MainRegion { get; set; }
ContentControl NavigationRegion { get; set; }
ContentControl HorizontalTabRegion { get; set; }
ContentControl VerticalTabRegion { get; set; }
}
```
Exposes WPF region controls for the "Lite" version of the main view.
#### `IMainViewerView`
```csharp
public interface IMainViewerView : IBaseView
{
// All members commented out in source
}
```
Marker interface for the main viewer view. Region properties are commented out in the source.
---
### ViewModel Interfaces
All view model interfaces inherit from `IBaseViewModel` (defined in `DTS.Common.Base`).
#### Standard ViewModel Interfaces
Each provides a `View` property returning its corresponding view interface:
| Interface | View Property Type |
|-----------|-------------------|
| `ITabViewModel` | `ITabView View { get; }` |
| `IDiagViewModel` | `IDiagView View { get; }` |
| `IStatsViewModel` | `IStatsView View { get; }` |
| `ICursorViewModel` | `ICursorView View { get; }` |
| `ITestsViewModel` | `ITestsView View { get; }` |
| `IViewerViewModel` | `IViewerView View { get; }` |
| `IPropertyViewModel` | `IPropertyView View { get; }` |
| `IGraphPropertyViewModel` | `IGraphPropertyView View { get; }` |
| `IDockPanelVerticalViewModel` | `IDockPanelVerticalView View { get; }` |
| `IDockPanelHorizontalViewModel` | `IDockPanelHorizontalView View { get; }` |
#### `ITabItemViewModel`
```csharp
public interface ITabItemViewModel : IBaseViewModel
{
ITabItemView View { get; }
ITabViewModel Parent { get; }
}
```
Represents a tab item with a reference to its parent `ITabViewModel`.
#### `IViewerShellViewModel`
```csharp
public interface IViewerShellViewModel : IBaseViewModel
{
IViewerShellView View { get; }
List<FrameworkElement> GetRegions();
object ContextMainRegion { get; set; }
}
```
The shell view model providing region management and main region context.
#### `IMainLiteViewModel`
```csharp
public interface IMainLiteViewModel : IBaseViewModel
{
IMainView View { get; }
object ContextMainRegion { get; set; }
object ContextNavigationRegion { get; set; }
object ContextHorizontalTabRegion { get; set; }
object ContextVerticalTabRegion { get; set; }
List<FrameworkElement> GetRegions();
}
```
**Note:** Returns `IMainView` (not `IMainLiteView`), which is not defined in the provided source files.
#### `IMainViewerViewModel`
```csharp
public interface IMainViewerViewModel : IBaseViewModel
{
IBaseView View { get; }
object ContextMainRegion { get; set; }
object ContextNavigationRegion { get; set; }
object ContextHorizontalTabRegion { get; set; }
object ContextVerticalTabRegion { get; set; }
List<FrameworkElement> GetRegions();
}
```
Returns `IBaseView` directly rather than a specific view interface.
---
### Module Interfaces
#### `IViewerModule`
```csharp
public interface IViewerModule : IModule
{
void StartSession(bool standalone, string pluginFolder = "");
}
```
Defines a Prism module for the viewer with session initialization capability.
#### `IPSDReportModule`
```csharp
public interface IPSDReportModule : IModule
{
void StartSession(bool standalone, string pluginFolder = "");
}
```
Defines a Prism module for PSD reporting with identical session initialization signature.
---
### Other Types
#### `SetReadCalcProgressValueDelegate`
```csharp
public delegate void SetReadCalcProgressValueDelegate(string message = "", double value = -1D);
```
A delegate type for reporting progress during read/calculation operations. Default parameters allow calling with no arguments.
#### `ISelectedDataViewModel`
```csharp
public interface ISelectedDataViewModel
{
string SelectedDataFolder { get; set; }
string SelectedDataFile { get; set; }
void SelectAndIncludeDataFile(string file);
}
```
**Does NOT inherit from `IBaseViewModel`.** Manages data file selection with a method to both select and include a file as a test. The XML comment references bug "16158 Browse button on View Data tab not functional."
---
## 3. Invariants
- All view interfaces (except `ISelectedDataViewModel`) must inherit from `IBaseView`.
- All view model interfaces (except `ISelectedDataViewModel`) must inherit from `IBaseViewModel`.
- Each standard view model interface must expose a read-only `View` property returning its corresponding view interface type.
- `ITabItemViewModel.Parent` must return a valid `ITabViewModel` instance (parent-child relationship is expected).
- `StartSession` on module interfaces must be called to initialize the module with explicit `standalone` mode specification.
- Region context properties (`ContextMainRegion`, `ContextNavigationRegion`, etc.) are expected to be set by the framework or controlling code before views are rendered.
---
## 4. Dependencies
### External Dependencies
| Dependency | Usage |
|------------|-------|
| `DTS.Common.Base` | Provides `IBaseView` and `IBaseViewModel` base interfaces |
| `Microsoft.Practices.Prism.Modularity` | Provides `IModule` interface for module definitions |
| `System.Windows` | Provides `FrameworkElement` for region management |
| `System.Windows.Controls` | Provides `StackPanel`, `ContentControl` for view composition |
### Downstream Dependencies
**Unclear from source alone.** These interfaces are contract definitions; concrete implementations and consumers are not present in the provided files. The naming convention suggests implementations exist in a `DTS.Viewer` assembly or namespace.
---
## 5. Gotchas
1. **`IMainLiteViewModel.View` returns `IMainView`** — This interface references `IMainView`, which is not defined in any of the provided source files. This may be a typo for `IMainLiteView` or a separate interface.
2. **`IMainViewerView` has all members commented out** — The interface exists but all its region properties are commented out. This may indicate incomplete refactoring or an abandoned change.
3. **`ISelectedDataViewModel` does not follow the pattern** — Unlike all other view model interfaces, this one does not inherit from `IBaseViewModel` and has no `View` property. It appears to be a utility interface rather than a true MVVM view model.
4. **Inconsistent XML comments** — Some interfaces have XML documentation (e.g., `ITabViewModel`, `ITabItemViewModel`), while others do not. Some comments are copy-pasted incorrectly (e.g., `IViewerViewModel` says "Gets the Tests View" but returns `IViewerView`).
5. **`SetReadCalcProgressValueDelegate` naming mismatch** — The filename is `GroupChannelReadCalcDelegate.cs` but the delegate is named `SetReadCalcProgressValueDelegate`.
6. **`IPSDReportModule` filename has trailing space** — The filename is `IPSDReportModule .cs` (note the space before the extension).