summaryrefslogtreecommitdiffstats
path: root/src/app/KViewer/kimagefilepreview.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2025-08-28 22:44:34 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2025-08-31 23:30:34 +0900
commitf9abd9d505434c9244c03eac708e29a0ca042f6b (patch)
tree30a197ab4c413849188bc131ff859212e636c821 /src/app/KViewer/kimagefilepreview.cpp
parent14d42d284de233f9937becf3fc9ee0dabede3b21 (diff)
downloadkrusader-r14.1.x.tar.gz
krusader-r14.1.x.zip
Restructure source foldersr14.1.x
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it> (cherry picked from commit 086012dcad8a976a0dabbb7cbc20c9cb612cdfa9)
Diffstat (limited to 'src/app/KViewer/kimagefilepreview.cpp')
-rw-r--r--src/app/KViewer/kimagefilepreview.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/app/KViewer/kimagefilepreview.cpp b/src/app/KViewer/kimagefilepreview.cpp
new file mode 100644
index 0000000..f41e061
--- /dev/null
+++ b/src/app/KViewer/kimagefilepreview.cpp
@@ -0,0 +1,136 @@
+/*
+* This file is part of the KDE project
+* Copyright (C) 2001 Martin R. Jones <mjones@kde.org>
+* 2001 Carsten Pfeiffer <pfeiffer@kde.org>
+*
+* You can Freely distribute this program under the GNU Library General Public
+* License. See the file "COPYING" for the exact licensing terms.
+*/
+
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqcombobox.h>
+#include <tqcheckbox.h>
+#include <tqwhatsthis.h>
+#include <tqtimer.h>
+
+#include <tdeapplication.h>
+#include <tdeglobal.h>
+#include <kiconloader.h>
+#include <kpushbutton.h>
+#include <kstandarddirs.h>
+#include <kdebug.h>
+#include <tdelocale.h>
+#include <tdefiledialog.h>
+#include <tdefileitem.h>
+#include <tdeio/previewjob.h>
+
+#include "kimagefilepreview.h"
+
+/**** KrusaderImageFilePreview ****/
+
+KrusaderImageFilePreview::KrusaderImageFilePreview( TQWidget *parent )
+ : KPreviewWidgetBase( parent ),
+m_job( 0L ) {
+ TQVBoxLayout *vb = new TQVBoxLayout( this, KDialog::marginHint() );
+
+ imageLabel = new TQLabel( this );
+ imageLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
+ imageLabel->setAlignment( TQt::AlignHCenter | TQt::AlignVCenter );
+ imageLabel->setSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Ignored ) );
+ vb->addWidget( imageLabel, 1 );
+
+ timer = new TQTimer( this );
+ connect( timer, TQ_SIGNAL( timeout() ), TQ_SLOT( showPreview() ) );
+
+ setSupportedMimeTypes( TDEIO::PreviewJob::supportedMimeTypes() );
+}
+
+KrusaderImageFilePreview::~KrusaderImageFilePreview() {
+ if ( m_job )
+ m_job->kill();
+}
+
+void KrusaderImageFilePreview::showPreview() {
+ // Pass a copy since clearPreview() will clear currentURL
+ KURL url = currentURL;
+ showPreview( url, true );
+}
+
+// called via KPreviewWidgetBase interface
+void KrusaderImageFilePreview::showPreview( const KURL& url ) {
+ showPreview( url, false );
+}
+
+void KrusaderImageFilePreview::showPreview( const KURL &url, bool force ) {
+ if ( !url.isValid() ) {
+ clearPreview();
+ return ;
+ }
+
+ if ( url != currentURL || force ) {
+ clearPreview();
+ currentURL = url;
+
+ int w = imageLabel->contentsRect().width() - 4;
+ int h = imageLabel->contentsRect().height() - 4;
+
+ m_job = createJob( url, w, h );
+ connect( m_job, TQ_SIGNAL( result( TDEIO::Job * ) ),
+ this, TQ_SLOT( slotResult( TDEIO::Job * ) ) );
+ connect( m_job, TQ_SIGNAL( gotPreview( const KFileItem*,
+ const TQPixmap& ) ),
+ TQ_SLOT( gotPreview( const KFileItem*, const TQPixmap& ) ) );
+
+ connect( m_job, TQ_SIGNAL( failed( const KFileItem* ) ),
+ this, TQ_SLOT( slotFailed( const KFileItem* ) ) );
+ }
+}
+
+void KrusaderImageFilePreview::resizeEvent( TQResizeEvent * ) {
+ timer->start( 100, true ); // forces a new preview
+}
+
+TQSize KrusaderImageFilePreview::sizeHint() const {
+ return TQSize( 20, 200 ); // otherwise it ends up huge???
+}
+
+TDEIO::PreviewJob * KrusaderImageFilePreview::createJob( const KURL& url, int w, int h ) {
+ KURL::List urls;
+ urls.append( url );
+ return TDEIO::filePreview( urls, w, h, 0, 0, true, false );
+}
+
+void KrusaderImageFilePreview::gotPreview( const KFileItem* item, const TQPixmap& pm ) {
+ if ( item->url() == currentURL ) // should always be the case
+ imageLabel->setPixmap( pm );
+}
+
+void KrusaderImageFilePreview::slotFailed( const KFileItem* item ) {
+ if ( item->isDir() )
+ imageLabel->clear();
+ else if ( item->url() == currentURL ) // should always be the case
+ imageLabel->setPixmap( SmallIcon( "file_broken", TDEIcon::SizeLarge,
+ TDEIcon::DisabledState ) );
+}
+
+void KrusaderImageFilePreview::slotResult( TDEIO::Job *job ) {
+ if ( job == m_job )
+ m_job = 0L;
+}
+
+void KrusaderImageFilePreview::clearPreview() {
+ if ( m_job ) {
+ m_job->kill();
+ m_job = 0L;
+ }
+
+ imageLabel->clear();
+ currentURL = KURL();
+}
+
+void KrusaderImageFilePreview::virtual_hook( int id, void* data ) {
+ KPreviewWidgetBase::virtual_hook( id, data );
+}
+
+#include "kimagefilepreview.moc"