1313from ..libs .pum .schema_migrations import SchemaMigrations
1414from ..utils .plugin_utils import PluginUtils , logger
1515from ..utils .qt_utils import CriticalMessageBox , QtUtils
16+ from .recreate_app_dialog import RecreateAppDialog
1617
1718DIALOG_UI = PluginUtils .get_ui_class ("module_widget.ui" )
1819
@@ -217,7 +218,13 @@ def __packagePrepareGetPUMConfig(self):
217218 logger .info (f"PUM config loaded from '{ pumConfigFilename } '" )
218219
219220 try :
220- self .parameters_groupbox .setParameters (self .__pum_config .parameters ())
221+ all_params = self .__pum_config .parameters ()
222+ standard_params = [p for p in all_params if not p .app_only ]
223+ app_only_params = [p for p in all_params if p .app_only ]
224+ self .parameters_groupbox .setParameters (standard_params )
225+ self .parameters_app_only_groupbox .setParameters (app_only_params )
226+ self .parameters_groupbox_upgrade .setParameters (standard_params )
227+ self .parameters_app_only_groupbox_upgrade .setParameters (app_only_params )
221228 except Exception as exception :
222229 CriticalMessageBox (
223230 self .tr ("Error" ),
@@ -266,7 +273,7 @@ def __installModuleClicked(self):
266273 return
267274
268275 try :
269- parameters = self .parameters_groupbox . parameters_values ()
276+ parameters = self .__get_all_parameters ()
270277
271278 beta_testing = self .beta_testing_checkbox_pageInstall .isChecked ()
272279 if beta_testing :
@@ -383,7 +390,7 @@ def __upgradeModuleClicked(self):
383390 return
384391
385392 try :
386- parameters = self .parameters_groupbox . parameters_values ()
393+ parameters = self .__get_all_parameters ()
387394
388395 beta_testing = self .beta_testing_checkbox_pageUpgrade .isChecked ()
389396 if beta_testing :
@@ -485,7 +492,7 @@ def __uninstallModuleClicked(self):
485492 return
486493
487494 try :
488- parameters = self .parameters_groupbox . parameters_values ()
495+ parameters = self .__get_all_parameters ()
489496
490497 # Start background uninstall operation
491498 self .__startOperation ("uninstall" , parameters , {})
@@ -517,7 +524,7 @@ def __rolesClicked(self):
517524 return
518525
519526 try :
520- parameters = self .parameters_groupbox . parameters_values ()
527+ parameters = self .__get_all_parameters ()
521528
522529 # Start background roles operation
523530 self .__startOperation ("roles" , parameters , {})
@@ -563,7 +570,7 @@ def __dropAppClicked(self):
563570 return
564571
565572 try :
566- parameters = self .parameters_groupbox . parameters_values ()
573+ parameters = self .__get_all_parameters ()
567574
568575 # Start background drop app operation
569576 self .__startOperation ("drop_app" , parameters , {})
@@ -594,22 +601,22 @@ def __recreateAppClicked(self):
594601 ).exec ()
595602 return
596603
597- reply = QMessageBox .question (
598- self ,
599- self .tr ("(Re)create app" ),
600- self .tr (
601- "Are you sure you want to recreate the application?\n \n "
602- "This will first drop the app and then create it again, executing the corresponding handlers."
603- ),
604- QMessageBox .StandardButton .Yes | QMessageBox .StandardButton .No ,
605- QMessageBox .StandardButton .No ,
606- )
604+ try :
605+ all_params = self .__pum_config .parameters ()
606+ standard_params = [p for p in all_params if not p .app_only ]
607+ app_only_params = [p for p in all_params if p .app_only ]
608+ except Exception as exception :
609+ CriticalMessageBox (
610+ self .tr ("Error" ), self .tr ("Can't load parameters:" ), exception , self
611+ ).exec ()
612+ return
607613
608- if reply != QMessageBox .StandardButton .Yes :
614+ dialog = RecreateAppDialog (standard_params , app_only_params , self )
615+ if dialog .exec () != RecreateAppDialog .DialogCode .Accepted :
609616 return
610617
611618 try :
612- parameters = self . parameters_groupbox . parameters_values ()
619+ parameters = dialog . parameters ()
613620
614621 # Start background recreate app operation
615622 self .__startOperation ("recreate_app" , parameters , {})
@@ -620,6 +627,24 @@ def __recreateAppClicked(self):
620627 ).exec ()
621628 return
622629
630+ def __get_all_parameters (self ) -> dict :
631+ """Collect parameter values from both standard and app_only groupboxes.
632+
633+ Uses the upgrade-specific groupboxes when on the upgrade page,
634+ otherwise uses the install page groupboxes.
635+ """
636+ values = {}
637+ if (
638+ self .moduleInfo_stackedWidget .currentWidget ()
639+ == self .moduleInfo_stackedWidget_pageUpgrade
640+ ):
641+ values .update (self .parameters_groupbox_upgrade .parameters_values ())
642+ values .update (self .parameters_app_only_groupbox_upgrade .parameters_values ())
643+ else :
644+ values .update (self .parameters_groupbox .parameters_values ())
645+ values .update (self .parameters_app_only_groupbox .parameters_values ())
646+ return values
647+
623648 def __show_error_state (self , message : str , on_label = None ):
624649 """Display an error state and hide the widget content."""
625650 label = on_label or self .moduleInfo_selected_label
@@ -653,6 +678,10 @@ def __show_install_page(self, version: str):
653678 # Configure beta testing checkbox based on package source
654679 self .__configure_beta_testing_checkbox (self .beta_testing_checkbox_pageInstall )
655680
681+ # On install, both standard and app_only parameters are editable
682+ self .parameters_groupbox .setEnabled (True )
683+ self .parameters_app_only_groupbox .setEnabled (True )
684+
656685 self .moduleInfo_stackedWidget .setCurrentWidget (self .moduleInfo_stackedWidget_pageInstall )
657686 # Ensure the stacked widget is visible when showing a valid page
658687 self .moduleInfo_stackedWidget .setVisible (True )
@@ -727,6 +756,10 @@ def __show_upgrade_page(
727756 # Configure beta testing checkbox based on package source
728757 self .__configure_beta_testing_checkbox (self .beta_testing_checkbox_pageUpgrade )
729758
759+ # On upgrade, standard parameters cannot be changed but remain scrollable
760+ self .parameters_groupbox_upgrade .setParametersEnabled (False )
761+ self .parameters_app_only_groupbox_upgrade .setParametersEnabled (True )
762+
730763 self .moduleInfo_stackedWidget .setCurrentWidget (self .moduleInfo_stackedWidget_pageUpgrade )
731764 self .moduleInfo_stackedWidget .setVisible (True )
732765
0 commit comments