kio Library API Documentation

kimagefilepreview.cpp

00001 /* 00002 * This file is part of the KDE project 00003 * Copyright (C) 2001 Martin R. Jones <mjones@kde.org> 00004 * 2001 Carsten Pfeiffer <pfeiffer@kde.org> 00005 * 00006 * You can Freely distribute this program under the GNU Library General Public 00007 * License. See the file "COPYING" for the exact licensing terms. 00008 */ 00009 00010 #include <qlayout.h> 00011 #include <qlabel.h> 00012 #include <qcombobox.h> 00013 #include <qcheckbox.h> 00014 #include <qwhatsthis.h> 00015 #include <qtimer.h> 00016 00017 #include <kapplication.h> 00018 #include <kconfig.h> 00019 #include <kglobal.h> 00020 #include <kiconloader.h> 00021 #include <kpushbutton.h> 00022 #include <kstandarddirs.h> 00023 #include <kdebug.h> 00024 #include <klocale.h> 00025 #include <kfiledialog.h> 00026 #include <kfileitem.h> 00027 #include <kio/previewjob.h> 00028 00029 #include "kimagefilepreview.h" 00030 #include "config-kfile.h" 00031 00032 /**** KImageFilePreview ****/ 00033 00034 KImageFilePreview::KImageFilePreview( QWidget *parent ) 00035 : KPreviewWidgetBase( parent ), 00036 m_job( 0L ) 00037 { 00038 KConfig *config = KGlobal::config(); 00039 KConfigGroupSaver cs( config, ConfigGroup ); 00040 autoMode = config->readBoolEntry( "Automatic Preview", true ); 00041 00042 QGridLayout *vb = new QGridLayout( this, 2, 2, 0, KDialog::spacingHint() ); 00043 vb->addItem( new QSpacerItem(KDialog::marginHint(), 0, QSizePolicy::Fixed), 0, 0 ); 00044 00045 imageLabel = new QLabel( this ); 00046 imageLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); 00047 imageLabel->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter ); 00048 imageLabel->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) ); 00049 vb->addWidget( imageLabel, 0, 1 ); 00050 00051 QHBoxLayout *hb = new QHBoxLayout( 0 ); 00052 vb->addLayout( hb, 1, 1 ); 00053 00054 autoPreview = new QCheckBox( i18n("&Automatic preview"), this ); 00055 autoPreview->setChecked( autoMode ); 00056 hb->addWidget( autoPreview ); 00057 connect( autoPreview, SIGNAL(toggled(bool)), SLOT(toggleAuto(bool)) ); 00058 00059 previewButton = new KPushButton( SmallIconSet("thumbnail"), i18n("&Preview"), this ); 00060 hb->addWidget( previewButton ); 00061 connect( previewButton, SIGNAL(clicked()), SLOT(showPreview()) ); 00062 00063 timer = new QTimer( this ); 00064 connect( timer, SIGNAL(timeout()), SLOT(showPreview()) ); 00065 00066 setSupportedMimeTypes( KIO::PreviewJob::supportedMimeTypes() ); 00067 } 00068 00069 KImageFilePreview::~KImageFilePreview() 00070 { 00071 if ( m_job ) 00072 m_job->kill(); 00073 00074 KConfig *config = KGlobal::config(); 00075 KConfigGroupSaver cs( config, ConfigGroup ); 00076 config->writeEntry( "Automatic Preview", autoPreview->isChecked() ); 00077 } 00078 00079 void KImageFilePreview::showPreview() 00080 { 00081 // Pass a copy since clearPreview() will clear currentURL 00082 KURL url = currentURL; 00083 showPreview( url, true ); 00084 } 00085 00086 // called via KPreviewWidgetBase interface 00087 void KImageFilePreview::showPreview( const KURL& url ) 00088 { 00089 showPreview( url, false ); 00090 } 00091 00092 void KImageFilePreview::showPreview( const KURL &url, bool force ) 00093 { 00094 if ( !url.isValid() ) { 00095 clearPreview(); 00096 return; 00097 } 00098 00099 if ( url != currentURL || force ) 00100 { 00101 clearPreview(); 00102 currentURL = url; 00103 00104 if ( autoMode || force ) 00105 { 00106 int w = imageLabel->contentsRect().width() - 4; 00107 int h = imageLabel->contentsRect().height() - 4; 00108 00109 m_job = createJob( url, w, h ); 00110 connect( m_job, SIGNAL( result( KIO::Job * )), 00111 this, SLOT( slotResult( KIO::Job * ))); 00112 connect( m_job, SIGNAL( gotPreview( const KFileItem*, 00113 const QPixmap& )), 00114 SLOT( gotPreview( const KFileItem*, const QPixmap& ) )); 00115 00116 connect( m_job, SIGNAL( failed( const KFileItem* )), 00117 this, SLOT( slotFailed( const KFileItem* ) )); 00118 } 00119 } 00120 } 00121 00122 void KImageFilePreview::toggleAuto( bool a ) 00123 { 00124 autoMode = a; 00125 if ( autoMode ) 00126 { 00127 // Pass a copy since clearPreview() will clear currentURL 00128 KURL url = currentURL; 00129 showPreview( url, true ); 00130 } 00131 } 00132 00133 void KImageFilePreview::resizeEvent( QResizeEvent * ) 00134 { 00135 timer->start( 100, true ); // forces a new preview 00136 } 00137 00138 QSize KImageFilePreview::sizeHint() const 00139 { 00140 return QSize( 20, 200 ); // otherwise it ends up huge??? 00141 } 00142 00143 KIO::PreviewJob * KImageFilePreview::createJob( const KURL& url, int w, int h ) 00144 { 00145 KURL::List urls; 00146 urls.append( url ); 00147 return KIO::filePreview( urls, w, h, 0, 0, true, false ); 00148 } 00149 00150 void KImageFilePreview::gotPreview( const KFileItem* item, const QPixmap& pm ) 00151 { 00152 if ( item->url() == currentURL ) // should always be the case 00153 imageLabel->setPixmap( pm ); 00154 } 00155 00156 void KImageFilePreview::slotFailed( const KFileItem* item ) 00157 { 00158 if ( item->isDir() ) 00159 imageLabel->clear(); 00160 else if ( item->url() == currentURL ) // should always be the case 00161 imageLabel->setPixmap( SmallIcon( "file_broken", KIcon::SizeLarge, 00162 KIcon::DisabledState )); 00163 } 00164 00165 void KImageFilePreview::slotResult( KIO::Job *job ) 00166 { 00167 if ( job == m_job ) 00168 m_job = 0L; 00169 } 00170 00171 void KImageFilePreview::clearPreview() 00172 { 00173 if ( m_job ) { 00174 m_job->kill(); 00175 m_job = 0L; 00176 } 00177 00178 imageLabel->clear(); 00179 currentURL = KURL(); 00180 } 00181 00182 void KImageFilePreview::virtual_hook( int id, void* data ) 00183 { KPreviewWidgetBase::virtual_hook( id, data ); } 00184 00185 #include "kimagefilepreview.moc"
KDE Logo
This file is part of the documentation for kio Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 23:09:14 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003