aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 6a7bd34..1b15b22 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -161,6 +161,7 @@ struct AppInit {
struct AppModel {
orientation: gtk::Orientation,
stage_type_list: gtk::StringList,
+ available_stage_types: Vec<StageType>,
stage_type: StageType,
source: sourceview5::Buffer,
source_view: sourceview5::View,
@@ -276,6 +277,35 @@ impl AppModel {
}
}
+ fn rebuild_stage_type_list(&mut self) {
+ // Build list: built-in stage types + custom stages from preferences
+ let mut stage_types: Vec<StageType> = ALL_STAGE_TYPES.to_vec();
+
+ // Add custom stages from preferences
+ for custom in &self.preferences.custom_stages {
+ stage_types.push(StageType::Custom {
+ name: custom.name.clone(),
+ i: custom.stage.i.clone(),
+ ii: custom.stage.ii.clone(),
+ iii: custom.stage.iii.clone(),
+ iv: custom.stage.iv.clone(),
+ });
+ }
+
+ // Update the StringList for the dropdown
+ // Clear existing items
+ while self.stage_type_list.n_items() > 0 {
+ self.stage_type_list.remove(0);
+ }
+
+ // Add all stage type names
+ for stage_type in &stage_types {
+ self.stage_type_list.append(stage_type.name());
+ }
+
+ self.available_stage_types = stage_types;
+ }
+
pub fn open_new_window(file_path: Option<PathBuf>) {
let controller = AppModel::builder()
.launch(AppInit {
@@ -516,6 +546,7 @@ impl SimpleComponent for AppModel {
let mut model = AppModel {
orientation: gtk::Orientation::Horizontal,
stage_type_list,
+ available_stage_types: ALL_STAGE_TYPES.to_vec(),
stage_type,
source,
source_view: source_view.clone(),
@@ -536,10 +567,14 @@ impl SimpleComponent for AppModel {
editor_css_provider,
};
- // Apply preferences
+ // Apply preferences and rebuild stage type list
model.apply_preferences();
+ model.rebuild_stage_type_list();
model.update_image();
+ // Register this window's sender for broadcasting
+ file_registry::register_sender(sender.input_sender().clone());
+
{
let sender = sender.clone();
glib::idle_add_local_once(move || {
@@ -635,6 +670,7 @@ impl SimpleComponent for AppModel {
Action::PreferencesChanged(prefs) => {
self.preferences = prefs;
self.apply_preferences();
+ self.rebuild_stage_type_list();
self.update_image();
// Broadcast to all other windows to reload preferences
file_registry::broadcast_to_all_windows(Action::ReloadPreferences);
@@ -646,6 +682,7 @@ impl SimpleComponent for AppModel {
// Reload preferences from disk (another window changed them)
self.preferences = preferences::storage::load();
self.apply_preferences();
+ self.rebuild_stage_type_list();
self.update_image();
}
}