diff --git a/kdevplatform/shell/configdialog.h b/kdevplatform/shell/configdialog.h --- a/kdevplatform/shell/configdialog.h +++ b/kdevplatform/shell/configdialog.h @@ -49,24 +49,17 @@ void removeConfigPage(ConfigPage* page); /** - * Add a new config page to the end of the list of pages. + * Add a new config page to 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 - */ - void insertConfigPage(ConfigPage* before, ConfigPage* page); + void addConfigPage(ConfigPage* page); /** * Add a new sub config page * @param parentPage the parent page * @param page the page to add */ - void appendSubConfigPage(ConfigPage* parentPage, ConfigPage* page); + void addSubConfigPage(ConfigPage* parentPage, ConfigPage* page); Q_SIGNALS: void configSaved(ConfigPage* page); diff --git a/kdevplatform/shell/configdialog.cpp b/kdevplatform/shell/configdialog.cpp --- a/kdevplatform/shell/configdialog.cpp +++ b/kdevplatform/shell/configdialog.cpp @@ -142,24 +142,34 @@ m_pages.removeAll(QPointer()); } -void ConfigDialog::appendConfigPage(ConfigPage* page) +void ConfigDialog::addConfigPage(ConfigPage* page) { addConfigPageInternal(addPage(page, page->name()), page); } -void ConfigDialog::insertConfigPage(ConfigPage* before, ConfigPage* page) +void ConfigDialog::addSubConfigPage(ConfigPage* parentPage, ConfigPage* page) { - Q_ASSERT(before); - auto beforeItem = itemForPage(before); - Q_ASSERT(beforeItem); - addConfigPageInternal(insertPage(beforeItem, page, page->name()), page); -} + auto parentItem = itemForPage(parentPage); + Q_ASSERT(parentItem); -void ConfigDialog::appendSubConfigPage(ConfigPage* parentPage, ConfigPage* page) -{ - auto item = itemForPage(parentPage); - Q_ASSERT(item); - addConfigPageInternal(addSubPage(item, page, page->name()), page); + auto model = static_cast(pageWidget()->model()); + Q_ASSERT(model); + + auto parentIndex = model->index(parentItem); + Q_ASSERT(parentIndex.isValid()); + + const int parentRowCount = model->rowCount(parentIndex); + for (int i = 0; i < parentRowCount; ++i) { + auto childItem = model->item(model->index(i, 0, parentIndex)); + Q_ASSERT(childItem); + + if (childItem->name().localeAwareCompare(page->name()) > 0) { + addConfigPageInternal(insertPage(childItem, page, page->name()), page); + return; + } + } + + addConfigPageInternal(addSubPage(parentItem, page, page->name()), page); } void ConfigDialog::addConfigPageInternal(KPageWidgetItem* item, ConfigPage* page) @@ -173,7 +183,7 @@ m_pages.append(item); for (int i = 0; i < page->childPages(); ++i) { auto child = page->childPage(i); - appendSubConfigPage(page, child); + addSubConfigPage(page, child); } } diff --git a/kdevplatform/shell/projectcontroller.cpp b/kdevplatform/shell/projectcontroller.cpp --- a/kdevplatform/shell/projectcontroller.cpp +++ b/kdevplatform/shell/projectcontroller.cpp @@ -160,7 +160,7 @@ }); for (auto page : configPages) { - cfgDlg->appendConfigPage(page); + cfgDlg->addConfigPage(page); } QObject::connect(cfgDlg, &ConfigDialog::configSaved, cfgDlg, [this, proj](ConfigPage* page) { diff --git a/kdevplatform/shell/uicontroller.cpp b/kdevplatform/shell/uicontroller.cpp --- a/kdevplatform/shell/uicontroller.cpp +++ b/kdevplatform/shell/uicontroller.cpp @@ -509,7 +509,7 @@ }; for (auto page : configPages) { - cfgDlg.appendConfigPage(page); + cfgDlg.addConfigPage(page); } auto addPluginPages = [&](IPlugin* plugin) { @@ -519,25 +519,25 @@ continue; if (page->configPageType() == ConfigPage::LanguageConfigPage) { - cfgDlg.appendSubConfigPage(languageConfigPage, page); + cfgDlg.addSubConfigPage(languageConfigPage, page); } else if (page->configPageType() == ConfigPage::AnalyzerConfigPage) { - cfgDlg.appendSubConfigPage(analyzersPreferences, page); + cfgDlg.addSubConfigPage(analyzersPreferences, page); } else if (page->configPageType() == ConfigPage::RuntimeConfigPage) { - cfgDlg.appendSubConfigPage(runtimesPreferences, page); + cfgDlg.addSubConfigPage(runtimesPreferences, page); } else if (page->configPageType() == ConfigPage::DocumentationConfigPage) { - cfgDlg.appendSubConfigPage(documentationPreferences, page); + cfgDlg.addSubConfigPage(documentationPreferences, page); } else { - cfgDlg.insertConfigPage(editorConfigPage, page); + cfgDlg.addConfigPage(page); } } }; - cfgDlg.insertConfigPage(templateConfig, documentationPreferences); - cfgDlg.insertConfigPage(documentationPreferences, analyzersPreferences); - cfgDlg.insertConfigPage(analyzersPreferences, runtimesPreferences); + cfgDlg.addConfigPage(documentationPreferences); + cfgDlg.addConfigPage(analyzersPreferences); + cfgDlg.addConfigPage(runtimesPreferences); - cfgDlg.insertConfigPage(runtimesPreferences, languageConfigPage); - cfgDlg.appendSubConfigPage(languageConfigPage, new BGPreferences(&cfgDlg)); + cfgDlg.addConfigPage(languageConfigPage); + cfgDlg.addSubConfigPage(languageConfigPage, new BGPreferences(&cfgDlg)); foreach (IPlugin* plugin, ICore::self()->pluginController()->loadedPlugins()) { addPluginPages(plugin);