Modified IOptionsPage interface for Apply button

The previous interface wasn't sufficient to properly support the Apply
button, since it didn't separate applying the changes from the cleanup
phase.

Designer settings pages still need some fixing.

Fixes Apply button causing problems for certain plugins, for example the
QuickOpen.
This commit is contained in:
Thorbjørn Lindeijer
2009-01-13 15:41:33 +01:00
parent e6f7cb68a5
commit 59c8b93309
36 changed files with 143 additions and 124 deletions

View File

@@ -76,8 +76,7 @@ QuickOpenPlugin::~QuickOpenPlugin()
delete m_openDocumentsFilter;
delete m_fileSystemFilter;
delete m_settingsPage;
foreach (IQuickOpenFilter *filter, m_customFilter)
delete filter;
qDeleteAll(m_customFilters);
}
bool QuickOpenPlugin::initialize(const QStringList &, QString *)
@@ -125,8 +124,8 @@ void QuickOpenPlugin::openQuickOpen()
void QuickOpenPlugin::extensionsInitialized()
{
m_filter = ExtensionSystem::PluginManager::instance()->getObjects<IQuickOpenFilter>();
qSort(m_filter.begin(), m_filter.end(), filterLessThan);
m_filters = ExtensionSystem::PluginManager::instance()->getObjects<IQuickOpenFilter>();
qSort(m_filters.begin(), m_filters.end(), filterLessThan);
}
void QuickOpenPlugin::startSettingsLoad()
@@ -141,7 +140,7 @@ void QuickOpenPlugin::loadSettings()
QSettings settings;
settings.beginGroup("QuickOpen");
m_refreshTimer.setInterval(settings.value("RefreshInterval", 60).toInt()*60000);
foreach (IQuickOpenFilter *filter, m_filter) {
foreach (IQuickOpenFilter *filter, m_filters) {
if (settings.contains(filter->name())) {
const QByteArray state = settings.value(filter->name()).toByteArray();
if (!state.isEmpty())
@@ -153,10 +152,10 @@ void QuickOpenPlugin::loadSettings()
foreach (const QString &key, settings.childKeys()) {
IQuickOpenFilter *filter = new DirectoryFilter(core);
filter->restoreState(settings.value(key).toByteArray());
m_filter.append(filter);
m_filters.append(filter);
customFilters.append(filter);
}
setCustomFilter(customFilters);
setCustomFilters(customFilters);
settings.endGroup();
settings.endGroup();
}
@@ -176,14 +175,14 @@ void QuickOpenPlugin::saveSettings()
s->beginGroup("QuickOpen");
s->setValue("Interval", m_refreshTimer.interval()/60000);
s->remove("");
foreach (IQuickOpenFilter *filter, m_filter) {
if (!m_customFilter.contains(filter)) {
foreach (IQuickOpenFilter *filter, m_filters) {
if (!m_customFilters.contains(filter)) {
s->setValue(filter->name(), filter->saveState());
}
}
s->beginGroup("CustomFilters");
int i = 0;
foreach (IQuickOpenFilter *filter, m_customFilter) {
foreach (IQuickOpenFilter *filter, m_customFilters) {
s->setValue(QString("directory%1").arg(i), filter->saveState());
++i;
}
@@ -197,9 +196,9 @@ void QuickOpenPlugin::saveSettings()
Return all filters, including the ones created by the user.
*/
QList<IQuickOpenFilter*> QuickOpenPlugin::filter()
QList<IQuickOpenFilter*> QuickOpenPlugin::filters()
{
return m_filter;
return m_filters;
}
/*!
@@ -208,20 +207,20 @@ QList<IQuickOpenFilter*> QuickOpenPlugin::filter()
This returns a subset of all the filters, that contains only the filters that
have been created by the user at some point (maybe in a previous session).
*/
QList<IQuickOpenFilter*> QuickOpenPlugin::customFilter()
QList<IQuickOpenFilter*> QuickOpenPlugin::customFilters()
{
return m_customFilter;
return m_customFilters;
}
void QuickOpenPlugin::setFilter(QList<IQuickOpenFilter*> f)
void QuickOpenPlugin::setFilters(QList<IQuickOpenFilter*> f)
{
m_filter = f;
m_filters = f;
m_quickOpenToolWindow->updateFilterList();
}
void QuickOpenPlugin::setCustomFilter(QList<IQuickOpenFilter *> filter)
void QuickOpenPlugin::setCustomFilters(QList<IQuickOpenFilter *> filters)
{
m_customFilter = filter;
m_customFilters = filters;
}
int QuickOpenPlugin::refreshInterval()
@@ -243,7 +242,7 @@ void QuickOpenPlugin::setRefreshInterval(int interval)
void QuickOpenPlugin::refresh(QList<IQuickOpenFilter*> filters)
{
if (filters.isEmpty())
filters = m_filter;
filters = m_filters;
QFuture<void> task = QtConcurrent::run(&IQuickOpenFilter::refresh, filters);
Core::FutureProgress *progress = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>()
->progressManager()->addTask(task, tr("Indexing"), Constants::TASK_INDEX, Core::ProgressManager::CloseOnSuccess);