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()
{
if (!m_pathchooser) // page was never shown
return;
if (m_cmakeExecutable == m_pathchooser->path())
return;
m_cmakeExecutable = m_pathchooser->path();

View File

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

View File

@@ -34,14 +34,19 @@
\mainclass
\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:
\list
\o id() is an id used for filtering when calling ICore:: showOptionsDialog()
\o displayName() is the (translated) name for display.
\o category() is the category used for filtering when calling ICore:: showOptionsDialog()
\o displayCategory() is the translated category
\o id() is a unique identifier for referencing this page
\o displayName() is the (translated) name for display
\o category() is the unique id for the category that the page should be displayed in
\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
made and store those.
\o matches() is used for the options dialog search filter.
made and store those
\o finish() is called directly before the preferences dialog closes
\o matches() is used for the options dialog search filter
\endlist
*/

View File

@@ -60,6 +60,29 @@ public:
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
#endif // IOPTIONSPAGE_H

View File

@@ -72,7 +72,8 @@ public:
QString id;
QString displayName;
QIcon icon;
QList<IOptionsPage*> pages;
QList<IOptionsPage *> pages;
QList<IOptionsPageProvider *> providers;
int index;
QTabWidget *tabWidget;
};
@@ -86,7 +87,8 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) 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; }
private:
@@ -130,7 +132,8 @@ QVariant CategoryModel::data(const QModelIndex &index, int role) const
return QVariant();
}
void CategoryModel::setPages(const QList<IOptionsPage*> &pages)
void CategoryModel::setPages(const QList<IOptionsPage*> &pages,
const QList<IOptionsPageProvider *> &providers)
{
// Clear any previous categories
qDeleteAll(m_categories);
@@ -143,13 +146,32 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages)
if (!category) {
category = new Category;
category->id = categoryId;
category->displayName = page->displayCategory();
category->icon = page->categoryIcon();
category->pages.append(page);
category->tabWidget = 0;
category->index = -1;
m_categories.append(category);
} else {
category->pages.append(page);
}
if (category->displayName.isEmpty())
category->displayName = page->displayCategory();
if (category->icon.isNull())
category->icon = page->categoryIcon();
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();
@@ -277,26 +299,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
setWindowTitle(tr("Options"));
#endif
m_model->setPages(m_pages);
// 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_model->setPages(m_pages,
ExtensionSystem::PluginManager::instance()->getObjects<IOptionsPageProvider>());
m_proxyModel->setSourceModel(m_model);
m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
@@ -383,6 +387,7 @@ void SettingsDialog::createGui()
mainGridLayout->addWidget(buttonBox, 2, 0, 1, 2);
mainGridLayout->setColumnStretch(1, 4);
setLayout(mainGridLayout);
setMinimumSize(1070, 680);
}
SettingsDialog::~SettingsDialog()
@@ -392,7 +397,7 @@ SettingsDialog::~SettingsDialog()
void SettingsDialog::showCategory(int index)
{
Category *category = m_model->categories().at(index);
ensureCategoryWidget(category);
// Update current category and page
m_currentCategory = category->id;
const int currentTabIndex = category->tabWidget->currentIndex();
@@ -408,6 +413,29 @@ void SettingsDialog::showCategory(int index)
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)
{
for (int i = 0; i < category->pages.size(); ++i) {

View File

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

View File

@@ -53,7 +53,7 @@ using namespace Core::Internal;
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()
{
if (!m_page) // wasn't shown, can't be changed
return;
int currentIndex = m_page->languageBox->currentIndex();
setLanguage(m_page->languageBox->itemData(currentIndex, Qt::UserRole).toString());
// Apply the new base color if accepted
@@ -205,7 +207,10 @@ void GeneralSettings::apply()
void GeneralSettings::finish()
{
if (!m_page) // page was never shown
return;
delete m_page;
m_page = 0;
}
void GeneralSettings::resetInterfaceColor()

View File

@@ -96,7 +96,7 @@ FileShareProtocolSettings FileShareProtocolSettingsWidget::settings() const
// ----------FileShareProtocolSettingsPage
FileShareProtocolSettingsPage::FileShareProtocolSettingsPage(const QSharedPointer<FileShareProtocolSettings> &s,
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()
{
if (!m_widget) // page was never shown
return;
const FileShareProtocolSettings newSettings = m_widget->settings();
if (newSettings != *m_settings) {
*m_settings = newSettings;

View File

@@ -76,7 +76,7 @@ Settings SettingsWidget::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()
{
QTC_ASSERT(m_widget, return)
if (!m_widget) // page was never shown
return;
const Settings newSettings = m_widget->settings();
if (newSettings != *m_settings) {
*m_settings = newSettings;

View File

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

View File

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

View File

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

View File

@@ -37,6 +37,7 @@
# include "cppsettingspage.h"
#endif
#include "settingspage.h"
#include "designerconstants.h"
#include <coreplugin/icore.h>
@@ -84,6 +85,7 @@ bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error)
initializeTemplates();
addAutoReleasedObject(new FormEditorFactory);
addAutoReleasedObject(new SettingsPageProvider);
// Ensure that loading designer translations is done before FormEditorW is instantiated
const QString locale = Core::ICore::instance()->userInterfaceLanguage();
@@ -97,18 +99,9 @@ bool FormEditorPlugin::initialize(const QStringList &arguments, QString *error)
qApp->installTranslator(qtr);
}
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;
}
void FormEditorPlugin::ensurePluginInitialized()
{
FormEditorW::instance()->ensureInitStage(FormEditorW::RegisterPlugins);
}
void FormEditorPlugin::extensionsInitialized()
{
// 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);
void extensionsInitialized();
public slots:
void ensurePluginInitialized();
private:
void initializeTemplates();

View File

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

View File

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

View File

@@ -29,6 +29,7 @@
#include "settingspage.h"
#include "designerconstants.h"
#include "formeditorw.h"
#include <extensionsystem/pluginmanager.h>
#include "qt_private/abstractoptionspage_p.h"
@@ -37,7 +38,7 @@
using namespace Designer::Internal;
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)
{
m_initialized = true;
return m_designerPage->createPage(parent);
}
void SettingsPage::apply()
{
m_designerPage->apply();
if (m_initialized)
m_designerPage->apply();
}
void SettingsPage::finish()
{
m_designerPage->finish();
if (m_initialized)
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:
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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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