summaryrefslogtreecommitdiffabout
path: root/kaddressbook/imagewidget.cpp
Side-by-side diff
Diffstat (limited to 'kaddressbook/imagewidget.cpp') (more/less context) (show whitespace changes)
-rw-r--r--kaddressbook/imagewidget.cpp299
1 files changed, 299 insertions, 0 deletions
diff --git a/kaddressbook/imagewidget.cpp b/kaddressbook/imagewidget.cpp
new file mode 100644
index 0000000..49d456b
--- a/dev/null
+++ b/kaddressbook/imagewidget.cpp
@@ -0,0 +1,299 @@
+/*
+ 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 <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,
+ 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 );
+
+ 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 );
+
+ 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->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 );
+
+ 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 );
+
+ 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
+
+#ifndef DESKTOP_VERSION
+ mUsePhotoUrl->setChecked( true );
+ mUseLogoUrl->setChecked( true );
+#endif
+}
+
+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::loadPhoto()
+{
+ mPhotoLabel->setPixmap( loadPixmap( mPhotoUrl->url() ) );
+}
+
+void ImageWidget::loadLogo()
+{
+ mLogoLabel->setPixmap( loadPixmap( mLogoUrl->url() ) );
+}
+
+void ImageWidget::updateGUI()
+{
+ KURLRequester *ptr = (KURLRequester*)sender();
+
+#ifdef DESKTOP_VERSION
+ if ( ptr == mPhotoUrl )
+ mUsePhotoUrl->setEnabled( true );
+ else if ( ptr == mLogoUrl )
+ mUseLogoUrl->setEnabled( true );
+#endif
+}
+
+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