22 #include "contacteditorwidget.h" 
   24 #include "addresseditwidget.h" 
   25 #include "categorieseditwidget.h" 
   26 #include "contacteditorpageplugin.h" 
   27 #include "contactmetadata_p.h" 
   28 #include "customfieldseditwidget.h" 
   29 #include "dateeditwidget.h" 
   30 #include "displaynameeditwidget.h" 
   31 #include "emaileditwidget.h" 
   32 #include "freebusyeditwidget.h" 
   33 #include "geoeditwidget.h" 
   34 #include "imagewidget.h" 
   35 #include "imeditwidget.h" 
   36 #include "nameeditwidget.h" 
   37 #include "phoneeditwidget.h" 
   38 #include "soundeditwidget.h" 
   41 #include <kconfiggroup.h> 
   42 #include <klineedit.h> 
   43 #include <klocalizedstring.h> 
   44 #include <kstandarddirs.h> 
   45 #include <ktabwidget.h> 
   46 #include <ktextedit.h> 
   48 #include <Nepomuk2/ResourceManager> 
   50 #include <QtCore/QDirIterator> 
   51 #include <QtCore/QPluginLoader> 
   57 class ContactEditorWidget::Private
 
   61       : mDisplayMode(displayMode), mParent( parent ), mCustomFieldsWidget(0)
 
   66     void initGuiContactTab();
 
   67     void initGuiLocationTab();
 
   68     void initGuiBusinessTab();
 
   69     void initGuiPersonalTab();
 
   70     void initGuiNotesTab();
 
   71     void initGuiCustomFieldsTab();
 
   73     void loadCustomPages();
 
   75     QString loadCustom( 
const KABC::Addressee &contact, 
const QString &key ) 
const;
 
   76     void storeCustom( KABC::Addressee &contact, 
const QString &key, 
const QString &value ) 
const;
 
   80     KTabWidget *mTabWidget;
 
   84     ImageWidget *mPhotoWidget;
 
   86     KLineEdit *mNickNameWidget;
 
   87     SoundEditWidget *mPronunciationWidget;
 
   91     KLineEdit *mHomepageWidget;
 
   92     KLineEdit *mBlogWidget;
 
  100     KComboBox* mMailPreferFormatting;
 
  101     QCheckBox *mAllowRemoteContent;
 
  107     GeoEditWidget *mCoordinatesWidget;
 
  110     ImageWidget *mLogoWidget;
 
  111     KLineEdit *mOrganizationWidget;
 
  112     KLineEdit *mProfessionWidget;
 
  113     KLineEdit *mTitleWidget;
 
  114     KLineEdit *mDepartmentWidget;
 
  115     KLineEdit *mOfficeWidget;
 
  116     KLineEdit *mManagerWidget;
 
  117     KLineEdit *mAssistantWidget;
 
  120     FreeBusyEditWidget *mFreeBusyWidget;
 
  123     KTextEdit *mNotesWidget;
 
  126     DateEditWidget *mBirthdateWidget;
 
  127     DateEditWidget *mAnniversaryWidget;
 
  130     KLineEdit *mPartnerWidget;
 
  133     CustomFieldsEditWidget *mCustomFieldsWidget;
 
  136     QList<Akonadi::ContactEditorPagePlugin*> mCustomPages;
 
  139 void ContactEditorWidget::Private::initGui()
 
  141   QVBoxLayout *layout = 
new QVBoxLayout( mParent );
 
  142   layout->setMargin( 0 );
 
  144   mTabWidget = 
new KTabWidget( mParent );
 
  145   layout->addWidget( mTabWidget );
 
  148   initGuiLocationTab();
 
  149   initGuiBusinessTab();
 
  150   initGuiPersonalTab();
 
  152   if (mDisplayMode == FullMode) {
 
  153     initGuiCustomFieldsTab();
 
  158 void ContactEditorWidget::Private::initGuiContactTab()
 
  160   QWidget *widget = 
new QWidget;
 
  161   QGridLayout *layout = 
new QGridLayout( widget );
 
  163   mTabWidget->addTab( widget, i18nc( 
"@title:tab", 
"Contact" ) );
 
  165   QGroupBox *nameGroupBox = 
new QGroupBox( i18nc( 
"@title:group Name related properties of a contact", 
"Name" ) );
 
  166   QGroupBox *internetGroupBox = 
new QGroupBox( i18nc( 
"@title:group", 
"Internet" ) );
 
  167   QGroupBox *phonesGroupBox = 
new QGroupBox( i18nc( 
"@title:group", 
"Phones" ) );
 
  169   nameGroupBox->setMinimumSize(320,200);
 
  170   layout->addWidget( nameGroupBox, 0, 0 );
 
  171   layout->addWidget( internetGroupBox, 0, 1 );
 
  172   layout->addWidget( phonesGroupBox, 1, 0, 4, 1 );
 
  174   QGridLayout *nameLayout = 
new QGridLayout( nameGroupBox );
 
  175   QGridLayout *internetLayout = 
new QGridLayout( internetGroupBox );
 
  176   QGridLayout *phonesLayout = 
new QGridLayout( phonesGroupBox );
 
  181   label = 
new QLabel( i18nc( 
"@label The name of a contact", 
"Name:" ) );
 
  182   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  183   nameLayout->addWidget( label, 0, 0 );
 
  186   label->setBuddy( mNameWidget );
 
  187   nameLayout->addWidget( mNameWidget, 0, 1 );
 
  189   mPhotoWidget = 
new ImageWidget( ImageWidget::Photo );
 
  190   nameLayout->addWidget( mPhotoWidget, 0, 2, 4, 1 );
 
  192   label = 
new QLabel( i18nc( 
"@label The display name of a contact", 
"Display:" ) );
 
  193   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  194   nameLayout->addWidget( label, 1, 0 );
 
  197   label->setBuddy( mDisplayNameWidget );
 
  198   nameLayout->addWidget( mDisplayNameWidget, 1, 1 );
 
  200   label = 
new QLabel( i18nc( 
"@label The nickname of a contact", 
"Nickname:" ) );
 
  201   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  202   nameLayout->addWidget( label, 2, 0 );
 
  204   mNickNameWidget = 
new KLineEdit;
 
  205   label->setBuddy( mNickNameWidget );
 
  206   nameLayout->addWidget( mNickNameWidget, 2, 1 );
 
  208   label = 
new QLabel( i18nc( 
"@label The pronunciation of a contact's name", 
"Pronunciation:" ) );
 
  209   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  210   nameLayout->addWidget( label, 3, 0 );
 
  212   mPronunciationWidget = 
new SoundEditWidget;
 
  213   label->setBuddy( mPronunciationWidget );
 
  214   nameLayout->addWidget( mPronunciationWidget, 3, 1 );
 
  216   nameLayout->setRowStretch( 4, 1 );
 
  219   label = 
new QLabel( i18nc( 
"@label The email address of a contact", 
"Email:" ) );
 
  220   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  221   internetLayout->addWidget( label, 0, 0 );
 
  224   label->setBuddy( mEmailWidget );
 
  225   internetLayout->addWidget( mEmailWidget, 0, 1 );
 
  227   label = 
new QLabel( i18nc( 
"@label The homepage URL of a contact", 
"Homepage:" ) );
 
  228   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  229   internetLayout->addWidget( label, 1, 0 );
 
  231   mHomepageWidget = 
new KLineEdit;
 
  232   label->setBuddy( mHomepageWidget );
 
  233   internetLayout->addWidget( mHomepageWidget, 1, 1 );
 
  235   label = 
new QLabel( i18nc( 
"@label The blog URL of a contact", 
"Blog:" ) );
 
  236   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  237   internetLayout->addWidget( label, 2, 0 );
 
  239   mBlogWidget = 
new KLineEdit;
 
  240   label->setBuddy( mBlogWidget );
 
  241   internetLayout->addWidget( mBlogWidget, 2, 1 );
 
  243   label = 
new QLabel( i18nc( 
"@label The instant messaging address of a contact", 
"Messaging:" ) );
 
  244   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  245   internetLayout->addWidget( label, 3, 0 );
 
  248   label->setBuddy( mIMWidget );
 
  249   internetLayout->addWidget( mIMWidget, 3, 1 );
 
  251   internetLayout->setRowStretch( 4, 1 );
 
  255   phonesLayout->addWidget( mPhonesWidget, 0, 0 );
 
  260   const bool nepomukInitialized( Nepomuk2::ResourceManager::instance()->initialized() );
 
  261   QHBoxLayout *categoriesLayout = 
new QHBoxLayout;
 
  262   label = 
new QLabel( i18nc( 
"@label The categories of a contact", 
"Categories:" ) );
 
  263   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  264   label->setVisible( nepomukInitialized );
 
  267   mCategoriesWidget->setVisible( nepomukInitialized );
 
  268   label->setBuddy( mCategoriesWidget );
 
  270   categoriesLayout->addWidget( label );
 
  271   categoriesLayout->addWidget( mCategoriesWidget );
 
  273   layout->addLayout( categoriesLayout, 1, 1 );
 
  275   QGroupBox *receivedMessageGroupBox = 
new QGroupBox( i18n(
"Messages") );
 
  276   layout->addWidget( receivedMessageGroupBox, 2, 1 );
 
  278   QVBoxLayout *vbox = 
new QVBoxLayout(receivedMessageGroupBox);
 
  280   QHBoxLayout *mailPreferFormattingLayout = 
new QHBoxLayout;
 
  281   label = 
new QLabel( i18n( 
"Show messages received from this contact as:" ) );
 
  282   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  283   mMailPreferFormatting = 
new KComboBox;
 
  284   label->setBuddy( mMailPreferFormatting );
 
  285   QStringList listFormat;
 
  286   listFormat << i18n( 
"Default" ) << i18n( 
"Plain Text" ) << i18n( 
"HTML" );
 
  287   mMailPreferFormatting->addItems( listFormat );
 
  288   mailPreferFormattingLayout->addWidget( label );
 
  289   mailPreferFormattingLayout->addWidget( mMailPreferFormatting );
 
  292   vbox->addLayout( mailPreferFormattingLayout );
 
  294   mAllowRemoteContent = 
new QCheckBox( i18n( 
"Allow remote content in received HTML messages" ) );
 
  295   vbox->addWidget( mAllowRemoteContent );
 
  297   layout->setRowStretch( 4,1 );
 
  300 void ContactEditorWidget::Private::initGuiLocationTab()
 
  302   QWidget *widget = 
new QWidget;
 
  303   QHBoxLayout *layout = 
new QHBoxLayout( widget );
 
  305   mTabWidget->addTab( widget, i18nc( 
"@title:tab", 
"Location" ) );
 
  307   QGroupBox *addressesGroupBox = 
new QGroupBox( i18nc( 
"@title:group", 
"Addresses" ) );
 
  308   QGroupBox *coordinatesGroupBox = 
new QGroupBox( i18nc( 
"@title:group", 
"Coordinates" ) );
 
  310   layout->addWidget( addressesGroupBox );
 
  311   layout->addWidget( coordinatesGroupBox );
 
  313   QGridLayout *addressesLayout = 
new QGridLayout( addressesGroupBox );
 
  314   QGridLayout *coordinatesLayout = 
new QGridLayout( coordinatesGroupBox );
 
  318   mAddressesWidget->setMinimumHeight( 200 );
 
  319   addressesLayout->addWidget( mAddressesWidget, 0, 0 );
 
  320   addressesLayout->setRowStretch( 1, 1 );
 
  323   mCoordinatesWidget = 
new GeoEditWidget;
 
  324   coordinatesLayout->addWidget( mCoordinatesWidget, 0, 0 );
 
  325   coordinatesLayout->setRowStretch( 1, 1 );
 
  328 void ContactEditorWidget::Private::initGuiBusinessTab()
 
  330   QWidget *widget = 
new QWidget;
 
  331   QVBoxLayout *layout = 
new QVBoxLayout( widget );
 
  333   mTabWidget->addTab( widget, i18nc( 
"@title:tab", 
"Business" ) );
 
  335   QGroupBox *generalGroupBox = 
new QGroupBox( i18nc( 
"@title:group General properties of a contact", 
"General" ) );
 
  336   QGroupBox *groupwareGroupBox = 
new QGroupBox( i18nc( 
"@title:group", 
"Groupware" ) );
 
  338   layout->addWidget( generalGroupBox );
 
  339   layout->addWidget( groupwareGroupBox );
 
  341   QGridLayout *generalLayout = 
new QGridLayout( generalGroupBox );
 
  342   QGridLayout *groupwareLayout = 
new QGridLayout( groupwareGroupBox );
 
  347   mLogoWidget = 
new ImageWidget( ImageWidget::Logo );
 
  348   generalLayout->addWidget( mLogoWidget, 0, 2, 6, 1, Qt::AlignTop );
 
  350   label = 
new QLabel( i18nc( 
"@label The organization of a contact", 
"Organization:" ) );
 
  351   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  352   generalLayout->addWidget( label, 0, 0 );
 
  354   mOrganizationWidget = 
new KLineEdit;
 
  355   label->setBuddy( mOrganizationWidget );
 
  356   generalLayout->addWidget( mOrganizationWidget, 0, 1 );
 
  358   label = 
new QLabel( i18nc( 
"@label The profession of a contact", 
"Profession:" ) );
 
  359   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  360   generalLayout->addWidget( label, 1, 0 );
 
  362   mProfessionWidget = 
new KLineEdit;
 
  363   label->setBuddy( mProfessionWidget );
 
  364   generalLayout->addWidget( mProfessionWidget, 1, 1 );
 
  366   label = 
new QLabel( i18nc( 
"@label The title of a contact", 
"Title:" ) );
 
  367   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  368   generalLayout->addWidget( label, 2, 0 );
 
  370   mTitleWidget = 
new KLineEdit;
 
  371   label->setBuddy( mTitleWidget );
 
  372   generalLayout->addWidget( mTitleWidget , 2, 1 );
 
  374   label = 
new QLabel( i18nc( 
"@label The department of a contact", 
"Department:" ) );
 
  375   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  376   generalLayout->addWidget( label, 3, 0 );
 
  378   mDepartmentWidget = 
new KLineEdit;
 
  379   label->setBuddy( mDepartmentWidget );
 
  380   generalLayout->addWidget( mDepartmentWidget, 3, 1 );
 
  382   label = 
new QLabel( i18nc( 
"@label The office of a contact", 
"Office:" ) );
 
  383   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  384   generalLayout->addWidget( label, 4, 0 );
 
  386   mOfficeWidget = 
new KLineEdit;
 
  387   label->setBuddy( mOfficeWidget );
 
  388   generalLayout->addWidget( mOfficeWidget, 4, 1 );
 
  390   label = 
new QLabel( i18nc( 
"@label The manager's name of a contact", 
"Manager's name:" ) );
 
  391   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  392   generalLayout->addWidget( label, 5, 0 );
 
  394   mManagerWidget = 
new KLineEdit;
 
  395   label->setBuddy( mManagerWidget );
 
  396   generalLayout->addWidget( mManagerWidget, 5, 1 );
 
  398   label = 
new QLabel( i18nc( 
"@label The assistant's name of a contact", 
"Assistant's name:" ) );
 
  399   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  400   generalLayout->addWidget( label, 6, 0 );
 
  402   mAssistantWidget = 
new KLineEdit;
 
  403   label->setBuddy( mAssistantWidget );
 
  404   generalLayout->addWidget( mAssistantWidget, 6, 1 );
 
  407   label = 
new QLabel( i18nc( 
"@label The free/busy information of a contact", 
"Free/Busy:" ) );
 
  408   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  409   groupwareLayout->addWidget( label, 0, 0 );
 
  411   mFreeBusyWidget = 
new FreeBusyEditWidget;
 
  412   label->setBuddy( mFreeBusyWidget );
 
  413   groupwareLayout->addWidget( mFreeBusyWidget, 0, 1 );
 
  414   groupwareLayout->setRowStretch( 1, 1 );
 
  417 void ContactEditorWidget::Private::initGuiPersonalTab()
 
  419   QWidget *widget = 
new QWidget;
 
  420   QVBoxLayout *layout = 
new QVBoxLayout( widget );
 
  422   mTabWidget->addTab( widget, i18nc( 
"@title:tab Personal properties of a contact", 
"Personal" ) );
 
  424   QGroupBox *datesGroupBox = 
new QGroupBox( i18nc( 
"@title:group Date related properties of a contact", 
"Dates" ) );
 
  425   QGroupBox *familyGroupBox = 
new QGroupBox( i18nc( 
"@title:group Family related properties of a contact", 
"Family" ) );
 
  427   layout->addWidget( datesGroupBox );
 
  428   layout->addWidget( familyGroupBox );
 
  430   QGridLayout *datesLayout = 
new QGridLayout( datesGroupBox );
 
  431   QGridLayout *familyLayout = 
new QGridLayout( familyGroupBox );
 
  436   label = 
new QLabel( i18nc( 
"@label The birthdate of a contact", 
"Birthdate:" ) );
 
  437   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  438   datesLayout->addWidget( label, 0, 0 );
 
  440   mBirthdateWidget = 
new DateEditWidget( DateEditWidget::Birthday );
 
  441   label->setBuddy( mBirthdateWidget );
 
  442   datesLayout->addWidget( mBirthdateWidget, 0, 1 );
 
  444   label = 
new QLabel( i18nc( 
"@label The anniversary of a contact", 
"Anniversary:" ) );
 
  445   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  446   datesLayout->addWidget( label, 1, 0 );
 
  448   mAnniversaryWidget = 
new DateEditWidget( DateEditWidget::Anniversary );
 
  449   label->setBuddy( mAnniversaryWidget );
 
  450   datesLayout->addWidget( mAnniversaryWidget, 1, 1 );
 
  452   datesLayout->setRowStretch( 2, 1 );
 
  453   datesLayout->setColumnStretch( 1, 1 );
 
  456   label = 
new QLabel( i18nc( 
"@label The partner's name of a contact", 
"Partner's name:" ) );
 
  457   label->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
 
  458   familyLayout->addWidget( label, 0, 0 );
 
  460   mPartnerWidget = 
new KLineEdit;
 
  461   label->setBuddy( mPartnerWidget );
 
  462   familyLayout->addWidget( mPartnerWidget, 0, 1 );
 
  464   familyLayout->setRowStretch( 1, 1 );
 
  467 void ContactEditorWidget::Private::initGuiNotesTab()
 
  469   QWidget *widget = 
new QWidget;
 
  470   QVBoxLayout *layout = 
new QVBoxLayout( widget );
 
  472   mTabWidget->addTab( widget, i18nc( 
"@title:tab", 
"Notes" ) );
 
  474   mNotesWidget = 
new KTextEdit;
 
  475   mNotesWidget->setAcceptRichText(
false);
 
  476   layout->addWidget( mNotesWidget );
 
  479 void ContactEditorWidget::Private::initGuiCustomFieldsTab()
 
  481   QWidget *widget = 
new QWidget;
 
  482   QVBoxLayout *layout = 
new QVBoxLayout( widget );
 
  484   mTabWidget->addTab( widget, i18nc( 
"@title:tab", 
"Custom Fields" ) );
 
  486   mCustomFieldsWidget = 
new CustomFieldsEditWidget;
 
  487   layout->addWidget( mCustomFieldsWidget );
 
  490 void ContactEditorWidget::Private::loadCustomPages()
 
  492   qDeleteAll( mCustomPages );
 
  493   mCustomPages.clear();
 
  495   const QString pluginDirectory = KStandardDirs::locate( 
"lib", QLatin1String( 
"akonadi/contact/editorpageplugins/" ) );
 
  496   QDirIterator it( pluginDirectory, QDir::Files );
 
  497   while ( it.hasNext() ) {
 
  498     QPluginLoader loader( it.next() );
 
  499     if ( !loader.load() ) {
 
  508     mCustomPages.append( plugin );
 
  512     mTabWidget->addTab( plugin, plugin->
title() );
 
  516 QString ContactEditorWidget::Private::loadCustom( 
const KABC::Addressee &contact, 
const QString &key )
 const 
  518   return contact.custom( QLatin1String( 
"KADDRESSBOOK" ), key );
 
  521 void ContactEditorWidget::Private::storeCustom( KABC::Addressee &contact, 
const QString &key, 
const QString &value )
 const 
  523   if ( value.isEmpty() ) {
 
  524     contact.removeCustom( QLatin1String( 
"KADDRESSBOOK" ), key );
 
  526     contact.insertCustom( QLatin1String( 
"KADDRESSBOOK" ), key, value );
 
  530 ContactEditorWidget::ContactEditorWidget( QWidget* )
 
  531   : d( new Private( FullMode, this ) )
 
  535   connect( d->mNameWidget, SIGNAL(nameChanged(KABC::Addressee)),
 
  536            d->mDisplayNameWidget, SLOT(changeName(KABC::Addressee)) );
 
  537   connect( d->mOrganizationWidget, SIGNAL(textChanged(QString)),
 
  538            d->mDisplayNameWidget, SLOT(changeOrganization(QString)) );
 
  542   : d( new Private( displayMode, this ) )
 
  546   connect( d->mNameWidget, SIGNAL(nameChanged(KABC::Addressee)),
 
  547            d->mDisplayNameWidget, SLOT(changeName(KABC::Addressee)) );
 
  548   connect( d->mOrganizationWidget, SIGNAL(textChanged(QString)),
 
  549            d->mDisplayNameWidget, SLOT(changeOrganization(QString)) );
 
  560   d->mPhotoWidget->loadContact( contact );
 
  561   d->mNameWidget->loadContact( contact );
 
  562   d->mDisplayNameWidget->loadContact( contact );
 
  563   d->mNickNameWidget->setText( contact.nickName() );
 
  564   d->mPronunciationWidget->loadContact( contact );
 
  567   d->mEmailWidget->loadContact( contact );
 
  568   d->mHomepageWidget->setUrl( contact.url() );
 
  569   d->mBlogWidget->setText( d->loadCustom( contact, QLatin1String( 
"BlogFeed" ) ) );
 
  570   d->mIMWidget->loadContact( contact );
 
  573   d->mPhonesWidget->loadContact( contact );
 
  576   d->mCategoriesWidget->loadContact( contact );
 
  578   const QString mailPreferedFormatting = d->loadCustom( contact, QLatin1String( 
"MailPreferedFormatting" ) );
 
  579   if ( mailPreferedFormatting.isEmpty() ) {
 
  580     d->mMailPreferFormatting->setCurrentIndex( 0 );
 
  581   } 
else if ( mailPreferedFormatting == QLatin1String( 
"TEXT" ) ) {
 
  582     d->mMailPreferFormatting->setCurrentIndex( 1 );
 
  583   } 
else if ( mailPreferedFormatting == QLatin1String( 
"HTML" ) ) {
 
  584     d->mMailPreferFormatting->setCurrentIndex( 2 );
 
  586     d->mMailPreferFormatting->setCurrentIndex( 0 );
 
  589   const QString mailAllowToRemoteContent = d->loadCustom( contact, QLatin1String( 
"MailAllowToRemoteContent" ) );
 
  590   d->mAllowRemoteContent->setChecked( mailAllowToRemoteContent == QLatin1String( 
"TRUE" ) );
 
  593   d->mAddressesWidget->loadContact( contact );
 
  596   d->mCoordinatesWidget->loadContact( contact );
 
  599   d->mLogoWidget->loadContact( contact );
 
  600   d->mOrganizationWidget->setText( contact.organization() );
 
  601   d->mProfessionWidget->setText( d->loadCustom( contact, QLatin1String( 
"X-Profession" ) ) );
 
  602   d->mTitleWidget->setText( contact.title() );
 
  603   d->mDepartmentWidget->setText( contact.department() );
 
  604   d->mOfficeWidget->setText( d->loadCustom( contact, QLatin1String( 
"X-Office" ) ) );
 
  605   d->mManagerWidget->setText( d->loadCustom( contact, QLatin1String( 
"X-ManagersName" ) ) );
 
  606   d->mAssistantWidget->setText( d->loadCustom( contact, QLatin1String( 
"X-AssistantsName" ) ) );
 
  609   d->mFreeBusyWidget->loadContact( contact );
 
  612   d->mNotesWidget->setPlainText( contact.note() );
 
  615   d->mBirthdateWidget->setDate( contact.birthday().date() );
 
  616   d->mAnniversaryWidget->setDate( QDate::fromString( d->loadCustom( contact, QLatin1String( 
"X-Anniversary" ) ),
 
  620   d->mPartnerWidget->setText( d->loadCustom( contact, QLatin1String( 
"X-SpousesName" ) ) );
 
  624   if (d->mDisplayMode == FullMode) {
 
  627     d->mCustomFieldsWidget->loadContact( contact );
 
  639   d->mPhotoWidget->storeContact( contact );
 
  640   d->mNameWidget->storeContact( contact );
 
  641   d->mDisplayNameWidget->storeContact( contact );
 
  642   contact.setNickName( d->mNickNameWidget->text().trimmed() );
 
  643   d->mPronunciationWidget->storeContact( contact );
 
  646   d->mEmailWidget->storeContact( contact );
 
  647   contact.setUrl( KUrl( d->mHomepageWidget->text().trimmed() ) );
 
  648   d->storeCustom( contact, QLatin1String( 
"BlogFeed" ), d->mBlogWidget->text().trimmed() );
 
  649   d->mIMWidget->storeContact( contact );
 
  652   d->mPhonesWidget->storeContact( contact );
 
  655   d->mCategoriesWidget->storeContact( contact );
 
  657   QString mailPreferedFormatting;
 
  658   const int index = d->mMailPreferFormatting->currentIndex();
 
  661   } 
else if ( index == 1 ) {
 
  662     mailPreferedFormatting = QLatin1String( 
"TEXT" );
 
  663   } 
else if ( index == 2 ) {
 
  664     mailPreferedFormatting = QLatin1String( 
"HTML" );
 
  666   d->storeCustom( contact, QLatin1String( 
"MailPreferedFormatting" ), mailPreferedFormatting );
 
  668   QString mailAllowToRemoteContent;
 
  669   if ( d->mAllowRemoteContent->isChecked() ) {
 
  670     mailAllowToRemoteContent = QLatin1String( 
"TRUE" );
 
  672   d->storeCustom( contact, QLatin1String( 
"MailAllowToRemoteContent" ), mailAllowToRemoteContent );
 
  675   d->mAddressesWidget->storeContact( contact );
 
  678   d->mCoordinatesWidget->storeContact( contact );
 
  681   d->mLogoWidget->storeContact( contact );
 
  682   contact.setOrganization( d->mOrganizationWidget->text() );
 
  683   d->storeCustom( contact, QLatin1String( 
"X-Profession" ), d->mProfessionWidget->text().trimmed() );
 
  684   contact.setTitle( d->mTitleWidget->text().trimmed() );
 
  685   contact.setDepartment( d->mDepartmentWidget->text().trimmed() );
 
  686   d->storeCustom( contact, QLatin1String( 
"X-Office" ), d->mOfficeWidget->text().trimmed() );
 
  687   d->storeCustom( contact, QLatin1String( 
"X-ManagersName" ), d->mManagerWidget->text().trimmed() );
 
  688   d->storeCustom( contact, QLatin1String( 
"X-AssistantsName" ), d->mAssistantWidget->text().trimmed() );
 
  691   d->mFreeBusyWidget->storeContact( contact );
 
  694   contact.setNote( d->mNotesWidget->toPlainText() );
 
  697   QDateTime birthday = QDateTime( d->mBirthdateWidget->date(), QTime(), contact.birthday().timeSpec() );
 
  700   birthday.setTime( QTime() );
 
  702   contact.setBirthday( birthday );
 
  703   d->storeCustom( contact, QLatin1String( 
"X-Anniversary" ), d->mAnniversaryWidget->date().toString( Qt::ISODate ) );
 
  706   d->storeCustom( contact, QLatin1String( 
"X-SpousesName" ), d->mPartnerWidget->text().trimmed() );
 
  708   if (d->mDisplayMode == FullMode) {
 
  710     d->mCustomFieldsWidget->storeContact( contact );
 
  725   d->mNameWidget->setReadOnly( readOnly );
 
  726   d->mPhotoWidget->setReadOnly( readOnly );
 
  727   d->mDisplayNameWidget->setReadOnly( readOnly );
 
  728   d->mNickNameWidget->setReadOnly( readOnly );
 
  729   d->mPronunciationWidget->setReadOnly( readOnly );
 
  732   d->mEmailWidget->setReadOnly( readOnly );
 
  733   d->mHomepageWidget->setReadOnly( readOnly );
 
  734   d->mBlogWidget->setReadOnly( readOnly );
 
  735   d->mIMWidget->setReadOnly( readOnly );
 
  738   d->mPhonesWidget->setReadOnly( readOnly );
 
  741   d->mCategoriesWidget->setReadOnly( readOnly );
 
  744   d->mMailPreferFormatting->setEnabled( !readOnly );
 
  745   d->mAllowRemoteContent->setEnabled( !readOnly );
 
  748   d->mAddressesWidget->setReadOnly( readOnly );
 
  751   d->mCoordinatesWidget->setReadOnly( readOnly );
 
  754   d->mLogoWidget->setReadOnly( readOnly );
 
  755   d->mOrganizationWidget->setReadOnly( readOnly );
 
  756   d->mProfessionWidget->setReadOnly( readOnly );
 
  757   d->mTitleWidget->setReadOnly( readOnly );
 
  758   d->mDepartmentWidget->setReadOnly( readOnly );
 
  759   d->mOfficeWidget->setReadOnly( readOnly );
 
  760   d->mManagerWidget->setReadOnly( readOnly );
 
  761   d->mAssistantWidget->setReadOnly( readOnly );
 
  764   d->mFreeBusyWidget->setReadOnly( readOnly );
 
  767   d->mNotesWidget->setReadOnly( readOnly );
 
  770   d->mBirthdateWidget->setReadOnly( readOnly );
 
  771   d->mAnniversaryWidget->setReadOnly( readOnly );
 
  774   d->mPartnerWidget->setReadOnly( readOnly );
 
  776   if (d->mDisplayMode == FullMode) {
 
  778     d->mCustomFieldsWidget->setReadOnly( readOnly );
 
virtual void loadContact(const KABC::Addressee &contact)=0
This method is called to fill the editor widget with the data from contact. 
 
The base class for custom ContactEditor page plugins. 
 
virtual void storeContact(KABC::Addressee &contact) const =0
This method is called to store the data from the editor widget into contact. 
 
virtual QString title() const =0
Returns the i18n'd page title. 
 
virtual void setReadOnly(bool readOnly)=0
This method is called to set the editor widget readOnly.