summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/dialogs/settingsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/coreplugin/dialogs/settingsdialog.cpp')
-rw-r--r--src/plugins/coreplugin/dialogs/settingsdialog.cpp89
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