]> git.sur5r.net Git - bacula/bacula/commitdiff
Add refresh medialist in context sensitive of medialist tree. If context
authorDirk H Bartley <dbartley@schupan.com>
Sun, 15 Apr 2007 17:03:42 +0000 (17:03 +0000)
committerDirk H Bartley <dbartley@schupan.com>
Sun, 15 Apr 2007 17:03:42 +0000 (17:03 +0000)
sensitive joblist on media produces no results, inform user with message.
Change text in context sensitive menu's on medilist.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4560 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/qt-console/joblist/joblist.cpp
bacula/src/qt-console/joblist/joblist.h
bacula/src/qt-console/mainwin.cpp
bacula/src/qt-console/medialist/medialist.cpp
bacula/src/qt-console/medialist/medialist.ui

index 356f69c301aeebf330f92981d99b01a2a1d1a75e..85d147cfbee645f690cb27cde1a9140d1d11d425 100644 (file)
@@ -47,6 +47,7 @@ JobList::JobList(QStackedWidget *parent, Console *console, QString &medianame)
    mp_console = console;
    m_parent = parent;
    m_medianame = medianame;
+   m_resultCount = 0;
    m_populated = false;
    m_closeable = false;
    /* connect to the action specific to this pages class */
@@ -67,15 +68,15 @@ void JobList::populateTable()
 
    /* Set up query QString and header QStringList */
    QString query("");
-   query += "SELECT j.jobid,j.name,j.starttime,j.type,j.level,j.jobfiles,"
-           "j.jobstatus"
+   query += "SELECT j.Jobid,j.Name,j.Starttime,j.Type,j.Level,j.Jobfiles,"
+           "j.Jobstatus"
            " FROM job j, jobmedia jm, media m"
            " WHERE jm.jobid=j.jobid and jm.mediaid=m.mediaid";
    if (m_medianame != "") {
       query += " and m.VolumeName='" + m_medianame + "'";
       m_closeable=true;
    }
-   query += " ORDER BY j.starttime";
+   query += " ORDER BY j.Starttime";
    QStringList headerlist = (QStringList()
       << "Job Id" << "Job Name" << "Job Starttime" << "Job Type" << "Job Level"
       << "Job Files" << "Job Status");
@@ -85,7 +86,11 @@ void JobList::populateTable()
    mp_tableWidget->setColumnCount(headerlist.size());
    mp_tableWidget->setHorizontalHeaderLabels(headerlist);
 
+   /* printf("Query cmd : %s\n",query.toUtf8().data());
+    *  This could be a debug message?? */
    if (mp_console->sql_cmd(query, results)) {
+      m_resultCount = results.count();
+
       QTableWidgetItem* p_tableitem;
       QString field;
       QStringList fieldlist;
@@ -106,6 +111,11 @@ void JobList::populateTable()
          }
          row++;
       }
+   } 
+   if ((m_medianame != "") && (m_resultCount == 0)){
+      /* for context sensitive searches, let the user know if there were no results */
+      QMessageBox::warning(this, tr("Bat"), tr("The Jobs query returned no results.\n"
+         "Press OK to continue?"), QMessageBox::Ok );
    }
 }
 
index 15b8ca60dfe0a3bdf65a0cc64d458b0622664eed..c2769dc55909fa954c70aba9171baf6f4b74eb19 100644 (file)
@@ -46,6 +46,7 @@ public:
    JobList(QStackedWidget *parent, Console *console, QString &medianame);
    virtual void PgSeltreeWidgetClicked();
    virtual void currentStackItem();
+   int m_resultCount;
 
 public slots:
    void populateTable();
index bb3d3a9b914a3524ea74eaa26c60c647957d01b4..09192ab6219750610bf316ff596aba12b5c46da8 100644 (file)
@@ -132,7 +132,9 @@ void MainWin::createPagemedialist()
  */
 void MainWin::createPagejoblist(QString &media)
 {
-   QTreeWidgetItem *item;
+   QTreeWidgetItem *item, *holdItem;
+   /* save current tree widget item in case query produces no results */
+   holdItem = treeWidget->currentItem();
    if (media == "") {
       item=createPage("All Jobs", m_topItem);
    } else {
@@ -143,9 +145,15 @@ void MainWin::createPagejoblist(QString &media)
    JobList* joblist = new JobList(stackedWidget, m_console, media);
    hashInsert(item, joblist);
    joblist->dockPage();
+   /* If this is a query of jobs on a specific media */
    if (media != "") {
       stackedWidget->setCurrentWidget(joblist);
       treeWidget->setCurrentItem(item);
+      /* did query produce results, if not close window and set back to hold */
+      if (joblist->m_resultCount == 0) {
+         joblist->closeStackPage();
+         treeWidget->setCurrentItem(holdItem);
+      }
    }
 }
 
@@ -309,14 +317,12 @@ void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *pre
    /* The Previous item */
 
    if (previousitem) {
+      /* make sure the close window and toggle dock options are removed */
+      treeWidget->removeAction(actionClosePage);
+      treeWidget->removeAction(actionToggleDock);
       /* Is this a page that has been inserted into the hash  */
       if (getFromHash(previousitem)) {
          Pages* page = getFromHash(previousitem);
-         treeWidget->removeAction(actionToggleDock);
-         /* make sure the close window option is removed */
-         if (page->isCloseable()) {
-            treeWidget->removeAction(actionClosePage);
-         }
          foreach(QAction* pageaction, page->m_contextActions) {
             treeWidget->removeAction(pageaction);
          } 
index 73beb5d06a6664b0f8170e3513d42e70f0e6da70..0ef2205658f199f4b3c11b5e5220d2f3ad59606c 100644 (file)
@@ -71,26 +71,27 @@ void MediaList::populateTree()
    QStringList results;
    const char *query = 
       "SELECT p.Name,m.VolumeName,m.MediaId,m.VolStatus,m.Enabled,m.VolBytes,"
-      "m.VolFiles,m.VolRetention,m.MediaType,m.LastWritten"
+      "m.VolFiles,m.VolJobs,m.VolRetention,m.MediaType,m.LastWritten"
       " FROM Media m,Pool p"
       " WHERE m.PoolId=p.PoolId"
       " ORDER BY p.Name";
    QStringList headerlist = (QStringList()
       << "Pool Name" << "Volume Name" << "Media Id" << "Volume Status" << "Enabled"
-      << "Volume Bytes" << "Volume Files" << "Volume Retention" 
+      << "Volume Bytes" << "Volume Files" << "Volume Jobs" << "Volume Retention" 
       << "Media Type" << "Last Written");
 
    m_checkcurwidget = false;
    mp_treeWidget->clear();
    m_checkcurwidget = true;
-   mp_treeWidget->setColumnCount(9);
+   mp_treeWidget->setColumnCount(headerlist.count());
    topItem = new QTreeWidgetItem(mp_treeWidget);
    topItem->setText(0, "Pools");
    topItem->setData(0, Qt::UserRole, 0);
-   topItem->setExpanded( true );
+   topItem->setExpanded(true);
 
    mp_treeWidget->setHeaderLabels(headerlist);
 
+   //printf("MediaList query cmd : %s\n",query);
    if (mp_console->sql_cmd(query, results)) {
       QString field;
       QStringList fieldlist;
@@ -196,15 +197,24 @@ void MediaList::PgSeltreeWidgetDoubleClicked()
  * Added to set the context menu policy based on currently active treeWidgetItem
  * signaled by currentItemChanged
  */
-void MediaList::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetItem *) /*previouswidgetitem*/
+void MediaList::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetItem *previouswidgetitem )
 {
+   /* m_checkcurwidget checks to see if this is during a refresh, which will segfault */
    if (m_checkcurwidget) {
+      /* The Previous item */
+      if (previouswidgetitem) { /* avoid a segfault if first time */
+         int treedepth = previouswidgetitem->data(0, Qt::UserRole).toInt();
+         if (treedepth == 2){
+            mp_treeWidget->removeAction(actionEditVolume);
+            mp_treeWidget->removeAction(actionListJobsOnVolume);
+         }
+      }
+
       int treedepth = currentwidgetitem->data(0, Qt::UserRole).toInt();
       if (treedepth == 2){
-         mp_treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
          m_currentlyselected=currentwidgetitem->text(1);
-      } else {
-         mp_treeWidget->setContextMenuPolicy(Qt::NoContextMenu);
+         mp_treeWidget->addAction(actionEditVolume);
+         mp_treeWidget->addAction(actionListJobsOnVolume);
       }
    }
 }
@@ -216,18 +226,17 @@ void MediaList::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetI
  */
 void MediaList::createContextMenu()
 {
-   QAction *editAction = new QAction("Edit Properties", mp_treeWidget);
-   QAction *listAction = new QAction("List Jobs On Media", mp_treeWidget);
-   mp_treeWidget->addAction(editAction);
-   mp_treeWidget->addAction(listAction);
-   connect(editAction, SIGNAL(triggered()), this, SLOT(editMedia()));
-   connect(listAction, SIGNAL(triggered()), this, SLOT(showJobs()));
+   mp_treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
+   /*mp_treeWidget->setContextMenuPolicy(Qt::NoContextMenu);*/
+   mp_treeWidget->addAction(actionRefreshMediaList);
+   connect(actionEditVolume, SIGNAL(triggered()), this, SLOT(editMedia()));
+   connect(actionListJobsOnVolume, SIGNAL(triggered()), this, SLOT(showJobs()));
    mp_treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
    connect(mp_treeWidget, SIGNAL(
            currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
            this, SLOT(treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
    /* connect to the action specific to this pages class */
-   connect(actionRepopulateMediaTree, SIGNAL(triggered()), this,
+   connect(actionRefreshMediaList, SIGNAL(triggered()), this,
                 SLOT(populateTree()));
 }
 
@@ -241,7 +250,7 @@ void MediaList::currentStackItem()
       /* add context sensitive menu items specific to this classto the page
        * selector tree. m_m_contextActions is QList of QActions, so this is 
        * only done once with the first population. */
-      m_contextActions.append(actionRepopulateMediaTree);
+      m_contextActions.append(actionRefreshMediaList);
       /* Create the context menu for the medialist tree */
       createContextMenu();
       m_populated=true;
index 803efcb806470b62ecd94d422105b04174b2925c..4531d2939d63e57788667226d7cc8b7b97a4f37a 100644 (file)
     <widget class="QTreeWidget" name="mp_treeWidget" />
    </item>
   </layout>
-  <action name="actionRepopulateMediaTree" >
+  <action name="actionRefreshMediaList" >
    <property name="icon" >
     <iconset>../images/run.png</iconset>
    </property>
    <property name="text" >
-    <string>Repopulate Media Tree</string>
+    <string>Refresh Media List</string>
    </property>
    <property name="statusTip" >
-    <string>Requery the director for the media.</string>
+    <string>Requery the director for the list of media.</string>
+   </property>
+  </action>
+  <action name="actionEditVolume" >
+   <property name="icon" >
+    <iconset>../images/status.png</iconset>
+   </property>
+   <property name="text" >
+    <string>Edit Volume</string>
+   </property>
+  </action>
+  <action name="actionListJobsOnVolume" >
+   <property name="icon" >
+    <iconset>../images/unmark.png</iconset>
+   </property>
+   <property name="text" >
+    <string>List Jobs On Volume</string>
    </property>
   </action>
  </widget>