From 9647ac5fdd9d9a813d64c25de6d4889a9a736fa7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 5 Nov 2022 15:47:08 +0100 Subject: [PATCH] Gui: handle std::exception and Base::Exception inside DlgPreferencesImp::createPageInGroup to avoid that the preferences dialog won't be shown at all --- src/Gui/DlgPreferencesImp.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp index 1e6fb276a4..18dee1c8f8 100644 --- a/src/Gui/DlgPreferencesImp.cpp +++ b/src/Gui/DlgPreferencesImp.cpp @@ -176,15 +176,24 @@ QTabWidget* DlgPreferencesImp::createTabForGroup(const std::string &groupName) */ void DlgPreferencesImp::createPageInGroup(QTabWidget *tabWidget, const std::string &pageName) { - PreferencePage* page = WidgetFactory().createPreferencePage(pageName.c_str()); - if (page) { - tabWidget->addTab(page, page->windowTitle()); - page->loadSettings(); - page->setProperty("GroupName", tabWidget->property("GroupName")); - page->setProperty("PageName", QVariant(QString::fromStdString(pageName))); + try { + PreferencePage* page = WidgetFactory().createPreferencePage(pageName.c_str()); + if (page) { + tabWidget->addTab(page, page->windowTitle()); + page->loadSettings(); + page->setProperty("GroupName", tabWidget->property("GroupName")); + page->setProperty("PageName", QVariant(QString::fromStdString(pageName))); + } + else { + Base::Console().Warning("%s is not a preference page\n", pageName.c_str()); + } } - else { - Base::Console().Warning("%s is not a preference page\n", pageName.c_str()); + catch (const Base::Exception& e) { + Base::Console().Error("Base exception thrown for '%s'\n", pageName.c_str()); + e.ReportException(); + } + catch (const std::exception& e) { + Base::Console().Error("C++ exception thrown for '%s' (%s)\n", pageName.c_str(), e.what()); } }