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

@@ -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