diff --git a/shell/configdialog.h b/shell/configdialog.h --- a/shell/configdialog.h +++ b/shell/configdialog.h @@ -47,20 +47,26 @@ * Remove a config page */ void removeConfigPage(ConfigPage* page); + + /** + * Add a new config page to the end of the list of pages. + * @param page the new page to add + */ + void appendConfigPage(ConfigPage* page); + /** * Add a new config page. + * @param before the page before which the new page will be inserted. * @param page the new page to add - * @param next if this parameter is passed the new page will be before it, otherwise - * it will be inserted as the last config page. */ - void addConfigPage(ConfigPage* page, ConfigPage* next = nullptr); + void insertConfigPage(ConfigPage* before, ConfigPage* page); /** * Add a new sub config page * @param parentPage the parent page * @param page the page to add */ - void addSubConfigPage(ConfigPage* parentPage, ConfigPage* page); + void appendSubConfigPage(ConfigPage* parentPage, ConfigPage* page); Q_SIGNALS: void configSaved(ConfigPage* page); diff --git a/shell/configdialog.cpp b/shell/configdialog.cpp --- a/shell/configdialog.cpp +++ b/shell/configdialog.cpp @@ -143,18 +143,20 @@ m_pages.removeAll(QPointer()); } -void ConfigDialog::addConfigPage(ConfigPage* page, ConfigPage* previous) +void ConfigDialog::appendConfigPage(ConfigPage* page) { - if (previous) { - auto previousItem = itemForPage(previous); - Q_ASSERT(previousItem); - addConfigPageInternal(insertPage(previousItem, page, page->name()), page); - } else { - addConfigPageInternal(addPage(page, page->name()), page); - } + addConfigPageInternal(addPage(page, page->name()), page); +} + +void ConfigDialog::insertConfigPage(ConfigPage* before, ConfigPage* page) +{ + Q_ASSERT(before); + auto beforeItem = itemForPage(before); + Q_ASSERT(beforeItem); + addConfigPageInternal(insertPage(beforeItem, page, page->name()), page); } -void ConfigDialog::addSubConfigPage(ConfigPage* parentPage, ConfigPage* page) +void ConfigDialog::appendSubConfigPage(ConfigPage* parentPage, ConfigPage* page) { auto item = itemForPage(parentPage); Q_ASSERT(item); @@ -172,7 +174,7 @@ m_pages.append(item); for (int i = 0; i < page->childPages(); ++i) { auto child = page->childPage(i); - addSubConfigPage(page, child); + appendSubConfigPage(page, child); } } diff --git a/shell/projectcontroller.cpp b/shell/projectcontroller.cpp --- a/shell/projectcontroller.cpp +++ b/shell/projectcontroller.cpp @@ -148,7 +148,7 @@ }); for (auto page : configPages) { - cfgDlg->addConfigPage(page); + cfgDlg->appendConfigPage(page); } QObject::connect(cfgDlg, &ConfigDialog::configSaved, cfgDlg, [this, proj](ConfigPage* page) { diff --git a/shell/uicontroller.cpp b/shell/uicontroller.cpp --- a/shell/uicontroller.cpp +++ b/shell/uicontroller.cpp @@ -508,7 +508,7 @@ }; for (auto page : configPages) { - cfgDlg.addConfigPage(page); + cfgDlg.appendConfigPage(page); } auto addPluginPages = [&](IPlugin* plugin) { @@ -518,26 +518,25 @@ continue; if (page->configPageType() == ConfigPage::LanguageConfigPage) { - cfgDlg.addSubConfigPage(languageConfigPage, page); + cfgDlg.appendSubConfigPage(languageConfigPage, page); } else if (page->configPageType() == ConfigPage::AnalyzerConfigPage) { - cfgDlg.addSubConfigPage(analyzersPreferences, page); + cfgDlg.appendSubConfigPage(analyzersPreferences, page); } else if (page->configPageType() == ConfigPage::RuntimeConfigPage) { - cfgDlg.addSubConfigPage(runtimesPreferences, page); + cfgDlg.appendSubConfigPage(runtimesPreferences, page); } else if (page->configPageType() == ConfigPage::DocumentationConfigPage) { - cfgDlg.addSubConfigPage(documentationPreferences, page); + cfgDlg.appendSubConfigPage(documentationPreferences, page); } else { - // insert them before the editor config page - cfgDlg.addConfigPage(page, editorConfigPage); + cfgDlg.insertConfigPage(editorConfigPage, page); } } }; - cfgDlg.addConfigPage(documentationPreferences, configPages[5]); - cfgDlg.addConfigPage(analyzersPreferences, documentationPreferences); - cfgDlg.addConfigPage(runtimesPreferences, analyzersPreferences); + cfgDlg.insertConfigPage(configPages[5], documentationPreferences); + cfgDlg.insertConfigPage(documentationPreferences, analyzersPreferences); + cfgDlg.insertConfigPage(analyzersPreferences, runtimesPreferences); - cfgDlg.addConfigPage(languageConfigPage, runtimesPreferences); - cfgDlg.addSubConfigPage(languageConfigPage, new BGPreferences(&cfgDlg)); + cfgDlg.insertConfigPage(runtimesPreferences, languageConfigPage); + cfgDlg.appendSubConfigPage(languageConfigPage, new BGPreferences(&cfgDlg)); foreach (IPlugin* plugin, ICore::self()->pluginController()->loadedPlugins()) { addPluginPages(plugin);