[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [bookmanager/exportImport] managerpart: Update GUI when copying books in the worker thread
From:       Riccardo Bellini <riccardo.bellini1988 () gmail ! com>
Date:       2014-02-28 19:21:00
Message-ID: E1WJSzU-0006Oj-6H () scm ! kde ! org
[Download RAW message or body]

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.cpp
M  +1    -1    managerpart/tools/collectionorganizer/copycollectionworker.h

http://commits.kde.org/bookmanager/b4c1c1b1daf9d37a2e9a285a1c8f23dd70460049

diff --git a/managerpart/backupcollectionassistant.cpp \
b/managerpart/backupcollectionassistant.cpp index b7ea1aa..a327e57 100644
--- a/managerpart/backupcollectionassistant.cpp
+++ b/managerpart/backupcollectionassistant.cpp
@@ -23,6 +23,7 @@
 
 // Qt includes
 #include <qcheckbox.h>
+#include <qprogressbar.h>
 
 // KDE includes
 #include <klocalizedstring.h>
@@ -79,6 +80,10 @@ OrganizeCollectionPage::OrganizeCollectionPage(CollectionDB * \
collection,  mainLayout->addWidget(m_introductionLabel);
     
     m_collectionOrganizerWidget = new CollectionOrganizerWidget(m_collection, this);
+    connect(m_collectionOrganizerWidget, SIGNAL(bookCopied(const QString &, int)),
+            this, SLOT(updateGUI(const QString &, int)));
+    connect(m_collectionOrganizerWidget, SIGNAL(collectionOrganizationCompleted()),
+            this, SLOT(organizationCompleted()));
 
     mainLayout->addWidget(m_collectionOrganizerWidget);
 
@@ -97,8 +102,21 @@ OrganizeCollectionPage::OrganizeCollectionPage(CollectionDB * \
                collection,
     connect(m_organizeCollectionPushButton, SIGNAL(clicked()), \
SLOT(organizeCollectionClicked()));  
     organizeCollectionLayout->addWidget(m_organizeCollectionPushButton);
+
+    m_progressContainerWidget = new QWidget;
+    QVBoxLayout * progressContainerLayout = new QVBoxLayout;
+    m_organizationProgressBar = new QProgressBar;
+    m_currentBookLabel = 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::collectionOrganizedClicked(bool \
checked)  }
 
 
+void OrganizeCollectionPage::updateGUI(const QString & book, int percentage)
+{
+    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/backupcollectionassistant.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/collectionorganizerwidget.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 = new CollectionOrganizer(m_collection, this);
         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 size)
 }
 
 
-void CollectionOrganizerWidget::collectionOrganizationCompleted()
-{
-    KMessageBox::information(0, i18n("The collection has been organized \
                correctly."));
-}
-
-
 // private methods
 void CollectionOrganizerWidget::m_computeDiskSpace()
 {
diff --git a/managerpart/collectionorganizerwidget.h \
b/managerpart/collectionorganizerwidget.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 = 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::QueuedConnection);
     connect(m_copyCollectionThread, SIGNAL(finished()),
             this, SLOT(copyFinished()));
+    connect(m_copyCollectionWorker, SIGNAL(copyFinished()),
+            this, SIGNAL(organizationCompleted()));
     connect(m_copyCollectionWorker, SIGNAL(copyFinished()), m_copyCollectionThread, \
SLOT(quit()));  connect(m_copyCollectionThread, SIGNAL(started()),
             m_copyCollectionWorker, SLOT(copyCollection()));
@@ -97,12 +99,6 @@ void CollectionOrganizer::setCollectionStructure(const QString & \
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 = 0; i < 7; ++i) {
         usleep(500000);
-        emit bookCopied(titles[i]);
+        float percentage = (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:


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic