diff options
Diffstat (limited to 'plan.plan.md')
| -rw-r--r-- | plan.plan.md | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/plan.plan.md b/plan.plan.md new file mode 100644 index 0000000..5b6f1f2 --- /dev/null +++ b/plan.plan.md @@ -0,0 +1,113 @@ +# Refactoring Plan: Control Center Panes + +## Overview + +After analyzing the last 30 commits, I've identified significant code duplication and opportunities for modularization in the control center panels. This plan focuses on extracting common patterns into reusable components. + +## Key Refactoring Opportunities + +### 1. Details Component Consolidation + +**Files affected:** `modules/controlcenter/network/Details.qml`, `modules/controlcenter/ethernet/EthernetDetails.qml` + +**Issue:** Both files share identical structure: + +- Header with icon and title +- Connection status section +- Properties section +- Connection information section (IP, subnet, gateway, DNS) + +**Solution:** Create `components/ConnectionDetails.qml` that accepts: + +- Device/network object +- Icon name +- Title property path +- Details source (wirelessDeviceDetails vs ethernetDeviceDetails) + +**Impact:** Reduces ~200 lines of duplication. + +### 2. ToggleButton Component Extraction + +**Files affected:** `modules/controlcenter/network/NetworkList.qml`, `modules/controlcenter/ethernet/EthernetList.qml` + +**Issue:** Both files define identical `ToggleButton` component (lines 228-301 in NetworkList, 170-243 in EthernetList). + +**Solution:** Move to `components/controls/ToggleButton.qml` and import in both files. + +**Impact:** Eliminates ~70 lines of duplication. + +### 3. Switch/SpinBox Row Components + +**Files affected:** `modules/controlcenter/appearance/AppearancePane.qml`, `modules/controlcenter/taskbar/TaskbarPane.qml` + +**Issue:** Repeated patterns for: + +- Switch rows (label + StyledSwitch) +- SpinBox rows (label + CustomSpinBox) +- Same layout, spacing, and styling + +**Solution:** Create: + +- `components/controls/SwitchRow.qml` - label + switch with config save callback +- `components/controls/SpinBoxRow.qml` - label + spinbox with config save callback + +**Impact:** Reduces ~30-40 lines per row instance (20+ instances total). + +### 4. Font List Delegate Consolidation + +**Files affected:** `modules/controlcenter/appearance/AppearancePane.qml` + +**Issue:** Three nearly identical font list implementations (Material, Mono, Sans) with only the property binding differing. + +**Solution:** Create `components/FontList.qml` that accepts: + +- Current font property +- Save callback function +- Title text + +**Impact:** Reduces ~150 lines of duplication. + +### 5. List Item Selection Pattern + +**Files affected:** Multiple list delegates across panes + +**Issue:** Repeated pattern for selected item highlighting: + +- Color with alpha based on selection +- Border width/color based on selection +- StateLayer click handler + +**Solution:** Create `components/SelectableListItem.qml` wrapper that handles selection styling. + +**Impact:** Reduces ~10-15 lines per list delegate. + +## Implementation Order + +1. **ConnectionDetails consolidation** (medium impact) +2. **FontList consolidation** (low-medium impact) +3. **SelectableListItem pattern** (nice-to-have, lower priority) + +## Files to Create + +- `components/controls/SelectableListItem.qml` +- `components/ConnectionDetails.qml` +- `components/FontList.qml` + +## Completed Items + +- ✅ `components/controls/CollapsibleSection.qml` - DONE +- ✅ `components/controls/SwitchRow.qml` - DONE +- ✅ `components/controls/SpinBoxRow.qml` - DONE +- ✅ `components/controls/ToggleButton.qml` - DONE + +## Estimated Impact + +- **Lines removed:** ~400-500 lines of duplicated code (from remaining items) +- **Maintainability:** Significantly improved - changes to common patterns only need to be made once +- **Readability:** Panes become more declarative and easier to understand +- **Testability:** Reusable components can be tested independently + +## Completed Refactoring + +- **Lines removed so far:** ~1300+ lines of duplicated code +- **Components created:** CollapsibleSection, SwitchRow, SpinBoxRow, ToggleButton
\ No newline at end of file |