]> git.sur5r.net Git - bacula/bacula/commitdiff
Modify Job view to follow backup progress in real-time
authorEric Bollengier <eric@eb.homelinux.org>
Mon, 20 Dec 2010 20:57:07 +0000 (21:57 +0100)
committerKern Sibbald <kern@sibbald.com>
Sat, 20 Apr 2013 12:39:47 +0000 (14:39 +0200)
bacula/src/qt-console/job/job.cpp
bacula/src/qt-console/job/job.h
bacula/src/qt-console/job/job.ui

index c9db572e6299fd4efde63e5911e9049f9629ce9a..73926fc0915bde54ea8cde4b0158144a47eeccb4 100644 (file)
@@ -40,13 +40,17 @@ Job::Job(QString &jobId, QTreeWidgetItem *parentTreeWidgetItem)
    thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/joblog.png")));
    m_cursor = new QTextCursor(textJobLog->document());
 
+   m_bwlimit = 0;
    m_jobId = jobId;
+   m_timer = NULL;
    getFont();
 
    connect(pbRefresh, SIGNAL(clicked()), this, SLOT(populateAll()));
    connect(pbDelete, SIGNAL(clicked()), this, SLOT(deleteJob()));
+   connect(pbCancel, SIGNAL(clicked()), this, SLOT(cancelJob()));
    connect(pbRun, SIGNAL(clicked()), this, SLOT(rerun()));
    connect(list_Volume, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(showInfoVolume(QListWidgetItem *)));
+   connect(spin_Bwlimit, SIGNAL(valueChanged(int)), this, SLOT(storeBwLimit(int)));
 
    populateAll();
    dockPage();
@@ -92,6 +96,18 @@ void Job::deleteJob()
    closeStackPage();
 }
 
+void Job::cancelJob()
+{
+   if (QMessageBox::warning(this, "Bat",
+                            tr("Are you sure you want to cancel this job?"),
+                            QMessageBox::Ok | QMessageBox::Cancel)
+       == QMessageBox::Cancel) { return; }
+
+   QString cmd("cancel jobid=");
+   cmd += m_jobId;
+   consoleCommand(cmd, false);
+}
+
 void Job::getFont()
 {
    QFont font = textJobLog->font();
@@ -208,6 +224,100 @@ void Job::populateText()
   
 }
 
+void Job::storeBwLimit(int val)
+{
+   m_bwlimit = val;
+}
+
+void Job::updateRunInfo()
+{
+   QString cmd;
+   QStringList results;
+   QStringList lst;
+   bool parseit=false;
+   QChar equal = '=';
+
+   if (m_bwlimit >= 100) {
+      cmd = QString("setbandwidth limit=" + QString::number(m_bwlimit) 
+                    + " jobid=" + m_jobId);
+      m_console->dir_cmd(cmd, results);
+      results.clear();
+      m_bwlimit = 0;
+   }
+
+   cmd = QString(".status client=\"" + m_client + "\" running");
+
+   if (m_console->dir_cmd(cmd, results)) {
+      foreach (QString mline, results) {
+         foreach (QString line, mline.split("\n")) { 
+            line = line.trimmed();
+            lst = line.split(equal);
+            if (lst.count() != 2) {
+               Pmsg1(0, "bad count=%d\n",lst.count());
+               continue;
+            }
+            
+            if (lst[0] == "JobId") {
+               if (lst[1] == m_jobId) {
+                  parseit = true;
+               } else {
+                  parseit = false;
+               }
+            }
+            if (!parseit) {
+               continue;
+            }
+            
+//         } else if (lst[0] == "Job") {
+//            grpRun->setTitle(lst[1]);
+            
+//               
+//         } else if (lst[0] == "VSS") {
+
+//         } else if (lst[0] == "Level") {
+//            Info->setText(lst[1]);
+//
+//         } else if (lst[0] == "JobType") {
+//
+//         } else if (lst[0] == "JobStarted") {
+//            Started->setText(lst[1]);
+
+            if (lst[0] == "Bwlimit") {
+               int val = lst[1].toInt();
+               if (val > 0) {
+                  chk_Bwlimit->setChecked(true);
+                  spin_Bwlimit->setEnabled(true);
+                  spin_Bwlimit->setValue(lst[1].toInt()/1024);
+               } else {
+                  chk_Bwlimit->setEnabled(false);
+                  spin_Bwlimit->setEnabled(false);
+                  spin_Bwlimit->setValue(0);
+               }
+               
+//         } else if (lst[0] == "Errors") {
+//            Errors->setText(lst[1]);
+               
+            } else if (lst[0] == "Bytes/sec") {
+               label_Speed->setText(convertBytesSI(lst[1].toULongLong())+"/s");
+               
+            } else if (lst[0] == "Files") {
+               label_JobFiles->setText(lst[1]);
+               
+            } else if (lst[0] == "Bytes") {
+               label_JobBytes->setText(convertBytesSI(lst[1].toULongLong()));
+               
+            } else if (lst[0] == "FilesExamined") {
+               label_FilesExamined->setText(lst[1]);
+               
+            } else if (lst[0] == "ProcessingFile") {
+               label_CurrentFile->setText(lst[1]);
+               
+            }
+         }
+      }
+   }
+}
+
 /*
  * Populate the text in the window
  */
@@ -216,10 +326,12 @@ void Job::populateForm()
    QString stat, err;
    char buf[256];
    QString query = 
-      "SELECT JobId, Job.Name, Level, Client.Name, Pool.Name, FileSet, SchedTime, StartTime, EndTime, "
-      "EndTime-StartTime AS Duration, JobBytes, JobFiles, JobErrors, JobStatus, PurgedFiles "
-      "FROM Job JOIN Client USING (ClientId) LEFT JOIN Pool ON (Job.PoolId = Pool.PoolId) "
-      "LEFT JOIN FileSet ON (Job.FileSetId = FileSet.FileSetId)"
+      "SELECT JobId, Job.Name, Level, Client.Name, Pool.Name, FileSet,"
+      "SchedTime, StartTime, EndTime, EndTime-StartTime AS Duration, "
+      "JobBytes, JobFiles, JobErrors, JobStatus, PurgedFiles "
+      "FROM Job JOIN Client USING (ClientId) "
+        "LEFT JOIN Pool ON (Job.PoolId = Pool.PoolId) "
+        "LEFT JOIN FileSet ON (Job.FileSetId = FileSet.FileSetId)"
       "WHERE JobId=" + m_jobId; 
    QStringList results;
    if (m_console->sql_cmd(query, results)) {
@@ -234,7 +346,8 @@ void Job::populateForm()
          
          label_Level->setText(job_level_to_str(fld.next()[0].toAscii()));
 
-         label_Client->setText(fld.next());
+         m_client = fld.next();
+         label_Client->setText(m_client);
          label_Pool->setText(fld.next());
          label_FileSet->setText(fld.next());
          label_SchedTime->setText(fld.next());
@@ -260,6 +373,26 @@ void Job::populateForm()
          if (stat == "T" && err.toInt() > 0) {
             stat = "W";
          }
+         if (stat == "R") {
+            pbDelete->setVisible(false);
+            pbCancel->setVisible(true);
+            grpRun->setVisible(true);
+            if (!m_timer) {
+               m_timer = new QTimer(this);
+               connect(m_timer, SIGNAL(timeout()), this, SLOT(populateAll()));
+               m_timer->start(30000);
+            }
+            updateRunInfo();
+         } else {
+            pbDelete->setVisible(true);
+            pbCancel->setVisible(false);
+            grpRun->setVisible(false);
+            if (m_timer) {
+               m_timer->stop();
+               delete m_timer;
+               m_timer = NULL;
+            }
+         }
          label_JobStatus->setPixmap(QPixmap(":/images/" + stat + ".png"));
          jobstatus_to_ascii_gui(stat[0].toAscii(), buf, sizeof(buf));
          stat = buf;
index 154ad6fc4e5a17509d354af475cd120829e9e74a..263b7a40d728091141b40ebc635af7af69aea6f8 100644 (file)
@@ -42,19 +42,24 @@ public:
 public slots:
    void populateAll();
    void deleteJob();
+   void cancelJob();
    void showInfoVolume(QListWidgetItem *);
    void rerun();
+   void storeBwLimit(int val);
 
 private slots:
 
 private:
+   void updateRunInfo();
    void populateText();
    void populateForm();
    void populateVolumes();
-
    void getFont();
    QTextCursor *m_cursor;
    QString m_jobId;
+   QString m_client;
+   QTimer *m_timer;
+   int m_bwlimit;
 };
 
 #endif /* _JOB_H_ */
index 750f909ec78ed3e5c21a18a10ee054568ffbf03d..a189c2671c25bbe4f910ae291c6019129ad4af3a 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>JobForm</class>
- <widget class="QWidget" name="JobForm" >
-  <property name="geometry" >
+ <widget class="QWidget" name="JobForm">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1064</width>
-    <height>629</height>
+    <width>975</width>
+    <height>631</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <layout class="QHBoxLayout" >
+    <layout class="QHBoxLayout">
      <item>
-      <layout class="QHBoxLayout" >
+      <layout class="QHBoxLayout">
        <item>
-        <widget class="QPushButton" name="pbDelete" >
-         <property name="text" >
+        <widget class="QPushButton" name="pbCancel">
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/A.png</normaloff>:/images/A.png</iconset>
+         </property>
+         <property name="flat">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pbDelete">
+         <property name="text">
           <string>Delete</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/purge.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/purge.png</normaloff>:/images/purge.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbErrors" >
-         <property name="enabled" >
+        <widget class="QPushButton" name="pbErrors">
+         <property name="enabled">
           <bool>false</bool>
          </property>
-         <property name="toolTip" >
+         <property name="toolTip">
           <string>View errors for this Job</string>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>Errors</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/zoom.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/zoom.png</normaloff>:/images/zoom.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbMedia" >
-         <property name="enabled" >
+        <widget class="QPushButton" name="pbMedia">
+         <property name="enabled">
           <bool>false</bool>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>Media</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/zoom.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/zoom.png</normaloff>:/images/zoom.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbHistory" >
-         <property name="enabled" >
+        <widget class="QPushButton" name="pbHistory">
+         <property name="enabled">
           <bool>false</bool>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>History</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/zoom.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/zoom.png</normaloff>:/images/zoom.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbRun" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+        <widget class="QPushButton" name="pbRun">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>Run again</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/R.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/R.png</normaloff>:/images/R.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbDoc" >
-         <property name="enabled" >
+        <widget class="QPushButton" name="pbDoc">
+         <property name="enabled">
           <bool>false</bool>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>Read doc</string>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbFileSet" >
-         <property name="enabled" >
+        <widget class="QPushButton" name="pbFileSet">
+         <property name="enabled">
           <bool>false</bool>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>FileSet</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/zoom.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/zoom.png</normaloff>:/images/zoom.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbStats" >
-         <property name="enabled" >
+        <widget class="QPushButton" name="pbStats">
+         <property name="enabled">
           <bool>false</bool>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>Stats</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/zoom.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/zoom.png</normaloff>:/images/zoom.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QPushButton" name="pbRefresh" >
-         <property name="text" >
+        <widget class="QPushButton" name="pbRefresh">
+         <property name="text">
           <string>Refresh</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/view-refresh.png</iconset>
+         <property name="icon">
+          <iconset resource="../main.qrc">
+           <normaloff>:/images/view-refresh.png</normaloff>:/images/view-refresh.png</iconset>
          </property>
-         <property name="flat" >
+         <property name="flat">
           <bool>true</bool>
          </property>
         </widget>
      </item>
      <item>
       <spacer>
-       <property name="orientation" >
+       <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <property name="sizeHint" >
+       <property name="sizeHint" stdset="0">
         <size>
          <width>40</width>
          <height>20</height>
     </layout>
    </item>
    <item>
-    <layout class="QHBoxLayout" >
+    <layout class="QHBoxLayout">
      <item>
-      <widget class="QGroupBox" name="groupBox" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+      <widget class="QGroupBox" name="groupBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="minimumSize" >
+       <property name="minimumSize">
         <size>
          <width>230</width>
          <height>180</height>
         </size>
        </property>
-       <property name="baseSize" >
+       <property name="baseSize">
         <size>
          <width>230</width>
          <height>180</height>
         </size>
        </property>
-       <property name="title" >
+       <property name="title">
         <string>Basic Information</string>
        </property>
-       <layout class="QGridLayout" >
-        <item row="0" column="0" >
-         <widget class="QLabel" name="label" >
-          <property name="text" >
+       <layout class="QGridLayout">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label">
+          <property name="text">
            <string>JobId:</string>
           </property>
          </widget>
         </item>
-        <item row="0" column="1" >
-         <widget class="QLabel" name="label_JobId" >
-          <property name="text" >
+        <item row="0" column="1">
+         <widget class="QLabel" name="label_JobId">
+          <property name="text">
            <string>2</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="label_2" >
-          <property name="text" >
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_2">
+          <property name="text">
            <string>Job Name:</string>
           </property>
          </widget>
         </item>
-        <item row="1" column="1" >
-         <widget class="QLabel" name="label_Name" >
-          <property name="text" >
+        <item row="1" column="1">
+         <widget class="QLabel" name="label_Name">
+          <property name="text">
            <string>Test</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="2" column="0" >
-         <widget class="QLabel" name="label_3" >
-          <property name="text" >
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_3">
+          <property name="text">
            <string>Level:</string>
           </property>
          </widget>
         </item>
-        <item row="2" column="1" >
-         <widget class="QLabel" name="label_Level" >
-          <property name="text" >
+        <item row="2" column="1">
+         <widget class="QLabel" name="label_Level">
+          <property name="text">
            <string>VirtualFull</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="3" column="0" >
-         <widget class="QLabel" name="label_28" >
-          <property name="text" >
+        <item row="3" column="0">
+         <widget class="QLabel" name="label_28">
+          <property name="text">
            <string>Client:</string>
           </property>
          </widget>
         </item>
-        <item row="3" column="1" >
-         <widget class="QLabel" name="label_Client" >
-          <property name="text" >
+        <item row="3" column="1">
+         <widget class="QLabel" name="label_Client">
+          <property name="text">
            <string>client-fd</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="4" column="0" >
-         <widget class="QLabel" name="label_7" >
-          <property name="text" >
+        <item row="4" column="0">
+         <widget class="QLabel" name="label_7">
+          <property name="text">
            <string>FileSet:</string>
           </property>
          </widget>
         </item>
-        <item row="4" column="1" >
-         <widget class="QLabel" name="label_FileSet" >
-          <property name="text" >
+        <item row="4" column="1">
+         <widget class="QLabel" name="label_FileSet">
+          <property name="text">
            <string>TheFileSet</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="5" column="0" >
-         <widget class="QLabel" name="label_11" >
-          <property name="text" >
+        <item row="5" column="0">
+         <widget class="QLabel" name="label_11">
+          <property name="text">
            <string>Pool:</string>
           </property>
          </widget>
         </item>
-        <item row="5" column="1" >
-         <widget class="QLabel" name="label_Pool" >
-          <property name="text" >
+        <item row="5" column="1">
+         <widget class="QLabel" name="label_Pool">
+          <property name="text">
            <string>ThePool</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
       </widget>
      </item>
      <item>
-      <widget class="QGroupBox" name="groupBox_4" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+      <widget class="QGroupBox" name="groupBox_4">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="minimumSize" >
+       <property name="minimumSize">
         <size>
          <width>160</width>
          <height>180</height>
         </size>
        </property>
-       <property name="baseSize" >
+       <property name="baseSize">
         <size>
          <width>160</width>
          <height>180</height>
         </size>
        </property>
-       <property name="title" >
+       <property name="title">
         <string>Status</string>
        </property>
-       <layout class="QGridLayout" >
-        <item row="0" column="0" >
-         <widget class="QLabel" name="label_6" >
-          <property name="text" >
+       <layout class="QGridLayout">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_6">
+          <property name="text">
            <string>Status:</string>
           </property>
          </widget>
         </item>
-        <item row="0" column="1" >
-         <widget class="QLabel" name="label_JobStatus" >
-          <property name="text" >
+        <item row="0" column="1">
+         <widget class="QLabel" name="label_JobStatus">
+          <property name="text">
            <string/>
           </property>
-          <property name="pixmap" >
-           <pixmap resource="../main.qrc" >:/images/T.png</pixmap>
+          <property name="pixmap">
+           <pixmap resource="../main.qrc">:/images/T.png</pixmap>
           </property>
-          <property name="scaledContents" >
+          <property name="scaledContents">
            <bool>false</bool>
           </property>
          </widget>
         </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="label_10" >
-          <property name="text" >
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_10">
+          <property name="text">
            <string>Errors:</string>
           </property>
          </widget>
         </item>
-        <item row="1" column="1" >
-         <widget class="QLabel" name="label_JobErrors" >
-          <property name="text" >
+        <item row="1" column="1">
+         <widget class="QLabel" name="label_JobErrors">
+          <property name="text">
            <string>0</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="2" column="0" >
-         <widget class="QLabel" name="label_8" >
-          <property name="text" >
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_8">
+          <property name="text">
            <string>Files:</string>
           </property>
          </widget>
         </item>
-        <item row="2" column="1" >
-         <widget class="QLabel" name="label_JobFiles" >
-          <property name="text" >
+        <item row="2" column="1">
+         <widget class="QLabel" name="label_JobFiles">
+          <property name="text">
            <string>1,924</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="3" column="0" >
-         <widget class="QLabel" name="label_9" >
-          <property name="text" >
+        <item row="3" column="0">
+         <widget class="QLabel" name="label_9">
+          <property name="text">
            <string>Bytes:</string>
           </property>
          </widget>
         </item>
-        <item row="3" column="1" >
-         <widget class="QLabel" name="label_JobBytes" >
-          <property name="text" >
+        <item row="3" column="1">
+         <widget class="QLabel" name="label_JobBytes">
+          <property name="text">
            <string>109 MB</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="4" column="0" >
-         <widget class="QLabel" name="label_25" >
-          <property name="text" >
+        <item row="4" column="0">
+         <widget class="QLabel" name="label_25">
+          <property name="text">
            <string>Purged:</string>
           </property>
          </widget>
         </item>
-        <item row="4" column="1" >
-         <widget class="QCheckBox" name="chkbox_PurgedFiles" >
-          <property name="enabled" >
+        <item row="4" column="1">
+         <widget class="QCheckBox" name="chkbox_PurgedFiles">
+          <property name="enabled">
            <bool>false</bool>
           </property>
-          <property name="text" >
+          <property name="text">
            <string/>
           </property>
-          <property name="checkable" >
+          <property name="checkable">
            <bool>true</bool>
           </property>
          </widget>
       </widget>
      </item>
      <item>
-      <widget class="QGroupBox" name="groupBox_3" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+      <widget class="QGroupBox" name="groupBox_3">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="minimumSize" >
+       <property name="minimumSize">
         <size>
          <width>260</width>
          <height>180</height>
         </size>
        </property>
-       <property name="baseSize" >
+       <property name="baseSize">
         <size>
          <width>260</width>
          <height>180</height>
         </size>
        </property>
-       <property name="title" >
+       <property name="title">
         <string>Times</string>
        </property>
-       <layout class="QGridLayout" >
-        <item row="0" column="0" >
-         <widget class="QLabel" name="label_26" >
-          <property name="text" >
+       <layout class="QGridLayout">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_26">
+          <property name="text">
            <string>Sched Time:</string>
           </property>
          </widget>
         </item>
-        <item row="0" column="1" >
-         <widget class="QLabel" name="label_SchedTime" >
-          <property name="text" >
+        <item row="0" column="1">
+         <widget class="QLabel" name="label_SchedTime">
+          <property name="text">
            <string>2009-07-31 00:10:00</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="label_5" >
-          <property name="text" >
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_5">
+          <property name="text">
            <string>Start Time:</string>
           </property>
          </widget>
         </item>
-        <item row="1" column="1" >
-         <widget class="QLabel" name="label_StartTime" >
-          <property name="text" >
+        <item row="1" column="1">
+         <widget class="QLabel" name="label_StartTime">
+          <property name="text">
            <string>2009-07-31 00:10:00</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="2" column="0" >
-         <widget class="QLabel" name="label_19" >
-          <property name="text" >
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_19">
+          <property name="text">
            <string>End Time:</string>
           </property>
          </widget>
         </item>
-        <item row="2" column="1" >
-         <widget class="QLabel" name="label_EndTime" >
-          <property name="text" >
+        <item row="2" column="1">
+         <widget class="QLabel" name="label_EndTime">
+          <property name="text">
            <string>2009-07-31 00:20:00</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
-        <item row="3" column="0" >
-         <widget class="QLabel" name="label_4" >
-          <property name="text" >
+        <item row="3" column="0">
+         <widget class="QLabel" name="label_4">
+          <property name="text">
            <string>Duration:</string>
           </property>
          </widget>
         </item>
-        <item row="3" column="1" >
-         <widget class="QLabel" name="label_Duration" >
-          <property name="text" >
+        <item row="3" column="1">
+         <widget class="QLabel" name="label_Duration">
+          <property name="text">
            <string>00:10:00</string>
           </property>
-          <property name="textInteractionFlags" >
-           <set>Qt::LinksAccessibleByMouse|Qt::NoTextInteraction|Qt::TextSelectableByMouse</set>
+          <property name="textInteractionFlags">
+           <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
           </property>
          </widget>
         </item>
       </widget>
      </item>
      <item>
-      <widget class="QGroupBox" name="groupBox_2" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+      <widget class="QGroupBox" name="groupBox_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="minimumSize" >
+       <property name="minimumSize">
         <size>
          <width>170</width>
          <height>181</height>
         </size>
        </property>
-       <property name="maximumSize" >
+       <property name="maximumSize">
         <size>
          <width>170</width>
          <height>181</height>
         </size>
        </property>
-       <property name="baseSize" >
+       <property name="baseSize">
         <size>
          <width>170</width>
          <height>180</height>
         </size>
        </property>
-       <property name="title" >
+       <property name="title">
         <string>Volume Used</string>
        </property>
-       <layout class="QHBoxLayout" >
+       <layout class="QHBoxLayout">
         <item>
-         <widget class="QListWidget" name="list_Volume" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <widget class="QListWidget" name="list_Volume">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
             <horstretch>0</horstretch>
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
-          <property name="minimumSize" >
+          <property name="minimumSize">
            <size>
             <width>149</width>
             <height>140</height>
            </size>
           </property>
-          <property name="maximumSize" >
+          <property name="maximumSize">
            <size>
             <width>149</width>
             <height>140</height>
            </size>
           </property>
-          <property name="baseSize" >
+          <property name="baseSize">
            <size>
             <width>149</width>
             <height>140</height>
            </size>
           </property>
           <item>
-           <property name="text" >
+           <property name="text">
             <string>Vol0001</string>
            </property>
-           <property name="icon" >
-            <iconset resource="../main.qrc" >:/images/inflag1.png</iconset>
+           <property name="icon">
+            <iconset resource="../main.qrc">
+             <normaloff>:/images/inflag1.png</normaloff>:/images/inflag1.png</iconset>
            </property>
           </item>
          </widget>
      </item>
      <item>
       <spacer>
-       <property name="orientation" >
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QGroupBox" name="grpRun">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>500</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="title">
+        <string>Running Information</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_14">
+          <property name="text">
+           <string>Speed:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_16">
+          <property name="text">
+           <string>Files Examined:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_12">
+          <property name="text">
+           <string>Current File:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QLabel" name="label_CurrentFile">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+            <horstretch>250</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string>/var/www/bacula/spool</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QLabel" name="label_FilesExamined">
+          <property name="text">
+           <string>100,000</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLabel" name="label_Speed">
+          <property name="text">
+           <string>100 MB/s</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="1">
+         <widget class="QSpinBox" name="spin_Bwlimit">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="suffix">
+           <string> kB/s</string>
+          </property>
+          <property name="minimum">
+           <number>100</number>
+          </property>
+          <property name="maximum">
+           <number>200000</number>
+          </property>
+          <property name="singleStep">
+           <number>100</number>
+          </property>
+          <property name="value">
+           <number>200000</number>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <widget class="QCheckBox" name="chk_Bwlimit">
+          <property name="text">
+           <string>Bandwidth Limit:</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <property name="sizeHint" >
+       <property name="sizeHint" stdset="0">
         <size>
          <width>40</width>
          <height>20</height>
     </layout>
    </item>
    <item>
-    <widget class="QTextEdit" name="textJobLog" >
-     <property name="html" >
-      <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+    <widget class="QTextEdit" name="textJobLog">
+     <property name="html">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
-&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans';">&lt;/p>&lt;/body>&lt;/html></string>
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:10pt;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <resources>
-  <include location="../main.qrc" />
+  <include location="../main.qrc"/>
  </resources>
- <connections/>
+ <connections>
+  <connection>
+   <sender>chk_Bwlimit</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>spin_Bwlimit</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>51</x>
+     <y>324</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>302</x>
+     <y>328</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
 </ui>