-rw-r--r-- | kaddressbook/addresseeeditorwidget.cpp | 12 | ||||
-rw-r--r-- | kaddressbook/imagewidget.cpp | 28 | ||||
-rw-r--r-- | kaddressbook/imagewidget.h | 2 |
3 files changed, 36 insertions, 6 deletions
diff --git a/kaddressbook/addresseeeditorwidget.cpp b/kaddressbook/addresseeeditorwidget.cpp index c6993e9..bd32859 100644 --- a/kaddressbook/addresseeeditorwidget.cpp +++ b/kaddressbook/addresseeeditorwidget.cpp @@ -809,540 +809,550 @@ void AddresseeEditorWidget::setupTab2_1() connect( mSpouseEdit, SIGNAL( textChanged( const QString& ) ), SLOT( textChanged( const QString& ) ) ); label->setBuddy( mSpouseEdit ); layout->addWidget( mSpouseEdit, 5, 2 ); label = new QLabel( i18n( "Birthday:" ), tab2 ); layout->addWidget( label, 4, 3 ); mBirthdayPicker = new KDateEdit( tab2 ); mBirthdayPicker->setHandleInvalid( true ); connect( mBirthdayPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); connect( mBirthdayPicker, SIGNAL( invalidDateEntered() ), SLOT( invalidDate() ) ); connect( mBirthdayPicker, SIGNAL( textChanged( const QString& ) ), SLOT( emitModified() ) ); label->setBuddy( mBirthdayPicker ); layout->addWidget( mBirthdayPicker, 4, 4 ); label = new QLabel( i18n( "Anniversary:" ), tab2 ); layout->addWidget( label, 5, 3 ); mAnniversaryPicker = new KDateEdit( tab2 ); mAnniversaryPicker->setHandleInvalid( true ); connect( mAnniversaryPicker, SIGNAL( dateChanged( QDate ) ), SLOT( dateChanged( QDate ) ) ); connect( mAnniversaryPicker, SIGNAL( invalidDateEntered() ), SLOT( invalidDate() ) ); connect( mAnniversaryPicker, SIGNAL( textChanged( const QString& ) ), SLOT( emitModified() ) ); label->setBuddy( mAnniversaryPicker ); layout->addWidget( mAnniversaryPicker, 5, 4 ); bar = new KSeparator( KSeparator::HLine, tab2 ); layout->addMultiCellWidget( bar, 6, 6, 0, 5 ); */ ////////////////////////////////////// // Notes label = new QLabel( i18n( "Note:" ), tab2_2 ); label->setAlignment( Qt::AlignTop | Qt::AlignLeft ); //US layout->addWidget( label, 7, 0 ); layout->addWidget( label, 0, 0 ); #ifndef KAB_EMBEDDED mNoteEdit = new QTextEdit( tab2_2 ); mNoteEdit->setWordWrap( QTextEdit::WidgetWidth ); mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() ); #else //KAB_EMBEDDED mNoteEdit = new QMultiLineEdit( tab2_2 ); mNoteEdit->setWordWrap( QMultiLineEdit::WidgetWidth ); mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() ); #endif //KAB_EMBEDDED connect( mNoteEdit, SIGNAL( textChanged() ), SLOT( emitModified() ) ); label->setBuddy( mNoteEdit ); //US layout->addMultiCellWidget( mNoteEdit, 7, 7, 1, 5 ); layout->addWidget( mNoteEdit, 1, 0); // Build the layout and add to the tab widget layout->activate(); // required mTabWidget->addTab( tab2_2, i18n( "&Notes" ) ); } void AddresseeEditorWidget::setupTab3() { // This is the Misc tab QWidget *tab3 = new QWidget( mTabWidget ); QGridLayout *layout = new QGridLayout( tab3, 1, 1 ); layout->setMargin( KDialogBase::marginHintSmall() ); layout->setSpacing( KDialogBase::spacingHintSmall() ); //US layout->setColStretch( 2, 1 ); ////////////////////////////////////// // Geo mGeoWidget = new GeoWidget( tab3 ); // mGeoWidget->setMinimumSize( mGeoWidget->sizeHint() ); connect( mGeoWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mGeoWidget, 0, 0 ); /*US ////////////////////////////////////// // Sound #ifndef KAB_EMBEDDED mSoundWidget = new SoundWidget( tab3 ); mSoundWidget->setMinimumSize( mSoundWidget->sizeHint() ); connect( mSoundWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mSoundWidget, 0, 1, Qt::AlignTop ); #else //KAB_EMBEDDED qDebug("AddresseeEditorWidget::setupTab2 sound part is not supported = has to be changed"); #endif //KAB_EMBEDDED ////////////////////////////////////// // Images mImageWidget = new ImageWidget( tab3 ); mImageWidget->setMinimumSize( mImageWidget->sizeHint() ); connect( mImageWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mImageWidget, 1, 0, Qt::AlignTop ); */ //US /* KSeparator* bar = new KSeparator( KSeparator::HLine, tab3 ); layout->addMultiCellWidget( bar, 1, 1, 0, 0 ); */ ////////////////////////////////////// // Keys mKeyWidget = new KeyWidget( tab3 ); //mKeyWidget->setMinimumSize( mKeyWidget->sizeHint() ); connect( mKeyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); //US layout->addWidget( mKeyWidget, 1, 1, Qt::AlignTop ); layout->addWidget( mKeyWidget, 1, 0 ); mTabWidget->addTab( tab3, i18n( "&Misc" ) ); } void AddresseeEditorWidget::setupTab3_1() { // This is the Misc tab QWidget *tab3 = new QWidget( mTabWidget ); //US QGridLayout *layout = new QGridLayout( tab3, 2, 3 ); QGridLayout *layout = new QGridLayout( tab3, 1, 1 ); layout->setMargin( KDialogBase::marginHint() ); layout->setSpacing( KDialogBase::spacingHint() ); //US layout->setColStretch( 2, 1 ); /*US ////////////////////////////////////// // Geo mGeoWidget = new GeoWidget( tab3 ); mGeoWidget->setMinimumSize( mGeoWidget->sizeHint() ); connect( mGeoWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mGeoWidget, 0, 0, Qt::AlignTop ); */ ////////////////////////////////////// // Sound #ifndef KAB_EMBEDDED mSoundWidget = new SoundWidget( tab3 ); mSoundWidget->setMinimumSize( mSoundWidget->sizeHint() ); connect( mSoundWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mSoundWidget, 0, 1, Qt::AlignTop ); #else //KAB_EMBEDDED //US qDebug("AddresseeEditorWidget::setupTab2 sound part is not supported = has to be changed"); #endif //KAB_EMBEDDED ////////////////////////////////////// // Images mImageWidget = new ImageWidget( tab3 ); mImageWidget->setMinimumSize( mImageWidget->sizeHint() ); connect( mImageWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mImageWidget, 0, 0, Qt::AlignTop ); /*US ////////////////////////////////////// // Keys mKeyWidget = new KeyWidget( tab3 ); mKeyWidget->setMinimumSize( mKeyWidget->sizeHint() ); connect( mKeyWidget, SIGNAL( changed() ), SLOT( emitModified() ) ); layout->addWidget( mKeyWidget, 1, 1, Qt::AlignTop ); */ mTabWidget->addTab( tab3, i18n( "&Images" ) ); } void AddresseeEditorWidget::load() { // Block signals in case anything tries to emit modified // CS: This doesn't seem to work. bool block = signalsBlocked(); blockSignals( true ); mBlockSignals = true; // used for internal signal blocking mNameEdit->setText( mAddressee.assembledName() ); if ( mAddressee.formattedName().isEmpty() ) { //US KConfig config( "kaddressbookrc" ); KConfig config( locateLocal("config", "kabcrc") ); config.setGroup( "General" ); mFormattedNameType = config.readNumEntry( "FormattedNameType", 1 ); mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) ); } else {; if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::SimpleName ) ) mFormattedNameType = NameEditDialog::SimpleName; else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::FullName ) ) mFormattedNameType = NameEditDialog::FullName; else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::ReverseName ) ) mFormattedNameType = NameEditDialog::ReverseName; else mFormattedNameType = NameEditDialog::CustomName; } mFormattedNameLabel->setText( mAddressee.formattedName() ); + mAConfig->setUid( mAddressee.uid() ); + if ( mAConfig->automaticNameParsing() ) { + mNameLabel->hide(); + mNameEdit->show(); + } else { + mNameEdit->hide(); + mNameLabel->setText( mNameEdit->text() ); + mNameLabel->show(); + } + mRoleEdit->setText( mAddressee.role() ); mOrgEdit->setText( mAddressee.organization() ); //US mURLEdit->setURL( mAddressee.url().url() ); mURLEdit->setText( mAddressee.url().prettyURL() ); //US?? mURLEdit->home( false ); // mNoteEdit->setText( mAddressee.note() ); mNoteEdit->setText( mAddressee.note() ); mEmailWidget->setEmails( mAddressee.emails() ); mPhoneEditWidget->setPhoneNumbers( mAddressee.phoneNumbers() ); mAddressEditWidget->setAddresses( mAddressee, mAddressee.addresses() ); mBirthdayPicker->setDate( mAddressee.birthday().date() ); //US mAnniversaryPicker->setDate( QDate::fromString( mAddressee.custom( //US "KADDRESSBOOK", "X-Anniversary" ), Qt::ISODate) ); QDate dt = KGlobal::locale()->readDate( mAddressee.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate mAnniversaryPicker->setDate( dt ); mNicknameEdit->setText( mAddressee.nickName() ); mCategoryEdit->setText( mAddressee.categories().join( "," ) ); mGeoWidget->setGeo( mAddressee.geo() ); mImageWidget->setPhoto( mAddressee.photo() ); mImageWidget->setLogo( mAddressee.logo() ); mKeyWidget->setKeys( mAddressee.keys() ); mSecrecyWidget->setSecrecy( mAddressee.secrecy() ); #ifndef KAB_EMBEDDED mSoundWidget->setSound( mAddressee.sound() ); #else //KAB_EMBEDDED //US qDebug("AddresseeEditorWidget::load has to be changed 2"); #endif //KAB_EMBEDDED // Load customs mIMAddressEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-IMAddress" ) ); mSpouseEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ) ); mChildEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Children" ) ); mManagerEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-ManagersName" ) ); mAssistantEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-AssistantsName" ) ); mDepartmentEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Department" ) ); mOfficeEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Office" ) ); mProfessionEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Profession" ) ); QString gen = mAddressee.custom( "KADDRESSBOOK", "X-Gender" ); if ( gen == "female" ) mGenderBox->setCurrentItem ( 1 ); else if ( gen == "male" ) mGenderBox->setCurrentItem ( 2 ); else mGenderBox->setCurrentItem ( 0 ); blockSignals( block ); mBlockSignals = false; mDirty = false; } void AddresseeEditorWidget::save() { if ( !dirty() ) { return; } mAddressee.setRevision( QDateTime::currentDateTime() ); mAddressee.setRole( mRoleEdit->text() ); mAddressee.setOrganization( mOrgEdit->text() ); mAddressee.setUrl( KURL( mURLEdit->text() ) ); mAddressee.setNote( mNoteEdit->text() ); if ( mBirthdayPicker->inputIsValid() ) { QDate da = mBirthdayPicker->date(); if ( da > QDate::currentDate() ) da.setYMD(da.year()-100, da.month(), da.day() ); mAddressee.setBirthday( QDateTime( da ) ); //qDebug("bday %s ",da.toString().latin1()); } else { mAddressee.setBirthday( QDateTime() ); mBirthdayPicker->clear(); } mAddressee.setNickName( mNicknameEdit->text() ); mAddressee.setCategories( QStringList::split( ",", mCategoryEdit->text() ) ); mAddressee.setGeo( mGeoWidget->geo() ); mAddressee.setPhoto( mImageWidget->photo() ); mAddressee.setLogo( mImageWidget->logo() ); mAddressee.setKeys( mKeyWidget->keys() ); #ifndef KAB_EMBEDDED mAddressee.setSound( mSoundWidget->sound() ); #else //KAB_EMBEDDED //US qDebug("AddresseeEditorWidget::save sound not supported"); #endif //KAB_EMBEDDED mAddressee.setSecrecy( mSecrecyWidget->secrecy() ); // save custom fields mAddressee.insertCustom( "KADDRESSBOOK", "X-IMAddress", mIMAddressEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-SpousesName", mSpouseEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Children", mChildEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-ManagersName", mManagerEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-AssistantsName", mAssistantEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Department", mDepartmentEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Office", mOfficeEdit->text() ); mAddressee.insertCustom( "KADDRESSBOOK", "X-Profession", mProfessionEdit->text() ); if ( mAnniversaryPicker->inputIsValid() ) { QString dt = KGlobal::locale()->formatDate(mAnniversaryPicker->date(), true, KLocale::ISODate); mAddressee.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); } else { mAddressee.removeCustom( "KADDRESSBOOK", "X-Anniversary" ); mAnniversaryPicker->clear(); } int gen = mGenderBox->currentItem (); if ( gen == 1 ) mAddressee.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); else if ( gen == 2 ) mAddressee.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); else mAddressee.removeCustom( "KADDRESSBOOK", "X-Gender" ); // Save the email addresses QStringList emails = mAddressee.emails(); QStringList::Iterator iter; for ( iter = emails.begin(); iter != emails.end(); ++iter ) mAddressee.removeEmail( *iter ); emails = mEmailWidget->emails(); bool first = true; for ( iter = emails.begin(); iter != emails.end(); ++iter ) { mAddressee.insertEmail( *iter, first ); first = false; } // Save the phone numbers KABC::PhoneNumber::List phoneNumbers; KABC::PhoneNumber::List::Iterator phoneIter; phoneNumbers = mAddressee.phoneNumbers(); for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end(); ++phoneIter ) mAddressee.removePhoneNumber( *phoneIter ); phoneNumbers = mPhoneEditWidget->phoneNumbers(); for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end(); ++phoneIter ) mAddressee.insertPhoneNumber( *phoneIter ); // Save the addresses KABC::Address::List addresses; KABC::Address::List::Iterator addressIter; addresses = mAddressee.addresses(); for ( addressIter = addresses.begin(); addressIter != addresses.end(); ++addressIter ) mAddressee.removeAddress( *addressIter ); addresses = mAddressEditWidget->addresses(); for ( addressIter = addresses.begin(); addressIter != addresses.end(); ++addressIter ) mAddressee.insertAddress( *addressIter ); mDirty = false; } bool AddresseeEditorWidget::dirty() { if ( ! mDirty ) { if ( mBirthdayPicker->inputIsValid() ) { QDate da = mBirthdayPicker->date(); if ( !(da == mAddressee.birthday().date())) mDirty = true; } else { mBirthdayPicker->clear(); } if ( mAnniversaryPicker->inputIsValid() ) { QDate da = mAnniversaryPicker->date(); if ( da != KGlobal::locale()->readDate( mAddressee.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d")) mDirty = true; } else { mAnniversaryPicker->clear(); } } return mDirty; } void AddresseeEditorWidget::nameTextChanged( const QString &text ) { if ( mBlockSignals ) return; // use the addressee class to parse the name for us mAConfig->setUid( mAddressee.uid() ); if ( mAConfig->automaticNameParsing() ) { if ( !mAddressee.formattedName().isEmpty() ) { QString fn = mAddressee.formattedName(); mAddressee.setNameFromString( text ); mAddressee.setFormattedName( fn ); } else { // use extra addressee to avoid a formatted name assignment Addressee addr; addr.setNameFromString( text ); mAddressee.setPrefix( addr.prefix() ); mAddressee.setGivenName( addr.givenName() ); mAddressee.setAdditionalName( addr.additionalName() ); mAddressee.setFamilyName( addr.familyName() ); mAddressee.setSuffix( addr.suffix() ); } } - nameBoxChanged(); + emitModified(); } void AddresseeEditorWidget::nameBoxChanged() { KABC::Addressee addr; mAConfig->setUid( mAddressee.uid() ); if ( mAConfig->automaticNameParsing() ) { addr.setNameFromString( mNameEdit->text() ); mNameLabel->hide(); mNameEdit->show(); } else { addr = mAddressee; mNameEdit->hide(); mNameLabel->setText( mNameEdit->text() ); mNameLabel->show(); } if ( mFormattedNameType != NameEditDialog::CustomName ) { mFormattedNameLabel->setText( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) ); mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) ); } } void AddresseeEditorWidget::nameButtonClicked() { // show the name dialog. NameEditDialog dialog( mAddressee, mFormattedNameType, this ); if ( KApplication::execDialog( &dialog) ) { if ( dialog.changed() ) { mAddressee.setFamilyName( dialog.familyName() ); mAddressee.setGivenName( dialog.givenName() ); mAddressee.setPrefix( dialog.prefix() ); mAddressee.setSuffix( dialog.suffix() ); mAddressee.setAdditionalName( dialog.additionalName() ); mFormattedNameType = dialog.formattedNameType(); if ( mFormattedNameType == NameEditDialog::CustomName ) { mFormattedNameLabel->setText( dialog.customFormattedName() ); mAddressee.setFormattedName( dialog.customFormattedName() ); } // Update the name edit. bool block = mNameEdit->signalsBlocked(); mNameEdit->blockSignals( true ); mNameEdit->setText( mAddressee.assembledName() ); mNameEdit->blockSignals( block ); // Update the combo box. nameBoxChanged(); emitModified(); } } } void AddresseeEditorWidget::categoryButtonClicked() { // Show the category dialog if ( mCategoryDialog == 0 ) { mCategoryDialog = new KPIM::CategorySelectDialog( KABPrefs::instance(), this ); connect( mCategoryDialog, SIGNAL( categoriesSelected( const QStringList& ) ), SLOT(categoriesSelected( const QStringList& ) ) ); connect( mCategoryDialog, SIGNAL( editCategories() ), SLOT( editCategories() ) ); } mCategoryDialog->setCategories(); mCategoryDialog->setSelected( QStringList::split( ",", mCategoryEdit->text() ) ); mCategoryDialog->show(); mCategoryDialog->raise(); } void AddresseeEditorWidget::categoriesSelected( const QStringList &list ) { mCategoryEdit->setText( list.join( "," ) ); } void AddresseeEditorWidget::editCategories() { if ( mCategoryEditDialog == 0 ) { mCategoryEditDialog = new KPIM::CategoryEditDialog( KABPrefs::instance(), this ); connect( mCategoryEditDialog, SIGNAL( categoryConfigChanged() ), SLOT( categoryButtonClicked() ) ); } mCategoryEditDialog->show(); mCategoryEditDialog->raise(); } void AddresseeEditorWidget::emitModified() { mDirty = true; KABC::Addressee::List list; if ( mIsExtension && !mBlockSignals ) { save(); list.append( mAddressee ); } emit modified( list ); } void AddresseeEditorWidget::dateChanged( QDate ) { emitModified(); } //US invalid dates are handdled by the KDateEdit widget itself void AddresseeEditorWidget::invalidDate() { KMessageBox::sorry( this, i18n( "You must specify a valid date" ) ); } void AddresseeEditorWidget::pageChanged( QWidget *wdg ) { #ifndef KAB_EMBEDDED if ( wdg ) KAcceleratorManager::manage( wdg ); #else //KAB_EMBEDDED //US #endif //KAB_EMBEDDED } QString AddresseeEditorWidget::title() const { return i18n( "Contact Editor" ); } QString AddresseeEditorWidget::identifier() const { return i18n( "contact_editor" ); } #ifndef KAB_EMBEDDED #include "addresseeeditorwidget.moc" #endif //KAB_EMBEDDED diff --git a/kaddressbook/imagewidget.cpp b/kaddressbook/imagewidget.cpp index 48370e3..9ee4eac 100644 --- a/kaddressbook/imagewidget.cpp +++ b/kaddressbook/imagewidget.cpp @@ -1,294 +1,312 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include <kabc/picture.h> #ifndef KAB_EMBEDDED #include <kaccelmanager.h> #include <kio/netaccess.h> #include <kimageio.h> #endif //KAB_EMBEDDED #include <kdebug.h> #include <kdialog.h> #include <kiconloader.h> #include <klocale.h> #include <kurlrequester.h> #include <kurl.h> #include <qcheckbox.h> #include <qgroupbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpixmap.h> +#include <qpushbutton.h> #include <qapplication.h> #include "imagewidget.h" ImageWidget::ImageWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { QGridLayout *topLayout = new QGridLayout( this, 2, 1, KDialog::marginHint(), KDialog::spacingHint() ); QGroupBox *photoBox = new QGroupBox( 0, Qt::Vertical, i18n( "Photo" ), this ); - QGridLayout *boxLayout = new QGridLayout( photoBox->layout(), 3, 2, + QGridLayout *boxLayout = new QGridLayout( photoBox->layout(), 4, 2, KDialog::spacingHint() ); boxLayout->setRowStretch( 2, 1 ); mPhotoLabel = new QLabel( photoBox ); int fac = 9; if ( QApplication::desktop()->width() > 320 ) fac = 6; mPhotoLabel->setFixedSize( 50*9/fac, 70*9/fac ); mPhotoLabel->setScaledContents( true ); mPhotoLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); - boxLayout->addMultiCellWidget( mPhotoLabel, 0, 2, 0, 0 ); + boxLayout->addMultiCellWidget( mPhotoLabel, 0, 3, 0, 0 ); mPhotoUrl = new KURLRequester( photoBox ); #ifndef KAB_EMBEDDED mPhotoUrl->setFilter( KImageIO::pattern() ); #else //KAB_EMBEDDED //US qDebug("ImageWidget::ImageWidget KImageIO not defined. Does this harm ???"); #endif //KAB_EMBEDDED boxLayout->addWidget( mPhotoUrl, 0, 1 ); mUsePhotoUrl = new QCheckBox( i18n( "Store as URL" ), photoBox ); mUsePhotoUrl->setEnabled( false ); boxLayout->addWidget( mUsePhotoUrl, 1, 1 ); + QPushButton * pb = new QPushButton( i18n( "Remove" ), photoBox ); + connect( pb, SIGNAL( clicked() ),this, SLOT( removePhoto() ) ); + boxLayout->addWidget( pb, 2, 1 ); + boxLayout->addWidget( new QLabel( photoBox ), 3, 1 ); + topLayout->addWidget( photoBox, 0, 0 ); QGroupBox *logoBox = new QGroupBox( 0, Qt::Vertical, i18n( "Logo" ), this ); - boxLayout = new QGridLayout( logoBox->layout(), 3, 2, KDialog::spacingHint() ); + boxLayout = new QGridLayout( logoBox->layout(), 4, 2, KDialog::spacingHint() ); boxLayout->setRowStretch( 2, 1 ); mLogoLabel = new QLabel( logoBox ); mLogoLabel->setFixedSize( 50*9/fac, 70*9/fac ); mLogoLabel->setScaledContents( true ); mLogoLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); - boxLayout->addMultiCellWidget( mLogoLabel, 0, 2, 0, 0 ); + boxLayout->addMultiCellWidget( mLogoLabel, 0, 3, 0, 0 ); mLogoUrl = new KURLRequester( logoBox ); #ifndef KAB_EMBEDDED mLogoUrl->setFilter( KImageIO::pattern() ); #else //KAB_EMBEDDED //US qDebug("ImageWidget::ImageWidget KImageIO not defined 2"); #endif //KAB_EMBEDDED boxLayout->addWidget( mLogoUrl, 0, 1 ); mUseLogoUrl = new QCheckBox( i18n( "Store as URL" ), logoBox ); mUseLogoUrl->setEnabled( false ); boxLayout->addWidget( mUseLogoUrl, 1, 1 ); + pb = new QPushButton( i18n( "Remove" ), logoBox ); + connect( pb, SIGNAL( clicked() ),this, SLOT( removeLogo() ) ); + boxLayout->addWidget( pb, 2, 1 ); + boxLayout->addWidget( new QLabel( logoBox ), 3, 1 ); topLayout->addWidget( logoBox, 1, 0 ); connect( mPhotoUrl, SIGNAL( textChanged( const QString& ) ), SIGNAL( changed() ) ); connect( mPhotoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( loadPhoto() ) ); connect( mPhotoUrl, SIGNAL( urlSelected( const QString& ) ), SIGNAL( changed() ) ); connect( mPhotoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( updateGUI() ) ); connect( mUsePhotoUrl, SIGNAL( toggled( bool ) ), SIGNAL( changed() ) ); connect( mLogoUrl, SIGNAL( textChanged( const QString& ) ), SIGNAL( changed() ) ); connect( mLogoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( loadLogo() ) ); connect( mLogoUrl, SIGNAL( urlSelected( const QString& ) ), SIGNAL( changed() ) ); connect( mLogoUrl, SIGNAL( urlSelected( const QString& ) ), SLOT( updateGUI() ) ); connect( mUseLogoUrl, SIGNAL( toggled( bool ) ), SIGNAL( changed() ) ); #ifndef KAB_EMBEDDED KAcceleratorManager::manage( this ); #endif //KAB_EMBEDDED } ImageWidget::~ImageWidget() { } void ImageWidget::setPhoto( const KABC::Picture &photo ) { bool blocked = signalsBlocked(); blockSignals( true ); if ( photo.isIntern() ) { //US //US mPhotoLabel->setPixmap( photo.data() ); if (photo.data().isNull() != true) { QPixmap pm; pm.convertFromImage(photo.data()); mPhotoLabel->setPixmap( pm ); } mUsePhotoUrl->setChecked( false ); } else { mPhotoUrl->setURL( photo.url() ); if ( !photo.url().isEmpty() ) mUsePhotoUrl->setChecked( true ); loadPhoto(); } blockSignals( blocked ); } KABC::Picture ImageWidget::photo() const { KABC::Picture photo; if ( mUsePhotoUrl->isChecked() ) photo.setUrl( mPhotoUrl->url() ); else { QPixmap *px = mPhotoLabel->pixmap(); if ( px ) { #ifndef KAB_EMBEDDED if ( px->height() > px->width() ) photo.setData( px->convertToImage().scaleHeight( 140 ) ); else photo.setData( px->convertToImage().scaleWidth( 100 ) ); #else //KAB_EMBEDDED //US add teh nullcheck if (px->isNull() != true ) photo.setData( px->convertToImage() ); #endif //KAB_EMBEDDED photo.setType( "PNG" ); } } return photo; } void ImageWidget::setLogo( const KABC::Picture &logo ) { bool blocked = signalsBlocked(); blockSignals( true ); if ( logo.isIntern() ) { //US //US mLogoLabel->setPixmap( logo.data() ); if (logo.data().isNull() != true) { QPixmap pm; pm.convertFromImage(logo.data()); mLogoLabel->setPixmap( pm ); } mUseLogoUrl->setChecked( false ); } else { mLogoUrl->setURL( logo.url() ); if ( !logo.url().isEmpty() ) mUseLogoUrl->setChecked( true ); loadLogo(); } blockSignals( blocked ); } KABC::Picture ImageWidget::logo() const { KABC::Picture logo; if ( mUseLogoUrl->isChecked() ) logo.setUrl( mLogoUrl->url() ); else { QPixmap *px = mLogoLabel->pixmap(); if ( px ) { #ifndef KAB_EMBEDDED if ( px->height() > px->width() ) logo.setData( px->convertToImage().scaleHeight( 140 ) ); else logo.setData( px->convertToImage().scaleWidth( 100 ) ); #else //KAB_EMBEDDED logo.setData( px->convertToImage() ); #endif //KAB_EMBEDDED logo.setType( "PNG" ); } } - return logo; } +void ImageWidget::removePhoto() +{ + setPhoto(KABC::Picture() ); +} + +void ImageWidget::removeLogo() +{ + setLogo(KABC::Picture() ); +} void ImageWidget::loadPhoto() { mPhotoLabel->setPixmap( loadPixmap( mPhotoUrl->url() ) ); } void ImageWidget::loadLogo() { mLogoLabel->setPixmap( loadPixmap( mLogoUrl->url() ) ); } void ImageWidget::updateGUI() { KURLRequester *ptr = (KURLRequester*)sender(); if ( ptr == mPhotoUrl ) mUsePhotoUrl->setEnabled( true ); else if ( ptr == mLogoUrl ) mUseLogoUrl->setEnabled( true ); } QPixmap ImageWidget::loadPixmap( const KURL &url ) { QString tempFile; QPixmap pixmap; if ( url.isEmpty() ) return pixmap; if ( url.isLocalFile() ) pixmap = QPixmap( url.path() ); else { #ifndef KAB_EMBEDDED if ( KIO::NetAccess::download( url, tempFile ) ) { pixmap = QPixmap( tempFile ); KIO::NetAccess::removeTempFile( tempFile ); } #else //KAB_EMBEDDED qDebug("ImageWidget::loadPixmap : only local pixmaps are allowed"); #endif //KAB_EMBEDDED } return pixmap; } #ifndef KAB_EMBEDDED #include "imagewidget.moc" #endif //KAB_EMBEDDED diff --git a/kaddressbook/imagewidget.h b/kaddressbook/imagewidget.h index b3ca0bd..afb9aa7 100644 --- a/kaddressbook/imagewidget.h +++ b/kaddressbook/imagewidget.h @@ -1,86 +1,88 @@ /* This file is part of KAddressBook. Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #ifndef IMAGEWIDGET_H #define IMAGEWIDGET_H #include <qwidget.h> #include <kabc/picture.h> #include <kdialogbase.h> class KURL; class KURLRequester; class QCheckBox; class QLabel; class ImageWidget : public QWidget { Q_OBJECT public: ImageWidget( QWidget *parent, const char *name = 0 ); ~ImageWidget(); /** Sets the photo object. */ void setPhoto( const KABC::Picture &photo ); /** Returns a photo object. */ KABC::Picture photo() const; /** Sets the logo object. */ void setLogo( const KABC::Picture &photo ); /** Returns a logo object. */ KABC::Picture logo() const; signals: void changed(); private slots: void loadPhoto(); void loadLogo(); + void removePhoto(); + void removeLogo(); void updateGUI(); private: QPixmap loadPixmap( const KURL &url ); KURLRequester *mPhotoUrl; KURLRequester *mLogoUrl; QCheckBox *mUsePhotoUrl; QCheckBox *mUseLogoUrl; QLabel *mPhotoLabel; QLabel *mLogoLabel; }; #endif |