]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/qt-console/medialist/medialist.cpp
After tables or trees are created, size the columns.
[bacula/bacula] / bacula / src / qt-console / medialist / medialist.cpp
index 13c14d0fefd563f7dcb9e64e7c0f59ba1e951b50..701c8c2e86f1087bddd2ca749b689a291442eb71 100644 (file)
 #include "mediaedit/mediaedit.h"
 #include "joblist/joblist.h"
 
-MediaList::MediaList(QStackedWidget *parent, Console *console, QTreeWidgetItem *treeItem, int indexseq)
+MediaList::MediaList()
 {
-   SetPassedValues(parent, treeItem, indexseq );
    setupUi(this);
+   m_name = "Media";
+   pgInitialize();
 
    /* mp_treeWidget, Storage Tree Tree Widget inherited from ui_medialist.h */
-   mp_console = console;
-   createConnections();
    m_populated = false;
    m_checkcurwidget = true;
+   m_closeable = false;
+   setTitle();
 }
 
 MediaList::~MediaList()
@@ -69,28 +70,31 @@ void MediaList::populateTree()
    QString resultline;
    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"
-      " FROM Media m,Pool p"
-      " WHERE m.PoolId=p.PoolId"
-      " ORDER BY p.Name";
+      "SELECT Pool.Name AS Pool, Media.VolumeName AS Media, Media.MediaId AS Id, Media.VolStatus AS VolStatus,"
+      " Media.Enabled AS Enabled, Media.VolBytes AS Bytes, Media.VolFiles AS FileCount, Media.VolJobs AS JobCount,"
+      " Media.VolRetention AS VolumeRetention, Media.MediaType AS MediaType, Media.LastWritten AS LastWritten"
+      " FROM Media, Pool"
+      " WHERE Media.PoolId=Pool.PoolId"
+      " ORDER BY Pool";
    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);
 
-   if (mp_console->sql_cmd(query, results)) {
+   /* FIXME Make this a user configurable loggin action and dont use printf */
+   //printf("MediaList query cmd : %s\n",query);
+   if (m_console->sql_cmd(query, results)) {
       QString field;
       QStringList fieldlist;
 
@@ -123,31 +127,10 @@ void MediaList::populateTree()
          }
       }
    }
-}
-
-/*
- * Not being used currently,  Should this be kept for possible future use.
- */
-void MediaList::createConnections()
-{
-   connect(mp_treeWidget, SIGNAL(itemPressed(QTreeWidgetItem *, int)), this,
-                SLOT(treeItemClicked(QTreeWidgetItem *, int)));
-   connect(mp_treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this,
-                SLOT(treeItemDoubleClicked(QTreeWidgetItem *, int)));
-}
-
-/*
- * Not being used currently,  Should this be kept for possible future use.
- */
-void MediaList::treeItemClicked(QTreeWidgetItem * /*item*/, int /*column*/)
-{
-}
-
-/*
- * Not being used currently,  Should this be kept for possible future use.
- */
-void MediaList::treeItemDoubleClicked(QTreeWidgetItem * /*item*/, int /*column*/)
-{
+   /* Resize the columns */
+   for(int cnter=0; cnter<headerlist.count(); cnter++) {
+      mp_treeWidget->resizeColumnToContents(cnter);
+   }
 }
 
 /*
@@ -155,7 +138,7 @@ void MediaList::treeItemDoubleClicked(QTreeWidgetItem * /*item*/, int /*column*/
  */
 void MediaList::editMedia()
 {
-   MediaEdit* edit = new MediaEdit(mp_console, m_currentlyselected);
+   MediaEdit* edit = new MediaEdit(m_console, m_currentlyselected);
    edit->show();
 }
 
@@ -164,8 +147,9 @@ void MediaList::editMedia()
  */
 void MediaList::showJobs()
 {
-   JobList* joblist = new JobList(mp_console, m_currentlyselected);
-   joblist->show();
+   QString emptyclient("");
+   QTreeWidgetItem *parentItem = mainWin->getFromHash(this);
+   mainWin->createPageJobList(m_currentlyselected, emptyclient, parentItem);
 }
 
 /*
@@ -174,37 +158,35 @@ void MediaList::showJobs()
  */
 void MediaList::PgSeltreeWidgetClicked()
 {
-   if(!m_populated) {
+   if (!m_populated) {
       populateTree();
       createContextMenu();
       m_populated=true;
    }
 }
 
-/*
- * When the treeWidgetItem in the page selector tree is doubleclicked, Use that
- * As a signal to repopulate from a query of the database.
- * Should this be from a context sensitive menu in either or both of the page selector
- * or This widnow ???
- */
-void MediaList::PgSeltreeWidgetDoubleClicked()
-{
-   populateTree();
-}
-
 /*
  * 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 )
 {
-   if ( m_checkcurwidget ) {
+   /* 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 +198,15 @@ 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->addAction(actionRefreshMediaList);
+   connect(actionEditVolume, SIGNAL(triggered()), this, SLOT(editMedia()));
+   connect(actionListJobsOnVolume, SIGNAL(triggered()), this, SLOT(showJobs()));
    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()));
 }
 
@@ -238,7 +217,11 @@ void MediaList::currentStackItem()
 {
    if(!m_populated) {
       populateTree();
-      m_contextActions.append(actionRepopulateMediaTree);
+      /* 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(actionRefreshMediaList);
+      /* Create the context menu for the medialist tree */
       createContextMenu();
       m_populated=true;
    }