3232)
3333from .window_utils import requested_switch_state , set_switch_confirmed_state
3434
35+ APO_IMPORT_LABEL_PREFIX = "Imported APO: "
36+
37+
38+ def imported_apo_curve_label (path : str ) -> str :
39+ preset_name = sanitize_preset_name (Path (path ).stem )
40+ if preset_name :
41+ return f"{ APO_IMPORT_LABEL_PREFIX } { preset_name } "
42+ return "Imported APO"
43+
3544
3645@dataclass (frozen = True )
3746class PresetPanelUiState :
@@ -175,6 +184,25 @@ def has_curve_revert_changes(self) -> bool:
175184 def curve_revert_target_is_neutral (self ) -> bool :
176185 return self .current_preset_name is None and self .curve_revert_signature () == self .default_preset_signature
177186
187+ def current_curve_selector_label (self ) -> str | None :
188+ if self .current_preset_name is not None :
189+ return None
190+
191+ label = self .curve_revert_label ()
192+ signature = self .curve_revert_signature ()
193+ if not label or signature is None or signature == self .default_preset_signature :
194+ return None
195+ return label
196+
197+ def suggested_save_as_name (self ) -> str :
198+ if self .current_preset_name is not None :
199+ return self .current_preset_name
200+
201+ label = self .current_curve_selector_label ()
202+ if label and label .startswith (APO_IMPORT_LABEL_PREFIX ):
203+ return sanitize_preset_name (label [len (APO_IMPORT_LABEL_PREFIX ) :])
204+ return ""
205+
178206 def output_preset_is_active (self ) -> bool :
179207 linked_preset = self .output_preset_link_name ()
180208 return bool (
@@ -443,11 +471,19 @@ def update_default_preset_state(self) -> None:
443471
444472 def refresh_preset_list (self ) -> None :
445473 self .preset_names = list_preset_names ()
446- self .preset_model .splice (0 , self .preset_model .get_n_items (), self .preset_names )
474+ display_names = list (self .preset_names )
475+ combo_preset_names : list [str | None ] = list (self .preset_names )
447476
448477 selected_index = Gtk .INVALID_LIST_POSITION
449478 if self .current_preset_name in self .preset_names :
450479 selected_index = self .preset_names .index (self .current_preset_name )
480+ elif current_curve_label := self .current_curve_selector_label ():
481+ display_names .insert (0 , current_curve_label )
482+ combo_preset_names .insert (0 , None )
483+ selected_index = 0
484+
485+ self .preset_combo_preset_names = combo_preset_names
486+ self .preset_model .splice (0 , self .preset_model .get_n_items (), display_names )
451487
452488 self .updating_preset_combo = True
453489 try :
@@ -685,11 +721,16 @@ def on_preset_selected(self, combo: Gtk.DropDown, _param: object) -> None:
685721 return
686722
687723 selected = combo .get_selected ()
688- if selected == Gtk .INVALID_LIST_POSITION or selected >= len (self .preset_names ):
724+ combo_preset_names = getattr (self , "preset_combo_preset_names" , self .preset_names )
725+ if selected == Gtk .INVALID_LIST_POSITION or selected >= len (combo_preset_names ):
726+ return
727+
728+ preset_name = combo_preset_names [selected ]
729+ if preset_name is None :
689730 return
690731
691732 try :
692- self .load_library_preset (self . preset_names [ selected ] )
733+ self .load_library_preset (preset_name )
693734 except Exception as exc :
694735 self .set_status (str (exc ))
695736
@@ -704,7 +745,7 @@ def on_preset_save_clicked(self, button: Gtk.Button) -> None:
704745 self .on_preset_save_as_clicked (button )
705746
706747 def on_preset_save_as_clicked (self , button : Gtk .Button ) -> None :
707- initial_name = self .current_preset_name or ""
748+ initial_name = self .suggested_save_as_name ()
708749 self .prompt_for_preset_name ("Save Preset As" , "Save" , initial_name , self .save_current_state_to_preset )
709750
710751 def on_preset_revert_clicked (self , button : Gtk .Button ) -> None :
0 commit comments