00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qcheckbox.h>
00025
#include <qcombobox.h>
00026
#include <qdatetimeedit.h>
00027
#include <qlayout.h>
00028
#include <qobjectlist.h>
00029
#include <qspinbox.h>
00030
#include <qregexp.h>
00031
#include <qtextedit.h>
00032
#include <qwidgetfactory.h>
00033
00034
#include <kdatepicker.h>
00035
#include <kdatetimewidget.h>
00036
#include <kdialog.h>
00037
#include <klineedit.h>
00038
#include <kstandarddirs.h>
00039
00040
#include "customfieldswidget.h"
00041
00042
#include "advancedcustomfields.h"
00043
00044
00045 AdvancedCustomFields::AdvancedCustomFields(
const QString &uiFile, KABC::AddressBook *ab,
00046
QWidget *parent,
const char *name )
00047 : KAB::ContactEditorWidget( ab, parent, name )
00048 {
00049 initGUI( uiFile );
00050 }
00051
00052
void AdvancedCustomFields::loadContact( KABC::Addressee *addr )
00053 {
00054
QStringList customs = addr->customs();
00055
00056
QString ns;
00057
if ( (mIdentifier.upper() ==
"KADDRESSBOOK") ||
00058 (
QRegExp(
"^Form\\d\\d?$").search(mIdentifier) >= 0 )
00059 )
00060 ns =
"KADDRESSBOOK";
00061
else
00062 ns = mIdentifier;
00063
00064
00065
00066
00067
QMap<QString, QWidget*>::Iterator widIt;
00068
for ( widIt = mWidgets.begin(); widIt != mWidgets.end(); ++widIt ) {
00069
QString value;
00070
if ( widIt.data()->inherits(
"QLineEdit" ) ) {
00071
QLineEdit *wdg = static_cast<QLineEdit*>( widIt.data() );
00072 wdg->setText( QString::null );
00073 }
else if ( widIt.data()->inherits(
"QSpinBox" ) ) {
00074
QSpinBox *wdg = static_cast<QSpinBox*>( widIt.data() );
00075 wdg->setValue( wdg->minValue() );
00076 }
else if ( widIt.data()->inherits(
"QCheckBox" ) ) {
00077
QCheckBox *wdg = static_cast<QCheckBox*>( widIt.data() );
00078 wdg->setChecked(
false );
00079 }
else if ( widIt.data()->inherits(
"QDateTimeEdit" ) ) {
00080
QDateTimeEdit *wdg = static_cast<QDateTimeEdit*>( widIt.data() );
00081 wdg->setDateTime( QDateTime::currentDateTime() );
00082 }
else if ( widIt.data()->inherits(
"KDateTimeWidget" ) ) {
00083 KDateTimeWidget *wdg = static_cast<KDateTimeWidget*>( widIt.data() );
00084 wdg->setDateTime( QDateTime::currentDateTime() );
00085 }
else if ( widIt.data()->inherits(
"KDatePicker" ) ) {
00086 KDatePicker *wdg = static_cast<KDatePicker*>( widIt.data() );
00087 wdg->setDate( QDate::currentDate() );
00088 }
else if ( widIt.data()->inherits(
"QComboBox" ) ) {
00089
QComboBox *wdg = static_cast<QComboBox*>( widIt.data() );
00090 wdg->setCurrentItem( 0 );
00091 }
else if ( widIt.data()->inherits(
"QTextEdit" ) ) {
00092
QTextEdit *wdg = static_cast<QTextEdit*>( widIt.data() );
00093 wdg->setText( QString::null );
00094 }
00095 }
00096
00097 QStringList::ConstIterator it;
00098
for ( it = customs.begin(); it != customs.end(); ++it ) {
00099
QString app, name, value;
00100 splitField( *it, app, name, value );
00101
00102
if ( app == ns ) {
00103
QMap<QString, QWidget*>::Iterator it = mWidgets.find( name );
00104
if ( it != mWidgets.end() ) {
00105
if ( it.data()->inherits(
"QLineEdit" ) ) {
00106
QLineEdit *wdg = static_cast<QLineEdit*>( it.data() );
00107 wdg->setText( value );
00108 }
else if ( it.data()->inherits(
"QSpinBox" ) ) {
00109
QSpinBox *wdg = static_cast<QSpinBox*>( it.data() );
00110 wdg->setValue( value.toInt() );
00111 }
else if ( it.data()->inherits(
"QCheckBox" ) ) {
00112
QCheckBox *wdg = static_cast<QCheckBox*>( it.data() );
00113 wdg->setChecked( value ==
"true" || value ==
"1" );
00114 }
else if ( it.data()->inherits(
"QDateTimeEdit" ) ) {
00115
QDateTimeEdit *wdg = static_cast<QDateTimeEdit*>( it.data() );
00116 wdg->setDateTime( QDateTime::fromString( value, Qt::ISODate ) );
00117 }
else if ( it.data()->inherits(
"KDateTimeWidget" ) ) {
00118 KDateTimeWidget *wdg = static_cast<KDateTimeWidget*>( it.data() );
00119 wdg->setDateTime( QDateTime::fromString( value, Qt::ISODate ) );
00120 }
else if ( it.data()->inherits(
"KDatePicker" ) ) {
00121 KDatePicker *wdg = static_cast<KDatePicker*>( it.data() );
00122 wdg->setDate( QDate::fromString( value, Qt::ISODate ) );
00123 }
else if ( it.data()->inherits(
"QComboBox" ) ) {
00124
QComboBox *wdg = static_cast<QComboBox*>( it.data() );
00125 wdg->setCurrentText( value );
00126 }
else if ( it.data()->inherits(
"QTextEdit" ) ) {
00127
QTextEdit *wdg = static_cast<QTextEdit*>( it.data() );
00128 wdg->setText( value );
00129 }
00130 }
00131 }
00132 }
00133 }
00134
00135
void AdvancedCustomFields::storeContact( KABC::Addressee *addr )
00136 {
00137
QMap<QString, QWidget*>::Iterator it;
00138
for ( it = mWidgets.begin(); it != mWidgets.end(); ++it ) {
00139
QString value;
00140
if ( it.data()->inherits(
"QLineEdit" ) ) {
00141
QLineEdit *wdg = static_cast<QLineEdit*>( it.data() );
00142 value = wdg->text();
00143 }
else if ( it.data()->inherits(
"QSpinBox" ) ) {
00144
QSpinBox *wdg = static_cast<QSpinBox*>( it.data() );
00145 value = QString::number( wdg->value() );
00146 }
else if ( it.data()->inherits(
"QCheckBox" ) ) {
00147
QCheckBox *wdg = static_cast<QCheckBox*>( it.data() );
00148 value = ( wdg->isChecked() ?
"true" :
"false" );
00149 }
else if ( it.data()->inherits(
"QDateTimeEdit" ) ) {
00150
QDateTimeEdit *wdg = static_cast<QDateTimeEdit*>( it.data() );
00151 value = wdg->dateTime().toString( Qt::ISODate );
00152 }
else if ( it.data()->inherits(
"KDateTimeWidget" ) ) {
00153 KDateTimeWidget *wdg = static_cast<KDateTimeWidget*>( it.data() );
00154 value = wdg->dateTime().toString( Qt::ISODate );
00155 }
else if ( it.data()->inherits(
"KDatePicker" ) ) {
00156 KDatePicker *wdg = static_cast<KDatePicker*>( it.data() );
00157 value = wdg->date().toString( Qt::ISODate );
00158 }
else if ( it.data()->inherits(
"QComboBox" ) ) {
00159
QComboBox *wdg = static_cast<QComboBox*>( it.data() );
00160 value = wdg->currentText();
00161 }
else if ( it.data()->inherits(
"QTextEdit" ) ) {
00162
QTextEdit *wdg = static_cast<QTextEdit*>( it.data() );
00163 value = wdg->text();
00164 }
00165
00166
QString ns;
00167
if ( (mIdentifier.upper() ==
"KADDRESSBOOK") ||
00168 (
QRegExp(
"^Form\\d\\d?$").search(mIdentifier) >= 0 )
00169 )
00170 ns =
"KADDRESSBOOK";
00171
else
00172 ns = mIdentifier;
00173
00174
if ( value.isEmpty() )
00175 addr->removeCustom( ns.latin1(), it.key() );
00176
else
00177 addr->insertCustom( ns.latin1(), it.key(), value );
00178 }
00179 }
00180
00181
void AdvancedCustomFields::setReadOnly(
bool readOnly )
00182 {
00183
QMap<QString, QWidget*>::Iterator it;
00184
for ( it = mWidgets.begin(); it != mWidgets.end(); ++it )
00185
if ( mDisabledWidgets.find( it.data() ) == mDisabledWidgets.end() )
00186 it.data()->setEnabled( !readOnly );
00187 }
00188
00189
void AdvancedCustomFields::initGUI(
const QString &uiFile )
00190 {
00191
QVBoxLayout *layout =
new QVBoxLayout(
this, KDialog::marginHint(),
00192 KDialog::spacingHint() );
00193
00194
QWidget *wdg = QWidgetFactory::create( uiFile, 0,
this );
00195
if ( !wdg ) {
00196 kdError() <<
"No ui file found" << endl;
00197
return;
00198 }
00199
00200 mTitle = wdg->caption();
00201 mIdentifier = wdg->name();
00202
00203 layout->addWidget( wdg );
00204
00205
QObjectList *list = wdg->queryList(
"QWidget" );
00206 QObjectListIt it( *list );
00207
00208
QStringList allowedTypes;
00209 allowedTypes <<
"QLineEdit"
00210 <<
"QTextEdit"
00211 <<
"QSpinBox"
00212 <<
"QCheckBox"
00213 <<
"QComboBox"
00214 <<
"QDateTimeEdit"
00215 <<
"KLineEdit"
00216 <<
"KDateTimeWidget"
00217 <<
"KDatePicker";
00218
00219
while ( it.current() ) {
00220
if ( allowedTypes.contains( it.current()->className() ) ) {
00221
QString name = it.current()->name();
00222
if ( name.startsWith(
"X_" ) ) {
00223 name = name.mid( 2 );
00224
00225
QWidget *widget = static_cast<QWidget*>( it.current() );
00226
if ( !name.isEmpty() )
00227 mWidgets.insert( name, widget );
00228
00229
if ( it.current()->inherits(
"QLineEdit" ) )
00230 connect( it.current(), SIGNAL(
textChanged(
const QString& ) ),
00231
this, SLOT( setModified() ) );
00232
else if ( it.current()->inherits(
"QSpinBox" ) )
00233 connect( it.current(), SIGNAL( valueChanged(
int ) ),
00234
this, SLOT( setModified() ) );
00235
else if ( it.current()->inherits(
"QCheckBox" ) )
00236 connect( it.current(), SIGNAL( toggled(
bool ) ),
00237
this, SLOT( setModified() ) );
00238
else if ( it.current()->inherits(
"QComboBox" ) )
00239 connect( it.current(), SIGNAL( activated(
const QString& ) ),
00240
this, SLOT( setModified() ) );
00241
else if ( it.current()->inherits(
"QDateTimeEdit" ) )
00242 connect( it.current(), SIGNAL( valueChanged(
const QDateTime& ) ),
00243
this, SLOT( setModified() ) );
00244
else if ( it.current()->inherits(
"KDateTimeWidget" ) )
00245 connect( it.current(), SIGNAL( valueChanged(
const QDateTime& ) ),
00246
this, SLOT( setModified() ) );
00247
else if ( it.current()->inherits(
"KDatePicker" ) )
00248 connect( it.current(), SIGNAL( dateChanged(
QDate ) ),
00249
this, SLOT( setModified() ) );
00250
else if ( it.current()->inherits(
"QTextEdit" ) )
00251 connect( it.current(), SIGNAL(
textChanged() ),
00252
this, SLOT( setModified() ) );
00253
00254
if ( !widget->isEnabled() )
00255 mDisabledWidgets.append( widget );
00256 }
00257 }
00258
00259 ++it;
00260 }
00261
00262
delete list;
00263 }
00264
00265
QString AdvancedCustomFields::pageIdentifier()
const
00266
{
00267
return mIdentifier;
00268 }
00269
00270
QString AdvancedCustomFields::pageTitle()
const
00271
{
00272
return mTitle;
00273 }
00274
00275
#include "advancedcustomfields.moc"