Git commit b4c1c1b1daf9d37a2e9a285a1c8f23dd70460049 by Riccardo Bellini. Committed on 28/02/2014 at 19:20. Pushed by bellini into branch 'exportImport'. Update GUI when copying books in the worker thread The GUI now shows a progress bar and gets notified by the worker thread, by means of a chain of signal/signal and signal/slot connections, when a book has been copied. The signal passed from the worker has two parameters: - The title of the book (for the purpose of display) - The current percentage of the copying process (to update the progress bar) M +34 -0 managerpart/backupcollectionassistant.cpp M +6 -0 managerpart/backupcollectionassistant.h M +3 -7 managerpart/collectionorganizerwidget.cpp M +4 -1 managerpart/collectionorganizerwidget.h M +4 -8 managerpart/tools/collectionorganizer/collectionorganizer.cpp M +1 -1 managerpart/tools/collectionorganizer/collectionorganizer.h M +2 -1 managerpart/tools/collectionorganizer/copycollectionworker.c= pp M +1 -1 managerpart/tools/collectionorganizer/copycollectionworker.h http://commits.kde.org/bookmanager/b4c1c1b1daf9d37a2e9a285a1c8f23dd70460049 diff --git a/managerpart/backupcollectionassistant.cpp b/managerpart/backup= collectionassistant.cpp index b7ea1aa..a327e57 100644 --- a/managerpart/backupcollectionassistant.cpp +++ b/managerpart/backupcollectionassistant.cpp @@ -23,6 +23,7 @@ = // Qt includes #include +#include = // KDE includes #include @@ -79,6 +80,10 @@ OrganizeCollectionPage::OrganizeCollectionPage(Collectio= nDB * collection, mainLayout->addWidget(m_introductionLabel); = m_collectionOrganizerWidget =3D new CollectionOrganizerWidget(m_collec= tion, this); + connect(m_collectionOrganizerWidget, SIGNAL(bookCopied(const QString &= , int)), + this, SLOT(updateGUI(const QString &, int))); + connect(m_collectionOrganizerWidget, SIGNAL(collectionOrganizationComp= leted()), + this, SLOT(organizationCompleted())); = mainLayout->addWidget(m_collectionOrganizerWidget); = @@ -97,8 +102,21 @@ OrganizeCollectionPage::OrganizeCollectionPage(Collecti= onDB * collection, connect(m_organizeCollectionPushButton, SIGNAL(clicked()), SLOT(organi= zeCollectionClicked())); = organizeCollectionLayout->addWidget(m_organizeCollectionPushButton); + + m_progressContainerWidget =3D new QWidget; + QVBoxLayout * progressContainerLayout =3D new QVBoxLayout; + m_organizationProgressBar =3D new QProgressBar; + m_currentBookLabel =3D new QLabel; + m_organizationProgressBar->setValue(0); + progressContainerLayout->addWidget(m_currentBookLabel); + progressContainerLayout->addWidget(m_organizationProgressBar); + m_progressContainerWidget->setLayout(progressContainerLayout); + // hide the progress container widget + m_progressContainerWidget->hide(); + organizeCollectionLayout->addStretch(); mainLayout->addLayout(organizeCollectionLayout); + mainLayout->addWidget(m_progressContainerWidget); = setLayout(mainLayout); } @@ -118,8 +136,24 @@ void OrganizeCollectionPage::collectionOrganizedClicke= d(bool checked) } = = +void OrganizeCollectionPage::updateGUI(const QString & book, int percentag= e) +{ + m_organizationProgressBar->setValue(percentage); + m_currentBookLabel->setText(book); +} + + +void OrganizeCollectionPage::organizationCompleted() +{ + // ensure the progress bar is full + m_organizationProgressBar->setValue(100); +} + + void OrganizeCollectionPage::organizeCollectionClicked() { + // show the progress widget + m_progressContainerWidget->show(); // call the collection organizer m_collectionOrganizerWidget->organizeCollection(); } diff --git a/managerpart/backupcollectionassistant.h b/managerpart/backupco= llectionassistant.h index 60b517b..4f2d740 100644 --- a/managerpart/backupcollectionassistant.h +++ b/managerpart/backupcollectionassistant.h @@ -33,6 +33,7 @@ class OrganizeCollectionPage; class CollectionOrganizerWidget; class QLabel; class QCheckBox; +class QProgressBar; class QPushButton; class KPageWidgetItem; = @@ -78,6 +79,8 @@ public: = private slots: void collectionOrganizedClicked(bool checked); + void updateGUI(const QString & book, int percentage); + void organizationCompleted(); void organizeCollectionClicked(); = private: @@ -86,6 +89,9 @@ private: QLabel * m_introductionLabel; QCheckBox * m_organizedCheckBox; QPushButton * m_organizeCollectionPushButton; + QProgressBar * m_organizationProgressBar; + QLabel * m_currentBookLabel; + QWidget * m_progressContainerWidget; = CollectionDB * m_collection; }; diff --git a/managerpart/collectionorganizerwidget.cpp b/managerpart/collec= tionorganizerwidget.cpp index ccbd1c1..189f9d1 100644 --- a/managerpart/collectionorganizerwidget.cpp +++ b/managerpart/collectionorganizerwidget.cpp @@ -77,7 +77,9 @@ void CollectionOrganizerWidget::organizeCollection() if (!m_collectionOrganizer) { m_collectionOrganizer =3D new CollectionOrganizer(m_collection, th= is); connect(m_collectionOrganizer, SIGNAL(organizationCompleted()), - this, SLOT(collectionOrganizationCompleted())); + this, SIGNAL(collectionOrganizationCompleted())); + connect(m_collectionOrganizer, SIGNAL(bookCopied(const QString &, = int)), + this, SIGNAL(bookCopied(const QString &, int))); } // set root folder and collection structure m_collectionOrganizer->setRootFolderUrl(rootFolderUrl); @@ -102,12 +104,6 @@ void CollectionOrganizerWidget::sizeComputed(quint64 s= ize) } = = -void CollectionOrganizerWidget::collectionOrganizationCompleted() -{ - KMessageBox::information(0, i18n("The collection has been organized co= rrectly.")); -} - - // private methods void CollectionOrganizerWidget::m_computeDiskSpace() { diff --git a/managerpart/collectionorganizerwidget.h b/managerpart/collecti= onorganizerwidget.h index 79b3e30..893025d 100644 --- a/managerpart/collectionorganizerwidget.h +++ b/managerpart/collectionorganizerwidget.h @@ -40,9 +40,12 @@ public: = void organizeCollection(); = +signals: + void bookCopied(const QString &, int); + void collectionOrganizationCompleted(); + private slots: void sizeComputed(quint64); - void collectionOrganizationCompleted(); = private: void m_computeDiskSpace(); diff --git a/managerpart/tools/collectionorganizer/collectionorganizer.cpp = b/managerpart/tools/collectionorganizer/collectionorganizer.cpp index 28cc95d..c985118 100644 --- a/managerpart/tools/collectionorganizer/collectionorganizer.cpp +++ b/managerpart/tools/collectionorganizer/collectionorganizer.cpp @@ -58,10 +58,12 @@ void CollectionOrganizer::organizeCollection() // create a new thread and move the worker to that thread m_copyCollectionThread =3D new QThread; m_copyCollectionWorker->moveToThread(m_copyCollectionThread); - connect(m_copyCollectionWorker, SIGNAL(bookCopied(QString)), - this, SLOT(bookCompleted(QString)), Qt::QueuedConnection); + connect(m_copyCollectionWorker, SIGNAL(bookCopied(const QString &, int= )), + this, SIGNAL(bookCopied(const QString &, int)), Qt::QueuedConn= ection); connect(m_copyCollectionThread, SIGNAL(finished()), this, SLOT(copyFinished())); + connect(m_copyCollectionWorker, SIGNAL(copyFinished()), + this, SIGNAL(organizationCompleted())); connect(m_copyCollectionWorker, SIGNAL(copyFinished()), m_copyCollecti= onThread, SLOT(quit())); connect(m_copyCollectionThread, SIGNAL(started()), m_copyCollectionWorker, SLOT(copyCollection())); @@ -97,12 +99,6 @@ void CollectionOrganizer::setCollectionStructure(const Q= String & structure) = = // private slots -void CollectionOrganizer::bookCompleted(QString bookTitle) -{ - // TODO update progress bar -} - - void CollectionOrganizer::copyFinished() { // TODO update progress bar diff --git a/managerpart/tools/collectionorganizer/collectionorganizer.h b/= managerpart/tools/collectionorganizer/collectionorganizer.h index 26459e2..03a1b5f 100644 --- a/managerpart/tools/collectionorganizer/collectionorganizer.h +++ b/managerpart/tools/collectionorganizer/collectionorganizer.h @@ -47,10 +47,10 @@ public: void setCollectionStructure(const QString & structure); = signals: + void bookCopied(const QString &, int); void organizationCompleted(); = public slots: - void bookCompleted(QString); void copyFinished(); = private: diff --git a/managerpart/tools/collectionorganizer/copycollectionworker.cpp= b/managerpart/tools/collectionorganizer/copycollectionworker.cpp index f00328d..b3ba6be 100644 --- a/managerpart/tools/collectionorganizer/copycollectionworker.cpp +++ b/managerpart/tools/collectionorganizer/copycollectionworker.cpp @@ -91,7 +91,8 @@ void CopyCollectionWorker::copyCollection() }; for (int i =3D 0; i < 7; ++i) { usleep(500000); - emit bookCopied(titles[i]); + float percentage =3D (i + 1) / 7.0 * 100; + emit bookCopied(titles[i], percentage); } emit copyFinished(); } diff --git a/managerpart/tools/collectionorganizer/copycollectionworker.h b= /managerpart/tools/collectionorganizer/copycollectionworker.h index 5391085..44cca2d 100644 --- a/managerpart/tools/collectionorganizer/copycollectionworker.h +++ b/managerpart/tools/collectionorganizer/copycollectionworker.h @@ -99,7 +99,7 @@ class CopyCollectionWorker : public QObject { void setCollectionDB(CollectionDB * collectionDB); = signals: - void bookCopied(QString); + void bookCopied(const QString &, int); void copyFinished(); = public slots: