]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/qt-console/status/dirstat.cpp
ebl Add more tests in migration time test (like for copy time test)
[bacula/bacula] / bacula / src / qt-console / status / dirstat.cpp
index a12c833f9db823a4879df880a889c6ce1078ee7f..792b33f93bb769cde4d48178cf137e8ac10109ab 100644 (file)
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
@@ -46,7 +46,7 @@ DirStat::DirStat()
    m_closeable = true;
    pgInitialize();
    QTreeWidgetItem* thisitem = mainWin->getFromHash(this);
-   thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/joblog.png")));
+   thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/status.png")));
    m_cursor = new QTextCursor(textEdit->document());
 
    readSettings();
@@ -54,6 +54,9 @@ DirStat::DirStat()
    m_timer = new QTimer(this);
    QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered()));
    m_timer->start(mainWin->m_refreshStatusDirInterval*1000);
+
+   createConnections();
+   setCurrent();
 }
 
 void DirStat::getFont()
@@ -110,6 +113,8 @@ void DirStat::timerTriggered()
 void DirStat::populateHeader()
 {
    QString command = QString(".status dir header");
+   if (mainWin->m_commandDebug)
+      Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
    QStringList results;
    textEdit->clear();
 
@@ -127,6 +132,8 @@ void DirStat::populateHeader()
 void DirStat::populateTerminated()
 {
    QString command = QString(".status dir terminated");
+   if (mainWin->m_commandDebug)
+      Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
    QStringList results;
    QBrush blackBrush(Qt::black);
 
@@ -159,12 +166,13 @@ void DirStat::populateTerminated()
             p_tableitem->setFlags(0);
             if (flaglist[column].contains("R"))
                p_tableitem->setTextAlignment(Qt::AlignRight);
-            if (flaglist[column].contains("C"))
+            if (flaglist[column].contains("C")) {
                if (field == "OK")
                   p_tableitem->setBackground(Qt::green);
                else
                   p_tableitem->setBackground(Qt::red);
-            terminatedTable->setItem(row, column, p_tableitem);
+           }
+            terminatedTable->setItem(results.size() - row - 1, column, p_tableitem);
             column += 1;
          }
          row += 1;
@@ -181,6 +189,8 @@ void DirStat::populateTerminated()
 void DirStat::populateScheduled()
 {
    QString command = QString(".status dir scheduled");
+   if (mainWin->m_commandDebug)
+      Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
    QStringList results;
    QBrush blackBrush(Qt::black);
 
@@ -226,6 +236,8 @@ void DirStat::populateScheduled()
 void DirStat::populateRunning()
 {
    QString command = QString(".status dir running");
+   if (mainWin->m_commandDebug)
+      Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
    QStringList results;
    QBrush blackBrush(Qt::black);
 
@@ -250,7 +262,7 @@ void DirStat::populateRunning()
             field = field.trimmed();  /* strip leading & trailing spaces */
             p_tableitem = new QTableWidgetItem(field, 1);
             p_tableitem->setForeground(blackBrush);
-            p_tableitem->setFlags(0);
+            p_tableitem->setFlags(Qt::ItemIsSelectable);
             runningTable->setItem(row, column, p_tableitem);
             column += 1;
          }
@@ -292,6 +304,24 @@ void DirStat::currentStackItem()
  */
 void DirStat::createConnections()
 {
+   connect(actionRefresh, SIGNAL(triggered()), this,
+                   SLOT(populateAll()));
+   connect(actionCancelRunning, SIGNAL(triggered()), this,
+                   SLOT(consoleCancelJob()));
+   connect(actionDisableScheduledJob, SIGNAL(triggered()), this,
+                   SLOT(consoleDisableJob()));
+   connect(runningTable, SIGNAL(
+           currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)),
+           this, SLOT(runningTableItemChanged(QTableWidgetItem *, QTableWidgetItem *)));
+
+   scheduledTable->setContextMenuPolicy(Qt::ActionsContextMenu);
+   scheduledTable->addAction(actionRefresh);
+   scheduledTable->addAction(actionDisableScheduledJob);
+   terminatedTable->setContextMenuPolicy(Qt::ActionsContextMenu);
+   terminatedTable->addAction(actionRefresh);
+   runningTable->setContextMenuPolicy(Qt::ActionsContextMenu);
+   runningTable->addAction(actionRefresh);
+   runningTable->addAction(actionCancelRunning);
 }
 
 /*
@@ -317,3 +347,56 @@ void DirStat::readSettings()
    splitter->restoreState(settings.value(m_splitText).toByteArray());
    settings.endGroup();
 }
+
+/*
+ * Cancel a running job
+ */
+void DirStat::consoleCancelJob()
+{
+   foreach( QString job, m_selectedJobsList )
+   {
+      QString cmd("cancel jobid=");
+      cmd += job;
+      consoleCommand(cmd);
+   }
+}
+
+/*
+ * Disable a scheduled Job
+ */
+void DirStat::consoleDisableJob()
+{
+   int currentrow = scheduledTable->currentRow();
+   QTableWidgetItem *item = scheduledTable->item(currentrow, 4);
+   if (item) {
+      QString text = item->text();
+      QString cmd("disable job=\"");
+      cmd += text + '"';
+      consoleCommand(cmd);
+   }
+}
+/*
+ * Function to fill m_selectedJobsList with selected values
+ */
+void DirStat::runningTableItemChanged(QTableWidgetItem * /*currentItem*/, QTableWidgetItem * /*previousItem*/)
+{
+   QList<int> rowList;
+   QList<QTableWidgetItem *> sitems = runningTable->selectedItems();
+   foreach (QTableWidgetItem *sitem, sitems) {
+      int row = sitem->row();
+      if (!rowList.contains(row)) {
+         rowList.append(row);
+      }
+   }
+
+   m_selectedJobsList.clear();
+   foreach(int row, rowList) {
+      QTableWidgetItem * sitem = runningTable->item(row, 0);
+      m_selectedJobsList.append(sitem->text());
+   }
+   if (m_selectedJobsList.count() > 1) {
+      actionCancelRunning->setText(tr("Cancel list of %1 Jobs").arg(m_selectedJobsList.count()));
+   } else {
+      actionCancelRunning->setText(tr("Cancel Single Job"));
+   }
+}