mattercontrol/research/09-settings-management.md

6 KiB

Settings Management

Summary

MatterControl uses a hierarchical settings system managing printer configurations, slicer parameters, and user preferences. Settings are organized into profiles with inheritance, preset support, and real-time validation.

Technical Description

Architecture

ProfileManager
├── ActiveProfiles (list of printer profiles)
└── PrinterSettings (per printer)
    ├── BaseLayer (OEM defaults)
    ├── OemLayer (manufacturer overrides)
    ├── UserLayer (user customizations)
    └── MaterialPresets / QualityPresets

PrinterSettings Class

Central settings container with layered overrides:

public class PrinterSettings
{
    public SettingsLayer OemLayer { get; }
    public SettingsLayer UserLayer { get; }
    public List<SettingsLayer> MaterialPresets { get; }
    public List<SettingsLayer> QualityPresets { get; }

    public string GetValue(string key);
    public T GetValue<T>(string key);
    public void SetValue(string key, string value);
}

Settings Layers

Settings resolution from highest to lowest priority:

  1. UserLayer - User customizations
  2. ActiveQualityPreset - Quality preset (Draft/Normal/Fine)
  3. ActiveMaterialPreset - Material preset (PLA/ABS/etc.)
  4. OemLayer - Manufacturer overrides
  5. BaseLayer - Application defaults

SettingsKey Constants

All settings keys defined in SettingsKey static class:

Category Sample Keys
Printer printer_name, build_height, bed_size
Layer layer_height, first_layer_height
Perimeters perimeters, external_perimeter_speed
Infill fill_density, infill_type
Support support_material, support_type
Temperature temperature, bed_temperature
Speed travel_speed, perimeter_speed
Retraction retract_length, retract_speed
G-code start_gcode, end_gcode

Profile Management

ProfileManager handles profile lifecycle:

public class ProfileManager
{
    public static ProfileManager Instance { get; }
    public IEnumerable<PrinterInfo> ActiveProfiles { get; }

    public static Task<PrinterSettings> LoadSettingsAsync(string profileId);
    public void SaveSettings(PrinterSettings settings);
    public void DeleteProfile(string profileId);
}

Settings Validation

SettingsValidation checks configuration consistency:

Check Description
Temperature bounds Min/max temperature limits
Speed limits Reasonable speed ranges
Layer height Compatible with nozzle diameter
Retraction Valid retraction settings
Bed size Build volume constraints

UI Components

SliceSettingsWidget:

SliceSettingsWidget
├── Category Tabs (General, Infill, Support, etc.)
├── Settings Sections
│   └── SliceSettingsRow (individual settings)
└── PresetsToolbar
    ├── Material Preset Selector
    └── Quality Preset Selector

SliceSettingsRow:

  • Label and value editor
  • Reset to default button
  • Override indicator
  • Help tooltip

Preset System

Material Presets:

  • PLA, ABS, PETG, TPU, etc.
  • Temperature profiles
  • Retraction settings
  • Fan settings

Quality Presets:

  • Draft (fast, low quality)
  • Normal (balanced)
  • Fine (slow, high quality)
  • Custom user presets

OEM Customization

Manufacturers can provide custom profiles via:

StaticData/
├── Printers/
│   └── {Manufacturer}/
│       └── {Model}.printer
│           ├── base.ini
│           ├── material_pla.ini
│           └── quality_normal.ini
└── OEMSettings/
    └── OEMProfile.json

Settings Events

Event Description
SettingChanged Individual setting modified
AnyPrinterSettingChanged Static event for any printer
ActiveProfileModified Active profile changed

Design Rationale

Layered Settings: Inheritance hierarchy provides:

  • Clear override semantics
  • Easy reset to defaults
  • Manufacturer customization
  • User freedom to modify

Preset System: Separating presets allows:

  • Quick switching between materials/quality
  • Consistent printing results
  • OEM-tuned profiles

Key-Value Model: String-based settings enable:

  • Flexible storage
  • Easy serialization
  • Runtime modification

Reference

Core Classes

Class Location Description
PrinterSettings SlicerConfiguration/Settings/PrinterSettings.cs Settings container
SettingsLayer SlicerConfiguration/Settings/SettingsLayer.cs Settings layer
ProfileManager SlicerConfiguration/Settings/ProfileManager.cs Profile manager
SettingsKey SlicerConfiguration/Settings/SettingsKey.cs Key constants

UI Components

Class Location Description
SliceSettingsWidget SlicerConfiguration/SliceSettingsWidget.cs Settings panel
SliceSettingsRow SlicerConfiguration/SliceSettingsRow.cs Settings row
PresetSelectorWidget SlicerConfiguration/PresetSelectorWidget.cs Preset dropdown

Application Settings

Class Location Description
ApplicationSettings SettingsManagement/ApplicationSettings.cs App-level settings
UserSettings SettingsManagement/UserSettings.cs User preferences
OemSettings SettingsManagement/OemSettings.cs OEM config