qt: wizard: keep wizard stack in a consistent state if load_next_component raises
This commit is contained in:
@@ -143,6 +143,7 @@ class QEAbstractWizard(QDialog, MessageBoxMixin):
|
|||||||
|
|
||||||
comp = self.view_to_component(view)
|
comp = self.view_to_component(view)
|
||||||
try:
|
try:
|
||||||
|
self._logger.debug(f'load_next_component: {comp!r}')
|
||||||
page = comp(self.main_widget, self)
|
page = comp(self.main_widget, self)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._logger.error(f'not a class: {comp!r}')
|
self._logger.error(f'not a class: {comp!r}')
|
||||||
@@ -151,13 +152,11 @@ class QEAbstractWizard(QDialog, MessageBoxMixin):
|
|||||||
page.params = params
|
page.params = params
|
||||||
page.on_ready() # call before component emits any signals
|
page.on_ready() # call before component emits any signals
|
||||||
|
|
||||||
self._logger.debug(f'load_next_component: {page=!r}')
|
|
||||||
|
|
||||||
page.updated.connect(self.on_page_updated)
|
page.updated.connect(self.on_page_updated)
|
||||||
|
|
||||||
# add to stack and update wizard
|
# add to stack and update wizard
|
||||||
self.main_widget.setCurrentIndex(self.main_widget.addWidget(page))
|
|
||||||
page.apply()
|
page.apply()
|
||||||
|
self.main_widget.setCurrentIndex(self.main_widget.addWidget(page))
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
@pyqtSlot(object)
|
@pyqtSlot(object)
|
||||||
@@ -218,7 +217,11 @@ class QEAbstractWizard(QDialog, MessageBoxMixin):
|
|||||||
self.prev() # rollback the submit above
|
self.prev() # rollback the submit above
|
||||||
else:
|
else:
|
||||||
view = self.submit(wd)
|
view = self.submit(wd)
|
||||||
self.load_next_component(view.view, view.wizard_data, view.params)
|
try:
|
||||||
|
self.load_next_component(view.view, view.wizard_data, view.params)
|
||||||
|
except Exception as e:
|
||||||
|
self.prev() # rollback the submit above
|
||||||
|
raise e
|
||||||
|
|
||||||
def start_wizard(self) -> 'WizardViewState':
|
def start_wizard(self) -> 'WizardViewState':
|
||||||
self.start()
|
self.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user