22#include "tdeconfigdialogmanager.h"
24#include <tqbuttongroup.h>
25#include <tqcombobox.h>
27#include <tqmetaobject.h>
28#include <tqobjectlist.h>
29#include <tqsqlpropertymap.h>
31#include <tqwhatsthis.h>
33#include <tdeapplication.h>
34#include <tdeconfigskeleton.h>
40class TDEConfigDialogManager::Private {
43 Private() : insideGroupBox(false) { }
46 TQDict<TQWidget> knownWidget;
47 TQDict<TQWidget> buddyWidget;
52 : TQObject(parent, name), m_conf(conf), m_dialog(parent)
56 tdeApp->installKDEPropertyMap();
72 changedMap.insert(
"TQButton", TQ_SIGNAL(stateChanged(
int)));
73 changedMap.insert(
"TQCheckBox", TQ_SIGNAL(stateChanged(
int)));
74 changedMap.insert(
"TQPushButton", TQ_SIGNAL(stateChanged(
int)));
75 changedMap.insert(
"TQRadioButton", TQ_SIGNAL(stateChanged(
int)));
78 changedMap.insert(
"TQButtonGroup", TQ_SIGNAL(clicked(
int)));
79 changedMap.insert(
"TQGroupBox", TQ_SIGNAL(toggled(
bool)));
80 changedMap.insert(
"TQComboBox", TQ_SIGNAL(activated (
int)));
83 changedMap.insert(
"TQDateEdit", TQ_SIGNAL(valueChanged(
const TQDate &)));
84 changedMap.insert(
"TQDateTimeEdit", TQ_SIGNAL(valueChanged(
const TQDateTime &)));
85 changedMap.insert(
"TQDial", TQ_SIGNAL(valueChanged (
int)));
86 changedMap.insert(
"TQLineEdit", TQ_SIGNAL(textChanged(
const TQString &)));
87 changedMap.insert(
"TQSlider", TQ_SIGNAL(valueChanged(
int)));
88 changedMap.insert(
"TQSpinBox", TQ_SIGNAL(valueChanged(
int)));
89 changedMap.insert(
"TQTimeEdit", TQ_SIGNAL(valueChanged(
const TQTime &)));
90 changedMap.insert(
"TQTextEdit", TQ_SIGNAL(textChanged()));
91 changedMap.insert(
"TQTextBrowser", TQ_SIGNAL(sourceChanged(
const TQString &)));
92 changedMap.insert(
"TQMultiLineEdit", TQ_SIGNAL(textChanged()));
93 changedMap.insert(
"TQListBox", TQ_SIGNAL(selectionChanged()));
94 changedMap.insert(
"TQTabWidget", TQ_SIGNAL(currentChanged(TQWidget *)));
97 changedMap.insert(
"KComboBox", TQ_SIGNAL(activated (
int)));
98 changedMap.insert(
"TDEFontCombo", TQ_SIGNAL(activated (
int)));
99 changedMap.insert(
"TDEFontRequester", TQ_SIGNAL(fontSelected(
const TQFont &)));
100 changedMap.insert(
"TDEFontChooser", TQ_SIGNAL(fontSelected(
const TQFont &)));
101 changedMap.insert(
"KHistoryCombo", TQ_SIGNAL(activated (
int)));
103 changedMap.insert(
"KColorButton", TQ_SIGNAL(changed(
const TQColor &)));
104 changedMap.insert(
"KDatePicker", TQ_SIGNAL(dateSelected (TQDate)));
105 changedMap.insert(
"KDateWidget", TQ_SIGNAL(changed (TQDate)));
106 changedMap.insert(
"KDateTimeWidget", TQ_SIGNAL(valueChanged (
const TQDateTime &)));
107 changedMap.insert(
"KEditListBox", TQ_SIGNAL(changed()));
108 changedMap.insert(
"TDEListBox", TQ_SIGNAL(selectionChanged()));
109 changedMap.insert(
"KLineEdit", TQ_SIGNAL(textChanged(
const TQString &)));
110 changedMap.insert(
"KPasswordEdit", TQ_SIGNAL(textChanged(
const TQString &)));
111 changedMap.insert(
"KRestrictedLine", TQ_SIGNAL(textChanged(
const TQString &)));
112 changedMap.insert(
"KTextBrowser", TQ_SIGNAL(sourceChanged(
const TQString &)));
113 changedMap.insert(
"KTextEdit", TQ_SIGNAL(textChanged()));
114 changedMap.insert(
"KURLRequester", TQ_SIGNAL(textChanged (
const TQString& )));
115 changedMap.insert(
"KIntNumInput", TQ_SIGNAL(valueChanged (
int)));
116 changedMap.insert(
"KIntSpinBox", TQ_SIGNAL(valueChanged (
int)));
117 changedMap.insert(
"KDoubleNumInput", TQ_SIGNAL(valueChanged (
double)));
131 TQVariant minValue = item->
minValue();
132 if (minValue.isValid())
134 if (widget->metaObject()->findProperty(
"minValue",
true) != -1)
135 widget->setProperty(
"minValue", minValue);
137 TQVariant maxValue = item->
maxValue();
138 if (maxValue.isValid())
140 if (widget->metaObject()->findProperty(
"maxValue",
true) != -1)
141 widget->setProperty(
"maxValue", maxValue);
143 if (TQWhatsThis::textFor( widget ).isEmpty())
146 if ( !whatsThis.isEmpty() )
148 TQWhatsThis::add( widget, whatsThis );
155 bool valueChanged =
false;
156 const TQObjectList listOfChildren = widget->childrenListObject();
157 if(listOfChildren.isEmpty())
161 for( TQObjectListIterator it( listOfChildren );
162 (
object = it.current()); ++it )
164 if(!object->isWidgetType())
167 TQWidget *childWidget = (TQWidget *)
object;
169 const char *widgetName = childWidget->name(0);
170 bool bParseChildren =
true;
171 bool bSaveInsideGroupBox = d->insideGroupBox;
173 if (widgetName && (strncmp(widgetName,
"kcfg_", 5) == 0))
176 TQString configId = widgetName+5;
180 d->knownWidget.insert(configId, childWidget);
184 TQMap<TQString, TQCString>::const_iterator changedIt =
changedMap.find(childWidget->className());
192 changedIt =
changedMap.find(childWidget->metaObject()->superClassName());
197 kdWarning(178) <<
"Don't know how to monitor widget '" << childWidget->className() <<
"' for changes!" <<
endl;
201 connect(childWidget, *changedIt,
204 TQGroupBox *gb =
dynamic_cast<TQGroupBox *
>(childWidget);
206 bParseChildren =
false;
208 d->insideGroupBox =
true;
210 TQComboBox *cb =
dynamic_cast<TQComboBox *
>(childWidget);
211 if (cb && cb->editable())
212 connect(cb, TQ_SIGNAL(textChanged(
const TQString &)),
218 kdWarning(178) <<
"A widget named '" << widgetName <<
"' was found but there is no setting named '" << configId <<
"'" <<
endl;
221 else if (childWidget->inherits(
"TQLabel"))
223 TQLabel *label =
static_cast<TQLabel *
>(childWidget);
224 TQWidget *buddy = label->buddy();
227 const char *buddyName = buddy->name(0);
228 if (buddyName && (strncmp(buddyName,
"kcfg_", 5) == 0))
231 TQString configId = buddyName+5;
232 d->buddyWidget.insert(configId, childWidget);
238 TQMap<TQString, TQCString>::const_iterator changedIt =
changedMap.find(childWidget->className());
241 if ((!d->insideGroupBox || !childWidget->inherits(
"TQRadioButton")) &&
242 !childWidget->inherits(
"TQGroupBox"))
243 kdDebug(178) <<
"Widget '" << widgetName <<
"' (" << childWidget->className() <<
") remains unmanaged." <<
endl;
254 d->insideGroupBox = bSaveInsideGroupBox;
261 bool changed =
false;
262 bool bSignalsBlocked = signalsBlocked();
266 for( TQDictIterator<TQWidget> it( d->knownWidget );
267 (widget = it.current()); ++it )
272 kdWarning(178) <<
"The setting '" << it.currentKey() <<
"' has disappeared!" <<
endl;
285 widget->setEnabled(
false);
286 TQWidget *buddy = d->buddyWidget.find(it.currentKey());
288 buddy->setEnabled(
false);
291 blockSignals(bSignalsBlocked);
306 bool changed =
false;
309 for( TQDictIterator<TQWidget> it( d->knownWidget );
310 (widget = it.current()); ++it )
315 kdWarning(178) <<
"The setting '" << it.currentKey() <<
"' has disappeared!" <<
endl;
335 TQButtonGroup *bg =
dynamic_cast<TQButtonGroup *
>(w);
338 bg->setButton(v.toInt());
342 TQComboBox *cb =
dynamic_cast<TQComboBox *
>(w);
343 if (cb && cb->editable())
345 cb->setCurrentText(v.toString());
354 TQButtonGroup *bg =
dynamic_cast<TQButtonGroup *
>(w);
356 return TQVariant(bg->selectedId());
358 TQComboBox *cb =
dynamic_cast<TQComboBox *
>(w);
359 if (cb && cb->editable())
360 return TQVariant(cb->currentText());
369 for( TQDictIterator<TQWidget> it( d->knownWidget );
370 (widget = it.current()); ++it )
375 kdWarning(178) <<
"The setting '" << it.currentKey() <<
"' has disappeared!" <<
endl;
397#include "tdeconfigdialogmanager.moc"
void updateWidgets()
Traverse the specified widgets, sets the state of all known widgets according to the state in the set...
void updateWidgetsDefault()
Traverse the specified widgets, sets the state of all known widgets according to the default state in...
TQVariant property(TQWidget *w)
Retrieve a property.
void setProperty(TQWidget *w, const TQVariant &v)
Set a property.
~TDEConfigDialogManager()
Destructor.
void settingsChanged()
One or more of the settings have been saved (such as when the user clicks on the Apply button).
void init(bool trackChanges)
TDEConfigDialogManager(TQWidget *parent, TDEConfigSkeleton *conf, const char *name=0)
Constructor.
void addWidget(TQWidget *widget)
Add additional widgets to manage.
bool parseChildren(const TQWidget *widget, bool trackChanges)
Recursive function that finds all known children.
TQMap< TQString, TQCString > changedMap
Map of the classes and the signals that they emit when changed.
void widgetModified()
If retrieveSettings() was told to track changes then if any known setting was changed this signal wil...
TQWidget * m_dialog
Dialog being managed.
TDEConfigSkeleton * m_conf
TDEConfigSkeleton object used to store settings.
bool isDefault()
Returns whether the current state of the known widgets are the same as the default state in the confi...
bool hasChanged()
Returns whether the current state of the known widgets are different from the state in the config obj...
void updateSettings()
Traverse the specified widgets, saving the settings of all known widgets in the settings object.
void setupWidget(TQWidget *widget, TDEConfigSkeletonItem *item)
Setup secondary widget properties.
TQSqlPropertyMap * propertyMap
Pointer to the property map for easy access.
Class for storing a preferences setting.
virtual void setProperty(const TQVariant &p)=0
Set item to p.
virtual TQVariant maxValue() const
Return maximum value of item or invalid if not specified.
virtual TQVariant property() const =0
Return item as property.
TQString whatsThis() const
Return WhatsThis description of item.
bool isImmutable() const
Return if the entry can be modified.
virtual TQVariant minValue() const
Return minimum value of item or invalid if not specified.
Class for handling preferences settings for an application.
TDEConfigSkeletonItem * findItem(const TQString &name)
Lookup item by name.
bool useDefaults(bool b)
Indicate whether this object should reflect the actual values or the default values.
void writeConfig()
Write preferences to config file.
kndbgstream & endl(kndbgstream &s)
Does nothing.