Skip to content

Redesign settings as a sidebar window (preview pad, profiles, activity, menu layout)#5

Merged
dvdstelt merged 10 commits into
mainfrom
feature/settings-redesign
Jul 15, 2026
Merged

Redesign settings as a sidebar window (preview pad, profiles, activity, menu layout)#5
dvdstelt merged 10 commits into
mainfrom
feature/settings-redesign

Conversation

@dvdstelt

Copy link
Copy Markdown
Owner

Summary

Recreates the macOS ClickLight settings experience on Windows: a dark, sidebar-navigation settings window replacing the single scrolling page, plus the new subsystems behind it. Targets the 1.4.0 release.

What's new

  • Sidebar settings window — General, Event Visibility, Visual Style, Keyboard Shortcuts, Profiles, Activity, Menu Layout, built from a consistent card/row system.
  • Live Preview Pad — click and drag inside it to see your current pulse / laser / drag settings render, without touching the rest of the screen.
  • OK/Cancel draft model — the window edits a draft; changes apply on OK and are discarded on Cancel. The live overlay is paused while the window is open, so the pad is the sole preview.
  • Profiles — save named visual setups and switch via a dropdown (with a built-in, undeletable Default); update in place, create, delete, and import/export as JSON.
  • Activity — local, on-device daily click tracking with a seven-day chart and a Left/Right/Middle/Drags breakdown, plus reset.
  • Menu Layout — hide individual tray-menu items and drag to reorder them (Quit always shown); the tray rebuilds from the layout on open.
  • Dark-themed dropdowns and the designed icon + logo (tray, window, exe icon, and the wordmark on the General tab).

Commits

Built in reviewable phases: sidebar shell → live pad + draft model → profiles → activity → menu layout → dropdown theming → icon/logo → docs (CHANGELOG 1.4.0, CONTRIBUTING, README).

Testing

  • dotnet build clean; dotnet test 34/34 passing.
  • Each phase was run and verified interactively (sidebar navigation, pad rendering, draft OK/Cancel, profile switch/save/import-export, activity chart, menu hide/reorder taking effect in the tray, icon/logo).

Notes

  • New stores persist to %APPDATA%\ClickLightWin\ (profiles.json, activity.json); assets are embedded WPF resources under src/ClickLightWin/Assets.
  • Geometry (per-click marker shapes) is intentionally out of scope here — a separate follow-up.

dvdstelt added 10 commits July 15, 2026 15:47
Replace the single-column settings page with a macOS-style sidebar
window: a dark sidebar (General, Event Visibility, Visual Style,
Keyboard Shortcuts, Profiles, Activity, Menu Layout) plus a content pane
built from cards and switch rows. Populate the panes we already have
features for; Profiles, Activity, Menu Layout, and the live Preview Pad
are placeholders for the next phases. A working Randomize button
shuffles size, duration, and colors.
Give the settings window an interactive Preview Pad: a small canvas that
draws real press rings, drag trails, release rings, and the laser glow
as you click and drag inside it, reusing the overlay renderers so it
matches on-screen behavior.

To make the pad the point rather than a redundant echo of live edits,
switch the window to a draft model: it edits a detached copy of the
settings and the overlays keep running on the committed values. OK
applies the draft and persists it; Cancel discards it. While the window
is open the live overlay is paused, so the real screen stays quiet and
the pad is the sole preview (no laser trailing over the window, no
double pulse when clicking in the pad).
Add saved visual profiles (size, duration, colors, visibility toggles;
no hotkeys) persisted to %APPDATA%\ClickLightWin\profiles.json. The
Profiles pane centers on a "Current Profile" dropdown: switching loads
that profile into the draft (previewing in the pad, applied on OK).

A built-in Default profile always exists and cannot be deleted, so a
user who never makes a profile just works with — and can edit — Default.
Save changes updates the selected profile in place; Create makes a new
one from the current look; Delete removes it. Profiles import/export as
JSON to move setups between machines.
Track per-day click tallies (left/right/middle presses and drag
gestures) in an ActivityStore, counted from the global hook and stored
only on this PC at %APPDATA%\ClickLightWin\activity.json. Counting runs
regardless of Enabled or the settings window being open, persists on a
30s throttle and on exit, and rolls over by day.

The Activity pane shows today's total, a seven-day bar chart, and a
Left/Right/Middle/Drags breakdown, with a Reset that clears history.
Add a real Menu Layout pane: each tray menu item has a toggle to hide it
and a drag handle to reorder it, with Quit always shown. The order and
visibility persist in Settings.MenuLayout (part of the OK/Cancel draft),
and the tray rebuilds its menu from that layout each time it opens, so
changes take effect on the next open.

The tray menu is now a flat list in the user's chosen order (the fixed
separators are dropped, since they no longer fit arbitrary ordering).
Give the color and profile dropdowns a dark ControlTemplate: a
bordered box with a chevron, a dark popup, and accent-highlighted items,
so they match the rest of the settings window instead of the default
light chrome. The profile dropdown uses an explicit item template so it
shows the profile name rather than the type name.
Ship the multi-resolution icon.ico as the app icon: the tray icon, the
Settings window icon, and the exe ApplicationIcon (the generated pulse
icon stays as a fallback). Show the clicklight-logo.png wordmark at the
top of the General settings tab. Both live under the project's Assets
folder and are embedded as WPF resources.
Record the sidebar settings window, live Preview Pad, profiles, activity
view, configurable tray menu, dark dropdowns, OK/Cancel draft model, and
the designed icon and logo under 1.4.0.
Adapt the macOS project's contributing guide for this Windows/.NET
codebase: dotnet build/run/test, manual verification steps, code-style
notes, and pull-request guidance.
@dvdstelt
dvdstelt merged commit 7b20a8e into main Jul 15, 2026
1 check passed
@dvdstelt
dvdstelt deleted the feature/settings-redesign branch July 15, 2026 21:23
@dvdstelt dvdstelt self-assigned this Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant