summaryrefslogtreecommitdiff
path: root/plan.plan.md
diff options
context:
space:
mode:
Diffstat (limited to 'plan.plan.md')
-rw-r--r--plan.plan.md113
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