]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/qt-console/mainwin.cpp
Implement first cut of job defaults in run dialog
[bacula/bacula] / bacula / src / qt-console / mainwin.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$
31  *
32  *  Main Window control for bat (qt-console)
33  *
34  *   Kern Sibbald, January MMVI
35  *
36  */ 
37
38 #include "bat.h"
39
40 MainWin::MainWin(QWidget *parent) : QMainWindow(parent)
41 {
42    mainWin = this;
43    setupUi(this);                     /* Setup UI defined by main.ui (designer) */
44
45    m_console = new Console(stackedWidget);
46    stackedWidget->setCurrentIndex(0);
47
48    lineEdit->setFocus();
49
50    createConnections();
51
52    this->show();
53
54    readSettings();
55
56    m_console->connect();
57 }
58
59
60 void MainWin::createConnections()
61 {
62    /* Connect signals to slots */
63    connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(input_line()));
64    connect(actionAbout_bat, SIGNAL(triggered()), this, SLOT(about()));
65
66    connect(treeWidget, SIGNAL(itemActivated(QTreeWidgetItem *, int)), this, 
67            SLOT(treeItemClicked(QTreeWidgetItem *, int)));
68    connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, 
69            SLOT(treeItemClicked(QTreeWidgetItem *, int)));
70    connect(treeWidget, SIGNAL(itemPressed(QTreeWidgetItem *, int)), this, 
71            SLOT(treeItemClicked(QTreeWidgetItem *, int)));
72    connect(treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, 
73            SLOT(treeItemDoubleClicked(QTreeWidgetItem *, int)));
74
75    connect(actionQuit, SIGNAL(triggered()), app, SLOT(closeAllWindows()));
76    connect(actionConnect, SIGNAL(triggered()), m_console, SLOT(connect()));
77    connect(actionStatusDir, SIGNAL(triggered()), m_console, SLOT(status_dir()));
78    connect(actionSelectFont, SIGNAL(triggered()), m_console, SLOT(set_font()));
79    connect(actionLabel, SIGNAL(triggered()), this,  SLOT(labelDialogClicked()));
80    connect(actionRun, SIGNAL(triggered()), this,  SLOT(runDialogClicked()));
81    connect(actionRestore, SIGNAL(triggered()), this,  SLOT(restoreDialogClicked()));
82 }
83
84 /* 
85  * Reimplementation of QWidget closeEvent virtual function   
86  */
87 void MainWin::closeEvent(QCloseEvent *event)
88 {
89    writeSettings();
90    m_console->writeSettings();
91    m_console->terminate();
92    event->accept();
93 }
94
95 void MainWin::writeSettings()
96 {
97    QSettings settings("bacula.org", "bat");
98
99    settings.beginGroup("MainWin");
100    settings.setValue("winSize", size());
101    settings.setValue("winPos", pos());
102    settings.endGroup();
103 }
104
105 void MainWin::readSettings()
106
107    QSettings settings("bacula.org", "bat");
108
109    settings.beginGroup("MainWin");
110    resize(settings.value("winSize", QSize(1041, 801)).toSize());
111    move(settings.value("winPos", QPoint(200, 150)).toPoint());
112    settings.endGroup();
113 }
114
115 void MainWin::treeItemClicked(QTreeWidgetItem *item, int column)
116 {
117    (void)column;
118    int index = item->text(1).toInt();
119    if (index >= 0 && index < 4) {
120       stackedWidget->setCurrentIndex(index);
121    }
122 }
123
124 /*
125  */
126 void MainWin::treeItemDoubleClicked(QTreeWidgetItem *item, int column)
127 {
128    (void)column;
129    int index = item->text(1).toInt();
130    /* ***FIXME**** make this automatic */
131    if (index >= 0 && index < 4) {
132       stackedWidget->setCurrentIndex(index);
133    }
134 }
135
136 void MainWin::labelDialogClicked() 
137 {
138    new labelDialog(m_console);
139 }
140
141 void MainWin::runDialogClicked() 
142 {
143    new runDialog(m_console);
144 }
145
146 void MainWin::restoreDialogClicked() 
147 {
148    new prerestoreDialog(m_console);
149 }
150
151
152
153 /*
154  * The user just finished typing a line in the command line edit box
155  */
156 void MainWin::input_line()
157 {
158    QString cmdStr = lineEdit->text();    /* Get the text */
159    lineEdit->clear();                    /* clear the lineEdit box */
160    if (m_console->is_connected()) {
161       m_console->display_text(cmdStr + "\n");
162       m_console->write_dir(cmdStr.toUtf8().data());         /* send to dir */
163    } else {
164       set_status("Director not connected. Click on connect button.");
165    }
166 }
167
168
169 void MainWin::about()
170 {
171    QMessageBox::about(this, tr("About bat"),
172             tr("<br><h2>bat 0.1</h2>"
173             "<p>Copyright &copy; " BYEAR " Free Software Foundation Europe e.V."
174             "<p>The <b>bat</b> is an administrative console"
175                " interface to the Director."));
176 }
177
178 void MainWin::set_statusf(const char *fmt, ...)
179 {
180    va_list arg_ptr;
181    char buf[1000];
182    int len;
183    va_start(arg_ptr, fmt);
184    len = bvsnprintf(buf, sizeof(buf), fmt, arg_ptr);
185    va_end(arg_ptr);
186    set_status(buf);
187 // set_scroll_bar_to_end();
188 }
189
190 void MainWin::set_status_ready()
191 {
192    set_status(" Ready");
193 // set_scroll_bar_to_end();
194 }
195
196 void MainWin::set_status(const char *buf)
197 {
198    statusBar()->showMessage(buf);
199 // ready = false;
200 }