diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 39 |
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(); } } |