]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/qt-console/medialist/medialist.cpp
dhb Fix of a logic error. Tree shows up correctly now.
[bacula/bacula] / bacula / src / qt-console / medialist / medialist.cpp
1 /*
2    Bacula® - The Network Backup Solution
3
4    Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
5
6    The main author of Bacula is Kern Sibbald, with contributions from
7    many others, a complete list can be found in the file AUTHORS.
8    This program is Free Software; you can redistribute it and/or
9    modify it under the terms of version two of the GNU General Public
10    License as published by the Free Software Foundation plus additions
11    that are listed in the file LICENSE.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.
22
23    Bacula® is a registered trademark of John Walker.
24    The licensor of Bacula is the Free Software Foundation Europe
25    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
26    Switzerland, email:ftf@fsfeurope.org.
27 */
28  
29 /*
30  *   Version $Id: medialist.cpp 4230 2007-02-21 20:07:37Z kerns $
31  *
32  *  MediaList Class
33  *
34  *   Kern Sibbald, January MMVI
35  *
36  */ 
37
38 #include <QAbstractEventDispatcher>
39 #include "bat.h"
40 #include "medialist.h"
41 #include "mediaedit/mediaedit.h"
42 #include "joblist/joblist.h"
43 #include <QMenu>
44 //#include <QSize>
45
46 MediaList::MediaList(QStackedWidget *parent, Console *console, QTreeWidgetItem *treeItem)
47 {
48    setupUi(this);
49    m_parent=parent;
50
51    m_treeWidget = treeWidget;   /* our Storage Tree Tree Widget */
52    m_console = console;
53    m_treeItem = treeItem;
54    createConnections();
55    m_populated=false;
56    m_headerlist = new QStringList();
57    m_popupmedia = new QString("");
58    m_poollist = new QStringList();
59    m_cmd = new QString("select p.name, m.volumename, m.mediaid, m.mediatype from media m, pool p ORDER BY p.name");
60 }
61
62 MediaList::~MediaList()
63 {
64    delete m_headerlist;
65    delete m_popupmedia;
66    delete m_poollist;
67    delete m_cmd;
68 }
69
70 void MediaList::populateTree()
71 {
72    QTreeWidgetItem *mediatreeitem, *pooltreeitem, *topItem;
73
74    m_treeWidget->clear();
75    m_treeWidget->setColumnCount(3);
76    topItem = new QTreeWidgetItem(m_treeWidget);
77    topItem->setText(0, "Pools");
78    topItem->setData(0, Qt::UserRole, 0);
79    topItem->setExpanded( true );
80    //topItem->setSizeHint(0,QSize(1050,50));
81
82    /* Start with a list of pools */
83    m_poollist->clear();
84    QStringList *results=m_console->dosql(m_cmd);
85    int recordcounter=0;
86    m_headerlist->append("Volume Name");
87    m_headerlist->append("Media Id");
88    m_headerlist->append("Type");
89    m_treeWidget->setHeaderLabels(*m_headerlist);
90    QString currentpool("");
91    for ( QStringList::Iterator resultline = results->begin(); resultline != results->end(); ++resultline ) {
92       QStringList recorditemlist = resultline->split("\t");
93       int recorditemcnter=0;
94       /* Iterate through items in the record */
95       for ( QStringList::Iterator mediarecorditem = recorditemlist.begin(); mediarecorditem != recorditemlist.end(); ++mediarecorditem ) {
96          QString trimmeditem = mediarecorditem->trimmed();
97          if( trimmeditem != "" ){
98             if ( recorditemcnter == 0 ){
99                if ( currentpool != trimmeditem.toUtf8().data() ){
100                   currentpool = trimmeditem.toUtf8().data();
101                   pooltreeitem = new QTreeWidgetItem(topItem);
102                   pooltreeitem->setText(0, trimmeditem.toUtf8().data());
103                   pooltreeitem->setData(0, Qt::UserRole, 1);
104                   pooltreeitem->setExpanded( true );
105                }
106                mediatreeitem = new QTreeWidgetItem(pooltreeitem);
107             } else {
108                mediatreeitem->setData(recorditemcnter-1, Qt::UserRole, 2);
109                mediatreeitem->setText(recorditemcnter-1, trimmeditem.toUtf8().data());
110             }
111             recorditemcnter+=1;
112          }
113       }
114       recordcounter+=1;
115    }
116 }
117
118 void MediaList::createConnections()
119 {
120    connect(treeWidget, SIGNAL(itemPressed(QTreeWidgetItem *, int)), this,
121                 SLOT(treeItemClicked(QTreeWidgetItem *, int)));
122    connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this,
123                 SLOT(treeItemDoubleClicked(QTreeWidgetItem *, int)));
124 }
125
126 void MediaList::treeItemClicked(QTreeWidgetItem *item, int column)
127 {
128    int treedepth = item->data(column, Qt::UserRole).toInt();
129    QString text = item->text(0);
130    switch (treedepth){
131       case 1:
132          break;
133       case 2:
134          /* Can't figure out how to make a right button do this --- Qt::LeftButton, Qt::RightButton, Qt::MidButton */
135          *m_popupmedia = text;
136          QMenu *popup = new QMenu( m_treeWidget );
137          connect(popup->addAction("Edit Properties"), SIGNAL(triggered()), this, SLOT(editMedia()));
138          connect(popup->addAction("Show Jobs On Media"), SIGNAL(triggered()), this, SLOT(showJobs()));
139          popup->exec(QCursor::pos());
140    }
141 }
142
143 void MediaList::treeItemDoubleClicked(QTreeWidgetItem *item, int column)
144 {
145    int treedepth = item->data(column, Qt::UserRole).toInt();
146    if (treedepth >= 0) {
147    }
148 }
149
150 void MediaList::editMedia()
151 {
152    MediaEdit* edit = new MediaEdit(m_console, *m_popupmedia);
153    edit->show();
154 }
155
156 void MediaList::showJobs()
157 {
158    JobList* joblist = new JobList(m_console, *m_popupmedia);
159    joblist->show();
160 }
161
162 void MediaList::PgSeltreeWidgetClicked()
163 {
164    if( ! m_populated ){
165       populateTree();
166       m_populated=true;
167    }
168 }
169
170 void MediaList::PgSeltreeWidgetDoubleClicked()
171 {
172    populateTree();
173 }