[Cuis-dev] ThemeCustomizer: Save and Manage Personalized Themes
BRENDA BARLETTA
bbarletta at fi.uba.ar
Thu Dec 4 19:00:50 PST 2025
Hello, everyone.
I'm from *FIUBA,* currently taking the *Software Engineering I *course
under Professor Luciano Leveroni. I have been working to improve the user
experience within Cuis by enhancing the existing Theme Customizer.
I noticed that, while users can personalize a theme, the configuration is
ephemeral; any work done is either lost immediately upon switching back to
a default theme or unintentionally overwritten upon subsequent
customization. This gap meant that any custom theme effort (which requires
the user to manually select, find the hexadecimal codes for, and enter each
color one-by-one) was non-reusable. I propose the attached ChangeSet, which
introduces a theme lifecycle management system, which allows custom themes
to be *named, saved, and recalled*.
I thought of personalized themes as configuration data stored in a
class-side *Dictionary* (savedThemes is a Class-Side Instance Variable of
PersonalizedTheme class). This treats user themes as *globally accessible
configuration data* that must be singular for the entire Cuis image. This
approach prevents class hierarchy bloat (by avoiding the creation of new
Theme subclasses for every saved configuration).
The decision to store user themes as *dynamic data* and integrate it into
the PersonalizedTheme class structure was driven by the desire to provide a
better user experience, maintaining the ThemeCustomizer's non-coding path
for saving configurations, in contrast to the existing model of *one class
per theme* (which actually forces the user to write SmallTalk code to make
a new theme and save it).
In terms of user interface changes:
1. The Theme Customizer window now includes a set of control buttons: a *"Save
Theme"* button, which prompts the user to enter a name for the current
configuration, and the standard *"Cancel"* button to close the
ThemeCustomizer window.
2. A new *"Manage Themes"* button opens a comprehensive menu, allowing
users to view all their saved themes. From this menu, users can either
instantly apply a theme or *permanently delete* a saved configuration.
3. All user-defined themes are dynamically added to the *World >
Preferences > Themes* menu, ensuring immediate accessibility after saving,
exactly like the default system themes.
*Regarding the Attached ChangeSets and Installation:*I have attached *two
separate ChangeSet files* which collectively contain the full feature. This
separation was necessary due to the architectural division of the changes:
-
*File 1: **Theme-class-changeTheme.cs.st
<http://Theme-class-changeTheme.cs.st>*, contains the modification to
the base *theme **class >> changeTheme. *This file can be loaded
independently in any Cuis image.
-
*File 2: ThemeCustomizer-AddSavingAndManagement.cs.st
<http://ThemeCustomizer-AddSavingAndManagement.cs.st>,* contains the new
logic added to both *PersonalizedTheme *and *ThemeCustomizerWindow*
classes*. *This file is intended to be applied *after* the
*Theme-Themes* package has been loaded (via World > Preferences > Load
Themes), as the new changes depend on classes defined there.
*For successful loading, please ensure the Theme-Themes package is loaded
before filing in *ThemeCustomizer-AddSavingAndManagement.cs.*st*
Thank you for your time!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20251205/79e16d6e/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Theme-class-changeTheme.cs.st
Type: application/octet-stream
Size: 933 bytes
Desc: not available
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20251205/79e16d6e/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ThemeCustomizer-AddSavingAndManagement.cs.st
Type: application/octet-stream
Size: 4950 bytes
Desc: not available
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20251205/79e16d6e/attachment-0001.obj>
More information about the Cuis-dev
mailing list