kio Library: kimagefilepreview.cpp Source File (kio Library)

| # kio Library API Documentation
Overview | Class Hierarchy | Classes | Classes (annotated) | Members | Namespaces | Source Files

# 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"

This file is part of the documentation for kio Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:23:59 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003