diff --git a/kdevplatform/shell/configdialog.h b/kdevplatform/shell/configdialog.h --- a/kdevplatform/shell/configdialog.h +++ b/kdevplatform/shell/configdialog.h @@ -49,18 +49,11 @@ 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 and sort it alphabetically. * @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); - /** * Add a new sub config page * @param parentPage the parent page diff --git a/kdevplatform/shell/configdialog.cpp b/kdevplatform/shell/configdialog.cpp --- a/kdevplatform/shell/configdialog.cpp +++ b/kdevplatform/shell/configdialog.cpp @@ -147,19 +147,29 @@ 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::appendSubConfigPage(ConfigPage* parentPage, ConfigPage* page) { - auto item = itemForPage(parentPage); - Q_ASSERT(item); - addConfigPageInternal(addSubPage(item, page, page->name()), page); + auto parentItem = itemForPage(parentPage); + Q_ASSERT(parentItem); + + 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) diff --git a/kdevplatform/shell/uicontroller.cpp b/kdevplatform/shell/uicontroller.cpp --- a/kdevplatform/shell/uicontroller.cpp +++ b/kdevplatform/shell/uicontroller.cpp @@ -527,16 +527,16 @@ } else if (page->configPageType() == ConfigPage::DocumentationConfigPage) { cfgDlg.appendSubConfigPage(documentationPreferences, page); } else { - cfgDlg.insertConfigPage(editorConfigPage, page); + cfgDlg.appendConfigPage(page); } } }; - cfgDlg.insertConfigPage(templateConfig, documentationPreferences); - cfgDlg.insertConfigPage(documentationPreferences, analyzersPreferences); - cfgDlg.insertConfigPage(analyzersPreferences, runtimesPreferences); + cfgDlg.appendConfigPage(documentationPreferences); + cfgDlg.appendConfigPage(analyzersPreferences); + cfgDlg.appendConfigPage(runtimesPreferences); - cfgDlg.insertConfigPage(runtimesPreferences, languageConfigPage); + cfgDlg.appendConfigPage(languageConfigPage); cfgDlg.appendSubConfigPage(languageConfigPage, new BGPreferences(&cfgDlg)); foreach (IPlugin* plugin, ICore::self()->pluginController()->loadedPlugins()) {