<div dir="ltr"><div dir="ltr"><div dir="ltr"><p>Hello, everyone.</p><p>I'm from <b>FIUBA,</b> currently taking the <b>Software Engineering I </b>course under Professor Luciano Leveroni. I have been working to improve the user experience within Cuis by enhancing the existing Theme Customizer.<br><br>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 <b>named, saved, and recalled</b>.  <br><br>I thought of personalized themes as configuration data stored in a class-side <b>Dictionary</b> (savedThemes is a Class-Side Instance Variable of PersonalizedTheme class). This treats user themes as <b>globally accessible configuration data</b> 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).<br><br>The decision to store user themes as <b>dynamic data</b> and integrate it into the <code><font face="arial, sans-serif">PersonalizedTheme</font></code> 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 <b>one class per theme</b> (which actually forces the user to write SmallTalk code to make a new theme and save it).<br><br>In terms of user interface changes:</p></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><p>1. The Theme Customizer window now includes a set of control buttons: a <b>"Save Theme"</b> button, which prompts the user to enter a name for the current configuration, and the standard <b>"Cancel"</b> button to close the ThemeCustomizer window.<br><br>2. A new <b>"Manage Themes"</b> button opens a comprehensive menu, allowing users to view all their saved themes. From this menu, users can either instantly apply a theme or <b>permanently delete</b> a saved configuration.<br><br>3. All user-defined themes are dynamically added to the <b>World > Preferences > Themes</b> menu, ensuring immediate accessibility after saving, exactly like the default system themes.</p></div></div></blockquote><div dir="ltr"><div dir="ltr"><p><b><br>Regarding the Attached ChangeSets and Installation:<br><br></b>I have attached <b>two separate ChangeSet files</b> which collectively contain the full feature. This separation was necessary due to the architectural division of the changes:</p><ul><li><p><b>File 1: </b><code><font face="arial, sans-serif"><b><a href="http://Theme-class-changeTheme.cs.st">Theme-class-changeTheme.cs.st</a></b>, c</font></code>ontains the modification to the base <b>theme </b><font face="arial, sans-serif"><b><code><font face="arial, sans-serif">class >> changeTheme. </font></code></b></font>This file can be loaded independently in any Cuis image.</p></li><li><p><b>File 2: <code><font face="arial, sans-serif"><a href="http://ThemeCustomizer-AddSavingAndManagement.cs.st">ThemeCustomizer-AddSavingAndManagement.cs.st</a>,</font></code></b> contains the new logic added to both <b>PersonalizedTheme </b>and <b>ThemeCustomizerWindow</b> classes<b>. </b>This file is intended to be applied <b>after</b> the <b><code><font face="arial, sans-serif">Theme-Themes</font></code></b> package has been loaded (via <font face="arial, sans-serif"><code><font face="arial, sans-serif">World > Preferences > Load Themes</font></code>)</font>, as the new changes depend on classes defined there.</p></li></ul><p><br><b>For successful loading, please ensure the Theme-Themes package is loaded before filing in </b><code style="font-weight:bold"><font face="arial, sans-serif">ThemeCustomizer-AddSavingAndManagement.cs</font>.</code><b>st</b><br></p><p><span class="gmail-"></span></p><p>Thank you for your time!</p></div>
</div>
</div>