summaryrefslogtreecommitdiffstats
path: root/src/app/Dialogs/krprogress.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/Dialogs/krprogress.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/Dialogs/krprogress.cpp')
-rw-r--r--src/app/Dialogs/krprogress.cpp270
1 files changed, 270 insertions, 0 deletions
diff --git a/src/app/Dialogs/krprogress.cpp b/src/app/Dialogs/krprogress.cpp
new file mode 100644
index 0000000..1d489d5
--- /dev/null
+++ b/src/app/Dialogs/krprogress.cpp
@@ -0,0 +1,270 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2000 Matej Koss <koss@miesto.sk>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <tqtimer.h>
+#include <tqlayout.h>
+#include <tqtooltip.h>
+#include <tqdatetime.h>
+
+#include <tdeapplication.h>
+#include <kdialog.h>
+#include <kstringhandler.h>
+#include <tdeglobal.h>
+#include <tdelocale.h>
+#include <kiconloader.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include <twin.h>
+
+#include <tdeio/jobclasses.h>
+
+#include "krprogress.h"
+#include "../krusader.h"
+
+KrProgress::KrProgress( TDEIO::Job* job )
+ : ProgressBase( krApp ),
+ m_iTotalSize(0), m_iTotalFiles(0), m_iTotalDirs(0),
+ m_iProcessedSize(0), m_iProcessedDirs(0), m_iProcessedFiles(0){
+
+#ifdef TQ_WS_X11 //FIXME(E): Remove once all the KWin::foo calls have been ported to TQWS
+ // Set a useful icon for this window!
+ KWin::setIcons( winId(),
+ TDEGlobal::iconLoader()->loadIcon( "document-save", TDEIcon::NoGroup, 32 ),
+ TDEGlobal::iconLoader()->loadIcon( "document-save", TDEIcon::NoGroup, 16 ) );
+#endif
+
+ TQVBoxLayout *topLayout = new TQVBoxLayout( this, KDialog::marginHint(),
+ KDialog::spacingHint() );
+ topLayout->addStrut( 360 ); // makes dlg at least that wide
+
+ TQGridLayout *grid = new TQGridLayout( 2, 3 );
+ topLayout->addLayout(grid);
+ grid->addColSpacing(1, KDialog::spacingHint());
+ // filenames or action name
+ grid->addWidget(new TQLabel(i18n("Source:"), this), 0, 0);
+
+ sourceLabel = new KSqueezedTextLabel(this);
+ grid->addWidget(sourceLabel, 0, 2);
+
+ destInvite = new TQLabel(i18n("Destination:"), this);
+ grid->addWidget(destInvite, 1, 0);
+
+ destLabel = new KSqueezedTextLabel(this);
+ grid->addWidget(destLabel, 1, 2);
+
+ m_pProgressBar = new KProgress(this);
+ topLayout->addWidget( m_pProgressBar );
+
+ // processed info
+ TQHBoxLayout *hBox = new TQHBoxLayout();
+ topLayout->addLayout(hBox);
+
+ sizeLabel = new TQLabel(this);
+ hBox->addWidget(sizeLabel);
+
+ resumeLabel = new TQLabel(this);
+ hBox->addWidget(resumeLabel);
+
+ progressLabel = new TQLabel( this );
+/* progressLabel->setSizePolicy( TQSizePolicy( TQSizePolicy::MinimumExpanding,
+ TQSizePolicy::Preferred ) );*/
+ progressLabel->setAlignment( TQLabel::AlignRight );
+ hBox->addWidget( progressLabel );
+
+ hBox = new TQHBoxLayout();
+ topLayout->addLayout(hBox);
+
+ speedLabel = new TQLabel(this);
+ hBox->addWidget(speedLabel, 1);
+
+ TQFrame *line = new TQFrame( this );
+ line->setFrameShape( TQFrame::HLine );
+ line->setFrameShadow( TQFrame::Sunken );
+ topLayout->addWidget( line );
+
+ hBox = new TQHBoxLayout();
+ topLayout->addLayout(hBox);
+
+ hBox->addStretch(1);
+
+ KPushButton *pb = new KPushButton( KStdGuiItem::cancel(), this );
+ connect( pb, TQ_SIGNAL( clicked() ), TQ_SLOT( slotStop() ) );
+ hBox->addWidget( pb );
+
+ resize( sizeHint() );
+ setMaximumHeight(sizeHint().height());
+
+ setCaption(i18n("Krusader Progress")); // show something better than tdeio_uiserver
+
+ setJob(job);
+ setOnlyClean(false);
+ setStopOnClose(true);
+ // Connect global progress info signals
+ connect( job, TQ_SIGNAL( percent( TDEIO::Job*, unsigned long ) ),
+ TQ_SLOT( slotPercent( TDEIO::Job*, unsigned long ) ) );
+ connect( job, TQ_SIGNAL( infoMessage( TDEIO::Job*, const TQString & ) ),
+ TQ_SLOT( slotInfoMessage( TDEIO::Job*, const TQString & ) ) );
+ connect( job, TQ_SIGNAL( totalSize( TDEIO::Job*, TDEIO::filesize_t ) ),
+ TQ_SLOT( slotTotalSize( TDEIO::Job*, TDEIO::filesize_t ) ) );
+ connect( job, TQ_SIGNAL( processedSize( TDEIO::Job*, TDEIO::filesize_t ) ),
+ TQ_SLOT( slotProcessedSize( TDEIO::Job*, TDEIO::filesize_t ) ) );
+ connect( job, TQ_SIGNAL( speed( TDEIO::Job*, unsigned long ) ),
+ TQ_SLOT( slotSpeed( TDEIO::Job*, unsigned long ) ) );
+
+ // change to modal & move to Krusader's center
+ TQPoint center((krApp->width()-width())/2,(krApp->height()-height())/2);
+ center = center+(krApp->pos());
+ reparent(krApp,WType_Modal,center);
+ //setWFlags(WType_Modal);
+ //move((krApp->width()-width())/2,(krApp->height()-height())/2);
+ show();
+}
+
+KrProgress::~KrProgress(){}
+
+void KrProgress::slotTotalSize( TDEIO::Job*, TDEIO::filesize_t bytes ){
+ m_iTotalSize = bytes;
+}
+
+
+void KrProgress::slotTotalFiles( TDEIO::Job*, unsigned long files ){
+ m_iTotalFiles = files;
+ showTotals();
+}
+
+
+void KrProgress::slotTotalDirs( TDEIO::Job*, unsigned long dirs ){
+ m_iTotalDirs = dirs;
+ showTotals();
+}
+
+void KrProgress::showTotals(){
+ // Show the totals in the progress label, if we still haven't
+ // processed anything. This is useful when the stat'ing phase
+ // of CopyJob takes a long time (e.g. over networks).
+ if ( m_iProcessedFiles == 0 && m_iProcessedDirs == 0 )
+ {
+ TQString tmps;
+ if ( m_iTotalDirs > 1 )
+ // that we have a singular to translate looks weired but is only logical
+ tmps = i18n("%n directory", "%n directories", m_iTotalDirs) + " ";
+ tmps += i18n("%n file", "%n files", m_iTotalFiles);
+ progressLabel->setText( tmps );
+ }
+}
+
+void KrProgress::slotPercent( TDEIO::Job*, unsigned long percent ){
+ TQString tmp(i18n( "%1% of %2 ").arg( percent ).arg( TDEIO::convertSize(m_iTotalSize)));
+ m_pProgressBar->setValue( percent );
+ tmp.append(i18n(" (Reading)"));
+
+ setCaption( tmp );
+}
+
+
+void KrProgress::slotInfoMessage( TDEIO::Job*, const TQString & msg )
+{
+ speedLabel->setText( msg );
+ speedLabel->setAlignment( speedLabel->alignment() & ~TQt::WordBreak );
+}
+
+
+void KrProgress::slotProcessedSize( TDEIO::Job*, TDEIO::filesize_t bytes ) {
+ m_iProcessedSize = bytes;
+
+ TQString tmp;
+ tmp = i18n( "%1 of %2 complete").arg( TDEIO::convertSize(bytes) ).arg( TDEIO::convertSize(m_iTotalSize));
+ sizeLabel->setText( tmp );
+}
+
+
+void KrProgress::slotProcessedDirs( TDEIO::Job*, unsigned long dirs )
+{
+ m_iProcessedDirs = dirs;
+
+ TQString tmps;
+ tmps = i18n("%1 / %n directory", "%1 / %n directories", m_iTotalDirs).arg( m_iProcessedDirs );
+ tmps += " ";
+ tmps += i18n("%1 / %n file", "%1 / %n files", m_iTotalFiles).arg( m_iProcessedFiles );
+ progressLabel->setText( tmps );
+}
+
+
+void KrProgress::slotProcessedFiles( TDEIO::Job*, unsigned long files )
+{
+ m_iProcessedFiles = files;
+
+ TQString tmps;
+ if ( m_iTotalDirs > 1 ) {
+ tmps = i18n("%1 / %n directory", "%1 / %n directories", m_iTotalDirs).arg( m_iProcessedDirs );
+ tmps += " ";
+ }
+ tmps += i18n("%1 / %n file", "%1 / %n files", m_iTotalFiles).arg( m_iProcessedFiles );
+ progressLabel->setText( tmps );
+}
+
+
+void KrProgress::slotSpeed( TDEIO::Job*, unsigned long bytes_per_second )
+{
+ if ( bytes_per_second == 0 ) {
+ speedLabel->setText( i18n( "Working") );
+ } else {
+#if KDE_IS_VERSION(3,4,0)
+ unsigned int seconds = TDEIO::calculateRemainingSeconds( m_iTotalSize, m_iProcessedSize, bytes_per_second );
+ TQString remaining = TDEIO::convertSeconds(seconds);
+#else
+ TQString remaining = TDEIO::calculateRemaining( m_iTotalSize, m_iProcessedSize, bytes_per_second ).toString();
+#endif
+ speedLabel->setText( i18n( "%1/s ( %2 remaining )").arg( TDEIO::convertSize( bytes_per_second )).arg( remaining ) );
+ }
+}
+
+
+void KrProgress::setDestVisible( bool visible )
+{
+ // We can't hide the destInvite/destLabel labels,
+ // because it screws up the TQGridLayout.
+ if (visible)
+ {
+ destInvite->setText( i18n("Destination:") );
+ }
+ else
+ {
+ destInvite->setText( TQString() );
+ destLabel->setText( TQString() );
+ }
+}
+
+void KrProgress::virtual_hook( int id, void* data ){
+ ProgressBase::virtual_hook( id, data );
+}
+
+void KrProgress::slotStop(){
+ if ( m_pJob ) {
+ m_pJob->kill(false); // this will call slotFinished
+ m_pJob = 0L;
+ } else {
+ slotFinished( 0 ); // here we call it ourselves
+ }
+
+ emit stopped();
+}
+
+void KrProgress::closeEvent( TQCloseEvent* ) { hide(); slotStop(); }
+
+#include "krprogress.moc"