2 Bacula® - The Network Backup Solution
4 Copyright (C) 2007-2008 Free Software Foundation Europe e.V.
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 and included
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.
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
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.
32 * Main Window control for bat (qt-console)
34 * Kern Sibbald, January MMVII
39 #include "joblist/joblist.h"
40 #include "storage/storage.h"
41 #include "fileset/fileset.h"
42 #include "label/label.h"
45 #include "restore/restore.h"
46 #include "medialist/medialist.h"
47 #include "joblist/joblist.h"
48 #include "clients/clients.h"
49 #include "restore/restoretree.h"
50 #include "help/help.h"
51 #include "jobs/jobs.h"
52 #include "jobgraphs/jobplot.h"
55 * Daemon message callback
57 void message_callback(int /* type */, char *msg)
59 QMessageBox::warning(mainWin, "Bat", msg, QMessageBox::Ok);
62 MainWin::MainWin(QWidget *parent) : QMainWindow(parent)
65 m_dtformat = "yyyy-MM-dd HH:mm:ss";
67 setupUi(this); /* Setup UI defined by main.ui (designer) */
68 register_message_callback(message_callback);
71 treeWidget->setColumnCount(1);
72 treeWidget->setHeaderLabel("Select Page");
73 treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
85 foreach(Console *console, m_consoleHash) {
86 console->connect_dir();
88 m_currentConsole = (Console*)getFromHash(m_firstItem);
89 m_currentConsole->setCurrent();
91 QString directoryResourceName;
92 m_currentConsole->getDirResName(directoryResourceName);
93 Pmsg1(000, "Setting initial window to %s\n", directoryResourceName.toUtf8().data());
97 void MainWin::createPages()
100 QTreeWidgetItem *item, *topItem;
104 foreach_res(dir, R_DIRECTOR) {
106 /* Create console tree stacked widget item */
107 m_currentConsole = new Console(stackedWidget);
108 m_currentConsole->setDirRes(dir);
109 m_currentConsole->readSettings();
111 /* The top tree item representing the director */
112 topItem = new QTreeWidgetItem(treeWidget);
113 topItem->setText(0, dir->name());
114 topItem->setIcon(0, QIcon(":images/server.png"));
115 /* Set background to grey for ease of identification of inactive Director */
116 QBrush greyBrush(Qt::lightGray);
117 topItem->setBackground(0, greyBrush);
118 m_currentConsole->setDirectorTreeItem(topItem);
119 m_consoleHash.insert(topItem, m_currentConsole);
121 /* Create Tree Widget Item */
122 item = new QTreeWidgetItem(topItem);
123 item->setText(0, "Console");
124 if (!m_firstItem){ m_firstItem = item; }
125 item->setIcon(0,QIcon(QString::fromUtf8(":images/utilities-terminal.png")));
127 /* insert the cosole and tree widget item into the hashes */
128 hashInsert(item, m_currentConsole);
130 /* Set Color of treeWidgetItem for the console
131 * It will be set to green in the console class if the connection is made.
133 QBrush redBrush(Qt::red);
134 item->setForeground(0, redBrush);
135 m_currentConsole->dockPage();
138 * Create instances in alphabetic order of the rest
139 * of the classes that will by default exist under each Director.
145 createPageJobList("", "", "", "", NULL);
148 new JobPlot(NULL, pass);
153 treeWidget->expandItem(topItem);
154 stackedWidget->setCurrentWidget(m_currentConsole);
160 * create an instance of the the joblist class on the stack
162 void MainWin::createPageJobList(const QString &media, const QString &client,
163 const QString &job, const QString &fileset, QTreeWidgetItem *parentTreeWidgetItem)
165 QTreeWidgetItem *holdItem;
167 /* save current tree widget item in case query produces no results */
168 holdItem = treeWidget->currentItem();
169 JobList* joblist = new JobList(media, client, job, fileset, parentTreeWidgetItem);
170 /* If this is a query of jobs on a specific media */
171 if ((media != "") || (client != "") || (job != "") || (fileset != "")) {
172 joblist->setCurrent();
173 /* did query produce results, if not close window and set back to hold */
174 if (joblist->m_resultCount == 0) {
175 joblist->closeStackPage();
176 treeWidget->setCurrentItem(holdItem);
182 * Handle up and down arrow keys for the command line
185 void MainWin::keyPressEvent(QKeyEvent *event)
187 if (m_cmd_history.size() == 0) {
191 switch (event->key()) {
193 if (m_cmd_last < 0 || m_cmd_last >= (m_cmd_history.size()-1)) {
200 if (m_cmd_last == 0) {
204 if (m_cmd_last < 0 || m_cmd_last > (m_cmd_history.size()-1)) {
205 m_cmd_last = m_cmd_history.size() - 1;
214 lineEdit->setText(m_cmd_history[m_cmd_last]);
217 void MainWin::createConnections()
219 /* Connect signals to slots */
220 connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(input_line()));
221 connect(actionAbout_bat, SIGNAL(triggered()), this, SLOT(about()));
222 connect(actionBat_Help, SIGNAL(triggered()), this, SLOT(help()));
223 connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this,
224 SLOT(treeItemClicked(QTreeWidgetItem *, int)));
225 connect(treeWidget, SIGNAL(
226 currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
227 this, SLOT(treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
228 connect(stackedWidget, SIGNAL(currentChanged(int)),
229 this, SLOT(stackItemChanged(int)));
230 connect(actionQuit, SIGNAL(triggered()), app, SLOT(closeAllWindows()));
231 connect(actionLabel, SIGNAL(triggered()), this, SLOT(labelButtonClicked()));
232 connect(actionRun, SIGNAL(triggered()), this, SLOT(runButtonClicked()));
233 connect(actionEstimate, SIGNAL(triggered()), this, SLOT(estimateButtonClicked()));
234 connect(actionBrowse, SIGNAL(triggered()), this, SLOT(browseButtonClicked()));
235 connect(actionJobPlot, SIGNAL(triggered()), this, SLOT(jobPlotButtonClicked()));
236 connect(actionRestore, SIGNAL(triggered()), this, SLOT(restoreButtonClicked()));
237 connect(actionUndock, SIGNAL(triggered()), this, SLOT(undockWindowButton()));
238 connect(actionToggleDock, SIGNAL(triggered()), this, SLOT(toggleDockContextWindow()));
239 connect(actionClosePage, SIGNAL(triggered()), this, SLOT(closePage()));
240 connect(actionPreferences, SIGNAL(triggered()), this, SLOT(setPreferences()));
244 * Reimplementation of QWidget closeEvent virtual function
246 void MainWin::closeEvent(QCloseEvent *event)
250 /* close all non console pages, this will call settings in destructors */
251 while (m_consoleHash.count() < m_pagehash.count()) {
252 foreach(Pages *page, m_pagehash) {
253 if (page != page->console()) {
254 QTreeWidgetItem* pageSelectorTreeWidgetItem = mainWin->getFromHash(page);
255 if (pageSelectorTreeWidgetItem->childCount() == 0) {
256 page->console()->setCurrent();
257 page->closeStackPage();
262 /* close the console pages and terminate connection */
263 foreach(Console *console, m_consoleHash){
264 console->writeSettings();
265 console->terminate();
266 console->closeStackPage();
271 void MainWin::writeSettings()
273 QSettings settings("bacula.org", "bat");
275 settings.beginGroup("MainWin");
276 settings.setValue("winSize", size());
277 settings.setValue("winPos", pos());
278 settings.setValue("state", saveState());
282 void MainWin::readSettings()
284 QSettings settings("bacula.org", "bat");
286 settings.beginGroup("MainWin");
287 resize(settings.value("winSize", QSize(1041, 801)).toSize());
288 move(settings.value("winPos", QPoint(200, 150)).toPoint());
289 restoreState(settings.value("state").toByteArray());
294 * This subroutine is called with an item in the Page Selection window
297 void MainWin::treeItemClicked(QTreeWidgetItem *item, int /*column*/)
299 /* Is this a page that has been inserted into the hash */
300 if (getFromHash(item)) {
301 Pages* page = getFromHash(item);
302 int stackindex=stackedWidget->indexOf(page);
304 if (stackindex >= 0) {
305 stackedWidget->setCurrentWidget(page);
307 /* run the virtual function in case this class overrides it */
308 page->PgSeltreeWidgetClicked();
313 * Called with a change of the highlighed tree widget item in the page selector.
315 void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *previousitem)
317 if (m_isClosing) return; /* if closing the application, do nothing here */
319 Pages *previousPage, *nextPage;
320 Console *previousConsole = NULL;
321 Console *nextConsole;
323 /* remove all actions before adding actions appropriate for new page */
324 foreach(QAction* pageAction, treeWidget->actions()) {
325 treeWidget->removeAction(pageAction);
328 /* first determine the next item */
330 /* knowing the treeWidgetItem, get the page from the hash */
331 nextPage = getFromHash(currentitem);
332 nextConsole = m_consoleHash.value(currentitem);
333 /* Is this a page that has been inserted into the hash */
335 nextConsole = nextPage->console();
336 /* then is it a treeWidgetItem representing a director */
337 } else if (nextConsole) {
338 /* let the next page BE the console */
339 nextPage = nextConsole;
341 /* Should never get here */
346 /* The Previous item */
348 /* this condition prevents a segfault. The first time there is no previousitem*/
350 /* knowing the treeWidgetItem, get the page from the hash */
351 previousPage = getFromHash(previousitem);
352 previousConsole = m_consoleHash.value(previousitem);
354 previousConsole = previousPage->console();
355 } else if (previousConsole) {
356 previousPage = previousConsole;
358 if ((previousPage) || (previousConsole)) {
359 if (nextConsole != previousConsole) {
360 /* remove connections to the current console */
361 disconnect(actionConnect, SIGNAL(triggered()), previousConsole, SLOT(connect_dir()));
362 disconnect(actionStatusDir, SIGNAL(triggered()), previousConsole, SLOT(status_dir()));
363 disconnect(actionMessages, SIGNAL(triggered()), previousConsole, SLOT(messages()));
364 disconnect(actionSelectFont, SIGNAL(triggered()), previousConsole, SLOT(set_font()));
365 QTreeWidgetItem *dirItem = previousConsole->directorTreeItem();
366 QBrush greyBrush(Qt::lightGray);
367 dirItem->setBackground(0, greyBrush);
372 /* process the current (next) item */
374 if ((nextPage) || (nextConsole)) {
375 if (nextConsole != previousConsole) {
376 /* make connections to the current console */
377 m_currentConsole = nextConsole;
378 connect(actionConnect, SIGNAL(triggered()), m_currentConsole, SLOT(connect_dir()));
379 connect(actionSelectFont, SIGNAL(triggered()), m_currentConsole, SLOT(set_font()));
380 connect(actionStatusDir, SIGNAL(triggered()), m_currentConsole, SLOT(status_dir()));
381 connect(actionMessages, SIGNAL(triggered()), m_currentConsole, SLOT(messages()));
382 /* Set director's tree widget background to magenta for ease of identification */
383 QTreeWidgetItem *dirItem = m_currentConsole->directorTreeItem();
384 QBrush magentaBrush(Qt::magenta);
385 dirItem->setBackground(0, magentaBrush);
387 /* set the value for the currently active console */
388 int stackindex = stackedWidget->indexOf(nextPage);
390 /* Is this page currently on the stack or is it undocked */
391 if (stackindex >= 0) {
392 /* put this page on the top of the stack */
393 stackedWidget->setCurrentIndex(stackindex);
395 /* it is undocked, raise it to the front */
398 /* for the page selectors menu action to dock or undock, set the text */
399 nextPage->setContextMenuDockText();
401 treeWidget->addAction(actionToggleDock);
402 /* if this page is closeable, and it has no childern, then add that action */
403 if ((nextPage->isCloseable()) && (currentitem->child(0) == NULL))
404 treeWidget->addAction(actionClosePage);
406 /* Add the actions to the Page Selectors tree widget that are part of the
407 * current items list of desired actions regardless of whether on top of stack*/
408 treeWidget->addActions(nextPage->m_contextActions);
412 void MainWin::labelButtonClicked()
417 void MainWin::runButtonClicked()
422 void MainWin::estimateButtonClicked()
427 void MainWin::browseButtonClicked()
432 void MainWin::restoreButtonClicked()
434 new prerestorePage();
437 void MainWin::jobPlotButtonClicked()
441 new JobPlot(NULL, pass);
445 * The user just finished typing a line in the command line edit box
447 void MainWin::input_line()
449 QString cmdStr = lineEdit->text(); /* Get the text */
450 lineEdit->clear(); /* clear the lineEdit box */
451 if (m_currentConsole->is_connected()) {
452 /* Use consoleInput to allow typing anything */
453 m_currentConsole->consoleInput(cmdStr);
455 set_status("Director not connected. Click on connect button.");
457 m_cmd_history.append(cmdStr);
459 if (treeWidget->currentItem() != getFromHash(m_currentConsole))
460 m_currentConsole->setCurrent();
464 void MainWin::about()
466 QMessageBox::about(this, tr("About bat"),
467 tr("<br><h2>bat 1.0, by Dirk H Bartley and Kern Sibbald</h2>"
468 "<p>Copyright © " BYEAR " Free Software Foundation Europe e.V."
469 "<p>The <b>bat</b> is an administrative console"
470 " interface to the Director."));
475 Help::displayFile("index.html");
478 void MainWin::set_statusf(const char *fmt, ...)
483 va_start(arg_ptr, fmt);
484 len = bvsnprintf(buf, sizeof(buf), fmt, arg_ptr);
489 void MainWin::set_status_ready()
491 set_status(" Ready");
494 void MainWin::set_status(const char *buf)
496 statusBar()->showMessage(buf);
500 * Function to respond to the button bar button to undock
502 void MainWin::undockWindowButton()
504 Pages* page = (Pages*)stackedWidget->currentWidget();
505 page->togglePageDocking();
509 * Function to respond to action on page selector context menu to toggle the
510 * dock status of the window associated with the page selectors current
513 void MainWin::toggleDockContextWindow()
515 QTreeWidgetItem *currentitem = treeWidget->currentItem();
517 /* Is this a page that has been inserted into the hash */
518 if (getFromHash(currentitem)) {
519 Pages* page = getFromHash(currentitem);
520 page->togglePageDocking();
525 * This function is called when the stack item is changed. Call
526 * the virtual function here. Avoids a window being undocked leaving
527 * a window at the top of the stack unpopulated.
529 void MainWin::stackItemChanged(int)
531 if (m_isClosing) return; /* if closing the application, do nothing here */
532 Pages* page = (Pages*)stackedWidget->currentWidget();
533 /* run the virtual function in case this class overrides it */
534 page->currentStackItem();
538 * Function to simplify insertion of QTreeWidgetItem <-> Page association
539 * into a double direction hash.
541 void MainWin::hashInsert(QTreeWidgetItem *item, Pages *page)
543 m_pagehash.insert(item, page);
544 m_widgethash.insert(page, item);
548 * Function to simplify removal of QTreeWidgetItem <-> Page association
549 * into a double direction hash.
551 void MainWin::hashRemove(QTreeWidgetItem *item, Pages *page)
553 /* I had all sorts of return status checking code here. Do we have a log
554 * level capability in bat. I would have left it in but it used printf's
555 * and it should really be some kind of log level facility ???
556 * ******FIXME********/
557 m_pagehash.remove(item);
558 m_widgethash.remove(page);
562 * Function to retrieve a Page* when the item in the page selector's tree is
565 Pages* MainWin::getFromHash(QTreeWidgetItem *item)
567 return m_pagehash.value(item);
571 * Function to retrieve the page selectors tree widget item when the page is
574 QTreeWidgetItem* MainWin::getFromHash(Pages *page)
576 return m_widgethash.value(page);
580 * Function to respond to action on page selector context menu to close the
583 void MainWin::closePage()
585 QTreeWidgetItem *currentitem = treeWidget->currentItem();
587 /* Is this a page that has been inserted into the hash */
588 if (getFromHash(currentitem)) {
589 Pages* page = getFromHash(currentitem);
590 if (page->isCloseable()) {
591 page->closeStackPage();
596 /* Quick function to return the current console */
597 Console *MainWin::currentConsole()
599 return m_currentConsole;
601 /* Quick function to return the tree item for the director */
602 QTreeWidgetItem *MainWin::currentTopItem()
604 return m_currentConsole->directorTreeItem();
607 /* Preferences menu item clicked */
608 void MainWin::setPreferences()
611 prefs.commDebug->setCheckState(m_commDebug ? Qt::Checked : Qt::Unchecked);
612 prefs.displayAll->setCheckState(m_displayAll ? Qt::Checked : Qt::Unchecked);
613 prefs.sqlDebug->setCheckState(m_sqlDebug ? Qt::Checked : Qt::Unchecked);
614 prefs.commandDebug->setCheckState(m_commandDebug ? Qt::Checked : Qt::Unchecked);
615 prefs.miscDebug->setCheckState(m_miscDebug ? Qt::Checked : Qt::Unchecked);
616 prefs.recordLimit->setCheckState(m_recordLimitCheck ? Qt::Checked : Qt::Unchecked);
617 prefs.recordSpinBox->setValue(m_recordLimitVal);
618 prefs.daysLimit->setCheckState(m_daysLimitCheck ? Qt::Checked : Qt::Unchecked);
619 prefs.daysSpinBox->setValue(m_daysLimitVal);
620 prefs.checkMessages->setCheckState(m_checkMessages ? Qt::Checked : Qt::Unchecked);
621 prefs.checkMessagesSpin->setValue(m_checkMessagesInterval);
622 prefs.executeLongCheckBox->setCheckState(m_longList ? Qt::Checked : Qt::Unchecked);
623 prefs.rtPopDirCheckBox->setCheckState(m_rtPopDirDebug ? Qt::Checked : Qt::Unchecked);
624 prefs.rtDirCurICCheckBox->setCheckState(m_rtDirCurICDebug ? Qt::Checked : Qt::Unchecked);
625 prefs.rtDirICCheckBox->setCheckState(m_rtDirICDebug ? Qt::Checked : Qt::Unchecked);
626 prefs.rtFileTabICCheckBox->setCheckState(m_rtFileTabICDebug ? Qt::Checked : Qt::Unchecked);
627 prefs.rtVerTabICCheckBox->setCheckState(m_rtVerTabICDebug ? Qt::Checked : Qt::Unchecked);
628 prefs.rtUpdateFTCheckBox->setCheckState(m_rtUpdateFTDebug ? Qt::Checked : Qt::Unchecked);
629 prefs.rtUpdateVTCheckBox->setCheckState(m_rtUpdateVTDebug ? Qt::Checked : Qt::Unchecked);
630 prefs.rtChecksCheckBox->setCheckState(m_rtChecksDebug ? Qt::Checked : Qt::Unchecked);
631 prefs.rtIconStateCheckBox->setCheckState(m_rtIconStateDebug ? Qt::Checked : Qt::Unchecked);
632 prefs.rtRestore1CheckBox->setCheckState(m_rtRestore1Debug ? Qt::Checked : Qt::Unchecked);
633 prefs.rtRestore2CheckBox->setCheckState(m_rtRestore2Debug ? Qt::Checked : Qt::Unchecked);
634 prefs.rtRestore3CheckBox->setCheckState(m_rtRestore3Debug ? Qt::Checked : Qt::Unchecked);
638 /* Preferences dialog */
639 prefsDialog::prefsDialog()
644 void prefsDialog::accept()
647 mainWin->m_commDebug = this->commDebug->checkState() == Qt::Checked;
648 mainWin->m_displayAll = this->displayAll->checkState() == Qt::Checked;
649 mainWin->m_sqlDebug = this->sqlDebug->checkState() == Qt::Checked;
650 mainWin->m_commandDebug = this->commandDebug->checkState() == Qt::Checked;
651 mainWin->m_miscDebug = this->miscDebug->checkState() == Qt::Checked;
652 mainWin->m_recordLimitCheck = this->recordLimit->checkState() == Qt::Checked;
653 mainWin->m_recordLimitVal = this->recordSpinBox->value();
654 mainWin->m_daysLimitCheck = this->daysLimit->checkState() == Qt::Checked;
655 mainWin->m_daysLimitVal = this->daysSpinBox->value();
656 mainWin->m_checkMessages = this->checkMessages->checkState() == Qt::Checked;
657 mainWin->m_checkMessagesInterval = this->checkMessagesSpin->value();
658 mainWin->m_longList = this->executeLongCheckBox->checkState() == Qt::Checked;
660 mainWin->m_rtPopDirDebug = this->rtPopDirCheckBox->checkState() == Qt::Checked;
661 mainWin->m_rtDirCurICDebug = this->rtDirCurICCheckBox->checkState() == Qt::Checked;
662 mainWin->m_rtDirICDebug = this->rtDirICCheckBox->checkState() == Qt::Checked;
663 mainWin->m_rtFileTabICDebug = this->rtFileTabICCheckBox->checkState() == Qt::Checked;
664 mainWin->m_rtVerTabICDebug = this->rtVerTabICCheckBox->checkState() == Qt::Checked;
665 mainWin->m_rtUpdateFTDebug = this->rtUpdateFTCheckBox->checkState() == Qt::Checked;
666 mainWin->m_rtUpdateVTDebug = this->rtUpdateVTCheckBox->checkState() == Qt::Checked;
667 mainWin->m_rtChecksDebug = this->rtChecksCheckBox->checkState() == Qt::Checked;
668 mainWin->m_rtIconStateDebug = this->rtIconStateCheckBox->checkState() == Qt::Checked;
669 mainWin->m_rtRestore1Debug = this->rtRestore1CheckBox->checkState() == Qt::Checked;
670 mainWin->m_rtRestore2Debug = this->rtRestore2CheckBox->checkState() == Qt::Checked;
671 mainWin->m_rtRestore3Debug = this->rtRestore3CheckBox->checkState() == Qt::Checked;
673 QSettings settings("www.bacula.org", "bat");
674 settings.beginGroup("Debug");
675 settings.setValue("commDebug", mainWin->m_commDebug);
676 settings.setValue("displayAll", mainWin->m_displayAll);
677 settings.setValue("sqlDebug", mainWin->m_sqlDebug);
678 settings.setValue("commandDebug", mainWin->m_commandDebug);
679 settings.setValue("miscDebug", mainWin->m_miscDebug);
681 settings.beginGroup("JobList");
682 settings.setValue("recordLimitCheck", mainWin->m_recordLimitCheck);
683 settings.setValue("recordLimitVal", mainWin->m_recordLimitVal);
684 settings.setValue("daysLimitCheck", mainWin->m_daysLimitCheck);
685 settings.setValue("daysLimitVal", mainWin->m_daysLimitVal);
687 settings.beginGroup("Messages");
688 settings.setValue("checkMessages", mainWin->m_checkMessages);
689 settings.setValue("checkMessagesInterval", mainWin->m_checkMessagesInterval);
691 settings.beginGroup("Misc");
692 settings.setValue("longList", mainWin->m_longList);
694 settings.beginGroup("RestoreTree");
695 settings.setValue("rtPopDirDebug", mainWin->m_rtPopDirDebug);
696 settings.setValue("rtDirCurICDebug", mainWin->m_rtDirCurICDebug);
697 settings.setValue("rtDirCurICRetDebug", mainWin->m_rtDirICDebug);
698 settings.setValue("rtFileTabICDebug", mainWin->m_rtFileTabICDebug);
699 settings.setValue("rtVerTabICDebug", mainWin->m_rtVerTabICDebug);
700 settings.setValue("rtUpdateFTDebug", mainWin->m_rtUpdateFTDebug);
701 settings.setValue("rtUpdateVTDebug", mainWin->m_rtUpdateVTDebug);
702 settings.setValue("rtChecksDebug", mainWin->m_rtChecksDebug);
703 settings.setValue("rtIconStateDebug", mainWin->m_rtIconStateDebug);
704 settings.setValue("rtRestore1Debug", mainWin->m_rtRestore1Debug);
705 settings.setValue("rtRestore2Debug", mainWin->m_rtRestore2Debug);
706 settings.setValue("rtRestore3Debug", mainWin->m_rtRestore3Debug);
708 foreach(Console *console, mainWin->m_consoleHash) {
709 console->startTimer();
713 void prefsDialog::reject()
716 mainWin->set_status("Canceled");
719 /* read preferences for the prefences dialog box */
720 void MainWin::readPreferences()
722 QSettings settings("www.bacula.org", "bat");
723 settings.beginGroup("Debug");
724 m_commDebug = settings.value("commDebug", false).toBool();
725 m_displayAll = settings.value("displayAll", false).toBool();
726 m_sqlDebug = settings.value("sqlDebug", false).toBool();
727 m_commandDebug = settings.value("commandDebug", false).toBool();
728 m_miscDebug = settings.value("miscDebug", false).toBool();
730 settings.beginGroup("JobList");
731 m_recordLimitCheck = settings.value("recordLimitCheck", true).toBool();
732 m_recordLimitVal = settings.value("recordLimitVal", 150).toInt();
733 m_daysLimitCheck = settings.value("daysLimitCheck", false).toBool();
734 m_daysLimitVal = settings.value("daysLimitVal", 28).toInt();
736 settings.beginGroup("Messages");
737 m_checkMessages = settings.value("checkMessages", false).toBool();
738 m_checkMessagesInterval = settings.value("checkMessagesInterval", 28).toInt();
740 settings.beginGroup("Misc");
741 m_longList = settings.value("longList", false).toBool();
743 settings.beginGroup("RestoreTree");
744 m_rtPopDirDebug = settings.value("rtPopDirDebug", false).toBool();
745 m_rtDirCurICDebug = settings.value("rtDirCurICDebug", false).toBool();
746 m_rtDirICDebug = settings.value("rtDirCurICRetDebug", false).toBool();
747 m_rtFileTabICDebug = settings.value("rtFileTabICDebug", false).toBool();
748 m_rtVerTabICDebug = settings.value("rtVerTabICDebug", false).toBool();
749 m_rtUpdateFTDebug = settings.value("rtUpdateFTDebug", false).toBool();
750 m_rtUpdateVTDebug = settings.value("rtUpdateVTDebug", false).toBool();
751 m_rtChecksDebug = settings.value("rtChecksDebug", false).toBool();
752 m_rtIconStateDebug = settings.value("rtIconStateDebug", false).toBool();
753 m_rtRestore1Debug = settings.value("rtRestore1Debug", false).toBool();
754 m_rtRestore2Debug = settings.value("rtRestore2Debug", false).toBool();
755 m_rtRestore3Debug = settings.value("rtRestore3Debug", false).toBool();