kaddressbook

customfieldswidget.cpp
00001 /*
00002     This file is part of KAddressbook.
00003     Copyright (c) 2004 Tobias Koenig <tokoe@kde.org>
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU General Public License as published by
00007     the Free Software Foundation; either version 2 of the License, or
00008     (at your option) any later version.
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with this program; if not, write to the Free Software
00017     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00018 
00019     As a special exception, permission is given to link this program
00020     with any edition of TQt, and distribute the resulting executable,
00021     without including the source code for TQt in the source distribution.
00022 */
00023 
00024 #include <tqcheckbox.h>
00025 #include <tqdatetimeedit.h>
00026 #include <tqframe.h>
00027 #include <tqlabel.h>
00028 #include <tqlayout.h>
00029 #include <tqpushbutton.h>
00030 #include <tqvalidator.h>
00031 #include <tqspinbox.h>
00032 
00033 #include <tdeaccelmanager.h>
00034 #include <kcombobox.h>
00035 #include <kinputdialog.h>
00036 #include <klineedit.h>
00037 #include <tdemessagebox.h>
00038 
00039 #include "addresseeconfig.h"
00040 #include "kabprefs.h"
00041 
00042 #include "customfieldswidget.h"
00043 
00044 
00045 AddFieldDialog::AddFieldDialog( TQWidget *parent, const char *name )
00046   : KDialogBase( Plain, i18n( "Add Field" ), Ok | Cancel,
00047                  Ok, parent, name, true, true )
00048 {
00049   TQWidget *page = plainPage();
00050 
00051   TQGridLayout *layout = new TQGridLayout( page, 3, 2, marginHint(), spacingHint() );
00052 
00053   TQLabel *label = new TQLabel( i18n( "Title:" ), page );
00054   layout->addWidget( label, 0, 0 );
00055 
00056   mTitle = new KLineEdit( page );
00057   mTitle->setValidator( new TQRegExpValidator( TQRegExp( "([a-zA-Z]|\\d|-)+" ), TQT_TQOBJECT(mTitle) ) );
00058   label->setBuddy( mTitle );
00059   layout->addWidget( mTitle, 0, 1 );
00060 
00061   label = new TQLabel( i18n( "Type:" ), page );
00062   layout->addWidget( label, 1, 0 );
00063 
00064   mType = new KComboBox( page );
00065   label->setBuddy( mType );
00066   layout->addWidget( mType, 1, 1 );
00067 
00068   mGlobal = new TQCheckBox( i18n( "Is available for all contacts" ), page );
00069   mGlobal->setChecked( true );
00070   layout->addMultiCellWidget( mGlobal, 2, 2, 0, 1 );
00071 
00072   connect( mTitle, TQT_SIGNAL( textChanged( const TQString& ) ),
00073            this, TQT_SLOT( nameChanged( const TQString& ) ) );
00074 
00075   TDEAcceleratorManager::manage( this );
00076 
00077   mTypeList.append( "text" );
00078   mTypeName.append( i18n( "Text" ) );
00079   mTypeList.append( "integer" );
00080   mTypeName.append( i18n( "Numeric Value" ) );
00081   mTypeList.append( "boolean" );
00082   mTypeName.append( i18n( "Boolean" ) );
00083   mTypeList.append( "date" );
00084   mTypeName.append( i18n( "Date" ) );
00085   mTypeList.append( "time" );
00086   mTypeName.append( i18n( "Time" ) );
00087   mTypeList.append( "datetime" );
00088   mTypeName.append( i18n( "Date & Time" ) );
00089 
00090   for ( uint i = 0; i < mTypeName.count(); ++i )
00091     mType->insertItem( mTypeName[ i ] );
00092 
00093   nameChanged( "" );
00094 
00095   mTitle->setFocus();
00096 }
00097 
00098 TQString AddFieldDialog::title() const
00099 {
00100   return mTitle->text();
00101 }
00102 
00103 TQString AddFieldDialog::identifier() const
00104 {
00105   TQString id = mTitle->text().lower();
00106   return id.replace( ",", "_" ).replace( " ", "_" );
00107 }
00108 
00109 TQString AddFieldDialog::type() const
00110 {
00111   return mTypeList[ mType->currentItem() ];
00112 }
00113 
00114 bool AddFieldDialog::isGlobal() const
00115 {
00116   return mGlobal->isChecked();
00117 }
00118 
00119 void AddFieldDialog::nameChanged( const TQString &name )
00120 {
00121   enableButton( Ok, !name.isEmpty() );
00122 }
00123 
00124 FieldWidget::FieldWidget( TQWidget *parent, const char *name )
00125   : TQWidget( parent, name )
00126 {
00127   TQVBoxLayout *layout = new TQVBoxLayout( this, KDialog::marginHint(),
00128                                          KDialog::spacingHint() );
00129 
00130   mGlobalLayout = new TQVBoxLayout( layout, KDialog::spacingHint() );
00131   mGlobalLayout->setAlignment( TQt::AlignTop );
00132 
00133   mSeparator = new TQFrame( this );
00134   mSeparator->setFrameStyle( TQFrame::HLine | TQFrame::Sunken );
00135   mSeparator->hide();
00136   layout->addWidget( mSeparator );
00137 
00138   mLocalLayout = new TQVBoxLayout( layout, KDialog::spacingHint() );
00139   mLocalLayout->setAlignment( TQt::AlignTop );
00140 }
00141 
00142 void FieldWidget::addField( const TQString &identifier, const TQString &title,
00143                             const TQString &type, bool isGlobal )
00144 {
00145   FieldRecord record;
00146 
00147   record.mIdentifier = identifier;
00148   record.mTitle = title;
00149   record.mLabel = new TQLabel( title + ":", this );
00150   record.mGlobal = isGlobal;
00151   if ( type == "integer" ) {
00152     TQSpinBox *wdg = new TQSpinBox( 0, 1000, 1, this );
00153     record.mWidget = wdg;
00154     connect( wdg, TQT_SIGNAL( valueChanged( int ) ),
00155              this, TQT_SIGNAL( changed() ) );
00156   } else if ( type == "boolean" ) {
00157     TQCheckBox *wdg = new TQCheckBox( this );
00158     record.mWidget = wdg;
00159     connect( wdg, TQT_SIGNAL( toggled( bool ) ),
00160              this, TQT_SIGNAL( changed() ) );
00161   } else if ( type == "date" ) {
00162     TQDateEdit *wdg = new TQDateEdit( this );
00163     record.mWidget = wdg;
00164     connect( wdg, TQT_SIGNAL( valueChanged( const TQDate& ) ),
00165              this, TQT_SIGNAL( changed() ) );
00166   } else if ( type == "time" ) {
00167     TQTimeEdit *wdg = new TQTimeEdit( this );
00168     record.mWidget = wdg;
00169     connect( wdg, TQT_SIGNAL( valueChanged( const TQTime& ) ),
00170              this, TQT_SIGNAL( changed() ) );
00171   } else if ( type == "datetime" ) {
00172     TQDateTimeEdit *wdg = new TQDateTimeEdit( this );
00173     record.mWidget = wdg;
00174     connect( wdg, TQT_SIGNAL( valueChanged( const TQDateTime& ) ),
00175              this, TQT_SIGNAL( changed() ) );
00176   } else  if ( type == "text" ) {
00177     TQLineEdit *wdg = new TQLineEdit( this );
00178     record.mWidget = wdg;
00179     connect( wdg, TQT_SIGNAL( textChanged( const TQString& ) ),
00180              this, TQT_SIGNAL( changed() ) );
00181   }
00182 
00183   record.mLabel->show();
00184   record.mWidget->show();
00185 
00186   if ( isGlobal ) {
00187     record.mLayout = new TQHBoxLayout( mGlobalLayout );
00188     record.mLayout->addWidget( record.mLabel );
00189     record.mLayout->addWidget( record.mWidget, TQt::AlignLeft );
00190   } else {
00191     record.mLayout = new TQHBoxLayout( mLocalLayout );
00192     record.mLayout->addWidget( record.mLabel );
00193     record.mLayout->addWidget( record.mWidget, TQt::AlignLeft );
00194     mSeparator->show();
00195   }
00196 
00197   mFieldList.append( record );
00198 
00199   recalculateLayout();
00200 }
00201 
00202 void FieldWidget::removeField( const TQString &identifier )
00203 {
00204   FieldRecordList::Iterator it;
00205   for ( it = mFieldList.begin(); it != mFieldList.end(); ++it ) {
00206     if ( (*it).mIdentifier == identifier ) {
00207       delete (*it).mLabel;
00208       delete (*it).mWidget;
00209       delete (*it).mLayout;
00210 
00211       mFieldList.remove( it );
00212       recalculateLayout();
00213 
00214       bool hasLocal = false;
00215       for ( it = mFieldList.begin(); it != mFieldList.end(); ++it )
00216         hasLocal = hasLocal || !(*it).mGlobal;
00217 
00218       if ( !hasLocal )
00219         mSeparator->hide();
00220 
00221       return;
00222     }
00223   }
00224 }
00225 
00226 void FieldWidget::clearFields()
00227 {
00228   FieldRecordList::ConstIterator fieldIt;
00229   for ( fieldIt = mFieldList.begin(); fieldIt != mFieldList.end(); ++fieldIt ) {
00230     if ( (*fieldIt).mWidget->isA( TQLINEEDIT_OBJECT_NAME_STRING ) ) {
00231       TQLineEdit *wdg = static_cast<TQLineEdit*>( (*fieldIt).mWidget );
00232       wdg->setText( TQString() );
00233     } else if ( (*fieldIt).mWidget->isA( TQSPINBOX_OBJECT_NAME_STRING ) ) {
00234       TQSpinBox *wdg = static_cast<TQSpinBox*>( (*fieldIt).mWidget );
00235       wdg->setValue( 0 );
00236     } else if ( (*fieldIt).mWidget->isA( TQCHECKBOX_OBJECT_NAME_STRING ) ) {
00237       TQCheckBox *wdg = static_cast<TQCheckBox*>( (*fieldIt).mWidget );
00238       wdg->setChecked( true );
00239     } else if ( (*fieldIt).mWidget->isA( TQDATEEDIT_OBJECT_NAME_STRING ) ) {
00240       TQDateEdit *wdg = static_cast<TQDateEdit*>( (*fieldIt).mWidget );
00241       wdg->setDate( TQDate::currentDate() );
00242     } else if ( (*fieldIt).mWidget->isA( TQTIMEEDIT_OBJECT_NAME_STRING ) ) {
00243       TQTimeEdit *wdg = static_cast<TQTimeEdit*>( (*fieldIt).mWidget );
00244       wdg->setTime( TQTime::currentTime() );
00245     } else if ( (*fieldIt).mWidget->isA( TQDATETIMEEDIT_OBJECT_NAME_STRING ) ) {
00246       TQDateTimeEdit *wdg = static_cast<TQDateTimeEdit*>( (*fieldIt).mWidget );
00247       wdg->setDateTime( TQDateTime::currentDateTime() );
00248     }
00249   }
00250 }
00251 
00252 void FieldWidget::loadContact( TDEABC::Addressee *addr )
00253 {
00254   const TQStringList customs = addr->customs();
00255 
00256   clearFields();
00257 
00258   TQStringList::ConstIterator it;
00259   for ( it = customs.begin(); it != customs.end(); ++it ) {
00260     TQString app, name, value;
00261     splitField( *it, app, name, value );
00262     if ( app != "KADDRESSBOOK" )
00263       continue;
00264 
00265     FieldRecordList::ConstIterator fieldIt;
00266     for ( fieldIt = mFieldList.begin(); fieldIt != mFieldList.end(); ++fieldIt ) {
00267       if ( (*fieldIt).mIdentifier == name ) {
00268         if ( (*fieldIt).mWidget->isA( TQLINEEDIT_OBJECT_NAME_STRING ) ) {
00269           TQLineEdit *wdg = static_cast<TQLineEdit*>( (*fieldIt).mWidget );
00270           wdg->setText( value );
00271         } else if ( (*fieldIt).mWidget->isA( TQSPINBOX_OBJECT_NAME_STRING ) ) {
00272           TQSpinBox *wdg = static_cast<TQSpinBox*>( (*fieldIt).mWidget );
00273           wdg->setValue( value.toInt() );
00274         } else if ( (*fieldIt).mWidget->isA( TQCHECKBOX_OBJECT_NAME_STRING ) ) {
00275           TQCheckBox *wdg = static_cast<TQCheckBox*>( (*fieldIt).mWidget );
00276           wdg->setChecked( value == "true" || value == "1" );
00277         } else if ( (*fieldIt).mWidget->isA( TQDATEEDIT_OBJECT_NAME_STRING ) ) {
00278           TQDateEdit *wdg = static_cast<TQDateEdit*>( (*fieldIt).mWidget );
00279           wdg->setDate( TQDate::fromString( value, Qt::ISODate ) );
00280         } else if ( (*fieldIt).mWidget->isA( TQTIMEEDIT_OBJECT_NAME_STRING ) ) {
00281           TQTimeEdit *wdg = static_cast<TQTimeEdit*>( (*fieldIt).mWidget );
00282           wdg->setTime( TQTime::fromString( value, Qt::ISODate ) );
00283         } else if ( (*fieldIt).mWidget->isA( TQDATETIMEEDIT_OBJECT_NAME_STRING ) ) {
00284           TQDateTimeEdit *wdg = static_cast<TQDateTimeEdit*>( (*fieldIt).mWidget );
00285           wdg->setDateTime( TQDateTime::fromString( value, Qt::ISODate ) );
00286         }
00287       }
00288     }
00289   }
00290 }
00291 
00292 void FieldWidget::setReadOnly( bool readOnly )
00293 {
00294   FieldRecordList::ConstIterator it;
00295   for ( it = mFieldList.begin(); it != mFieldList.end(); ++it ) {
00296     TQString value;
00297     if ( (*it).mWidget->isA( TQLINEEDIT_OBJECT_NAME_STRING ) ) {
00298       TQLineEdit *wdg = static_cast<TQLineEdit*>( (*it).mWidget );
00299       wdg->setReadOnly(readOnly);
00300     } else if ( (*it).mWidget->isA( TQSPINBOX_OBJECT_NAME_STRING ) ) {
00301       TQSpinBox *wdg = static_cast<TQSpinBox*>( (*it).mWidget );
00302       wdg->setEnabled( !readOnly );
00303     } else if ( (*it).mWidget->isA( TQCHECKBOX_OBJECT_NAME_STRING ) ) {
00304       TQCheckBox *wdg = static_cast<TQCheckBox*>( (*it).mWidget );
00305       wdg->setEnabled( !readOnly );
00306     } else if ( (*it).mWidget->isA( TQDATEEDIT_OBJECT_NAME_STRING ) ) {
00307       TQDateEdit *wdg = static_cast<TQDateEdit*>( (*it).mWidget );
00308       wdg->setEnabled( !readOnly );
00309     } else if ( (*it).mWidget->isA( TQTIMEEDIT_OBJECT_NAME_STRING ) ) {
00310       TQTimeEdit *wdg = static_cast<TQTimeEdit*>( (*it).mWidget );
00311       wdg->setEnabled( !readOnly );
00312     } else if ( (*it).mWidget->isA( TQDATETIMEEDIT_OBJECT_NAME_STRING ) ) {
00313       TQDateTimeEdit *wdg = static_cast<TQDateTimeEdit*>( (*it).mWidget );
00314       wdg->setEnabled( !readOnly );
00315     }
00316   }
00317 }
00318 
00319 void FieldWidget::storeContact( TDEABC::Addressee *addr )
00320 {
00321   FieldRecordList::ConstIterator it;
00322   for ( it = mFieldList.begin(); it != mFieldList.end(); ++it ) {
00323     TQString value;
00324     if ( (*it).mWidget->isA( TQLINEEDIT_OBJECT_NAME_STRING ) ) {
00325       TQLineEdit *wdg = static_cast<TQLineEdit*>( (*it).mWidget );
00326       value = wdg->text();
00327     } else if ( (*it).mWidget->isA( TQSPINBOX_OBJECT_NAME_STRING ) ) {
00328       TQSpinBox *wdg = static_cast<TQSpinBox*>( (*it).mWidget );
00329       value = TQString::number( wdg->value() );
00330     } else if ( (*it).mWidget->isA( TQCHECKBOX_OBJECT_NAME_STRING ) ) {
00331       TQCheckBox *wdg = static_cast<TQCheckBox*>( (*it).mWidget );
00332       value = ( wdg->isChecked() ? "true" : "false" );
00333     } else if ( (*it).mWidget->isA( TQDATEEDIT_OBJECT_NAME_STRING ) ) {
00334       TQDateEdit *wdg = static_cast<TQDateEdit*>( (*it).mWidget );
00335       value = wdg->date().toString( Qt::ISODate );
00336     } else if ( (*it).mWidget->isA( TQTIMEEDIT_OBJECT_NAME_STRING ) ) {
00337       TQTimeEdit *wdg = static_cast<TQTimeEdit*>( (*it).mWidget );
00338       value = wdg->time().toString( Qt::ISODate );
00339     } else if ( (*it).mWidget->isA( TQDATETIMEEDIT_OBJECT_NAME_STRING ) ) {
00340       TQDateTimeEdit *wdg = static_cast<TQDateTimeEdit*>( (*it).mWidget );
00341       value = wdg->dateTime().toString( Qt::ISODate );
00342     }
00343 
00344     if ( value.isEmpty() )
00345       addr->removeCustom( "KADDRESSBOOK", (*it).mIdentifier );
00346     else
00347       addr->insertCustom( "KADDRESSBOOK", (*it).mIdentifier, value );
00348   }
00349 }
00350 
00351 void FieldWidget::removeLocalFields()
00352 {
00353   FieldRecordList::Iterator it;
00354   for ( it = mFieldList.begin(); it != mFieldList.end(); ++it ) {
00355     if ( !(*it).mGlobal ) {
00356       delete (*it).mLabel;
00357       delete (*it).mWidget;
00358       delete (*it).mLayout;
00359 
00360       it = mFieldList.remove( it );
00361       it--;
00362       recalculateLayout();
00363     }
00364   }
00365 }
00366 
00367 void FieldWidget::recalculateLayout()
00368 {
00369   int maxWidth = 0;
00370 
00371   FieldRecordList::ConstIterator it;
00372   for ( it = mFieldList.begin(); it != mFieldList.end(); ++it )
00373     maxWidth = TQMAX( maxWidth, (*it).mLabel->minimumSizeHint().width() );
00374 
00375   for ( it = mFieldList.begin(); it != mFieldList.end(); ++it )
00376     (*it).mLabel->setMinimumWidth( maxWidth );
00377 }
00378 
00379 CustomFieldsWidget::CustomFieldsWidget( TDEABC::AddressBook *ab,
00380                                         TQWidget *parent, const char *name )
00381   : KAB::ContactEditorWidget( ab, parent, name )
00382 {
00383   initGUI();
00384 
00385   connect( mAddButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( addField() ) );
00386   connect( mRemoveButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( removeField() ) );
00387 
00388   connect( mFieldWidget, TQT_SIGNAL( changed() ), this, TQT_SLOT( setModified() ) );
00389 }
00390 
00391 void CustomFieldsWidget::loadContact( TDEABC::Addressee *addr )
00392 {
00393   mAddressee = *addr;
00394 
00395   mFieldWidget->removeLocalFields();
00396 
00397   AddresseeConfig addrConfig( mAddressee );
00398   TQStringList fields = addrConfig.customFields();
00399 
00400   if ( !fields.isEmpty() ) {
00401     for ( uint i = 0; i < fields.count(); i += 3 ) {
00402       mFieldWidget->addField( fields[ i ], fields[ i + 1 ],
00403                               fields[ i + 2 ] , false );
00404       mRemoveButton->setEnabled( true );
00405     }
00406   }
00407 
00408   mFieldWidget->loadContact( addr );
00409 }
00410 
00411 void CustomFieldsWidget::storeContact( TDEABC::Addressee *addr )
00412 {
00413   mFieldWidget->storeContact( addr );
00414 }
00415 
00416 void CustomFieldsWidget::setReadOnly( bool readOnly )
00417 {
00418   mAddButton->setEnabled( !readOnly );
00419   mRemoveButton->setEnabled( !readOnly && !mFieldWidget->fields().isEmpty() );
00420   mFieldWidget->setReadOnly( readOnly );
00421 }
00422 
00423 void CustomFieldsWidget::addField()
00424 {
00425   AddFieldDialog dlg( this );
00426 
00427   if ( dlg.exec() ) {
00428     FieldRecordList list = mFieldWidget->fields();
00429 
00430     FieldRecordList::ConstIterator it;
00431     for ( it = list.begin(); it != list.end(); ++it )
00432       if ( (*it).mIdentifier == dlg.identifier() ) {
00433         KMessageBox::sorry( this, i18n( "A field with the same name already exists, please choose another one." ) );
00434         return;
00435       }
00436 
00437     mFieldWidget->addField( dlg.identifier(), dlg.title(),
00438                             dlg.type(), dlg.isGlobal() );
00439 
00440     if ( dlg.isGlobal() ) {
00441       KABPrefs::instance()->setGlobalCustomFields( marshallFields( true ) );
00442     } else {
00443       AddresseeConfig addrConfig( mAddressee );
00444       addrConfig.setCustomFields( marshallFields( false ) );
00445     }
00446 
00447     mRemoveButton->setEnabled( true );
00448   }
00449 }
00450 
00451 void CustomFieldsWidget::removeField()
00452 {
00453   const FieldRecordList list = mFieldWidget->fields();
00454 
00455   TQStringList fields;
00456 
00457   FieldRecordList::ConstIterator it;
00458   for ( it = list.begin(); it != list.end(); ++it )
00459     fields.append( (*it).mTitle );
00460 
00461   bool ok;
00462   TQString title = KInputDialog::getItem( i18n( "Remove Field" ),
00463                                          i18n( "Select the field you want to remove:" ),
00464                                          fields, 0, false, &ok, this );
00465 
00466   if ( ok ) {
00467     for ( it = list.begin(); it != list.end(); ++it )
00468       if ( (*it).mTitle == title ) {
00469         mFieldWidget->removeField( (*it).mIdentifier );
00470 
00471         if ( list.count() == 1 )
00472           mRemoveButton->setEnabled( false );
00473 
00474         if ( (*it).mGlobal ) {
00475           KABPrefs::instance()->setGlobalCustomFields( marshallFields( true ) );
00476         } else {
00477           AddresseeConfig addrConfig( mAddressee );
00478           addrConfig.setCustomFields( marshallFields( false ) );
00479         }
00480 
00481         return;
00482       }
00483   }
00484 }
00485 
00486 void CustomFieldsWidget::initGUI()
00487 {
00488   TQGridLayout *layout = new TQGridLayout( this, 2, 3, KDialog::marginHint(),
00489                                          KDialog::spacingHint() );
00490 
00491   mFieldWidget = new FieldWidget( this );
00492   layout->addMultiCellWidget( mFieldWidget, 0, 0, 0, 2 );
00493 
00494   mAddButton = new TQPushButton( i18n( "Add Field..." ), this );
00495   layout->addWidget( mAddButton, 1, 1, TQt::AlignRight );
00496 
00497   mRemoveButton = new TQPushButton( i18n( "Remove Field..." ), this );
00498   mRemoveButton->setEnabled( false );
00499   layout->addWidget( mRemoveButton, 1, 2, TQt::AlignRight );
00500 
00501   // load global fields
00502   TQStringList globalFields = KABPrefs::instance()->globalCustomFields();
00503 
00504   if ( globalFields.isEmpty() )
00505     return;
00506 
00507   for ( uint i = 0; i < globalFields.count(); i += 3 ) {
00508     mFieldWidget->addField( globalFields[ i ], globalFields[ i + 1 ],
00509                             globalFields[ i + 2 ] , true );
00510     mRemoveButton->setEnabled( true );
00511   }
00512 }
00513 
00514 TQStringList CustomFieldsWidget::marshallFields( bool global ) const
00515 {
00516   TQStringList retval;
00517 
00518   const FieldRecordList list = mFieldWidget->fields();
00519   FieldRecordList::ConstIterator it;
00520   for ( it = list.begin(); it != list.end(); ++it ) {
00521     if ( (*it).mGlobal == global ) {
00522       retval.append( (*it).mIdentifier );
00523       retval.append( (*it).mTitle );
00524 
00525       TQString type = "text";
00526       if ( (*it).mWidget->isA( TQSPINBOX_OBJECT_NAME_STRING ) ) {
00527         type = "integer";
00528       } else if ( (*it).mWidget->isA( TQCHECKBOX_OBJECT_NAME_STRING ) ) {
00529         type = "boolean";
00530       } else if ( (*it).mWidget->isA( TQDATEEDIT_OBJECT_NAME_STRING ) ) {
00531         type = "date";
00532       } else if ( (*it).mWidget->isA( TQTIMEEDIT_OBJECT_NAME_STRING ) ) {
00533         type = "time";
00534       } else if ( (*it).mWidget->isA( TQDATETIMEEDIT_OBJECT_NAME_STRING ) ) {
00535         type = "datetime";
00536       } else if ( (*it).mWidget->isA( TQLINEEDIT_OBJECT_NAME_STRING ) ) {
00537         type = "text";
00538       }
00539 
00540       retval.append( type );
00541     }
00542   }
00543 
00544   return retval;
00545 }
00546 
00547 
00548 void splitField( const TQString &str, TQString &app, TQString &name, TQString &value )
00549 {
00550   int colon = str.find( ':' );
00551   if ( colon != -1 ) {
00552     TQString tmp = str.left( colon );
00553     value = str.mid( colon + 1 );
00554 
00555     int dash = tmp.find( '-' );
00556     if ( dash != -1 ) {
00557       app = tmp.left( dash );
00558       name = tmp.mid( dash + 1 );
00559     }
00560   }
00561 }
00562 
00563 #include "customfieldswidget.moc"