QTfrontend/ui/page/pagevideos.cpp
changeset 7353 0e55228e1303
parent 7306 3cff5c769509
child 7386 e82a076df09b
--- a/QTfrontend/ui/page/pagevideos.cpp	Fri Jul 06 13:22:33 2012 +0400
+++ b/QTfrontend/ui/page/pagevideos.cpp	Fri Jul 06 19:15:44 2012 +0400
@@ -44,6 +44,7 @@
 #include "libav_iteraction.h"
 #include "gameuiconfig.h"
 #include "recorder.h"
+#include "ask_quit.h"
 
 const int ThumbnailSize = 400;
 
@@ -70,6 +71,7 @@
         HWRecorder * pRecorder; // non NULL if file is being encoded
         bool seen; // used when updating directory
         float lastSizeUpdate;
+        float progress;
 
         bool ready()
         { return !pRecorder; }
@@ -84,6 +86,7 @@
     this->name = name;
     pRecorder = NULL;
     lastSizeUpdate = 0;
+    progress = 0;
 }
 
 VideoItem::~VideoItem()
@@ -300,6 +303,7 @@
     config(0)
 {
     nameChangedFromCode = false;
+    numRecorders = 0;
     initPage();
 }
 
@@ -496,6 +500,8 @@
     connect(pRecorder, SIGNAL(onProgress(float)), this, SLOT(updateProgress(float)));
     connect(pRecorder, SIGNAL(encodingFinished(bool)), this, SLOT(encodingFinished(bool)));
     filesTable->setCellWidget(row, vcProgress, progressBar);
+
+    numRecorders++;
 }
 
 void PageVideos::updateProgress(float value)
@@ -515,10 +521,13 @@
     QProgressBar * progressBar = (QProgressBar*)filesTable->cellWidget(row, vcProgress);
     progressBar->setValue(value*10000);
     progressBar->setFormat(QString("%1%").arg(value*100, 0, 'f', 2));
+    item->progress = value;
 }
 
 void PageVideos::encodingFinished(bool success)
 {
+    numRecorders--;
+
     HWRecorder * pRecorder = (HWRecorder*)sender();
     VideoItem * item = (VideoItem*)pRecorder->item;
     int row = filesTable->row(item);
@@ -583,6 +592,7 @@
             setName(item, oldName);
         }
     }
+    updateDescription();
 }
 
 void PageVideos::setName(VideoItem * item, const QString & newName)
@@ -616,8 +626,6 @@
     item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
     filesTable->setItem(row, vcProgress, item);
 
-   // filesTable->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
-
     return row;
 }
 
@@ -763,3 +771,32 @@
 {
     QDesktopServices::openUrl(QUrl("file:///"+cfgdir->absolutePath() + "/Videos"));
 }
+
+bool PageVideos::tryQuit(HWForm * form)
+{
+    if (numRecorders == 0)
+        return true;
+
+    // ask user what to do - abort or wait
+    HWAskQuitDialog * askd = new HWAskQuitDialog(this, form);
+    bool answer = askd->exec();
+    delete askd;
+    return answer;
+}
+
+// returns multi-line string with list of videos in progress
+QString PageVideos::getVideosInProgress()
+{
+    QString list = "";
+    int count = filesTable->rowCount();
+    for (int i = 0; i < count; i++)
+    {
+        VideoItem * item = nameItem(i);
+        float progress = 100*item->progress;
+        if (progress > 99.99)
+            progress = 99.99; // displaying 100% may be confusing
+        if (!item->ready())
+            list += item->name + " (" + QString::number(progress, 'f', 2) + "%)\n";
+    }
+    return list;
+}