34 #include <QtGui/QLayout>
35 #include <QtCore/QMap>
41 : q(q), shown(false), manager(0)
48 q->setObjectName( name );
50 if ( !name.isEmpty() ) {
51 openDialogs.insert(name, q);
54 genericName.sprintf(
"SettingsDialog-%p", static_cast<void*>(q));
55 openDialogs.insert(genericName, q);
56 q->setObjectName(genericName);
61 connect(q, SIGNAL(
applyClicked()), q, SLOT(_k_updateButtons()));
68 setupManagerConnections(manager);
78 void _k_updateButtons();
79 void _k_settingsChangedSlot();
89 static QHash<QString,KConfigDialog *> openDialogs;
92 QHash<QString,KConfigDialog *> KConfigDialog::KConfigDialogPrivate::openDialogs;
97 d(new KConfigDialogPrivate(this, name, config))
104 d(new KConfigDialogPrivate(this, name, config))
110 KConfigDialogPrivate::openDialogs.remove(objectName());
125 KPageWidgetItem* item = d->addPageInternal(page, itemName, pixmapName, header);
127 d->manager->addWidget(page);
130 if (d->shown && manage) {
149 KPageWidgetItem* item = d->addPageInternal(page, itemName, pixmapName, header);
151 d->setupManagerConnections(d->managerForPage[page]);
169 page->setParent(frame);
173 if ( !pixmapName.isEmpty() )
176 q->KPageDialog::addPage( item );
180 void KConfigDialog::KConfigDialogPrivate::setupManagerConnections(
KConfigDialogManager *manager)
182 q->connect(manager, SIGNAL(settingsChanged()), q, SLOT(_k_settingsChangedSlot()));
183 q->connect(manager, SIGNAL(widgetModified()), q, SLOT(_k_updateButtons()));
185 q->connect(q, SIGNAL(okClicked()), manager, SLOT(updateSettings()));
186 q->connect(q, SIGNAL(applyClicked()), manager, SLOT(updateSettings()));
187 q->connect(q, SIGNAL(cancelClicked()), manager, SLOT(updateWidgets()));
188 q->connect(q, SIGNAL(defaultClicked()), manager, SLOT(updateWidgetsDefault()));
194 while (j != d->managerForPage.end())
197 if (item->
widget()->isAncestorOf(j.key()))
200 d->managerForPage.erase(j);
202 d->_k_updateButtons();
211 QHash<QString,KConfigDialog *>::const_iterator it = KConfigDialogPrivate::openDialogs.constFind( name );
212 if ( it != KConfigDialogPrivate::openDialogs.constEnd() )
222 return (dialog != NULL);
225 void KConfigDialog::KConfigDialogPrivate::_k_updateButtons()
227 static bool only_once =
false;
228 if (only_once)
return;
234 for (it = managerForPage.begin();
235 it != managerForPage.end() && !has_changed;
238 has_changed |= (*it)->hasChanged();
244 for (it = managerForPage.begin();
245 it != managerForPage.end() && is_default;
248 is_default &= (*it)->isDefault();
257 void KConfigDialog::KConfigDialogPrivate::_k_settingsChangedSlot()
271 d->manager->updateWidgets();
272 for (it = d->managerForPage.begin(); it != d->managerForPage.end(); ++it)
273 (*it)->updateWidgets();
275 bool has_changed = d->manager->hasChanged() ||
hasChanged();
276 for (it = d->managerForPage.begin();
277 it != d->managerForPage.end() && !has_changed;
280 has_changed |= (*it)->hasChanged();
285 bool is_default = d->manager->isDefault() &&
isDefault();
286 for (it = d->managerForPage.begin();
287 it != d->managerForPage.end() && is_default;
290 is_default &= (*it)->isDefault();
323 d->_k_updateButtons();
328 d->_k_settingsChangedSlot();
331 #include "kconfigdialog.moc"