diff options
Diffstat (limited to 'src/plugins/coreplugin/dialogs/settingsdialog.cpp')
-rw-r--r-- | src/plugins/coreplugin/dialogs/settingsdialog.cpp | 89 |
1 files changed, 45 insertions, 44 deletions
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 0935413c7f..52a1f1aee9 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -29,32 +29,34 @@ #include "settingsdialog.h" -#include <extensionsystem/pluginmanager.h> #include "icore.h" +#include <extensionsystem/pluginmanager.h> +#include <utils/hostosinfo.h> #include <utils/filterlineedit.h> -#include <QSettings> -#include <QSortFilterProxyModel> -#include <QItemSelectionModel> +#include <QApplication> +#include <QDialogButtonBox> +#include <QFrame> +#include <QGridLayout> +#include <QGroupBox> #include <QHBoxLayout> #include <QIcon> +#include <QItemSelectionModel> #include <QLabel> +#include <QLineEdit> +#include <QListView> +#include <QPointer> #include <QPushButton> -#include <QToolButton> -#include <QToolBar> #include <QScrollBar> +#include <QSettings> +#include <QSortFilterProxyModel> #include <QSpacerItem> -#include <QStyle> #include <QStackedLayout> -#include <QGridLayout> -#include <QLineEdit> -#include <QFrame> -#include <QDialogButtonBox> -#include <QListView> -#include <QApplication> -#include <QGroupBox> +#include <QStyle> #include <QStyledItemDelegate> +#include <QToolBar> +#include <QToolButton> static const char categoryKeyC[] = "General/LastPreferenceCategory"; static const char pageKeyC[] = "General/LastPreferencePage"; @@ -63,13 +65,14 @@ const int categoryIconSize = 24; namespace Core { namespace Internal { -QPointer<SettingsDialog> SettingsDialog::m_instance = 0; +static QPointer<SettingsDialog> m_instance = 0; // ----------- Category model -class Category { +class Category +{ public: - QString id; + Id id; QString displayName; QIcon icon; QList<IOptionsPage *> pages; @@ -92,7 +95,7 @@ public: const QList<Category*> &categories() const { return m_categories; } private: - Category *findCategoryById(const QString &id); + Category *findCategoryById(Id id); QList<Category*> m_categories; QIcon m_emptyIcon; @@ -135,13 +138,15 @@ QVariant CategoryModel::data(const QModelIndex &index, int role) const void CategoryModel::setPages(const QList<IOptionsPage*> &pages, const QList<IOptionsPageProvider *> &providers) { + beginResetModel(); + // Clear any previous categories qDeleteAll(m_categories); m_categories.clear(); // Put the pages in categories foreach (IOptionsPage *page, pages) { - const QString &categoryId = page->category(); + const Id categoryId = page->category(); Category *category = findCategoryById(categoryId); if (!category) { category = new Category; @@ -158,7 +163,7 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages, } foreach (IOptionsPageProvider *provider, providers) { - const QString &categoryId = provider->category(); + const Id categoryId = provider->category(); Category *category = findCategoryById(categoryId); if (!category) { category = new Category; @@ -174,10 +179,10 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages, category->providers.append(provider); } - reset(); + endResetModel(); } -Category *CategoryModel::findCategoryById(const QString &id) +Category *CategoryModel::findCategoryById(Id id) { for (int i = 0; i < m_categories.size(); ++i) { Category *category = m_categories.at(i); @@ -265,9 +270,9 @@ public: // Helpers to sort by category. id bool optionsPageLessThan(const IOptionsPage *p1, const IOptionsPage *p2) { - if (const int cc = p1->category().compare(p2->category())) - return cc < 0; - return p1->id().compare(p2->id()) < 0; + if (p1->category() != p2->category()) + return p1->category().alphabeticallyBefore(p2->category()); + return p1->id().alphabeticallyBefore(p2->id()); } static inline QList<Core::IOptionsPage*> sortedOptionsPages() @@ -294,11 +299,10 @@ SettingsDialog::SettingsDialog(QWidget *parent) : createGui(); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); -#ifdef Q_OS_MAC - setWindowTitle(tr("Preferences")); -#else - setWindowTitle(tr("Options")); -#endif + if (Utils::HostOsInfo::isMacHost()) + setWindowTitle(tr("Preferences")); + else + setWindowTitle(tr("Options")); m_model->setPages(m_pages, ExtensionSystem::PluginManager::getObjects<IOptionsPageProvider>()); @@ -323,15 +327,15 @@ SettingsDialog::SettingsDialog(QWidget *parent) : m_categoryList->setFocus(); } -void SettingsDialog::showPage(const QString &categoryId, const QString &pageId) +void SettingsDialog::showPage(Id categoryId, Id pageId) { // handle the case of "show last page" - QString initialCategory = categoryId; - QString initialPage = pageId; - if (initialCategory.isEmpty() && initialPage.isEmpty()) { + Id initialCategory = categoryId; + Id initialPage = pageId; + if (!initialCategory.isValid() && !initialPage.isValid()) { QSettings *settings = ICore::settings(); - initialCategory = settings->value(QLatin1String(categoryKeyC), QVariant(QString())).toString(); - initialPage = settings->value(QLatin1String(pageKeyC), QVariant(QString())).toString(); + initialCategory = Id::fromSetting(settings->value(QLatin1String(categoryKeyC))); + initialPage = Id::fromSetting(settings->value(QLatin1String(pageKeyC))); } int initialCategoryIndex = -1; @@ -459,7 +463,7 @@ void SettingsDialog::updateEnabledTabs(Category *category, const QString &search for (int i = 0; i < category->pages.size(); ++i) { const IOptionsPage *page = category->pages.at(i); const bool enabled = searchText.isEmpty() - || page->category().contains(searchText, Qt::CaseInsensitive) + || page->category().toString().contains(searchText, Qt::CaseInsensitive) || page->displayName().contains(searchText, Qt::CaseInsensitive) || page->matches(searchText); category->tabWidget->setTabEnabled(i, enabled); @@ -538,8 +542,8 @@ void SettingsDialog::apply() void SettingsDialog::done(int val) { QSettings *settings = ICore::settings(); - settings->setValue(QLatin1String(categoryKeyC), m_currentCategory); - settings->setValue(QLatin1String(pageKeyC), m_currentPage); + settings->setValue(QLatin1String(categoryKeyC), m_currentCategory.toSetting()); + settings->setValue(QLatin1String(pageKeyC), m_currentPage.toSetting()); ICore::saveSettings(); // save all settings @@ -563,12 +567,10 @@ QSize SettingsDialog::sizeHint() const } SettingsDialog *SettingsDialog::getSettingsDialog(QWidget *parent, - const QString &initialCategory, - const QString &initialPage) + Id initialCategory, Id initialPage) { - if (!m_instance) { + if (!m_instance) m_instance = new SettingsDialog(parent); - } m_instance->showPage(initialCategory, initialPage); return m_instance; } @@ -600,6 +602,5 @@ bool SettingsDialog::execDialog() return m_applied; } - } // namespace Internal } // namespace Core |