Update of /cvsroot/krusader/krusader_kde3/krusader/Panel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14396/krusader_kde3/krusader/Panel Modified Files: krcalcspacedialog.cpp krcalcspacedialog.h krdetailedview.cpp krdetailedview.h krview.h panelfunc.cpp panelfunc.h Log Message: FIXED: calc space crash at vfs refresh (Heiner's first patch) Index: krcalcspacedialog.cpp =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/krcalcspacedialog.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** krcalcspacedialog.cpp 12 Feb 2004 17:23:29 -0000 1.3 --- krcalcspacedialog.cpp 15 Mar 2004 14:40:29 -0000 1.4 *************** *** 39,49 **** // Krusader Includes #include "krcalcspacedialog.h" #include "../krusader.h" #include "../VFS/krpermhandler.h" /* --=={ Patch by Heiner <h.e...@gm...> }==-- */ ! KrCalcSpaceDialog::CalcThread::CalcThread(KrCalcSpaceDialog * parent, vfs * files, const KrViewItemList & items) ! : m_totalSize(0), m_currentSize(0), m_totalFiles(0), m_totalDirs(0), m_items(items), m_files(files), m_parent(parent) ! , m_threadInUse(true), m_stop(false) {} void KrCalcSpaceDialog::CalcThread::cleanUp(){ --- 39,51 ---- // Krusader Includes #include "krcalcspacedialog.h" + #include "listpanel.h" + #include "panelfunc.h" #include "../krusader.h" #include "../VFS/krpermhandler.h" /* --=={ Patch by Heiner <h.e...@gm...> }==-- */ ! KrCalcSpaceDialog::CalcThread::CalcThread(KrCalcSpaceDialog * parent, ListPanel * panel, const QStringList & items) ! : m_totalSize(0), m_currentSize(0), m_totalFiles(0), m_totalDirs(0), m_items(items), m_files(panel->func->files()), ! m_parent(parent), m_view(panel->view) , m_threadInUse(true), m_stop(false) {} void KrCalcSpaceDialog::CalcThread::cleanUp(){ *************** *** 66,76 **** void KrCalcSpaceDialog::CalcThread::run(){ if ( !m_items.isEmpty() ) // if something to do: do the calculation ! for ( KrViewItemList::ConstIterator it = m_items.begin(); it != m_items.end(); ++it ) { m_currentSize = 0; ! m_files->vfs_calcSpace( (*it)->name(), &m_currentSize, &m_totalFiles, &m_totalDirs , & m_stop); if (m_stop) break; ! KrDetailedViewItem * viewItem = dynamic_cast<KrDetailedViewItem *> ( *it ); if (viewItem){ KrCalcSpaceDialog::setDirSize(viewItem, m_currentSize); --- 68,78 ---- void KrCalcSpaceDialog::CalcThread::run(){ if ( !m_items.isEmpty() ) // if something to do: do the calculation ! for ( QStringList::ConstIterator it = m_items.begin(); it != m_items.end(); ++it ) { m_currentSize = 0; ! m_files->vfs_calcSpace( *it, &m_currentSize, &m_totalFiles, &m_totalDirs , & m_stop); if (m_stop) break; ! KrDetailedViewItem * viewItem = dynamic_cast<KrDetailedViewItem *>(m_view->findItemByName ( *it ) ); if (viewItem){ KrCalcSpaceDialog::setDirSize(viewItem, m_currentSize); *************** *** 90,94 **** } ! KrCalcSpaceDialog::KrCalcSpaceDialog(QWidget *parent, vfs * files, const KrViewItemList & items, bool autoclose) : KDialogBase(parent, "KrCalcSpaceDialog", true, "Calculate Occupied Space", Ok|Cancel), m_autoClose(autoclose), m_canceled(false), m_timerCounter(0){ --- 92,96 ---- } ! KrCalcSpaceDialog::KrCalcSpaceDialog(QWidget *parent, ListPanel * files, const QStringList & items, bool autoclose) : KDialogBase(parent, "KrCalcSpaceDialog", true, "Calculate Occupied Space", Ok|Cancel), m_autoClose(autoclose), m_canceled(false), m_timerCounter(0){ *************** *** 142,146 **** if (!m_thread) return; QString msg; ! QString fileName = ( ( m_thread->getItems().count() == 1 ) ? ( i18n( "Name: " ) + m_thread->getItems().first()->name() + "\n" ) : QString( "" ) ); msg = fileName + i18n( "Total occupied space: %1").arg( KIO::convertSize( m_thread->getTotalSize() ) ); if (m_thread->getTotalSize() >= 1024) --- 144,148 ---- if (!m_thread) return; QString msg; ! QString fileName = ( ( m_thread->getItems().count() == 1 ) ? ( i18n( "Name: " ) + m_thread->getItems().first() + "\n" ) : QString( "" ) ); msg = fileName + i18n( "Total occupied space: %1").arg( KIO::convertSize( m_thread->getTotalSize() ) ); if (m_thread->getTotalSize() >= 1024) Index: krcalcspacedialog.h =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/krcalcspacedialog.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** krcalcspacedialog.h 12 Feb 2004 17:23:30 -0000 1.3 --- krcalcspacedialog.h 15 Mar 2004 14:40:29 -0000 1.4 *************** *** 43,47 **** #include "../VFS/vfs.h" #include "krdetailedviewitem.h" ! #include "krview.h" --- 43,48 ---- #include "../VFS/vfs.h" #include "krdetailedviewitem.h" ! class ListPanel; ! class KrView; *************** *** 60,65 **** unsigned long m_totalFiles; unsigned long m_totalDirs; ! const KrViewItemList m_items; vfs * m_files; KrCalcSpaceDialog * m_parent; QMutex m_synchronizeUsageAccess; --- 61,67 ---- unsigned long m_totalFiles; unsigned long m_totalDirs; ! const QStringList m_items; vfs * m_files; + KrView *m_view; KrCalcSpaceDialog * m_parent; QMutex m_synchronizeUsageAccess; *************** *** 71,76 **** unsigned long getTotalFiles() const {return m_totalFiles;} // the result unsigned long getTotalDirs() const {return m_totalDirs;} // the result ! const KrViewItemList & getItems() const {return m_items;} // list of directories to calculate ! CalcThread(KrCalcSpaceDialog * parent, vfs * files, const KrViewItemList & items); void deleteInstance(); // thread is no longer needed. void run(); // start calculation --- 73,78 ---- unsigned long getTotalFiles() const {return m_totalFiles;} // the result unsigned long getTotalDirs() const {return m_totalDirs;} // the result ! const QStringList & getItems() const {return m_items;} // list of directories to calculate ! CalcThread(KrCalcSpaceDialog * parent, ListPanel * panel, const QStringList & items); void deleteInstance(); // thread is no longer needed. void run(); // start calculation *************** *** 91,95 **** public: // autoclose: wait 3 sec. before showing the dialog. Close it, when done ! KrCalcSpaceDialog(QWidget *parent, vfs * files, const KrViewItemList & items, bool autoclose); ~KrCalcSpaceDialog(); KIO::filesize_t getTotalSize() const {return m_thread->getTotalSize();} // the result --- 93,97 ---- public: // autoclose: wait 3 sec. before showing the dialog. Close it, when done ! KrCalcSpaceDialog(QWidget *parent, ListPanel * panel, const QStringList & items, bool autoclose); ~KrCalcSpaceDialog(); KIO::filesize_t getTotalSize() const {return m_thread->getTotalSize();} // the result Index: krdetailedview.cpp =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/krdetailedview.cpp,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** krdetailedview.cpp 28 Feb 2004 15:53:59 -0000 1.65 --- krdetailedview.cpp 15 Mar 2004 14:40:29 -0000 1.66 *************** *** 727,732 **** KIO::filesize_t totalSize = 0; unsigned long totalFiles = 0, totalDirs = 0; ! KrViewItemList items; ! items.push_back( viewItem ); if ( krApp->mainView->activePanel->func->calcSpace( items, totalSize, totalFiles, totalDirs ) ) { // did we succeed to calcSpace? we'll fail if we don't have permissions --- 727,732 ---- KIO::filesize_t totalSize = 0; unsigned long totalFiles = 0, totalDirs = 0; ! QStringList items; ! items.push_back( viewItem->name() ); if ( krApp->mainView->activePanel->func->calcSpace( items, totalSize, totalFiles, totalDirs ) ) { // did we succeed to calcSpace? we'll fail if we don't have permissions Index: krdetailedview.h =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/krdetailedview.h,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** krdetailedview.h 7 Feb 2004 11:51:13 -0000 1.21 --- krdetailedview.h 15 Mar 2004 14:40:29 -0000 1.22 *************** *** 66,69 **** --- 66,70 ---- virtual KrViewItem *getCurrentKrViewItem() { return dynamic_cast<KrViewItem*>( currentItem() ); } virtual KrViewItem *getKrViewItemAt( const QPoint &vp ); + virtual KrViewItem *findItemByName(const QString &name) { return dynamic_cast<KrViewItem*>( findItem(name, 0) ); } virtual void addItems( vfs *v, bool addUpDir = true ); virtual QString getCurrentItem() const; Index: krview.h =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/krview.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** krview.h 12 Feb 2004 17:23:30 -0000 1.11 --- krview.h 15 Mar 2004 14:40:29 -0000 1.12 *************** *** 85,88 **** --- 85,89 ---- virtual KrViewItem *getCurrentKrViewItem() = 0; virtual KrViewItem *getKrViewItemAt(const QPoint &vp) = 0; + virtual KrViewItem *findItemByName(const QString &name) = 0; virtual void addItems(vfs* v, bool addUpDir = true) = 0; virtual QString getCurrentItem() const = 0; Index: panelfunc.cpp =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/panelfunc.cpp,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** panelfunc.cpp 8 Mar 2004 21:40:49 -0000 1.59 --- panelfunc.cpp 15 Mar 2004 14:40:29 -0000 1.60 *************** *** 49,52 **** --- 49,53 ---- #include "panelfunc.h" #include "krcalcspacedialog.h" + #include "krdetailedview.h" #include "../krusader.h" #include "../krslots.h" *************** *** 388,392 **** void ListPanelFunc::copyFiles() { QStringList fileNames; - panel->getSelectedNames( &fileNames ); if ( fileNames.isEmpty() ) --- 389,392 ---- *************** *** 680,697 **** void ListPanelFunc::calcSpace() { ! KrViewItemList items; ! panel->view->getSelectedKrViewItems(&items); if ( items.isEmpty() ) { panel->view->selectAllIncludingDirs(); ! panel->view->getSelectedKrViewItems(&items); if ( items.isEmpty() ) return ; // nothing to do } ! KrCalcSpaceDialog calc(krApp, files(), items, false); calc.exec(); ! for ( KrViewItemList::ConstIterator it = items.begin(); it != items.end(); ++it ) { ! KrDetailedViewItem * viewItem = dynamic_cast<KrDetailedViewItem *> ( *it ); if (viewItem) viewItem->repaintItem(); --- 680,700 ---- void ListPanelFunc::calcSpace() { ! QStringList items; ! panel->view->getSelectedItems(&items); if ( items.isEmpty() ) { panel->view->selectAllIncludingDirs(); ! panel->view->getSelectedItems(&items); if ( items.isEmpty() ) return ; // nothing to do } ! KrCalcSpaceDialog calc(krApp, panel, items, false); calc.exec(); ! KrDetailedView * view = dynamic_cast<KrDetailedView *> ( panel->view ); ! if (!view) ! return; ! for ( QStringList::ConstIterator it = items.begin(); it != items.end(); ++it ) { ! KrDetailedViewItem * viewItem = dynamic_cast<KrDetailedViewItem *> ( view->findItemByName(*it) ); if (viewItem) viewItem->repaintItem(); *************** *** 699,704 **** } ! bool ListPanelFunc::calcSpace(const KrViewItemList & items,KIO::filesize_t & totalSize,unsigned long & totalFiles,unsigned long & totalDirs) { ! KrCalcSpaceDialog calc(krApp, files(), items, true); calc.exec(); totalSize = calc.getTotalSize(); --- 702,707 ---- } ! bool ListPanelFunc::calcSpace(const QStringList & items,KIO::filesize_t & totalSize,unsigned long & totalFiles,unsigned long & totalDirs) { ! KrCalcSpaceDialog calc(krApp, panel, items, true); calc.exec(); totalSize = calc.getTotalSize(); Index: panelfunc.h =================================================================== RCS file: /cvsroot/krusader/krusader_kde3/krusader/Panel/panelfunc.h,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** panelfunc.h 4 Mar 2004 07:27:02 -0000 1.24 --- panelfunc.h 15 Mar 2004 14:40:29 -0000 1.25 *************** *** 78,82 **** // and disappears, if the calculation is done. Returns true, if the result is ok and false // otherwise (Cancel was pressed). ! bool calcSpace(const KrViewItemList & items,KIO::filesize_t & totalSize,unsigned long & totalFiles,unsigned long & totalDirs); void FTPDisconnect(); void newFTPconnection(); --- 78,82 ---- // and disappears, if the calculation is done. Returns true, if the result is ok and false // otherwise (Cancel was pressed). ! bool calcSpace(const QStringList & items,KIO::filesize_t & totalSize,unsigned long & totalFiles,unsigned long & totalDirs); void FTPDisconnect(); void newFTPconnection(); |