Delay widget creation of options pages till their category is shown

Also add the alternative way: IOptionsPageProvider, which states
a category, and is asked for a list of options pages for that
category when it is shown.

Task-number: QTCREATORBUG-3131
This commit is contained in:
con
2010-12-02 18:28:16 +01:00
parent 5c99316624
commit 773343f396
32 changed files with 549 additions and 352 deletions

View File

@@ -315,6 +315,8 @@ void CMakeSettingsPage::saveSettings() const
void CMakeSettingsPage::apply() void CMakeSettingsPage::apply()
{ {
if (!m_pathchooser) // page was never shown
return;
if (m_cmakeExecutable == m_pathchooser->path()) if (m_cmakeExecutable == m_pathchooser->path())
return; return;
m_cmakeExecutable = m_pathchooser->path(); m_cmakeExecutable = m_pathchooser->path();

View File

@@ -54,7 +54,7 @@ using namespace Core;
using namespace Core::Internal; using namespace Core::Internal;
CommandMappings::CommandMappings(QObject *parent) CommandMappings::CommandMappings(QObject *parent)
: IOptionsPage(parent) : IOptionsPage(parent), m_page(0)
{ {
} }
@@ -140,7 +140,10 @@ void CommandMappings::setTargetHeader(const QString &s)
void CommandMappings::finish() void CommandMappings::finish()
{ {
if (!m_page) // page was never shown
return;
delete m_page; delete m_page;
m_page = 0;
} }
void CommandMappings::commandChanged(QTreeWidgetItem *current) void CommandMappings::commandChanged(QTreeWidgetItem *current)

View File

@@ -34,14 +34,19 @@
\mainclass \mainclass
\brief The IOptionsPage is an interface for providing options pages. \brief The IOptionsPage is an interface for providing options pages.
You need to subclass this interface and put an instance of your subclass
into the plugin manager object pool (e.g. ExtensionSystem::PluginManager::addObject).
Guidelines for implementing: Guidelines for implementing:
\list \list
\o id() is an id used for filtering when calling ICore:: showOptionsDialog() \o id() is a unique identifier for referencing this page
\o displayName() is the (translated) name for display. \o displayName() is the (translated) name for display
\o category() is the category used for filtering when calling ICore:: showOptionsDialog() \o category() is the unique id for the category that the page should be displayed in
\o displayCategory() is the translated category \o displayCategory() is the translated name of the category
\o createPage() is called to retrieve the widget to show in the preferences dialog
The widget will be destroyed by the widget hierarchy when the dialog closes
\o apply() is called to store the settings. It should detect if any changes have been \o apply() is called to store the settings. It should detect if any changes have been
made and store those. made and store those
\o matches() is used for the options dialog search filter. \o finish() is called directly before the preferences dialog closes
\o matches() is used for the options dialog search filter
\endlist \endlist
*/ */

View File

@@ -60,6 +60,29 @@ public:
virtual void finish() = 0; virtual void finish() = 0;
}; };
/*
Alternative way for providing option pages instead of adding IOptionsPage
objects into the plugin manager pool. Should only be used if creation of the
actual option pages is not possible or too expensive at Qt Creator startup.
(Like the designer integration, which needs to initialize designer plugins
before the options pages get available.)
*/
class CORE_EXPORT IOptionsPageProvider : public QObject
{
Q_OBJECT
public:
IOptionsPageProvider(QObject *parent = 0) : QObject(parent) {}
virtual ~IOptionsPageProvider() {}
virtual QString category() const = 0;
virtual QString displayCategory() const = 0;
virtual QIcon categoryIcon() const = 0;
virtual QList<IOptionsPage *> pages() const = 0;
};
} // namespace Core } // namespace Core
#endif // IOPTIONSPAGE_H #endif // IOPTIONSPAGE_H

View File

@@ -73,6 +73,7 @@ public:
QString displayName; QString displayName;
QIcon icon; QIcon icon;
QList<IOptionsPage *> pages; QList<IOptionsPage *> pages;
QList<IOptionsPageProvider *> providers;
int index; int index;
QTabWidget *tabWidget; QTabWidget *tabWidget;
}; };
@@ -86,7 +87,8 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const; int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
void setPages(const QList<IOptionsPage*> &pages); void setPages(const QList<IOptionsPage*> &pages,
const QList<IOptionsPageProvider *> &providers);
const QList<Category*> &categories() const { return m_categories; } const QList<Category*> &categories() const { return m_categories; }
private: private:
@@ -130,7 +132,8 @@ QVariant CategoryModel::data(const QModelIndex &index, int role) const
return QVariant(); return QVariant();
} }
void CategoryModel::setPages(const QList<IOptionsPage*> &pages) void CategoryModel::setPages(const QList<IOptionsPage*> &pages,
const QList<IOptionsPageProvider *> &providers)
{ {
// Clear any previous categories // Clear any previous categories
qDeleteAll(m_categories); qDeleteAll(m_categories);
@@ -143,13 +146,32 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages)
if (!category) { if (!category) {
category = new Category; category = new Category;
category->id = categoryId; category->id = categoryId;
category->tabWidget = 0;
category->index = -1;
m_categories.append(category);
}
if (category->displayName.isEmpty())
category->displayName = page->displayCategory(); category->displayName = page->displayCategory();
if (category->icon.isNull())
category->icon = page->categoryIcon(); category->icon = page->categoryIcon();
category->pages.append(page); category->pages.append(page);
m_categories.append(category);
} else {
category->pages.append(page);
} }
foreach (IOptionsPageProvider *provider, providers) {
const QString &categoryId = provider->category();
Category *category = findCategoryById(categoryId);
if (!category) {
category = new Category;
category->id = categoryId;
category->tabWidget = 0;
category->index = -1;
m_categories.append(category);
}
if (category->displayName.isEmpty())
category->displayName = provider->displayCategory();
if (category->icon.isNull())
category->icon = provider->categoryIcon();
category->providers.append(provider);
} }
reset(); reset();
@@ -277,26 +299,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
setWindowTitle(tr("Options")); setWindowTitle(tr("Options"));
#endif #endif
m_model->setPages(m_pages); m_model->setPages(m_pages,
ExtensionSystem::PluginManager::instance()->getObjects<IOptionsPageProvider>());
// Create the tab widgets with the pages in each category
const QList<Category*> &categories = m_model->categories();
for (int i = 0; i < categories.size(); ++i) {
Category *category = categories.at(i);
QTabWidget *tabWidget = new QTabWidget;
for (int j = 0; j < category->pages.size(); ++j) {
IOptionsPage *page = category->pages.at(j);
QWidget *widget = page->createPage(0);
tabWidget->addTab(widget, page->displayName());
}
connect(tabWidget, SIGNAL(currentChanged(int)),
this, SLOT(currentTabChanged(int)));
category->tabWidget = tabWidget;
category->index = m_stackedLayout->addWidget(tabWidget);
}
m_proxyModel->setSourceModel(m_model); m_proxyModel->setSourceModel(m_model);
m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
@@ -383,6 +387,7 @@ void SettingsDialog::createGui()
mainGridLayout->addWidget(buttonBox, 2, 0, 1, 2); mainGridLayout->addWidget(buttonBox, 2, 0, 1, 2);
mainGridLayout->setColumnStretch(1, 4); mainGridLayout->setColumnStretch(1, 4);
setLayout(mainGridLayout); setLayout(mainGridLayout);
setMinimumSize(1070, 680);
} }
SettingsDialog::~SettingsDialog() SettingsDialog::~SettingsDialog()
@@ -392,7 +397,7 @@ SettingsDialog::~SettingsDialog()
void SettingsDialog::showCategory(int index) void SettingsDialog::showCategory(int index)
{ {
Category *category = m_model->categories().at(index); Category *category = m_model->categories().at(index);
ensureCategoryWidget(category);
// Update current category and page // Update current category and page
m_currentCategory = category->id; m_currentCategory = category->id;
const int currentTabIndex = category->tabWidget->currentIndex(); const int currentTabIndex = category->tabWidget->currentIndex();
@@ -408,6 +413,29 @@ void SettingsDialog::showCategory(int index)
updateEnabledTabs(category, m_filterLineEdit->text()); updateEnabledTabs(category, m_filterLineEdit->text());
} }
void SettingsDialog::ensureCategoryWidget(Category *category)
{
if (category->tabWidget != 0)
return;
foreach (const IOptionsPageProvider *provider, category->providers) {
category->pages += provider->pages();
}
qStableSort(category->pages.begin(), category->pages.end(), optionsPageLessThan);
QTabWidget *tabWidget = new QTabWidget;
for (int j = 0; j < category->pages.size(); ++j) {
IOptionsPage *page = category->pages.at(j);
QWidget *widget = page->createPage(0);
tabWidget->addTab(widget, page->displayName());
}
connect(tabWidget, SIGNAL(currentChanged(int)),
this, SLOT(currentTabChanged(int)));
category->tabWidget = tabWidget;
category->index = m_stackedLayout->addWidget(tabWidget);
}
void SettingsDialog::updateEnabledTabs(Category *category, const QString &searchText) void SettingsDialog::updateEnabledTabs(Category *category, const QString &searchText)
{ {
for (int i = 0; i < category->pages.size(); ++i) { for (int i = 0; i < category->pages.size(); ++i) {

View File

@@ -93,6 +93,7 @@ private:
void showCategory(int index); void showCategory(int index);
void showPage(const QString &categoryId, const QString &pageId); void showPage(const QString &categoryId, const QString &pageId);
void updateEnabledTabs(Category *category, const QString &searchText); void updateEnabledTabs(Category *category, const QString &searchText);
void ensureCategoryWidget(Category *category);
const QList<Core::IOptionsPage*> m_pages; const QList<Core::IOptionsPage*> m_pages;

View File

@@ -53,7 +53,7 @@ using namespace Core::Internal;
GeneralSettings::GeneralSettings(): GeneralSettings::GeneralSettings():
m_dialog(0) m_page(0), m_dialog(0)
{ {
} }
@@ -188,6 +188,8 @@ bool GeneralSettings::matches(const QString &s) const
void GeneralSettings::apply() void GeneralSettings::apply()
{ {
if (!m_page) // wasn't shown, can't be changed
return;
int currentIndex = m_page->languageBox->currentIndex(); int currentIndex = m_page->languageBox->currentIndex();
setLanguage(m_page->languageBox->itemData(currentIndex, Qt::UserRole).toString()); setLanguage(m_page->languageBox->itemData(currentIndex, Qt::UserRole).toString());
// Apply the new base color if accepted // Apply the new base color if accepted
@@ -205,7 +207,10 @@ void GeneralSettings::apply()
void GeneralSettings::finish() void GeneralSettings::finish()
{ {
if (!m_page) // page was never shown
return;
delete m_page; delete m_page;
m_page = 0;
} }
void GeneralSettings::resetInterfaceColor() void GeneralSettings::resetInterfaceColor()

View File

@@ -96,7 +96,7 @@ FileShareProtocolSettings FileShareProtocolSettingsWidget::settings() const
// ----------FileShareProtocolSettingsPage // ----------FileShareProtocolSettingsPage
FileShareProtocolSettingsPage::FileShareProtocolSettingsPage(const QSharedPointer<FileShareProtocolSettings> &s, FileShareProtocolSettingsPage::FileShareProtocolSettingsPage(const QSharedPointer<FileShareProtocolSettings> &s,
QObject *parent) : QObject *parent) :
Core::IOptionsPage(parent), m_settings(s) Core::IOptionsPage(parent), m_settings(s), m_widget(0)
{ {
} }
@@ -134,6 +134,8 @@ QWidget *FileShareProtocolSettingsPage::createPage(QWidget *parent)
void FileShareProtocolSettingsPage::apply() void FileShareProtocolSettingsPage::apply()
{ {
if (!m_widget) // page was never shown
return;
const FileShareProtocolSettings newSettings = m_widget->settings(); const FileShareProtocolSettings newSettings = m_widget->settings();
if (newSettings != *m_settings) { if (newSettings != *m_settings) {
*m_settings = newSettings; *m_settings = newSettings;

View File

@@ -76,7 +76,7 @@ Settings SettingsWidget::settings()
} }
SettingsPage::SettingsPage(const QSharedPointer<Settings> &settings) : SettingsPage::SettingsPage(const QSharedPointer<Settings> &settings) :
m_settings(settings) m_settings(settings), m_widget(0)
{ {
} }
@@ -121,7 +121,8 @@ QWidget *SettingsPage::createPage(QWidget *parent)
void SettingsPage::apply() void SettingsPage::apply()
{ {
QTC_ASSERT(m_widget, return) if (!m_widget) // page was never shown
return;
const Settings newSettings = m_widget->settings(); const Settings newSettings = m_widget->settings();
if (newSettings != *m_settings) { if (newSettings != *m_settings) {
*m_settings = newSettings; *m_settings = newSettings;

View File

@@ -40,7 +40,7 @@
using namespace CppTools::Internal; using namespace CppTools::Internal;
CompletionSettingsPage::CompletionSettingsPage() CompletionSettingsPage::CompletionSettingsPage()
: m_page(new Ui_CompletionSettingsPage) : m_page(0)
{ {
} }
@@ -62,6 +62,7 @@ QString CompletionSettingsPage::displayName() const
QWidget *CompletionSettingsPage::createPage(QWidget *parent) QWidget *CompletionSettingsPage::createPage(QWidget *parent)
{ {
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
m_page = new Ui_CompletionSettingsPage;
m_page->setupUi(w); m_page->setupUi(w);
const TextEditor::CompletionSettings &settings = const TextEditor::CompletionSettings &settings =
@@ -113,6 +114,8 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent)
void CompletionSettingsPage::apply() void CompletionSettingsPage::apply()
{ {
if (!m_page) // page was never shown
return;
TextEditor::CompletionSettings settings; TextEditor::CompletionSettings settings;
settings.m_caseSensitivity = caseSensitivity(); settings.m_caseSensitivity = caseSensitivity();
settings.m_completionTrigger = completionTrigger(); settings.m_completionTrigger = completionTrigger();
@@ -151,3 +154,11 @@ TextEditor::CompletionTrigger CompletionSettingsPage::completionTrigger() const
return TextEditor::AutomaticCompletion; return TextEditor::AutomaticCompletion;
} }
} }
void CompletionSettingsPage::finish()
{
if (!m_page) // page was never shown
return;
delete m_page;
m_page = 0;
}

View File

@@ -55,7 +55,7 @@ public:
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();
void finish() { } void finish();
virtual bool matches(const QString &) const; virtual bool matches(const QString &) const;
private: private:

View File

@@ -139,6 +139,7 @@ void GdbOptionsPage::writeGdbBinarySettings() /* static */
} }
GdbOptionsPage::GdbOptionsPage() GdbOptionsPage::GdbOptionsPage()
: m_ui(0)
{ {
} }
@@ -170,67 +171,68 @@ QIcon GdbOptionsPage::categoryIcon() const
QWidget *GdbOptionsPage::createPage(QWidget *parent) QWidget *GdbOptionsPage::createPage(QWidget *parent)
{ {
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
m_ui.setupUi(w); m_ui = new Ui::GdbOptionsPage;
m_ui.gdbChooserWidget->setGdbBinaries(gdbBinaryToolChainMap); m_ui->setupUi(w);
m_ui.scriptFileChooser->setExpectedKind(Utils::PathChooser::File); m_ui->gdbChooserWidget->setGdbBinaries(gdbBinaryToolChainMap);
m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); m_ui->scriptFileChooser->setExpectedKind(Utils::PathChooser::File);
m_ui->scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File"));
m_group.clear(); m_group.clear();
m_group.insert(debuggerCore()->action(GdbScriptFile), m_group.insert(debuggerCore()->action(GdbScriptFile),
m_ui.scriptFileChooser); m_ui->scriptFileChooser);
m_group.insert(debuggerCore()->action(GdbEnvironment), m_group.insert(debuggerCore()->action(GdbEnvironment),
m_ui.environmentEdit); m_ui->environmentEdit);
m_group.insert(debuggerCore()->action(AdjustBreakpointLocations), m_group.insert(debuggerCore()->action(AdjustBreakpointLocations),
m_ui.checkBoxAdjustBreakpointLocations); m_ui->checkBoxAdjustBreakpointLocations);
m_group.insert(debuggerCore()->action(GdbWatchdogTimeout), m_group.insert(debuggerCore()->action(GdbWatchdogTimeout),
m_ui.spinBoxGdbWatchdogTimeout); m_ui->spinBoxGdbWatchdogTimeout);
m_group.insert(debuggerCore()->action(UseMessageBoxForSignals), m_group.insert(debuggerCore()->action(UseMessageBoxForSignals),
m_ui.checkBoxUseMessageBoxForSignals); m_ui->checkBoxUseMessageBoxForSignals);
m_group.insert(debuggerCore()->action(SkipKnownFrames), m_group.insert(debuggerCore()->action(SkipKnownFrames),
m_ui.checkBoxSkipKnownFrames); m_ui->checkBoxSkipKnownFrames);
m_group.insert(debuggerCore()->action(EnableReverseDebugging), m_group.insert(debuggerCore()->action(EnableReverseDebugging),
m_ui.checkBoxEnableReverseDebugging); m_ui->checkBoxEnableReverseDebugging);
m_group.insert(debuggerCore()->action(GdbWatchdogTimeout), 0); m_group.insert(debuggerCore()->action(GdbWatchdogTimeout), 0);
#if 1 #if 1
m_ui.groupBoxPluginDebugging->hide(); m_ui->groupBoxPluginDebugging->hide();
#else // The related code (handleAqcuiredInferior()) is disabled as well. #else // The related code (handleAqcuiredInferior()) is disabled as well.
m_group.insert(debuggerCore()->action(AllPluginBreakpoints), m_group.insert(debuggerCore()->action(AllPluginBreakpoints),
m_ui.radioButtonAllPluginBreakpoints); m_ui->radioButtonAllPluginBreakpoints);
m_group.insert(debuggerCore()->action(SelectedPluginBreakpoints), m_group.insert(debuggerCore()->action(SelectedPluginBreakpoints),
m_ui.radioButtonSelectedPluginBreakpoints); m_ui->radioButtonSelectedPluginBreakpoints);
m_group.insert(debuggerCore()->action(NoPluginBreakpoints), m_group.insert(debuggerCore()->action(NoPluginBreakpoints),
m_ui.radioButtonNoPluginBreakpoints); m_ui->radioButtonNoPluginBreakpoints);
m_group.insert(debuggerCore()->action(SelectedPluginBreakpointsPattern), m_group.insert(debuggerCore()->action(SelectedPluginBreakpointsPattern),
m_ui.lineEditSelectedPluginBreakpointsPattern); m_ui->lineEditSelectedPluginBreakpointsPattern);
#endif #endif
m_ui.lineEditSelectedPluginBreakpointsPattern-> m_ui->lineEditSelectedPluginBreakpointsPattern->
setEnabled(debuggerCore()->action(SelectedPluginBreakpoints)->value().toBool()); setEnabled(debuggerCore()->action(SelectedPluginBreakpoints)->value().toBool());
connect(m_ui.radioButtonSelectedPluginBreakpoints, SIGNAL(toggled(bool)), connect(m_ui->radioButtonSelectedPluginBreakpoints, SIGNAL(toggled(bool)),
m_ui.lineEditSelectedPluginBreakpointsPattern, SLOT(setEnabled(bool))); m_ui->lineEditSelectedPluginBreakpointsPattern, SLOT(setEnabled(bool)));
// FIXME // FIXME
m_ui.environmentEdit->hide(); m_ui->environmentEdit->hide();
m_ui.labelEnvironment->hide(); m_ui->labelEnvironment->hide();
if (m_searchKeywords.isEmpty()) { if (m_searchKeywords.isEmpty()) {
QLatin1Char sep(' '); QLatin1Char sep(' ');
QTextStream(&m_searchKeywords) QTextStream(&m_searchKeywords)
<< sep << m_ui.groupBoxLocations->title() << sep << m_ui->groupBoxLocations->title()
<< sep << m_ui.labelEnvironment->text() << sep << m_ui->labelEnvironment->text()
<< sep << m_ui.labelGdbStartupScript->text() << sep << m_ui->labelGdbStartupScript->text()
<< sep << m_ui.labelGdbWatchdogTimeout->text() << sep << m_ui->labelGdbWatchdogTimeout->text()
<< sep << m_ui.checkBoxEnableReverseDebugging->text() << sep << m_ui->checkBoxEnableReverseDebugging->text()
<< sep << m_ui.checkBoxSkipKnownFrames->text() << sep << m_ui->checkBoxSkipKnownFrames->text()
<< sep << m_ui.checkBoxUseMessageBoxForSignals->text() << sep << m_ui->checkBoxUseMessageBoxForSignals->text()
<< sep << m_ui.checkBoxAdjustBreakpointLocations->text() << sep << m_ui->checkBoxAdjustBreakpointLocations->text()
<< sep << m_ui.groupBoxPluginDebugging->title() << sep << m_ui->groupBoxPluginDebugging->title()
<< sep << m_ui.radioButtonAllPluginBreakpoints->text() << sep << m_ui->radioButtonAllPluginBreakpoints->text()
<< sep << m_ui.radioButtonSelectedPluginBreakpoints->text() << sep << m_ui->radioButtonSelectedPluginBreakpoints->text()
<< sep << m_ui.labelSelectedPluginBreakpoints->text() << sep << m_ui->labelSelectedPluginBreakpoints->text()
<< sep << m_ui.radioButtonNoPluginBreakpoints->text() << sep << m_ui->radioButtonNoPluginBreakpoints->text()
; ;
m_searchKeywords.remove(QLatin1Char('&')); m_searchKeywords.remove(QLatin1Char('&'));
} }
@@ -239,17 +241,22 @@ QWidget *GdbOptionsPage::createPage(QWidget *parent)
void GdbOptionsPage::apply() void GdbOptionsPage::apply()
{ {
if (!m_ui) // page never shown
return;
m_group.apply(Core::ICore::instance()->settings()); m_group.apply(Core::ICore::instance()->settings());
if (m_ui->gdbChooserWidget->isDirty()) {
if (m_ui.gdbChooserWidget->isDirty()) {
gdbBinariesChanged = true; gdbBinariesChanged = true;
gdbBinaryToolChainMap = m_ui.gdbChooserWidget->gdbBinaries(); gdbBinaryToolChainMap = m_ui->gdbChooserWidget->gdbBinaries();
m_ui.gdbChooserWidget->clearDirty(); m_ui->gdbChooserWidget->clearDirty();
} }
} }
void GdbOptionsPage::finish() void GdbOptionsPage::finish()
{ {
if (!m_ui) // page never shown
return;
delete m_ui;
m_ui = 0;
m_group.finish(); m_group.finish();
} }

View File

@@ -64,7 +64,7 @@ public:
static void writeGdbBinarySettings(); static void writeGdbBinarySettings();
private: private:
Ui::GdbOptionsPage m_ui; Ui::GdbOptionsPage *m_ui;
Utils::SavedActionSet m_group; Utils::SavedActionSet m_group;
QString m_searchKeywords; QString m_searchKeywords;
}; };

View File

@@ -37,6 +37,7 @@
# include "cppsettingspage.h" # include "cppsettingspage.h"
#endif #endif
#include "settingspage.h"
#include "designerconstants.h" #include "designerconstants.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
@@ -84,6 +85,7 @@ bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error)
initializeTemplates(); initializeTemplates();
addAutoReleasedObject(new FormEditorFactory); addAutoReleasedObject(new FormEditorFactory);
addAutoReleasedObject(new SettingsPageProvider);
// Ensure that loading designer translations is done before FormEditorW is instantiated // Ensure that loading designer translations is done before FormEditorW is instantiated
const QString locale = Core::ICore::instance()->userInterfaceLanguage(); const QString locale = Core::ICore::instance()->userInterfaceLanguage();
@@ -97,18 +99,9 @@ bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error)
qApp->installTranslator(qtr); qApp->installTranslator(qtr);
} }
error->clear(); error->clear();
// Delayed loading: Make sure settings pages are there if options
// dialog is requested.
connect(Core::ICore::instance(), SIGNAL(optionsDialogRequested()),
this, SLOT(ensurePluginInitialized()));
return true; return true;
} }
void FormEditorPlugin::ensurePluginInitialized()
{
FormEditorW::instance()->ensureInitStage(FormEditorW::RegisterPlugins);
}
void FormEditorPlugin::extensionsInitialized() void FormEditorPlugin::extensionsInitialized()
{ {
// 4) test and make sure everything works (undo, saving, editors, opening/closing multiple files, dirtiness etc) // 4) test and make sure everything works (undo, saving, editors, opening/closing multiple files, dirtiness etc)

View File

@@ -57,9 +57,6 @@ public:
bool initialize(const QStringList &arguments, QString *error_message = 0); bool initialize(const QStringList &arguments, QString *error_message = 0);
void extensionsInitialized(); void extensionsInitialized();
public slots:
void ensurePluginInitialized();
private: private:
void initializeTemplates(); void initializeTemplates();

View File

@@ -186,7 +186,6 @@ FormEditorW::FormEditorW() :
foreach (QDesignerOptionsPageInterface *designerPage, m_formeditor->optionsPages()) { foreach (QDesignerOptionsPageInterface *designerPage, m_formeditor->optionsPages()) {
SettingsPage *settingsPage = new SettingsPage(designerPage); SettingsPage *settingsPage = new SettingsPage(designerPage);
ExtensionSystem::PluginManager::instance()->addObject(settingsPage);
m_settingsPages.append(settingsPage); m_settingsPages.append(settingsPage);
} }
@@ -213,10 +212,8 @@ FormEditorW::~FormEditorW()
} }
delete m_formeditor; delete m_formeditor;
foreach (SettingsPage *settingsPage, m_settingsPages) { qDeleteAll(m_settingsPages);
ExtensionSystem::PluginManager::instance()->removeObject(settingsPage); m_settingsPages.clear();
delete settingsPage;
}
delete m_integration; delete m_integration;
m_self = 0; m_self = 0;
@@ -389,6 +386,11 @@ void FormEditorW::initDesignerSubWindows()
m_designerSubWindows[ActionEditorSubWindow] = ae; m_designerSubWindows[ActionEditorSubWindow] = ae;
} }
QList<Core::IOptionsPage *> FormEditorW::optionsPages() const
{
return m_settingsPages;
}
void FormEditorW::ensureInitStage(InitializationStage s) void FormEditorW::ensureInitStage(InitializationStage s)
{ {
if (Designer::Constants::Internal::debug) if (Designer::Constants::Internal::debug)

View File

@@ -32,7 +32,8 @@
#include "designerconstants.h" #include "designerconstants.h"
#include "coreplugin/icontext.h" #include <coreplugin/icontext.h>
#include <coreplugin/dialogs/ioptionspage.h>
#include <QtCore/QMap> #include <QtCore/QMap>
#include <QtCore/QObject> #include <QtCore/QObject>
@@ -85,12 +86,10 @@ class DesignerContext;
* The plugin uses this stage at first by calling ensureInitStage(). * The plugin uses this stage at first by calling ensureInitStage().
* Requesting an editor via instance() will fully initialize the class. * Requesting an editor via instance() will fully initialize the class.
* This is based on the assumption that the Designer settings work with * This is based on the assumption that the Designer settings work with
* no plugins loaded. If that does not work, full initialization can be * no plugins loaded.
* triggered by connection to the ICore::optionsDialogRequested() signal.
* *
* The form editor shows a read-only XML editor in edit mode and Qt Designer * The form editor shows a read-only XML editor in edit mode and Qt Designer
* in Design mode. It connects to void EditorManager::currentEditorChanged() * in Design mode. */
* and switches modes if a designer XML editor is activated. */
class FormEditorW : public QObject class FormEditorW : public QObject
{ {
Q_OBJECT Q_OBJECT
@@ -117,6 +116,7 @@ public:
inline QWidget * const*designerSubWindows() const { return m_designerSubWindows; } inline QWidget * const*designerSubWindows() const { return m_designerSubWindows; }
EditorData activeEditor() const; EditorData activeEditor() const;
QList<Core::IOptionsPage *> optionsPages() const;
private slots: private slots:
void activateEditMode(int id); void activateEditMode(int id);
@@ -178,7 +178,7 @@ private:
QAction *m_lockAction; QAction *m_lockAction;
QAction *m_resetLayoutAction; QAction *m_resetLayoutAction;
QList<SettingsPage *> m_settingsPages; QList<Core::IOptionsPage *> m_settingsPages;
QActionGroup *m_actionGroupEditMode; QActionGroup *m_actionGroupEditMode;
QAction *m_actionPrint; QAction *m_actionPrint;
QAction *m_actionPreview; QAction *m_actionPreview;

View File

@@ -29,6 +29,7 @@
#include "settingspage.h" #include "settingspage.h"
#include "designerconstants.h" #include "designerconstants.h"
#include "formeditorw.h"
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
#include "qt_private/abstractoptionspage_p.h" #include "qt_private/abstractoptionspage_p.h"
@@ -37,7 +38,7 @@
using namespace Designer::Internal; using namespace Designer::Internal;
SettingsPage::SettingsPage(QDesignerOptionsPageInterface *designerPage) : SettingsPage::SettingsPage(QDesignerOptionsPageInterface *designerPage) :
m_designerPage(designerPage) m_designerPage(designerPage), m_initialized(false)
{ {
} }
@@ -72,15 +73,52 @@ QIcon SettingsPage::categoryIcon() const
QWidget *SettingsPage::createPage(QWidget *parent) QWidget *SettingsPage::createPage(QWidget *parent)
{ {
m_initialized = true;
return m_designerPage->createPage(parent); return m_designerPage->createPage(parent);
} }
void SettingsPage::apply() void SettingsPage::apply()
{ {
if (m_initialized)
m_designerPage->apply(); m_designerPage->apply();
} }
void SettingsPage::finish() void SettingsPage::finish()
{ {
if (m_initialized)
m_designerPage->finish(); m_designerPage->finish();
} }
SettingsPageProvider::SettingsPageProvider(QObject *parent)
: IOptionsPageProvider(parent), m_initialized(false)
{
}
SettingsPageProvider::~SettingsPageProvider()
{
}
QString SettingsPageProvider::category() const
{
return QLatin1String(Designer::Constants::SETTINGS_CATEGORY);
}
QString SettingsPageProvider::displayCategory() const
{
return QCoreApplication::translate("Designer", Designer::Constants::SETTINGS_TR_CATEGORY);
}
QIcon SettingsPageProvider::categoryIcon() const
{
return QIcon(QLatin1String(Designer::Constants::SETTINGS_CATEGORY_ICON));
}
QList<Core::IOptionsPage *> SettingsPageProvider::pages() const
{
if (!m_initialized) {
// get options pages from designer
m_initialized = true;
FormEditorW::ensureInitStage(FormEditorW::RegisterPlugins);
}
return FormEditorW::instance()->optionsPages();
}

View File

@@ -61,6 +61,25 @@ public:
private: private:
QDesignerOptionsPageInterface *m_designerPage; QDesignerOptionsPageInterface *m_designerPage;
bool m_initialized;
};
class SettingsPageProvider : public Core::IOptionsPageProvider
{
Q_OBJECT
public:
SettingsPageProvider(QObject *parent = 0);
~SettingsPageProvider();
QString category() const;
QString displayCategory() const;
QIcon categoryIcon() const;
QList<Core::IOptionsPage *> pages() const;
private:
mutable bool m_initialized;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -54,6 +54,7 @@
using namespace Help::Internal; using namespace Help::Internal;
GeneralSettingsPage::GeneralSettingsPage() GeneralSettingsPage::GeneralSettingsPage()
: m_ui(0)
{ {
m_font = qApp->font(); m_font = qApp->font();
#if !defined(QT_NO_WEBKIT) #if !defined(QT_NO_WEBKIT)
@@ -90,10 +91,10 @@ QIcon GeneralSettingsPage::categoryIcon() const
QWidget *GeneralSettingsPage::createPage(QWidget *parent) QWidget *GeneralSettingsPage::createPage(QWidget *parent)
{ {
QWidget *widget = new QWidget(parent); QWidget *widget = new QWidget(parent);
m_ui = new Ui::GeneralSettingsPage;
m_ui.setupUi(widget); m_ui->setupUi(widget);
m_ui.sizeComboBox->setEditable(false); m_ui->sizeComboBox->setEditable(false);
m_ui.styleComboBox->setEditable(false); m_ui->styleComboBox->setEditable(false);
Core::HelpManager *manager = Core::HelpManager::instance(); Core::HelpManager *manager = Core::HelpManager::instance();
m_font = qVariantValue<QFont>(manager->customValue(QLatin1String("font"), m_font = qVariantValue<QFont>(manager->customValue(QLatin1String("font"),
@@ -109,58 +110,60 @@ QWidget *GeneralSettingsPage::createPage(QWidget *parent)
m_homePage = manager->customValue(QLatin1String("DefaultHomePage"), m_homePage = manager->customValue(QLatin1String("DefaultHomePage"),
Help::Constants::AboutBlank).toString(); Help::Constants::AboutBlank).toString();
} }
m_ui.homePageLineEdit->setText(m_homePage); m_ui->homePageLineEdit->setText(m_homePage);
const int startOption = manager->customValue(QLatin1String("StartOption"), const int startOption = manager->customValue(QLatin1String("StartOption"),
Help::Constants::ShowLastPages).toInt(); Help::Constants::ShowLastPages).toInt();
m_ui.helpStartComboBox->setCurrentIndex(startOption); m_ui->helpStartComboBox->setCurrentIndex(startOption);
m_contextOption = manager->customValue(QLatin1String("ContextHelpOption"), m_contextOption = manager->customValue(QLatin1String("ContextHelpOption"),
Help::Constants::SideBySideIfPossible).toInt(); Help::Constants::SideBySideIfPossible).toInt();
m_ui.contextHelpComboBox->setCurrentIndex(m_contextOption); m_ui->contextHelpComboBox->setCurrentIndex(m_contextOption);
connect(m_ui.currentPageButton, SIGNAL(clicked()), this, SLOT(setCurrentPage())); connect(m_ui->currentPageButton, SIGNAL(clicked()), this, SLOT(setCurrentPage()));
connect(m_ui.blankPageButton, SIGNAL(clicked()), this, SLOT(setBlankPage())); connect(m_ui->blankPageButton, SIGNAL(clicked()), this, SLOT(setBlankPage()));
connect(m_ui.defaultPageButton, SIGNAL(clicked()), this, SLOT(setDefaultPage())); connect(m_ui->defaultPageButton, SIGNAL(clicked()), this, SLOT(setDefaultPage()));
HelpViewer *viewer = CentralWidget::instance()->currentHelpViewer(); HelpViewer *viewer = CentralWidget::instance()->currentHelpViewer();
if (!viewer) if (!viewer)
m_ui.currentPageButton->setEnabled(false); m_ui->currentPageButton->setEnabled(false);
m_ui.errorLabel->setVisible(false); m_ui->errorLabel->setVisible(false);
connect(m_ui.importButton, SIGNAL(clicked()), this, SLOT(importBookmarks())); connect(m_ui->importButton, SIGNAL(clicked()), this, SLOT(importBookmarks()));
connect(m_ui.exportButton, SIGNAL(clicked()), this, SLOT(exportBookmarks())); connect(m_ui->exportButton, SIGNAL(clicked()), this, SLOT(exportBookmarks()));
if (m_searchKeywords.isEmpty()) { if (m_searchKeywords.isEmpty()) {
QTextStream(&m_searchKeywords) << ' ' << m_ui.contextHelpLabel->text() QTextStream(&m_searchKeywords) << ' ' << m_ui->contextHelpLabel->text()
<< ' ' << m_ui.startPageLabel->text() << ' ' << m_ui.homePageLabel->text() << ' ' << m_ui->startPageLabel->text() << ' ' << m_ui->homePageLabel->text()
<< ' ' << m_ui.bookmarkGroupBox->title(); << ' ' << m_ui->bookmarkGroupBox->title();
m_searchKeywords.remove(QLatin1Char('&')); m_searchKeywords.remove(QLatin1Char('&'));
} }
m_returnOnClose = manager->customValue(QLatin1String("ReturnOnClose"), m_returnOnClose = manager->customValue(QLatin1String("ReturnOnClose"),
false).toBool(); false).toBool();
m_ui.m_returnOnClose->setChecked(m_returnOnClose); m_ui->m_returnOnClose->setChecked(m_returnOnClose);
return widget; return widget;
} }
void GeneralSettingsPage::apply() void GeneralSettingsPage::apply()
{ {
if (!m_ui) // page was never shown
return;
QFont newFont; QFont newFont;
const QString &family = m_ui.familyComboBox->currentFont().family(); const QString &family = m_ui->familyComboBox->currentFont().family();
newFont.setFamily(family); newFont.setFamily(family);
int fontSize = 14; int fontSize = 14;
int currentIndex = m_ui.sizeComboBox->currentIndex(); int currentIndex = m_ui->sizeComboBox->currentIndex();
if (currentIndex != -1) if (currentIndex != -1)
fontSize = m_ui.sizeComboBox->itemData(currentIndex).toInt(); fontSize = m_ui->sizeComboBox->itemData(currentIndex).toInt();
newFont.setPointSize(fontSize); newFont.setPointSize(fontSize);
QString fontStyle = QLatin1String("Normal"); QString fontStyle = QLatin1String("Normal");
currentIndex = m_ui.styleComboBox->currentIndex(); currentIndex = m_ui->styleComboBox->currentIndex();
if (currentIndex != -1) if (currentIndex != -1)
fontStyle = m_ui.styleComboBox->itemText(currentIndex); fontStyle = m_ui->styleComboBox->itemText(currentIndex);
newFont.setBold(m_fontDatabase.bold(family, fontStyle)); newFont.setBold(m_fontDatabase.bold(family, fontStyle));
if (fontStyle.contains(QLatin1String("Italic"))) if (fontStyle.contains(QLatin1String("Italic")))
newFont.setStyle(QFont::StyleItalic); newFont.setStyle(QFont::StyleItalic);
@@ -180,15 +183,15 @@ void GeneralSettingsPage::apply()
emit fontChanged(); emit fontChanged();
} }
QString homePage = m_ui.homePageLineEdit->text(); QString homePage = m_ui->homePageLineEdit->text();
if (homePage.isEmpty()) if (homePage.isEmpty())
homePage = Help::Constants::AboutBlank; homePage = Help::Constants::AboutBlank;
manager->setCustomValue(QLatin1String("HomePage"), homePage); manager->setCustomValue(QLatin1String("HomePage"), homePage);
const int startOption = m_ui.helpStartComboBox->currentIndex(); const int startOption = m_ui->helpStartComboBox->currentIndex();
manager->setCustomValue(QLatin1String("StartOption"), startOption); manager->setCustomValue(QLatin1String("StartOption"), startOption);
const int helpOption = m_ui.contextHelpComboBox->currentIndex(); const int helpOption = m_ui->contextHelpComboBox->currentIndex();
if (m_contextOption != helpOption) { if (m_contextOption != helpOption) {
m_contextOption = helpOption; m_contextOption = helpOption;
manager->setCustomValue(QLatin1String("ContextHelpOption"), helpOption); manager->setCustomValue(QLatin1String("ContextHelpOption"), helpOption);
@@ -201,7 +204,7 @@ void GeneralSettingsPage::apply()
emit contextHelpOptionChanged(); emit contextHelpOptionChanged();
} }
const bool close = m_ui.m_returnOnClose->isChecked(); const bool close = m_ui->m_returnOnClose->isChecked();
if (m_returnOnClose != close) { if (m_returnOnClose != close) {
m_returnOnClose = close; m_returnOnClose = close;
manager->setCustomValue(QLatin1String("ReturnOnClose"), close); manager->setCustomValue(QLatin1String("ReturnOnClose"), close);
@@ -213,24 +216,24 @@ void GeneralSettingsPage::setCurrentPage()
{ {
HelpViewer *viewer = CentralWidget::instance()->currentHelpViewer(); HelpViewer *viewer = CentralWidget::instance()->currentHelpViewer();
if (viewer) if (viewer)
m_ui.homePageLineEdit->setText(viewer->source().toString()); m_ui->homePageLineEdit->setText(viewer->source().toString());
} }
void GeneralSettingsPage::setBlankPage() void GeneralSettingsPage::setBlankPage()
{ {
m_ui.homePageLineEdit->setText(Help::Constants::AboutBlank); m_ui->homePageLineEdit->setText(Help::Constants::AboutBlank);
} }
void GeneralSettingsPage::setDefaultPage() void GeneralSettingsPage::setDefaultPage()
{ {
const QString &defaultHomePage = Core::HelpManager::instance() const QString &defaultHomePage = Core::HelpManager::instance()
->customValue(QLatin1String("DefaultHomePage"), QString()).toString(); ->customValue(QLatin1String("DefaultHomePage"), QString()).toString();
m_ui.homePageLineEdit->setText(defaultHomePage); m_ui->homePageLineEdit->setText(defaultHomePage);
} }
void GeneralSettingsPage::importBookmarks() void GeneralSettingsPage::importBookmarks()
{ {
m_ui.errorLabel->setVisible(false); m_ui->errorLabel->setVisible(false);
QString fileName = QFileDialog::getOpenFileName(0, tr("Import Bookmarks"), QString fileName = QFileDialog::getOpenFileName(0, tr("Import Bookmarks"),
QDir::currentPath(), tr("Files (*.xbel)")); QDir::currentPath(), tr("Files (*.xbel)"));
@@ -246,13 +249,13 @@ void GeneralSettingsPage::importBookmarks()
return; return;
} }
m_ui.errorLabel->setVisible(true); m_ui->errorLabel->setVisible(true);
m_ui.errorLabel->setText(tr("There was an error while importing bookmarks!")); m_ui->errorLabel->setText(tr("There was an error while importing bookmarks!"));
} }
void GeneralSettingsPage::exportBookmarks() void GeneralSettingsPage::exportBookmarks()
{ {
m_ui.errorLabel->setVisible(false); m_ui->errorLabel->setVisible(false);
QString fileName = QFileDialog::getSaveFileName(0, tr("Save File"), QString fileName = QFileDialog::getSaveFileName(0, tr("Save File"),
"untitled.xbel", tr("Files (*.xbel)")); "untitled.xbel", tr("Files (*.xbel)"));
@@ -277,18 +280,18 @@ void GeneralSettingsPage::updateFontSize()
if (pointSizes.empty()) if (pointSizes.empty())
pointSizes = QFontDatabase::standardSizes(); pointSizes = QFontDatabase::standardSizes();
m_ui.sizeComboBox->clear(); m_ui->sizeComboBox->clear();
m_ui.sizeComboBox->setCurrentIndex(-1); m_ui->sizeComboBox->setCurrentIndex(-1);
m_ui.sizeComboBox->setEnabled(!pointSizes.empty()); m_ui->sizeComboBox->setEnabled(!pointSizes.empty());
// try to maintain selection or select closest. // try to maintain selection or select closest.
if (!pointSizes.empty()) { if (!pointSizes.empty()) {
QString n; QString n;
foreach (int pointSize, pointSizes) foreach (int pointSize, pointSizes)
m_ui.sizeComboBox->addItem(n.setNum(pointSize), QVariant(pointSize)); m_ui->sizeComboBox->addItem(n.setNum(pointSize), QVariant(pointSize));
const int closestIndex = closestPointSizeIndex(m_font.pointSize()); const int closestIndex = closestPointSizeIndex(m_font.pointSize());
if (closestIndex != -1) if (closestIndex != -1)
m_ui.sizeComboBox->setCurrentIndex(closestIndex); m_ui->sizeComboBox->setCurrentIndex(closestIndex);
} }
} }
@@ -297,32 +300,32 @@ void GeneralSettingsPage::updateFontStyle()
const QString &fontStyle = m_fontDatabase.styleString(m_font); const QString &fontStyle = m_fontDatabase.styleString(m_font);
const QStringList &styles = m_fontDatabase.styles(m_font.family()); const QStringList &styles = m_fontDatabase.styles(m_font.family());
m_ui.styleComboBox->clear(); m_ui->styleComboBox->clear();
m_ui.styleComboBox->setCurrentIndex(-1); m_ui->styleComboBox->setCurrentIndex(-1);
m_ui.styleComboBox->setEnabled(!styles.empty()); m_ui->styleComboBox->setEnabled(!styles.empty());
if (!styles.empty()) { if (!styles.empty()) {
int normalIndex = -1; int normalIndex = -1;
const QString normalStyle = QLatin1String("Normal"); const QString normalStyle = QLatin1String("Normal");
foreach (const QString &style, styles) { foreach (const QString &style, styles) {
// try to maintain selection or select 'normal' preferably // try to maintain selection or select 'normal' preferably
const int newIndex = m_ui.styleComboBox->count(); const int newIndex = m_ui->styleComboBox->count();
m_ui.styleComboBox->addItem(style); m_ui->styleComboBox->addItem(style);
if (fontStyle == style) { if (fontStyle == style) {
m_ui.styleComboBox->setCurrentIndex(newIndex); m_ui->styleComboBox->setCurrentIndex(newIndex);
} else { } else {
if (fontStyle == normalStyle) if (fontStyle == normalStyle)
normalIndex = newIndex; normalIndex = newIndex;
} }
} }
if (m_ui.styleComboBox->currentIndex() == -1 && normalIndex != -1) if (m_ui->styleComboBox->currentIndex() == -1 && normalIndex != -1)
m_ui.styleComboBox->setCurrentIndex(normalIndex); m_ui->styleComboBox->setCurrentIndex(normalIndex);
} }
} }
void GeneralSettingsPage::updateFontFamily() void GeneralSettingsPage::updateFontFamily()
{ {
m_ui.familyComboBox->setCurrentFont(m_font); m_ui->familyComboBox->setCurrentFont(m_font);
} }
int GeneralSettingsPage::closestPointSizeIndex(int desiredPointSize) const int GeneralSettingsPage::closestPointSizeIndex(int desiredPointSize) const
@@ -331,9 +334,9 @@ int GeneralSettingsPage::closestPointSizeIndex(int desiredPointSize) const
int closestIndex = -1; int closestIndex = -1;
int closestAbsError = 0xFFFF; int closestAbsError = 0xFFFF;
const int pointSizeCount = m_ui.sizeComboBox->count(); const int pointSizeCount = m_ui->sizeComboBox->count();
for (int i = 0; i < pointSizeCount; i++) { for (int i = 0; i < pointSizeCount; i++) {
const int itemPointSize = m_ui.sizeComboBox->itemData(i).toInt(); const int itemPointSize = m_ui->sizeComboBox->itemData(i).toInt();
const int absError = qAbs(desiredPointSize - itemPointSize); const int absError = qAbs(desiredPointSize - itemPointSize);
if (absError < closestAbsError) { if (absError < closestAbsError) {
closestIndex = i; closestIndex = i;
@@ -353,3 +356,11 @@ bool GeneralSettingsPage::matches(const QString &s) const
{ {
return m_searchKeywords.contains(s, Qt::CaseInsensitive); return m_searchKeywords.contains(s, Qt::CaseInsensitive);
} }
void GeneralSettingsPage::finish()
{
if (!m_ui) // page was never shown
return;
delete m_ui;
m_ui = 0;
}

View File

@@ -53,7 +53,7 @@ public:
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();
void finish() {} void finish();
virtual bool matches(const QString &s) const; virtual bool matches(const QString &s) const;
signals: signals:
@@ -85,7 +85,7 @@ private:
bool m_returnOnClose; bool m_returnOnClose;
QString m_searchKeywords; QString m_searchKeywords;
Ui::GeneralSettingsPage m_ui; Ui::GeneralSettingsPage *m_ui;
}; };
} // Internal } // Internal

View File

@@ -109,6 +109,8 @@ QWidget *SettingsPage::createPage(QWidget *parent)
void SettingsPage::apply() void SettingsPage::apply()
{ {
if (!m_widget) // page was never shown
return;
BauhausPlugin::pluginInstance()->setSettings(m_widget->settings()); BauhausPlugin::pluginInstance()->setSettings(m_widget->settings());
} }

View File

@@ -161,6 +161,8 @@ QWidget *QuickToolBarSettingsPage::createPage(QWidget *parent)
void QuickToolBarSettingsPage::apply() void QuickToolBarSettingsPage::apply()
{ {
if (!m_widget) // page was never shown
return;
m_widget->settings().set(); m_widget->settings().set();
} }

View File

@@ -411,7 +411,8 @@ QWidget *S60DevicesPreferencePane::createPage(QWidget *parent)
void S60DevicesPreferencePane::apply() void S60DevicesPreferencePane::apply()
{ {
QTC_ASSERT(m_widget, return) if (!m_widget) // page was never shown
return;
m_devices->setDevices(m_widget->devices()); m_devices->setDevices(m_widget->devices());
} }

View File

@@ -133,6 +133,8 @@ QWidget *QtOptionsPage::createPage(QWidget *parent)
void QtOptionsPage::apply() void QtOptionsPage::apply()
{ {
if (!m_widget) // page was never shown
return;
m_widget->finish(); m_widget->finish();
QtVersionManager *vm = QtVersionManager::instance(); QtVersionManager *vm = QtVersionManager::instance();

View File

@@ -49,7 +49,7 @@ struct BehaviorSettingsPage::BehaviorSettingsPagePrivate
explicit BehaviorSettingsPagePrivate(const BehaviorSettingsPageParameters &p); explicit BehaviorSettingsPagePrivate(const BehaviorSettingsPageParameters &p);
const BehaviorSettingsPageParameters m_parameters; const BehaviorSettingsPageParameters m_parameters;
Ui::BehaviorSettingsPage m_page; Ui::BehaviorSettingsPage *m_page;
TabSettings m_tabSettings; TabSettings m_tabSettings;
StorageSettings m_storageSettings; StorageSettings m_storageSettings;
@@ -60,7 +60,7 @@ struct BehaviorSettingsPage::BehaviorSettingsPagePrivate
BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate
(const BehaviorSettingsPageParameters &p) (const BehaviorSettingsPageParameters &p)
: m_parameters(p) : m_parameters(p), m_page(0)
{ {
if (const QSettings *s = Core::ICore::instance()->settings()) { if (const QSettings *s = Core::ICore::instance()->settings()) {
m_tabSettings.fromSettings(m_parameters.settingsPrefix, s); m_tabSettings.fromSettings(m_parameters.settingsPrefix, s);
@@ -94,30 +94,31 @@ QString BehaviorSettingsPage::displayName() const
QWidget *BehaviorSettingsPage::createPage(QWidget *parent) QWidget *BehaviorSettingsPage::createPage(QWidget *parent)
{ {
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
m_d->m_page.setupUi(w); m_d->m_page = new Ui::BehaviorSettingsPage;
m_d->m_page->setupUi(w);
settingsToUI(); settingsToUI();
if (m_d->m_searchKeywords.isEmpty()) { if (m_d->m_searchKeywords.isEmpty()) {
QLatin1Char sep(' '); QLatin1Char sep(' ');
QTextStream(&m_d->m_searchKeywords) QTextStream(&m_d->m_searchKeywords)
<< m_d->m_page.insertSpaces->text() << m_d->m_page->insertSpaces->text()
<< sep << m_d->m_page.autoInsertSpaces->text() << sep << m_d->m_page->autoInsertSpaces->text()
<< sep << m_d->m_page.autoIndent->text() << sep << m_d->m_page->autoIndent->text()
<< sep << m_d->m_page.smartBackspace->text() << sep << m_d->m_page->smartBackspace->text()
<< sep << m_d->m_page.indentBlocksLabel->text() << sep << m_d->m_page->indentBlocksLabel->text()
<< sep << m_d->m_page.continuationAlignLabel->text() << sep << m_d->m_page->continuationAlignLabel->text()
<< sep << m_d->m_page.tabKeyIndentLabel->text() << sep << m_d->m_page->tabKeyIndentLabel->text()
<< sep << m_d->m_page.cleanWhitespace->text() << sep << m_d->m_page->cleanWhitespace->text()
<< sep << m_d->m_page.inEntireDocument->text() << sep << m_d->m_page->inEntireDocument->text()
<< sep << m_d->m_page.cleanIndentation->text() << sep << m_d->m_page->cleanIndentation->text()
<< sep << m_d->m_page.addFinalNewLine->text() << sep << m_d->m_page->addFinalNewLine->text()
<< sep << m_d->m_page.encodingLabel->text() << sep << m_d->m_page->encodingLabel->text()
<< sep << m_d->m_page.utf8BomLabel->text() << sep << m_d->m_page->utf8BomLabel->text()
<< sep << m_d->m_page.mouseNavigation->text() << sep << m_d->m_page->mouseNavigation->text()
<< sep << m_d->m_page.scrollWheelZooming->text() << sep << m_d->m_page->scrollWheelZooming->text()
<< sep << m_d->m_page.groupBoxTabAndIndentSettings->title() << sep << m_d->m_page->groupBoxTabAndIndentSettings->title()
<< sep << m_d->m_page.groupBoxStorageSettings->title() << sep << m_d->m_page->groupBoxStorageSettings->title()
<< sep << m_d->m_page.groupBoxEncodings->title() << sep << m_d->m_page->groupBoxEncodings->title()
<< sep << m_d->m_page.groupBoxMouse->title(); << sep << m_d->m_page->groupBoxMouse->title();
m_d->m_searchKeywords.remove(QLatin1Char('&')); m_d->m_searchKeywords.remove(QLatin1Char('&'));
} }
@@ -143,18 +144,20 @@ QWidget *BehaviorSettingsPage::createPage(QWidget *parent)
name += QLatin1String(" / "); name += QLatin1String(" / ");
name += QString::fromLatin1(alias); name += QString::fromLatin1(alias);
} }
m_d->m_page.encodingBox->addItem(name); m_d->m_page->encodingBox->addItem(name);
if (defaultTextCodec == codec) if (defaultTextCodec == codec)
m_d->m_page.encodingBox->setCurrentIndex(i); m_d->m_page->encodingBox->setCurrentIndex(i);
} }
m_d->m_page.utf8BomBox->setCurrentIndex(Core::EditorManager::instance()->utf8BomSetting()); m_d->m_page->utf8BomBox->setCurrentIndex(Core::EditorManager::instance()->utf8BomSetting());
return w; return w;
} }
void BehaviorSettingsPage::apply() void BehaviorSettingsPage::apply()
{ {
if (!m_d->m_page) // page was never shown
return;
TabSettings newTabSettings; TabSettings newTabSettings;
StorageSettings newStorageSettings; StorageSettings newStorageSettings;
BehaviorSettings newBehaviorSettings; BehaviorSettings newBehaviorSettings;
@@ -190,61 +193,69 @@ void BehaviorSettingsPage::apply()
QSettings* settings = Core::ICore::instance()->settings(); QSettings* settings = Core::ICore::instance()->settings();
settings->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULTTEXTENCODING), settings->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULTTEXTENCODING),
m_codecs.at(m_d->m_page.encodingBox->currentIndex())->name()); m_codecs.at(m_d->m_page->encodingBox->currentIndex())->name());
Core::EditorManager::instance()->setUtf8BomSetting( Core::EditorManager::instance()->setUtf8BomSetting(
Core::IFile::Utf8BomSetting(m_d->m_page.utf8BomBox->currentIndex())); Core::IFile::Utf8BomSetting(m_d->m_page->utf8BomBox->currentIndex()));
}
void BehaviorSettingsPage::finish()
{
if (!m_d->m_page) // page was never shown
return;
delete m_d->m_page;
m_d->m_page = 0;
} }
void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings, void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings,
StorageSettings &storageSettings, StorageSettings &storageSettings,
BehaviorSettings &behaviorSettings) const BehaviorSettings &behaviorSettings) const
{ {
tabSettings.m_spacesForTabs = m_d->m_page.insertSpaces->isChecked(); tabSettings.m_spacesForTabs = m_d->m_page->insertSpaces->isChecked();
tabSettings.m_autoSpacesForTabs = m_d->m_page.autoInsertSpaces->isChecked(); tabSettings.m_autoSpacesForTabs = m_d->m_page->autoInsertSpaces->isChecked();
tabSettings.m_autoIndent = m_d->m_page.autoIndent->isChecked(); tabSettings.m_autoIndent = m_d->m_page->autoIndent->isChecked();
tabSettings.m_smartBackspace = m_d->m_page.smartBackspace->isChecked(); tabSettings.m_smartBackspace = m_d->m_page->smartBackspace->isChecked();
tabSettings.m_tabSize = m_d->m_page.tabSize->value(); tabSettings.m_tabSize = m_d->m_page->tabSize->value();
tabSettings.m_indentSize = m_d->m_page.indentSize->value(); tabSettings.m_indentSize = m_d->m_page->indentSize->value();
tabSettings.m_indentBraces = m_d->m_page.indentBlocksBehavior->currentIndex() >= 1; tabSettings.m_indentBraces = m_d->m_page->indentBlocksBehavior->currentIndex() >= 1;
tabSettings.m_doubleIndentBlocks = m_d->m_page.indentBlocksBehavior->currentIndex() >= 2; tabSettings.m_doubleIndentBlocks = m_d->m_page->indentBlocksBehavior->currentIndex() >= 2;
tabSettings.m_tabKeyBehavior = (TabSettings::TabKeyBehavior)m_d->m_page.tabKeyBehavior->currentIndex(); tabSettings.m_tabKeyBehavior = (TabSettings::TabKeyBehavior)m_d->m_page->tabKeyBehavior->currentIndex();
tabSettings.m_continuationAlignBehavior = (TabSettings::ContinuationAlignBehavior)m_d->m_page.continuationAlignBehavior->currentIndex(); tabSettings.m_continuationAlignBehavior = (TabSettings::ContinuationAlignBehavior)m_d->m_page->continuationAlignBehavior->currentIndex();
storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked(); storageSettings.m_cleanWhitespace = m_d->m_page->cleanWhitespace->isChecked();
storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked(); storageSettings.m_inEntireDocument = m_d->m_page->inEntireDocument->isChecked();
storageSettings.m_cleanIndentation = m_d->m_page.cleanIndentation->isChecked(); storageSettings.m_cleanIndentation = m_d->m_page->cleanIndentation->isChecked();
storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked(); storageSettings.m_addFinalNewLine = m_d->m_page->addFinalNewLine->isChecked();
behaviorSettings.m_mouseNavigation = m_d->m_page.mouseNavigation->isChecked(); behaviorSettings.m_mouseNavigation = m_d->m_page->mouseNavigation->isChecked();
behaviorSettings.m_scrollWheelZooming = m_d->m_page.scrollWheelZooming->isChecked(); behaviorSettings.m_scrollWheelZooming = m_d->m_page->scrollWheelZooming->isChecked();
} }
void BehaviorSettingsPage::settingsToUI() void BehaviorSettingsPage::settingsToUI()
{ {
const TabSettings &tabSettings = m_d->m_tabSettings; const TabSettings &tabSettings = m_d->m_tabSettings;
m_d->m_page.insertSpaces->setChecked(tabSettings.m_spacesForTabs); m_d->m_page->insertSpaces->setChecked(tabSettings.m_spacesForTabs);
m_d->m_page.autoInsertSpaces->setChecked(tabSettings.m_autoSpacesForTabs); m_d->m_page->autoInsertSpaces->setChecked(tabSettings.m_autoSpacesForTabs);
m_d->m_page.autoIndent->setChecked(tabSettings.m_autoIndent); m_d->m_page->autoIndent->setChecked(tabSettings.m_autoIndent);
m_d->m_page.smartBackspace->setChecked(tabSettings.m_smartBackspace); m_d->m_page->smartBackspace->setChecked(tabSettings.m_smartBackspace);
m_d->m_page.tabSize->setValue(tabSettings.m_tabSize); m_d->m_page->tabSize->setValue(tabSettings.m_tabSize);
m_d->m_page.indentSize->setValue(tabSettings.m_indentSize); m_d->m_page->indentSize->setValue(tabSettings.m_indentSize);
m_d->m_page.indentBlocksBehavior->setCurrentIndex(tabSettings.m_indentBraces ? m_d->m_page->indentBlocksBehavior->setCurrentIndex(tabSettings.m_indentBraces ?
(tabSettings.m_doubleIndentBlocks ? 2 : 1) (tabSettings.m_doubleIndentBlocks ? 2 : 1)
: 0); : 0);
m_d->m_page.tabKeyBehavior->setCurrentIndex(tabSettings.m_tabKeyBehavior); m_d->m_page->tabKeyBehavior->setCurrentIndex(tabSettings.m_tabKeyBehavior);
m_d->m_page.continuationAlignBehavior->setCurrentIndex(tabSettings.m_continuationAlignBehavior); m_d->m_page->continuationAlignBehavior->setCurrentIndex(tabSettings.m_continuationAlignBehavior);
const StorageSettings &storageSettings = m_d->m_storageSettings; const StorageSettings &storageSettings = m_d->m_storageSettings;
m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace); m_d->m_page->cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace);
m_d->m_page.inEntireDocument->setChecked(storageSettings.m_inEntireDocument); m_d->m_page->inEntireDocument->setChecked(storageSettings.m_inEntireDocument);
m_d->m_page.cleanIndentation->setChecked(storageSettings.m_cleanIndentation); m_d->m_page->cleanIndentation->setChecked(storageSettings.m_cleanIndentation);
m_d->m_page.addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine); m_d->m_page->addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine);
const BehaviorSettings &behaviorSettings = m_d->m_behaviorSettings; const BehaviorSettings &behaviorSettings = m_d->m_behaviorSettings;
m_d->m_page.mouseNavigation->setChecked(behaviorSettings.m_mouseNavigation); m_d->m_page->mouseNavigation->setChecked(behaviorSettings.m_mouseNavigation);
m_d->m_page.scrollWheelZooming->setChecked(behaviorSettings.m_scrollWheelZooming); m_d->m_page->scrollWheelZooming->setChecked(behaviorSettings.m_scrollWheelZooming);
} }
const TabSettings &BehaviorSettingsPage::tabSettings() const const TabSettings &BehaviorSettingsPage::tabSettings() const

View File

@@ -62,7 +62,7 @@ public:
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();
void finish() { } void finish();
bool matches(const QString &s) const; bool matches(const QString &s) const;
const TabSettings &tabSettings() const; const TabSettings &tabSettings() const;

View File

@@ -43,14 +43,14 @@ struct DisplaySettingsPage::DisplaySettingsPagePrivate
explicit DisplaySettingsPagePrivate(const DisplaySettingsPageParameters &p); explicit DisplaySettingsPagePrivate(const DisplaySettingsPageParameters &p);
const DisplaySettingsPageParameters m_parameters; const DisplaySettingsPageParameters m_parameters;
Ui::DisplaySettingsPage m_page; Ui::DisplaySettingsPage *m_page;
DisplaySettings m_displaySettings; DisplaySettings m_displaySettings;
QString m_searchKeywords; QString m_searchKeywords;
}; };
DisplaySettingsPage::DisplaySettingsPagePrivate::DisplaySettingsPagePrivate DisplaySettingsPage::DisplaySettingsPagePrivate::DisplaySettingsPagePrivate
(const DisplaySettingsPageParameters &p) (const DisplaySettingsPageParameters &p)
: m_parameters(p) : m_parameters(p), m_page(0)
{ {
if (const QSettings *s = Core::ICore::instance()->settings()) { if (const QSettings *s = Core::ICore::instance()->settings()) {
m_displaySettings.fromSettings(m_parameters.settingsPrefix, s); m_displaySettings.fromSettings(m_parameters.settingsPrefix, s);
@@ -82,18 +82,19 @@ QString DisplaySettingsPage::displayName() const
QWidget *DisplaySettingsPage::createPage(QWidget *parent) QWidget *DisplaySettingsPage::createPage(QWidget *parent)
{ {
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
m_d->m_page.setupUi(w); m_d->m_page = new Ui::DisplaySettingsPage;
m_d->m_page->setupUi(w);
settingsToUI(); settingsToUI();
if (m_d->m_searchKeywords.isEmpty()) { if (m_d->m_searchKeywords.isEmpty()) {
QTextStream(&m_d->m_searchKeywords) << m_d->m_page.displayLineNumbers->text() QTextStream(&m_d->m_searchKeywords) << m_d->m_page->displayLineNumbers->text()
<< ' ' << m_d->m_page.highlightCurrentLine->text() << ' ' << m_d->m_page->highlightCurrentLine->text()
<< ' ' << m_d->m_page.displayFoldingMarkers->text() << ' ' << m_d->m_page->displayFoldingMarkers->text()
<< ' ' << m_d->m_page.highlightBlocks->text() << ' ' << m_d->m_page->highlightBlocks->text()
<< ' ' << m_d->m_page.visualizeWhitespace->text() << ' ' << m_d->m_page->visualizeWhitespace->text()
<< ' ' << m_d->m_page.animateMatchingParentheses->text() << ' ' << m_d->m_page->animateMatchingParentheses->text()
<< ' ' << m_d->m_page.enableTextWrapping->text() << ' ' << m_d->m_page->enableTextWrapping->text()
<< ' ' << m_d->m_page.autoFoldFirstComment->text() << ' ' << m_d->m_page->autoFoldFirstComment->text()
<< ' ' << m_d->m_page.centerOnScroll->text(); << ' ' << m_d->m_page->centerOnScroll->text();
m_d->m_searchKeywords.remove(QLatin1Char('&')); m_d->m_searchKeywords.remove(QLatin1Char('&'));
} }
return w; return w;
@@ -101,43 +102,53 @@ QWidget *DisplaySettingsPage::createPage(QWidget *parent)
void DisplaySettingsPage::apply() void DisplaySettingsPage::apply()
{ {
if (!m_d->m_page) // page was never shown
return;
DisplaySettings newDisplaySettings; DisplaySettings newDisplaySettings;
settingsFromUI(newDisplaySettings); settingsFromUI(newDisplaySettings);
setDisplaySettings(newDisplaySettings); setDisplaySettings(newDisplaySettings);
} }
void DisplaySettingsPage::finish()
{
if (!m_d->m_page) // page was never shown
return;
delete m_d->m_page;
m_d->m_page = 0;
}
void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const
{ {
displaySettings.m_displayLineNumbers = m_d->m_page.displayLineNumbers->isChecked(); displaySettings.m_displayLineNumbers = m_d->m_page->displayLineNumbers->isChecked();
displaySettings.m_textWrapping = m_d->m_page.enableTextWrapping->isChecked(); displaySettings.m_textWrapping = m_d->m_page->enableTextWrapping->isChecked();
displaySettings.m_showWrapColumn = m_d->m_page.showWrapColumn->isChecked(); displaySettings.m_showWrapColumn = m_d->m_page->showWrapColumn->isChecked();
displaySettings.m_wrapColumn = m_d->m_page.wrapColumn->value(); displaySettings.m_wrapColumn = m_d->m_page->wrapColumn->value();
displaySettings.m_visualizeWhitespace = m_d->m_page.visualizeWhitespace->isChecked(); displaySettings.m_visualizeWhitespace = m_d->m_page->visualizeWhitespace->isChecked();
displaySettings.m_displayFoldingMarkers = m_d->m_page.displayFoldingMarkers->isChecked(); displaySettings.m_displayFoldingMarkers = m_d->m_page->displayFoldingMarkers->isChecked();
displaySettings.m_highlightCurrentLine = m_d->m_page.highlightCurrentLine->isChecked(); displaySettings.m_highlightCurrentLine = m_d->m_page->highlightCurrentLine->isChecked();
displaySettings.m_highlightBlocks = m_d->m_page.highlightBlocks->isChecked(); displaySettings.m_highlightBlocks = m_d->m_page->highlightBlocks->isChecked();
displaySettings.m_animateMatchingParentheses = m_d->m_page.animateMatchingParentheses->isChecked(); displaySettings.m_animateMatchingParentheses = m_d->m_page->animateMatchingParentheses->isChecked();
displaySettings.m_markTextChanges = m_d->m_page.markTextChanges->isChecked(); displaySettings.m_markTextChanges = m_d->m_page->markTextChanges->isChecked();
displaySettings.m_autoFoldFirstComment = m_d->m_page.autoFoldFirstComment->isChecked(); displaySettings.m_autoFoldFirstComment = m_d->m_page->autoFoldFirstComment->isChecked();
displaySettings.m_centerCursorOnScroll = m_d->m_page.centerOnScroll->isChecked(); displaySettings.m_centerCursorOnScroll = m_d->m_page->centerOnScroll->isChecked();
} }
void DisplaySettingsPage::settingsToUI() void DisplaySettingsPage::settingsToUI()
{ {
const DisplaySettings &displaySettings = m_d->m_displaySettings; const DisplaySettings &displaySettings = m_d->m_displaySettings;
m_d->m_page.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers); m_d->m_page->displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers);
m_d->m_page.enableTextWrapping->setChecked(displaySettings.m_textWrapping); m_d->m_page->enableTextWrapping->setChecked(displaySettings.m_textWrapping);
m_d->m_page.showWrapColumn->setChecked(displaySettings.m_showWrapColumn); m_d->m_page->showWrapColumn->setChecked(displaySettings.m_showWrapColumn);
m_d->m_page.wrapColumn->setValue(displaySettings.m_wrapColumn); m_d->m_page->wrapColumn->setValue(displaySettings.m_wrapColumn);
m_d->m_page.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace); m_d->m_page->visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace);
m_d->m_page.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers); m_d->m_page->displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers);
m_d->m_page.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine); m_d->m_page->highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine);
m_d->m_page.highlightBlocks->setChecked(displaySettings.m_highlightBlocks); m_d->m_page->highlightBlocks->setChecked(displaySettings.m_highlightBlocks);
m_d->m_page.animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses); m_d->m_page->animateMatchingParentheses->setChecked(displaySettings.m_animateMatchingParentheses);
m_d->m_page.markTextChanges->setChecked(displaySettings.m_markTextChanges); m_d->m_page->markTextChanges->setChecked(displaySettings.m_markTextChanges);
m_d->m_page.autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment); m_d->m_page->autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment);
m_d->m_page.centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll); m_d->m_page->centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll);
} }
const DisplaySettings &DisplaySettingsPage::displaySettings() const const DisplaySettings &DisplaySettingsPage::displaySettings() const

View File

@@ -60,7 +60,7 @@ public:
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();
void finish() { } void finish();
virtual bool matches(const QString &s) const; virtual bool matches(const QString &s) const;
const DisplaySettings &displaySettings() const; const DisplaySettings &displaySettings() const;

View File

@@ -129,7 +129,7 @@ public:
TextEditor::FormatDescriptions m_descriptions; TextEditor::FormatDescriptions m_descriptions;
FontSettings m_value; FontSettings m_value;
FontSettings m_lastValue; FontSettings m_lastValue;
Ui::FontSettingsPage ui; Ui::FontSettingsPage *m_ui;
SchemeListModel *m_schemeListModel; SchemeListModel *m_schemeListModel;
bool m_refreshingSchemeList; bool m_refreshingSchemeList;
QString m_searchKeywords; QString m_searchKeywords;
@@ -180,6 +180,7 @@ FontSettingsPagePrivate::FontSettingsPagePrivate(const TextEditor::FormatDescrip
m_displayName(displayName), m_displayName(displayName),
m_settingsGroup(Utils::settingsKey(category)), m_settingsGroup(Utils::settingsKey(category)),
m_descriptions(fd), m_descriptions(fd),
m_ui(0),
m_schemeListModel(new SchemeListModel), m_schemeListModel(new SchemeListModel),
m_refreshingSchemeList(false) m_refreshingSchemeList(false)
{ {
@@ -331,28 +332,29 @@ QString FontSettingsPage::displayName() const
QWidget *FontSettingsPage::createPage(QWidget *parent) QWidget *FontSettingsPage::createPage(QWidget *parent)
{ {
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
d_ptr->ui.setupUi(w); d_ptr->m_ui = new Ui::FontSettingsPage;
d_ptr->ui.schemeComboBox->setModel(d_ptr->m_schemeListModel); d_ptr->m_ui->setupUi(w);
d_ptr->m_ui->schemeComboBox->setModel(d_ptr->m_schemeListModel);
QFontDatabase db; QFontDatabase db;
const QStringList families = db.families(); const QStringList families = db.families();
d_ptr->ui.familyComboBox->addItems(families); d_ptr->m_ui->familyComboBox->addItems(families);
const int idx = families.indexOf(d_ptr->m_value.family()); const int idx = families.indexOf(d_ptr->m_value.family());
d_ptr->ui.familyComboBox->setCurrentIndex(idx); d_ptr->m_ui->familyComboBox->setCurrentIndex(idx);
d_ptr->ui.antialias->setChecked(d_ptr->m_value.antialias()); d_ptr->m_ui->antialias->setChecked(d_ptr->m_value.antialias());
d_ptr->ui.zoomSpinBox->setValue(d_ptr->m_value.fontZoom()); d_ptr->m_ui->zoomSpinBox->setValue(d_ptr->m_value.fontZoom());
d_ptr->ui.schemeEdit->setFormatDescriptions(d_ptr->m_descriptions); d_ptr->m_ui->schemeEdit->setFormatDescriptions(d_ptr->m_descriptions);
d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font()); d_ptr->m_ui->schemeEdit->setBaseFont(d_ptr->m_value.font());
d_ptr->ui.schemeEdit->setColorScheme(d_ptr->m_value.colorScheme()); d_ptr->m_ui->schemeEdit->setColorScheme(d_ptr->m_value.colorScheme());
connect(d_ptr->ui.familyComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontFamilySelected(QString))); connect(d_ptr->m_ui->familyComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontFamilySelected(QString)));
connect(d_ptr->ui.sizeComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontSizeSelected(QString))); connect(d_ptr->m_ui->sizeComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontSizeSelected(QString)));
connect(d_ptr->ui.zoomSpinBox, SIGNAL(valueChanged(int)), this, SLOT(fontZoomChanged())); connect(d_ptr->m_ui->zoomSpinBox, SIGNAL(valueChanged(int)), this, SLOT(fontZoomChanged()));
connect(d_ptr->ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorSchemeSelected(int))); connect(d_ptr->m_ui->schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorSchemeSelected(int)));
connect(d_ptr->ui.copyButton, SIGNAL(clicked()), this, SLOT(copyColorScheme())); connect(d_ptr->m_ui->copyButton, SIGNAL(clicked()), this, SLOT(copyColorScheme()));
connect(d_ptr->ui.deleteButton, SIGNAL(clicked()), this, SLOT(confirmDeleteColorScheme())); connect(d_ptr->m_ui->deleteButton, SIGNAL(clicked()), this, SLOT(confirmDeleteColorScheme()));
updatePointSizes(); updatePointSizes();
@@ -361,12 +363,12 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
if (d_ptr->m_searchKeywords.isEmpty()) { if (d_ptr->m_searchKeywords.isEmpty()) {
QLatin1Char sep(' '); QLatin1Char sep(' ');
d_ptr->m_searchKeywords = d_ptr->m_searchKeywords =
d_ptr->ui.fontGroupBox->title() + sep d_ptr->m_ui->fontGroupBox->title() + sep
+ d_ptr->ui.familyLabel->text() + sep + d_ptr->m_ui->familyLabel->text() + sep
+ d_ptr->ui.sizeLabel->text() + sep + d_ptr->m_ui->sizeLabel->text() + sep
+ d_ptr->ui.zoomLabel->text() + sep + d_ptr->m_ui->zoomLabel->text() + sep
+ d_ptr->ui.antialias->text() + sep + d_ptr->m_ui->antialias->text() + sep
+ d_ptr->ui.colorSchemeGroupBox->title(); + d_ptr->m_ui->colorSchemeGroupBox->title();
d_ptr->m_searchKeywords.remove(QLatin1Char('&')); d_ptr->m_searchKeywords.remove(QLatin1Char('&'));
} }
return w; return w;
@@ -375,7 +377,7 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
void FontSettingsPage::fontFamilySelected(const QString &family) void FontSettingsPage::fontFamilySelected(const QString &family)
{ {
d_ptr->m_value.setFamily(family); d_ptr->m_value.setFamily(family);
d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font()); d_ptr->m_ui->schemeEdit->setBaseFont(d_ptr->m_value.font());
updatePointSizes(); updatePointSizes();
} }
@@ -383,13 +385,13 @@ void FontSettingsPage::updatePointSizes()
{ {
// Update point sizes // Update point sizes
const int oldSize = d_ptr->m_value.fontSize(); const int oldSize = d_ptr->m_value.fontSize();
if (d_ptr->ui.sizeComboBox->count()) { if (d_ptr->m_ui->sizeComboBox->count()) {
const QString curSize = d_ptr->ui.sizeComboBox->currentText(); const QString curSize = d_ptr->m_ui->sizeComboBox->currentText();
bool ok = true; bool ok = true;
int oldSize = curSize.toInt(&ok); int oldSize = curSize.toInt(&ok);
if (!ok) if (!ok)
oldSize = d_ptr->m_value.fontSize(); oldSize = d_ptr->m_value.fontSize();
d_ptr->ui.sizeComboBox->clear(); d_ptr->m_ui->sizeComboBox->clear();
} }
const QList<int> sizeLst = pointSizesForSelectedFont(); const QList<int> sizeLst = pointSizesForSelectedFont();
int idx = -1; int idx = -1;
@@ -397,16 +399,16 @@ void FontSettingsPage::updatePointSizes()
for (; i < sizeLst.count(); ++i) { for (; i < sizeLst.count(); ++i) {
if (idx == -1 && sizeLst.at(i) >= oldSize) if (idx == -1 && sizeLst.at(i) >= oldSize)
idx = i; idx = i;
d_ptr->ui.sizeComboBox->addItem(QString::number(sizeLst.at(i))); d_ptr->m_ui->sizeComboBox->addItem(QString::number(sizeLst.at(i)));
} }
if (idx != -1) if (idx != -1)
d_ptr->ui.sizeComboBox->setCurrentIndex(idx); d_ptr->m_ui->sizeComboBox->setCurrentIndex(idx);
} }
QList<int> FontSettingsPage::pointSizesForSelectedFont() const QList<int> FontSettingsPage::pointSizesForSelectedFont() const
{ {
QFontDatabase db; QFontDatabase db;
const QString familyName = d_ptr->ui.familyComboBox->currentText(); const QString familyName = d_ptr->m_ui->familyComboBox->currentText();
QList<int> sizeLst = db.pointSizes(familyName); QList<int> sizeLst = db.pointSizes(familyName);
if (!sizeLst.isEmpty()) if (!sizeLst.isEmpty())
return sizeLst; return sizeLst;
@@ -426,13 +428,13 @@ void FontSettingsPage::fontSizeSelected(const QString &sizeString)
const int size = sizeString.toInt(&ok); const int size = sizeString.toInt(&ok);
if (ok) { if (ok) {
d_ptr->m_value.setFontSize(size); d_ptr->m_value.setFontSize(size);
d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font()); d_ptr->m_ui->schemeEdit->setBaseFont(d_ptr->m_value.font());
} }
} }
void FontSettingsPage::fontZoomChanged() void FontSettingsPage::fontZoomChanged()
{ {
d_ptr->m_value.setFontZoom(d_ptr->ui.zoomSpinBox->value()); d_ptr->m_value.setFontZoom(d_ptr->m_ui->zoomSpinBox->value());
} }
void FontSettingsPage::colorSchemeSelected(int index) void FontSettingsPage::colorSchemeSelected(int index)
@@ -446,16 +448,16 @@ void FontSettingsPage::colorSchemeSelected(int index)
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index); const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
readOnly = entry.readOnly; readOnly = entry.readOnly;
d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions); d_ptr->m_value.loadColorScheme(entry.fileName, d_ptr->m_descriptions);
d_ptr->ui.schemeEdit->setColorScheme(d_ptr->m_value.colorScheme()); d_ptr->m_ui->schemeEdit->setColorScheme(d_ptr->m_value.colorScheme());
} }
d_ptr->ui.copyButton->setEnabled(index != -1); d_ptr->m_ui->copyButton->setEnabled(index != -1);
d_ptr->ui.deleteButton->setEnabled(!readOnly); d_ptr->m_ui->deleteButton->setEnabled(!readOnly);
d_ptr->ui.schemeEdit->setReadOnly(readOnly); d_ptr->m_ui->schemeEdit->setReadOnly(readOnly);
} }
void FontSettingsPage::copyColorScheme() void FontSettingsPage::copyColorScheme()
{ {
QInputDialog *dialog = new QInputDialog(d_ptr->ui.copyButton->window()); QInputDialog *dialog = new QInputDialog(d_ptr->m_ui->copyButton->window());
dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setInputMode(QInputDialog::TextInput); dialog->setInputMode(QInputDialog::TextInput);
dialog->setWindowTitle(tr("Copy Color Scheme")); dialog->setWindowTitle(tr("Copy Color Scheme"));
@@ -468,7 +470,7 @@ void FontSettingsPage::copyColorScheme()
void FontSettingsPage::copyColorScheme(const QString &name) void FontSettingsPage::copyColorScheme(const QString &name)
{ {
int index = d_ptr->ui.schemeComboBox->currentIndex(); int index = d_ptr->m_ui->schemeComboBox->currentIndex();
if (index == -1) if (index == -1)
return; return;
@@ -483,7 +485,7 @@ void FontSettingsPage::copyColorScheme(const QString &name)
maybeSaveColorScheme(); maybeSaveColorScheme();
// Make sure we're copying the current version // Make sure we're copying the current version
d_ptr->m_value.setColorScheme(d_ptr->ui.schemeEdit->colorScheme()); d_ptr->m_value.setColorScheme(d_ptr->m_ui->schemeEdit->colorScheme());
ColorScheme scheme = d_ptr->m_value.colorScheme(); ColorScheme scheme = d_ptr->m_value.colorScheme();
scheme.setDisplayName(name); scheme.setDisplayName(name);
@@ -496,7 +498,7 @@ void FontSettingsPage::copyColorScheme(const QString &name)
void FontSettingsPage::confirmDeleteColorScheme() void FontSettingsPage::confirmDeleteColorScheme()
{ {
const int index = d_ptr->ui.schemeComboBox->currentIndex(); const int index = d_ptr->m_ui->schemeComboBox->currentIndex();
if (index == -1) if (index == -1)
return; return;
@@ -508,7 +510,7 @@ void FontSettingsPage::confirmDeleteColorScheme()
tr("Delete Color Scheme"), tr("Delete Color Scheme"),
tr("Are you sure you want to delete this color scheme permanently?"), tr("Are you sure you want to delete this color scheme permanently?"),
QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard | QMessageBox::Cancel,
d_ptr->ui.deleteButton->window()); d_ptr->m_ui->deleteButton->window());
// Change the text and role of the discard button // Change the text and role of the discard button
QPushButton *deleteButton = static_cast<QPushButton*>(messageBox->button(QMessageBox::Discard)); QPushButton *deleteButton = static_cast<QPushButton*>(messageBox->button(QMessageBox::Discard));
@@ -524,7 +526,7 @@ void FontSettingsPage::confirmDeleteColorScheme()
void FontSettingsPage::deleteColorScheme() void FontSettingsPage::deleteColorScheme()
{ {
const int index = d_ptr->ui.schemeComboBox->currentIndex(); const int index = d_ptr->m_ui->schemeComboBox->currentIndex();
QTC_ASSERT(index != -1, return) QTC_ASSERT(index != -1, return)
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index); const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
@@ -536,15 +538,15 @@ void FontSettingsPage::deleteColorScheme()
void FontSettingsPage::maybeSaveColorScheme() void FontSettingsPage::maybeSaveColorScheme()
{ {
if (d_ptr->m_value.colorScheme() == d_ptr->ui.schemeEdit->colorScheme()) if (d_ptr->m_value.colorScheme() == d_ptr->m_ui->schemeEdit->colorScheme())
return; return;
QMessageBox *messageBox = new QMessageBox(QMessageBox::Warning, QMessageBox *messageBox = new QMessageBox(QMessageBox::Warning,
tr("Color Scheme Changed"), tr("Color Scheme Changed"),
tr("The color scheme \"%1\" was modified, do you want to save the changes?") tr("The color scheme \"%1\" was modified, do you want to save the changes?")
.arg(d_ptr->ui.schemeEdit->colorScheme().displayName()), .arg(d_ptr->m_ui->schemeEdit->colorScheme().displayName()),
QMessageBox::Discard | QMessageBox::Save, QMessageBox::Discard | QMessageBox::Save,
d_ptr->ui.schemeComboBox->window()); d_ptr->m_ui->schemeComboBox->window());
// Change the text of the discard button // Change the text of the discard button
QPushButton *discardButton = static_cast<QPushButton*>(messageBox->button(QMessageBox::Discard)); QPushButton *discardButton = static_cast<QPushButton*>(messageBox->button(QMessageBox::Discard));
@@ -553,7 +555,7 @@ void FontSettingsPage::maybeSaveColorScheme()
messageBox->setDefaultButton(QMessageBox::Save); messageBox->setDefaultButton(QMessageBox::Save);
if (messageBox->exec() == QMessageBox::Save) { if (messageBox->exec() == QMessageBox::Save) {
const ColorScheme &scheme = d_ptr->ui.schemeEdit->colorScheme(); const ColorScheme &scheme = d_ptr->m_ui->schemeEdit->colorScheme();
scheme.save(d_ptr->m_value.colorSchemeFileName()); scheme.save(d_ptr->m_value.colorSchemeFileName());
} }
} }
@@ -594,7 +596,7 @@ void FontSettingsPage::refreshColorSchemeList()
d_ptr->m_refreshingSchemeList = true; d_ptr->m_refreshingSchemeList = true;
d_ptr->m_schemeListModel->setColorSchemes(colorSchemes); d_ptr->m_schemeListModel->setColorSchemes(colorSchemes);
d_ptr->ui.schemeComboBox->setCurrentIndex(selected); d_ptr->m_ui->schemeComboBox->setCurrentIndex(selected);
d_ptr->m_refreshingSchemeList = false; d_ptr->m_refreshingSchemeList = false;
} }
@@ -605,16 +607,18 @@ void FontSettingsPage::delayedChange()
void FontSettingsPage::apply() void FontSettingsPage::apply()
{ {
d_ptr->m_value.setAntialias(d_ptr->ui.antialias->isChecked()); if (!d_ptr->m_ui) // page was never shown
return;
d_ptr->m_value.setAntialias(d_ptr->m_ui->antialias->isChecked());
if (d_ptr->m_value.colorScheme() != d_ptr->ui.schemeEdit->colorScheme()) { if (d_ptr->m_value.colorScheme() != d_ptr->m_ui->schemeEdit->colorScheme()) {
// Update the scheme and save it under the name it already has // Update the scheme and save it under the name it already has
d_ptr->m_value.setColorScheme(d_ptr->ui.schemeEdit->colorScheme()); d_ptr->m_value.setColorScheme(d_ptr->m_ui->schemeEdit->colorScheme());
const ColorScheme &scheme = d_ptr->m_value.colorScheme(); const ColorScheme &scheme = d_ptr->m_value.colorScheme();
scheme.save(d_ptr->m_value.colorSchemeFileName()); scheme.save(d_ptr->m_value.colorSchemeFileName());
} }
int index = d_ptr->ui.schemeComboBox->currentIndex(); int index = d_ptr->m_ui->schemeComboBox->currentIndex();
if (index != -1) { if (index != -1) {
const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index); const ColorSchemeEntry &entry = d_ptr->m_schemeListModel->colorSchemeAt(index);
if (entry.fileName != d_ptr->m_value.colorSchemeFileName()) if (entry.fileName != d_ptr->m_value.colorSchemeFileName())
@@ -637,8 +641,12 @@ void FontSettingsPage::saveSettings()
void FontSettingsPage::finish() void FontSettingsPage::finish()
{ {
if (!d_ptr->m_ui) // page was never shown
return;
// If changes were applied, these are equal. Otherwise restores last value. // If changes were applied, these are equal. Otherwise restores last value.
d_ptr->m_value = d_ptr->m_lastValue; d_ptr->m_value = d_ptr->m_lastValue;
delete d_ptr->m_ui;
d_ptr->m_ui = 0;
} }
const FontSettings &FontSettingsPage::fontSettings() const const FontSettings &FontSettingsPage::fontSettings() const

View File

@@ -53,14 +53,15 @@ struct HighlighterSettingsPage::HighlighterSettingsPagePrivate
HighlighterSettings m_settings; HighlighterSettings m_settings;
Ui::HighlighterSettingsPage m_page; Ui::HighlighterSettingsPage *m_page;
}; };
HighlighterSettingsPage::HighlighterSettingsPagePrivate:: HighlighterSettingsPage::HighlighterSettingsPagePrivate::
HighlighterSettingsPagePrivate(const QString &id) : HighlighterSettingsPagePrivate(const QString &id) :
m_id(id), m_id(id),
m_displayName(tr("Generic Highlighter")), m_displayName(tr("Generic Highlighter")),
m_settingsPrefix(QLatin1String("Text")) m_settingsPrefix(QLatin1String("Text")),
m_page(0)
{} {}
HighlighterSettingsPage::HighlighterSettingsPage(const QString &id, QObject *parent) : HighlighterSettingsPage::HighlighterSettingsPage(const QString &id, QObject *parent) :
@@ -90,27 +91,28 @@ QString HighlighterSettingsPage::displayName() const
QWidget *HighlighterSettingsPage::createPage(QWidget *parent) QWidget *HighlighterSettingsPage::createPage(QWidget *parent)
{ {
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
m_d->m_page.setupUi(w); m_d->m_page = new Ui::HighlighterSettingsPage;
m_d->m_page.definitionFilesPath->setExpectedKind(Utils::PathChooser::Directory); m_d->m_page->setupUi(w);
m_d->m_page.definitionFilesPath->addButton(tr("Download Definitions"), this, m_d->m_page->definitionFilesPath->setExpectedKind(Utils::PathChooser::Directory);
m_d->m_page->definitionFilesPath->addButton(tr("Download Definitions"), this,
SLOT(requestAvailableDefinitionsMetaData())); SLOT(requestAvailableDefinitionsMetaData()));
m_d->m_page.fallbackDefinitionFilesPath->setExpectedKind(Utils::PathChooser::Directory); m_d->m_page->fallbackDefinitionFilesPath->setExpectedKind(Utils::PathChooser::Directory);
m_d->m_page.fallbackDefinitionFilesPath->addButton(tr("Autodetect"), this, m_d->m_page->fallbackDefinitionFilesPath->addButton(tr("Autodetect"), this,
SLOT(resetDefinitionsLocation())); SLOT(resetDefinitionsLocation()));
settingsToUI(); settingsToUI();
if (m_d->m_searchKeywords.isEmpty()) { if (m_d->m_searchKeywords.isEmpty()) {
QTextStream(&m_d->m_searchKeywords) << m_d->m_page.definitionFilesGroupBox->title() QTextStream(&m_d->m_searchKeywords) << m_d->m_page->definitionFilesGroupBox->title()
<< m_d->m_page.locationLabel->text() << m_d->m_page->locationLabel->text()
<< m_d->m_page.alertWhenNoDefinition->text() << m_d->m_page->alertWhenNoDefinition->text()
<< m_d->m_page.useFallbackLocation->text() << m_d->m_page->useFallbackLocation->text()
<< m_d->m_page.ignoreLabel->text(); << m_d->m_page->ignoreLabel->text();
} }
connect(m_d->m_page.useFallbackLocation, SIGNAL(clicked(bool)), connect(m_d->m_page->useFallbackLocation, SIGNAL(clicked(bool)),
this, SLOT(setFallbackLocationState(bool))); this, SLOT(setFallbackLocationState(bool)));
connect(m_d->m_page.definitionFilesPath, SIGNAL(validChanged(bool)), connect(m_d->m_page->definitionFilesPath, SIGNAL(validChanged(bool)),
this, SLOT(setDownloadDefinitionsState(bool))); this, SLOT(setDownloadDefinitionsState(bool)));
connect(w, SIGNAL(destroyed()), this, SLOT(ignoreDownloadReply())); connect(w, SIGNAL(destroyed()), this, SLOT(ignoreDownloadReply()));
@@ -119,6 +121,8 @@ QWidget *HighlighterSettingsPage::createPage(QWidget *parent)
void HighlighterSettingsPage::apply() void HighlighterSettingsPage::apply()
{ {
if (!m_d->m_page) // page was not shown
return;
if (settingsChanged()) if (settingsChanged())
settingsFromUI(); settingsFromUI();
@@ -128,6 +132,14 @@ void HighlighterSettingsPage::apply()
} }
} }
void HighlighterSettingsPage::finish()
{
if (!m_d->m_page) // page was not shown
return;
delete m_d->m_page;
m_d->m_page = 0;
}
bool HighlighterSettingsPage::matches(const QString &s) const bool HighlighterSettingsPage::matches(const QString &s) const
{ {
return m_d->m_searchKeywords.contains(s, Qt::CaseInsensitive); return m_d->m_searchKeywords.contains(s, Qt::CaseInsensitive);
@@ -141,32 +153,32 @@ const HighlighterSettings &HighlighterSettingsPage::highlighterSettings() const
void HighlighterSettingsPage::settingsFromUI() void HighlighterSettingsPage::settingsFromUI()
{ {
if (!m_requestMimeTypeRegistration && ( if (!m_requestMimeTypeRegistration && (
m_d->m_settings.definitionFilesPath() != m_d->m_page.definitionFilesPath->path() || m_d->m_settings.definitionFilesPath() != m_d->m_page->definitionFilesPath->path() ||
m_d->m_settings.fallbackDefinitionFilesPath() != m_d->m_settings.fallbackDefinitionFilesPath() !=
m_d->m_page.fallbackDefinitionFilesPath->path() || m_d->m_page->fallbackDefinitionFilesPath->path() ||
m_d->m_settings.useFallbackLocation() != m_d->m_page.useFallbackLocation->isChecked())) { m_d->m_settings.useFallbackLocation() != m_d->m_page->useFallbackLocation->isChecked())) {
m_requestMimeTypeRegistration = true; m_requestMimeTypeRegistration = true;
} }
m_d->m_settings.setDefinitionFilesPath(m_d->m_page.definitionFilesPath->path()); m_d->m_settings.setDefinitionFilesPath(m_d->m_page->definitionFilesPath->path());
m_d->m_settings.setFallbackDefinitionFilesPath(m_d->m_page.fallbackDefinitionFilesPath->path()); m_d->m_settings.setFallbackDefinitionFilesPath(m_d->m_page->fallbackDefinitionFilesPath->path());
m_d->m_settings.setAlertWhenNoDefinition(m_d->m_page.alertWhenNoDefinition->isChecked()); m_d->m_settings.setAlertWhenNoDefinition(m_d->m_page->alertWhenNoDefinition->isChecked());
m_d->m_settings.setUseFallbackLocation(m_d->m_page.useFallbackLocation->isChecked()); m_d->m_settings.setUseFallbackLocation(m_d->m_page->useFallbackLocation->isChecked());
m_d->m_settings.setIgnoredFilesPatterns(m_d->m_page.ignoreEdit->text()); m_d->m_settings.setIgnoredFilesPatterns(m_d->m_page->ignoreEdit->text());
if (QSettings *s = Core::ICore::instance()->settings()) if (QSettings *s = Core::ICore::instance()->settings())
m_d->m_settings.toSettings(m_d->m_settingsPrefix, s); m_d->m_settings.toSettings(m_d->m_settingsPrefix, s);
} }
void HighlighterSettingsPage::settingsToUI() void HighlighterSettingsPage::settingsToUI()
{ {
m_d->m_page.definitionFilesPath->setPath(m_d->m_settings.definitionFilesPath()); m_d->m_page->definitionFilesPath->setPath(m_d->m_settings.definitionFilesPath());
m_d->m_page.fallbackDefinitionFilesPath->setPath(m_d->m_settings.fallbackDefinitionFilesPath()); m_d->m_page->fallbackDefinitionFilesPath->setPath(m_d->m_settings.fallbackDefinitionFilesPath());
m_d->m_page.alertWhenNoDefinition->setChecked(m_d->m_settings.alertWhenNoDefinition()); m_d->m_page->alertWhenNoDefinition->setChecked(m_d->m_settings.alertWhenNoDefinition());
m_d->m_page.useFallbackLocation->setChecked(m_d->m_settings.useFallbackLocation()); m_d->m_page->useFallbackLocation->setChecked(m_d->m_settings.useFallbackLocation());
m_d->m_page.ignoreEdit->setText(m_d->m_settings.ignoredFilesPatterns()); m_d->m_page->ignoreEdit->setText(m_d->m_settings.ignoredFilesPatterns());
setFallbackLocationState(m_d->m_page.useFallbackLocation->isChecked()); setFallbackLocationState(m_d->m_page->useFallbackLocation->isChecked());
setDownloadDefinitionsState(m_d->m_page.definitionFilesPath->isValid()); setDownloadDefinitionsState(m_d->m_page->definitionFilesPath->isValid());
} }
void HighlighterSettingsPage::resetDefinitionsLocation() void HighlighterSettingsPage::resetDefinitionsLocation()
@@ -176,7 +188,7 @@ void HighlighterSettingsPage::resetDefinitionsLocation()
QMessageBox::information(0, tr("Autodetect Definitions"), QMessageBox::information(0, tr("Autodetect Definitions"),
tr("No pre-installed definitions could be found.")); tr("No pre-installed definitions could be found."));
else else
m_d->m_page.fallbackDefinitionFilesPath->setPath(location); m_d->m_page->fallbackDefinitionFilesPath->setPath(location);
} }
void HighlighterSettingsPage::requestAvailableDefinitionsMetaData() void HighlighterSettingsPage::requestAvailableDefinitionsMetaData()
@@ -206,43 +218,43 @@ void HighlighterSettingsPage::ignoreDownloadReply()
void HighlighterSettingsPage::manageDefinitions(const QList<HighlightDefinitionMetaData> &metaData) void HighlighterSettingsPage::manageDefinitions(const QList<HighlightDefinitionMetaData> &metaData)
{ {
ManageDefinitionsDialog dialog(metaData, ManageDefinitionsDialog dialog(metaData,
m_d->m_page.definitionFilesPath->path() + QLatin1Char('/'), m_d->m_page->definitionFilesPath->path() + QLatin1Char('/'),
m_d->m_page.definitionFilesPath->buttonAtIndex(1)->window()); m_d->m_page->definitionFilesPath->buttonAtIndex(1)->window());
if (dialog.exec() && !m_requestMimeTypeRegistration) if (dialog.exec() && !m_requestMimeTypeRegistration)
m_requestMimeTypeRegistration = true; m_requestMimeTypeRegistration = true;
setDownloadDefinitionsState(m_d->m_page.definitionFilesPath->isValid()); setDownloadDefinitionsState(m_d->m_page->definitionFilesPath->isValid());
} }
void HighlighterSettingsPage::showError() void HighlighterSettingsPage::showError()
{ {
QMessageBox::critical(m_d->m_page.definitionFilesPath->buttonAtIndex(1)->window(), QMessageBox::critical(m_d->m_page->definitionFilesPath->buttonAtIndex(1)->window(),
tr("Error connecting to server."), tr("Error connecting to server."),
tr("Not possible to retrieve data.")); tr("Not possible to retrieve data."));
setDownloadDefinitionsState(m_d->m_page.definitionFilesPath->isValid()); setDownloadDefinitionsState(m_d->m_page->definitionFilesPath->isValid());
} }
void HighlighterSettingsPage::setFallbackLocationState(bool checked) void HighlighterSettingsPage::setFallbackLocationState(bool checked)
{ {
m_d->m_page.fallbackDefinitionFilesPath->setEnabled(checked); m_d->m_page->fallbackDefinitionFilesPath->setEnabled(checked);
} }
void HighlighterSettingsPage::setDownloadDefinitionsState(bool valid) void HighlighterSettingsPage::setDownloadDefinitionsState(bool valid)
{ {
m_d->m_page.definitionFilesPath->buttonAtIndex(1)->setEnabled(valid); m_d->m_page->definitionFilesPath->buttonAtIndex(1)->setEnabled(valid);
} }
bool HighlighterSettingsPage::settingsChanged() const bool HighlighterSettingsPage::settingsChanged() const
{ {
if (m_d->m_settings.definitionFilesPath() != m_d->m_page.definitionFilesPath->path()) if (m_d->m_settings.definitionFilesPath() != m_d->m_page->definitionFilesPath->path())
return true; return true;
if (m_d->m_settings.fallbackDefinitionFilesPath() != if (m_d->m_settings.fallbackDefinitionFilesPath() !=
m_d->m_page.fallbackDefinitionFilesPath->path()) m_d->m_page->fallbackDefinitionFilesPath->path())
return true; return true;
if (m_d->m_settings.alertWhenNoDefinition() != m_d->m_page.alertWhenNoDefinition->isChecked()) if (m_d->m_settings.alertWhenNoDefinition() != m_d->m_page->alertWhenNoDefinition->isChecked())
return true; return true;
if (m_d->m_settings.useFallbackLocation() != m_d->m_page.useFallbackLocation->isChecked()) if (m_d->m_settings.useFallbackLocation() != m_d->m_page->useFallbackLocation->isChecked())
return true; return true;
if (m_d->m_settings.ignoredFilesPatterns() != m_d->m_page.ignoreEdit->text()) if (m_d->m_settings.ignoredFilesPatterns() != m_d->m_page->ignoreEdit->text())
return true; return true;
return false; return false;
} }

View File

@@ -56,7 +56,7 @@ public:
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();
void finish() {} void finish();
bool matches(const QString &s) const; bool matches(const QString &s) const;
const HighlighterSettings &highlighterSettings() const; const HighlighterSettings &highlighterSettings() const;