]> 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 355e96fe261fb854e7a16e4d00e0fd14e7308be6..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.
 DirStat::DirStat()
 {
    setupUi(this);
-   m_name = "Director Status";
+   m_name = tr("Director Status");
    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();
    dockPage();
    m_timer = new QTimer(this);
    QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered()));
-   //m_timer->start(mainWin->m_checkMessagesInterval*1000);
-   m_timer->start(10*1000);
+   m_timer->start(mainWin->m_refreshStatusDirInterval*1000);
+
+   createConnections();
+   setCurrent();
 }
 
 void DirStat::getFont()
@@ -99,7 +101,7 @@ void DirStat::populateAll()
 void DirStat::timerTriggered()
 {
    bool iscurrent = mainWin->stackedWidget->currentIndex() == mainWin->stackedWidget->indexOf(this);
-   if ((isDocked() && iscurrent) || (!isDocked())) {
+   if (((isDocked() && iscurrent) || (!isDocked())) && mainWin->m_refreshStatusDir) {
       if (m_console->is_ready())
          populateAll();
    }
@@ -111,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();
 
@@ -128,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);
 
@@ -160,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;
@@ -182,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);
 
@@ -227,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);
 
@@ -251,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;
          }
@@ -293,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);
 }
 
 /*
@@ -318,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"));
+   }
+}