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

List:       kde-commits
Subject:    KDE/kdenetwork/kget
From:       Javier Goday <jgoday () gmail ! com>
Date:       2008-07-22 18:08:46
Message-ID: 1216750126.014800.13515.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 836657 by jgoday:

Add a modelobserver and a transfergroupobserver to mainwindow to update the percent in the window title
BUG:164812


 M  +82 -0     mainwindow.cpp  
 M  +42 -0     mainwindow.h  


--- trunk/KDE/kdenetwork/kget/mainwindow.cpp #836656:836657
@@ -90,6 +90,9 @@
 
     //Some of the widgets are initialized in slotDelayedInit()
     QTimer::singleShot( 0, this, SLOT(slotDelayedInit()) );
+
+    // Update the title with the active transfers percent each 5 seconds
+//     KGet::addObserver(new MainWindowModelObserver(this));
 }
 
 MainWindow::~MainWindow()
@@ -112,6 +115,25 @@
     return QSize(720, 380);
 }
 
+int MainWindow::transfersPercent()
+{
+    int percent = 0;
+    int activeTransfers = 0;
+    foreach (TransferHandler *handler, KGet::allTransfers()) {
+        if (handler->status() == Job::Running) {
+            activeTransfers ++;
+            percent += handler->percent();
+        }
+    }
+
+    if (activeTransfers > 0) {
+        return percent/activeTransfers;
+    }
+    else {
+        return 0;
+    }
+}
+
 void MainWindow::setupActions()
 {
     QAction *newDownloadAction = actionCollection()->addAction("new_download");
@@ -388,6 +410,18 @@
         KGet::addTransfer( KUrl( filename ) );
 }
 
+
+void MainWindow::slotUpdateTitlePercent()
+{
+    int percent = transfersPercent();
+    if (percent > 0) {
+        setPlainCaption(QString("%1  %2\%").arg(i18n("KGet")).arg(percent));
+    }
+    else {
+        setPlainCaption(QString("%1").arg(i18n("KGet")));
+    }
+}
+
 void MainWindow::slotQuit()
 {
     if (KGet::schedulerRunning()) {
@@ -868,4 +902,52 @@
     return m_dbusModelObserver->transfersSpeed();
 }
 
+MainWindowModelObserver::MainWindowModelObserver(MainWindow *window) 
+    : QObject(window)
+{
+    m_window = window;
+    m_groupObserver = new MainWindowGroupObserver(window);
+}
+
+void MainWindowModelObserver::addedTransferGroupEvent(TransferGroupHandler *group)
+{
+    group->addObserver(m_groupObserver);
+}
+
+void MainWindowModelObserver::removedTransferGroupEvent(TransferGroupHandler *group)
+{
+    group->delObserver(m_groupObserver);
+}
+
+MainWindowGroupObserver::MainWindowGroupObserver(MainWindow *window) 
+    : QObject(window)
+{
+    m_window = window;
+}
+
+void MainWindowGroupObserver::groupChangedEvent(TransferGroupHandler * group)
+{
+    TransferGroupHandler::ChangesFlags transferFlags = group->changesFlags(this);
+    if (transferFlags & TransferGroup::Gc_Percent) {
+        m_window->slotUpdateTitlePercent();
+    }
+}
+
+void MainWindowGroupObserver::addedTransferEvent(TransferHandler * transfer, TransferHandler * after)
+{ 
+    Q_UNUSED(transfer) 
+    Q_UNUSED(after)
+}
+
+void MainWindowGroupObserver::removedTransferEvent(TransferHandler * transfer)
+{ 
+    Q_UNUSED(transfer)
+}
+
+void MainWindowGroupObserver::movedTransferEvent(TransferHandler * transfer, TransferHandler * after)
+{
+    Q_UNUSED(transfer)
+    Q_UNUSED(after)
+}
+
 #include "mainwindow.moc"
--- trunk/KDE/kdenetwork/kget/mainwindow.h #836656:836657
@@ -53,6 +53,7 @@
 public slots:
     void slotQuit();
     void slotImportUrl(const QString &url);
+    void slotUpdateTitlePercent();
 
 protected:
     // ignore/accept quit events
@@ -112,6 +113,11 @@
     void slotShowListLinks();
 
 private:
+    /**
+    * Returns the completed percents of all active transfers
+    */
+    int transfersPercent();
+
     // one-time functions
     void setupActions();
 
@@ -139,4 +145,40 @@
     HttpServer *m_webinterface;
 };
 
+/**
+* Used to update the mainwindow caption when the groups percents change
+*/
+class MainWindowGroupObserver : public QObject, public TransferGroupObserver
+{
+    public:
+        MainWindowGroupObserver(MainWindow *window);
+        virtual ~MainWindowGroupObserver() {}
+
+        virtual void groupChangedEvent(TransferGroupHandler * group);
+
+        virtual void addedTransferEvent(TransferHandler * transfer, TransferHandler * after);
+
+        virtual void removedTransferEvent(TransferHandler * transfer);
+
+        virtual void movedTransferEvent(TransferHandler * transfer, TransferHandler * after);
+
+    private:
+        MainWindow *m_window;
+};
+
+class MainWindowModelObserver : public QObject, public ModelObserver
+{
+    public:
+        MainWindowModelObserver(MainWindow *window);
+        virtual ~MainWindowModelObserver (){}
+
+        virtual void addedTransferGroupEvent(TransferGroupHandler * group);
+
+        virtual void removedTransferGroupEvent(TransferGroupHandler * group);
+
+    private:
+        MainWindow *m_window;
+        MainWindowGroupObserver *m_groupObserver;
+};
+
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

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