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 Kern Sibbald.
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
40 #include "joblist/joblist.h"
41 #include "storage/storage.h"
42 #include "fileset/fileset.h"
43 #include "label/label.h"
46 #include "restore/restore.h"
47 #include "medialist/medialist.h"
48 #include "joblist/joblist.h"
49 #include "clients/clients.h"
50 #include "restore/restoretree.h"
51 #include "help/help.h"
52 #include "jobs/jobs.h"
54 #include "jobgraphs/jobplot.h"
56 #include "status/dirstat.h"
57 #include "util/fmtwidgetitem.h"
60 * Daemon message callback
62 void message_callback(int /* type */, char *msg)
64 QMessageBox::warning(mainWin, "Bat", msg, QMessageBox::Ok);
67 MainWin::MainWin(QWidget *parent) : QMainWindow(parent)
70 m_dtformat = "yyyy-MM-dd HH:mm:ss";
72 setupUi(this); /* Setup UI defined by main.ui (designer) */
73 register_message_callback(message_callback);
76 treeWidget->setColumnCount(1);
77 treeWidget->setHeaderLabel( tr("Select Page") );
78 treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
87 actionJobPlot->setEnabled(false);
88 actionJobPlot->setVisible(false);
95 foreach(Console *console, m_consoleHash) {
96 console->connect_dir();
98 m_currentConsole = (Console*)getFromHash(m_firstItem);
99 m_currentConsole->setCurrent();
101 QString directoryResourceName;
102 m_currentConsole->getDirResName(directoryResourceName);
103 Pmsg1(100, "Setting initial window to %s\n", directoryResourceName.toUtf8().data());
107 void MainWin::createPages()
110 QTreeWidgetItem *item, *topItem;
114 foreach_res(dir, R_DIRECTOR) {
116 /* Create console tree stacked widget item */
117 m_currentConsole = new Console(stackedWidget);
118 m_currentConsole->setDirRes(dir);
119 m_currentConsole->readSettings();
121 /* The top tree item representing the director */
122 topItem = new QTreeWidgetItem(treeWidget);
123 topItem->setText(0, dir->name());
124 topItem->setIcon(0, QIcon(":images/server.png"));
125 /* Set background to grey for ease of identification of inactive Director */
126 QBrush greyBrush(Qt::lightGray);
127 topItem->setBackground(0, greyBrush);
128 m_currentConsole->setDirectorTreeItem(topItem);
129 m_consoleHash.insert(topItem, m_currentConsole);
131 /* Create Tree Widget Item */
132 item = new QTreeWidgetItem(topItem);
133 item->setText(0, tr("Console"));
134 if (!m_firstItem){ m_firstItem = item; }
135 item->setIcon(0,QIcon(QString::fromUtf8(":images/utilities-terminal.png")));
137 /* insert the cosole and tree widget item into the hashes */
138 hashInsert(item, m_currentConsole);
140 /* Set Color of treeWidgetItem for the console
141 * It will be set to green in the console class if the connection is made.
143 QBrush redBrush(Qt::red);
144 item->setForeground(0, redBrush);
145 m_currentConsole->dockPage();
148 * Create instances in alphabetic order of the rest
149 * of the classes that will by default exist under each Director.
155 createPageJobList("", "", "", "", NULL);
160 new JobPlot(NULL, pass);
169 treeWidget->expandItem(topItem);
170 stackedWidget->setCurrentWidget(m_currentConsole);
176 * create an instance of the the joblist class on the stack
178 void MainWin::createPageJobList(const QString &media, const QString &client,
179 const QString &job, const QString &fileset, QTreeWidgetItem *parentTreeWidgetItem)
181 QTreeWidgetItem *holdItem;
183 /* save current tree widget item in case query produces no results */
184 holdItem = treeWidget->currentItem();
185 JobList* joblist = new JobList(media, client, job, fileset, parentTreeWidgetItem);
186 /* If this is a query of jobs on a specific media */
187 if ((media != "") || (client != "") || (job != "") || (fileset != "")) {
188 joblist->setCurrent();
189 /* did query produce results, if not close window and set back to hold */
190 if (joblist->m_resultCount == 0) {
191 joblist->closeStackPage();
192 treeWidget->setCurrentItem(holdItem);
198 * Handle up and down arrow keys for the command line
201 void MainWin::keyPressEvent(QKeyEvent *event)
203 if (m_cmd_history.size() == 0) {
207 switch (event->key()) {
209 if (m_cmd_last < 0 || m_cmd_last >= (m_cmd_history.size()-1)) {
216 if (m_cmd_last == 0) {
220 if (m_cmd_last < 0 || m_cmd_last > (m_cmd_history.size()-1)) {
221 m_cmd_last = m_cmd_history.size() - 1;
230 lineEdit->setText(m_cmd_history[m_cmd_last]);
233 void MainWin::createConnections()
235 /* Connect signals to slots */
236 connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(input_line()));
237 connect(actionAbout_bat, SIGNAL(triggered()), this, SLOT(about()));
238 connect(actionBat_Help, SIGNAL(triggered()), this, SLOT(help()));
239 connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this,
240 SLOT(treeItemClicked(QTreeWidgetItem *, int)));
241 connect(treeWidget, SIGNAL(
242 currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
243 this, SLOT(treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
244 connect(stackedWidget, SIGNAL(currentChanged(int)),
245 this, SLOT(stackItemChanged(int)));
246 connect(actionQuit, SIGNAL(triggered()), app, SLOT(closeAllWindows()));
247 connect(actionLabel, SIGNAL(triggered()), this, SLOT(labelButtonClicked()));
248 connect(actionRun, SIGNAL(triggered()), this, SLOT(runButtonClicked()));
249 connect(actionEstimate, SIGNAL(triggered()), this, SLOT(estimateButtonClicked()));
250 connect(actionBrowse, SIGNAL(triggered()), this, SLOT(browseButtonClicked()));
251 connect(actionStatusDirPage, SIGNAL(triggered()), this, SLOT(statusPageButtonClicked()));
253 connect(actionJobPlot, SIGNAL(triggered()), this, SLOT(jobPlotButtonClicked()));
255 connect(actionRestore, SIGNAL(triggered()), this, SLOT(restoreButtonClicked()));
256 connect(actionUndock, SIGNAL(triggered()), this, SLOT(undockWindowButton()));
257 connect(actionToggleDock, SIGNAL(triggered()), this, SLOT(toggleDockContextWindow()));
258 connect(actionClosePage, SIGNAL(triggered()), this, SLOT(closePage()));
259 connect(actionPreferences, SIGNAL(triggered()), this, SLOT(setPreferences()));
263 * Reimplementation of QWidget closeEvent virtual function
265 void MainWin::closeEvent(QCloseEvent *event)
269 /* close all non console pages, this will call settings in destructors */
270 while (m_consoleHash.count() < m_pagehash.count()) {
271 foreach(Pages *page, m_pagehash) {
272 if (page != page->console()) {
273 QTreeWidgetItem* pageSelectorTreeWidgetItem = mainWin->getFromHash(page);
274 if (pageSelectorTreeWidgetItem->childCount() == 0) {
275 page->console()->setCurrent();
276 page->closeStackPage();
281 foreach(Console *console, m_consoleHash){
282 console->writeSettings();
283 console->terminate();
284 console->closeStackPage();
289 void MainWin::writeSettings()
291 QSettings settings("bacula.org", "bat");
293 settings.beginGroup("MainWin");
294 settings.setValue("winSize", size());
295 settings.setValue("winPos", pos());
296 settings.setValue("state", saveState());
300 void MainWin::readSettings()
302 QSettings settings("bacula.org", "bat");
304 settings.beginGroup("MainWin");
305 resize(settings.value("winSize", QSize(1041, 801)).toSize());
306 move(settings.value("winPos", QPoint(200, 150)).toPoint());
307 restoreState(settings.value("state").toByteArray());
312 * This subroutine is called with an item in the Page Selection window
315 void MainWin::treeItemClicked(QTreeWidgetItem *item, int /*column*/)
317 /* Is this a page that has been inserted into the hash */
318 if (getFromHash(item)) {
319 Pages* page = getFromHash(item);
320 int stackindex=stackedWidget->indexOf(page);
322 if (stackindex >= 0) {
323 stackedWidget->setCurrentWidget(page);
325 /* run the virtual function in case this class overrides it */
326 page->PgSeltreeWidgetClicked();
331 * Called with a change of the highlighed tree widget item in the page selector.
333 void MainWin::treeItemChanged(QTreeWidgetItem *currentitem, QTreeWidgetItem *previousitem)
335 if (m_isClosing) return; /* if closing the application, do nothing here */
337 Pages *previousPage, *nextPage;
338 Console *previousConsole = NULL;
339 Console *nextConsole;
341 /* remove all actions before adding actions appropriate for new page */
342 foreach(QAction* pageAction, treeWidget->actions()) {
343 treeWidget->removeAction(pageAction);
346 /* first determine the next item */
348 /* knowing the treeWidgetItem, get the page from the hash */
349 nextPage = getFromHash(currentitem);
350 nextConsole = m_consoleHash.value(currentitem);
351 /* Is this a page that has been inserted into the hash */
353 nextConsole = nextPage->console();
354 /* then is it a treeWidgetItem representing a director */
355 } else if (nextConsole) {
356 /* let the next page BE the console */
357 nextPage = nextConsole;
359 /* Should never get here */
364 /* The Previous item */
366 /* this condition prevents a segfault. The first time there is no previousitem*/
368 /* knowing the treeWidgetItem, get the page from the hash */
369 previousPage = getFromHash(previousitem);
370 previousConsole = m_consoleHash.value(previousitem);
372 previousConsole = previousPage->console();
373 } else if (previousConsole) {
374 previousPage = previousConsole;
376 if ((previousPage) || (previousConsole)) {
377 if (nextConsole != previousConsole) {
378 /* remove connections to the current console */
379 disconnect(actionConnect, SIGNAL(triggered()), previousConsole, SLOT(connect_dir()));
380 disconnect(actionStatusDir, SIGNAL(triggered()), previousConsole, SLOT(status_dir()));
381 disconnect(actionMessages, SIGNAL(triggered()), previousConsole, SLOT(messages()));
382 disconnect(actionSelectFont, SIGNAL(triggered()), previousConsole, SLOT(set_font()));
383 QTreeWidgetItem *dirItem = previousConsole->directorTreeItem();
384 QBrush greyBrush(Qt::lightGray);
385 dirItem->setBackground(0, greyBrush);
390 /* process the current (next) item */
392 if ((nextPage) || (nextConsole)) {
393 if (nextConsole != previousConsole) {
394 /* make connections to the current console */
395 m_currentConsole = nextConsole;
396 connect(actionConnect, SIGNAL(triggered()), m_currentConsole, SLOT(connect_dir()));
397 connect(actionSelectFont, SIGNAL(triggered()), m_currentConsole, SLOT(set_font()));
398 connect(actionStatusDir, SIGNAL(triggered()), m_currentConsole, SLOT(status_dir()));
399 connect(actionMessages, SIGNAL(triggered()), m_currentConsole, SLOT(messages()));
400 /* Set director's tree widget background to magenta for ease of identification */
401 QTreeWidgetItem *dirItem = m_currentConsole->directorTreeItem();
402 QBrush magentaBrush(Qt::magenta);
403 dirItem->setBackground(0, magentaBrush);
405 /* set the value for the currently active console */
406 int stackindex = stackedWidget->indexOf(nextPage);
408 /* Is this page currently on the stack or is it undocked */
409 if (stackindex >= 0) {
410 /* put this page on the top of the stack */
411 stackedWidget->setCurrentIndex(stackindex);
413 /* it is undocked, raise it to the front */
416 /* for the page selectors menu action to dock or undock, set the text */
417 nextPage->setContextMenuDockText();
419 treeWidget->addAction(actionToggleDock);
420 /* if this page is closeable, and it has no childern, then add that action */
421 if ((nextPage->isCloseable()) && (currentitem->child(0) == NULL))
422 treeWidget->addAction(actionClosePage);
424 /* Add the actions to the Page Selectors tree widget that are part of the
425 * current items list of desired actions regardless of whether on top of stack*/
426 treeWidget->addActions(nextPage->m_contextActions);
430 void MainWin::labelButtonClicked()
435 void MainWin::runButtonClicked()
440 void MainWin::estimateButtonClicked()
445 void MainWin::browseButtonClicked()
450 void MainWin::statusPageButtonClicked()
452 /* if one exists, then just set it current */
454 foreach(Pages *page, m_pagehash) {
455 if (m_currentConsole == page->console()) {
456 if (page->name() == tr("Director Status")) {
466 void MainWin::restoreButtonClicked()
468 new prerestorePage();
471 void MainWin::jobPlotButtonClicked()
476 new JobPlot(NULL, pass);
481 * The user just finished typing a line in the command line edit box
483 void MainWin::input_line()
485 QString cmdStr = lineEdit->text(); /* Get the text */
486 lineEdit->clear(); /* clear the lineEdit box */
487 if (m_currentConsole->is_connected()) {
488 /* Use consoleInput to allow typing anything */
489 m_currentConsole->consoleInput(cmdStr);
491 set_status(tr("Director not connected. Click on connect button."));
493 m_cmd_history.append(cmdStr);
495 if (treeWidget->currentItem() != getFromHash(m_currentConsole))
496 m_currentConsole->setCurrent();
500 void MainWin::about()
502 QMessageBox::about(this, tr("About bat"),
503 tr("<br><h2>bat %1 (%2), by Dirk H Bartley and Kern Sibbald</h2>"
504 "<p>Copyright © 2007-%3 Free Software Foundation Europe e.V."
505 "<p>The <b>bat</b> is an administrative console"
506 " interface to the Director.").arg(VERSION).arg(BDATE).arg(BYEAR));
511 Help::displayFile("index.html");
514 void MainWin::set_statusf(const char *fmt, ...)
519 va_start(arg_ptr, fmt);
520 len = bvsnprintf(buf, sizeof(buf), fmt, arg_ptr);
525 void MainWin::set_status_ready()
527 set_status(tr(" Ready"));
530 void MainWin::set_status(const QString &str)
532 statusBar()->showMessage(str);
535 void MainWin::set_status(const char *buf)
537 statusBar()->showMessage(buf);
541 * Function to respond to the button bar button to undock
543 void MainWin::undockWindowButton()
545 Pages* page = (Pages*)stackedWidget->currentWidget();
546 page->togglePageDocking();
550 * Function to respond to action on page selector context menu to toggle the
551 * dock status of the window associated with the page selectors current
554 void MainWin::toggleDockContextWindow()
556 QTreeWidgetItem *currentitem = treeWidget->currentItem();
558 /* Is this a page that has been inserted into the hash */
559 if (getFromHash(currentitem)) {
560 Pages* page = getFromHash(currentitem);
561 page->togglePageDocking();
566 * This function is called when the stack item is changed. Call
567 * the virtual function here. Avoids a window being undocked leaving
568 * a window at the top of the stack unpopulated.
570 void MainWin::stackItemChanged(int)
572 if (m_isClosing) return; /* if closing the application, do nothing here */
573 Pages* page = (Pages*)stackedWidget->currentWidget();
574 /* run the virtual function in case this class overrides it */
575 page->currentStackItem();
579 * Function to simplify insertion of QTreeWidgetItem <-> Page association
580 * into a double direction hash.
582 void MainWin::hashInsert(QTreeWidgetItem *item, Pages *page)
584 m_pagehash.insert(item, page);
585 m_widgethash.insert(page, item);
589 * Function to simplify removal of QTreeWidgetItem <-> Page association
590 * into a double direction hash.
592 void MainWin::hashRemove(QTreeWidgetItem *item, Pages *page)
594 /* I had all sorts of return status checking code here. Do we have a log
595 * level capability in bat. I would have left it in but it used printf's
596 * and it should really be some kind of log level facility ???
597 * ******FIXME********/
598 m_pagehash.remove(item);
599 m_widgethash.remove(page);
603 * Function to retrieve a Page* when the item in the page selector's tree is
606 Pages* MainWin::getFromHash(QTreeWidgetItem *item)
608 return m_pagehash.value(item);
612 * Function to retrieve the page selectors tree widget item when the page is
615 QTreeWidgetItem* MainWin::getFromHash(Pages *page)
617 return m_widgethash.value(page);
621 * Function to respond to action on page selector context menu to close the
624 void MainWin::closePage()
626 QTreeWidgetItem *currentitem = treeWidget->currentItem();
628 /* Is this a page that has been inserted into the hash */
629 if (getFromHash(currentitem)) {
630 Pages* page = getFromHash(currentitem);
631 if (page->isCloseable()) {
632 page->closeStackPage();
637 /* Quick function to return the current console */
638 Console *MainWin::currentConsole()
640 return m_currentConsole;
642 /* Quick function to return the tree item for the director */
643 QTreeWidgetItem *MainWin::currentTopItem()
645 return m_currentConsole->directorTreeItem();
648 /* Preferences menu item clicked */
649 void MainWin::setPreferences()
652 prefs.commDebug->setCheckState(m_commDebug ? Qt::Checked : Qt::Unchecked);
653 prefs.displayAll->setCheckState(m_displayAll ? Qt::Checked : Qt::Unchecked);
654 prefs.sqlDebug->setCheckState(m_sqlDebug ? Qt::Checked : Qt::Unchecked);
655 prefs.commandDebug->setCheckState(m_commandDebug ? Qt::Checked : Qt::Unchecked);
656 prefs.miscDebug->setCheckState(m_miscDebug ? Qt::Checked : Qt::Unchecked);
657 prefs.recordLimit->setCheckState(m_recordLimitCheck ? Qt::Checked : Qt::Unchecked);
658 prefs.recordSpinBox->setValue(m_recordLimitVal);
659 prefs.daysLimit->setCheckState(m_daysLimitCheck ? Qt::Checked : Qt::Unchecked);
660 prefs.daysSpinBox->setValue(m_daysLimitVal);
661 prefs.checkMessages->setCheckState(m_checkMessages ? Qt::Checked : Qt::Unchecked);
662 prefs.checkMessagesSpin->setValue(m_checkMessagesInterval);
663 prefs.refreshStatusDir->setCheckState(m_refreshStatusDir ? Qt::Checked : Qt::Unchecked);
664 prefs.refreshStatusDirSpin->setValue(m_refreshStatusDirInterval);
665 prefs.executeLongCheckBox->setCheckState(m_longList ? Qt::Checked : Qt::Unchecked);
666 prefs.rtPopDirCheckBox->setCheckState(m_rtPopDirDebug ? Qt::Checked : Qt::Unchecked);
667 prefs.rtDirCurICCheckBox->setCheckState(m_rtDirCurICDebug ? Qt::Checked : Qt::Unchecked);
668 prefs.rtDirICCheckBox->setCheckState(m_rtDirICDebug ? Qt::Checked : Qt::Unchecked);
669 prefs.rtFileTabICCheckBox->setCheckState(m_rtFileTabICDebug ? Qt::Checked : Qt::Unchecked);
670 prefs.rtVerTabICCheckBox->setCheckState(m_rtVerTabICDebug ? Qt::Checked : Qt::Unchecked);
671 prefs.rtUpdateFTCheckBox->setCheckState(m_rtUpdateFTDebug ? Qt::Checked : Qt::Unchecked);
672 prefs.rtUpdateVTCheckBox->setCheckState(m_rtUpdateVTDebug ? Qt::Checked : Qt::Unchecked);
673 prefs.rtChecksCheckBox->setCheckState(m_rtChecksDebug ? Qt::Checked : Qt::Unchecked);
674 prefs.rtIconStateCheckBox->setCheckState(m_rtIconStateDebug ? Qt::Checked : Qt::Unchecked);
675 prefs.rtRestore1CheckBox->setCheckState(m_rtRestore1Debug ? Qt::Checked : Qt::Unchecked);
676 prefs.rtRestore2CheckBox->setCheckState(m_rtRestore2Debug ? Qt::Checked : Qt::Unchecked);
677 prefs.rtRestore3CheckBox->setCheckState(m_rtRestore3Debug ? Qt::Checked : Qt::Unchecked);
678 switch (ItemFormatterBase::getBytesConversion()) {
679 case ItemFormatterBase::BYTES_CONVERSION_NONE:
680 prefs.radioConvertOff->setChecked(Qt::Checked);
682 case ItemFormatterBase::BYTES_CONVERSION_IEC:
683 prefs.radioConvertIEC->setChecked(Qt::Checked);
686 prefs.radioConvertStandard->setChecked(Qt::Checked);
689 prefs.openPlotCheckBox->setCheckState(m_openPlot ? Qt::Checked : Qt::Unchecked);
691 prefs.openPlotCheckBox->setVisible(false);
693 prefs.openBrowserCheckBox->setCheckState(m_openBrowser ? Qt::Checked : Qt::Unchecked);
694 prefs.openDirStatCheckBox->setCheckState(m_openDirStat ? Qt::Checked : Qt::Unchecked);
698 /* Preferences dialog */
699 prefsDialog::prefsDialog()
704 void prefsDialog::accept()
707 mainWin->m_commDebug = this->commDebug->checkState() == Qt::Checked;
708 mainWin->m_displayAll = this->displayAll->checkState() == Qt::Checked;
709 mainWin->m_sqlDebug = this->sqlDebug->checkState() == Qt::Checked;
710 mainWin->m_commandDebug = this->commandDebug->checkState() == Qt::Checked;
711 mainWin->m_miscDebug = this->miscDebug->checkState() == Qt::Checked;
712 mainWin->m_recordLimitCheck = this->recordLimit->checkState() == Qt::Checked;
713 mainWin->m_recordLimitVal = this->recordSpinBox->value();
714 mainWin->m_daysLimitCheck = this->daysLimit->checkState() == Qt::Checked;
715 mainWin->m_daysLimitVal = this->daysSpinBox->value();
716 mainWin->m_checkMessages = this->checkMessages->checkState() == Qt::Checked;
717 mainWin->m_checkMessagesInterval = this->checkMessagesSpin->value();
718 mainWin->m_refreshStatusDir = this->refreshStatusDir->checkState() == Qt::Checked;
719 mainWin->m_refreshStatusDirInterval = this->refreshStatusDirSpin->value();
720 mainWin->m_longList = this->executeLongCheckBox->checkState() == Qt::Checked;
722 mainWin->m_rtPopDirDebug = this->rtPopDirCheckBox->checkState() == Qt::Checked;
723 mainWin->m_rtDirCurICDebug = this->rtDirCurICCheckBox->checkState() == Qt::Checked;
724 mainWin->m_rtDirICDebug = this->rtDirICCheckBox->checkState() == Qt::Checked;
725 mainWin->m_rtFileTabICDebug = this->rtFileTabICCheckBox->checkState() == Qt::Checked;
726 mainWin->m_rtVerTabICDebug = this->rtVerTabICCheckBox->checkState() == Qt::Checked;
727 mainWin->m_rtUpdateFTDebug = this->rtUpdateFTCheckBox->checkState() == Qt::Checked;
728 mainWin->m_rtUpdateVTDebug = this->rtUpdateVTCheckBox->checkState() == Qt::Checked;
729 mainWin->m_rtChecksDebug = this->rtChecksCheckBox->checkState() == Qt::Checked;
730 mainWin->m_rtIconStateDebug = this->rtIconStateCheckBox->checkState() == Qt::Checked;
731 mainWin->m_rtRestore1Debug = this->rtRestore1CheckBox->checkState() == Qt::Checked;
732 mainWin->m_rtRestore2Debug = this->rtRestore2CheckBox->checkState() == Qt::Checked;
733 mainWin->m_rtRestore3Debug = this->rtRestore3CheckBox->checkState() == Qt::Checked;
734 if (this->radioConvertOff->isChecked()) {
735 ItemFormatterBase::setBytesConversion(ItemFormatterBase::BYTES_CONVERSION_NONE);
736 } else if (this->radioConvertIEC->isChecked()){
737 ItemFormatterBase::setBytesConversion(ItemFormatterBase::BYTES_CONVERSION_IEC);
739 ItemFormatterBase::setBytesConversion(ItemFormatterBase::BYTES_CONVERSION_SI);
741 mainWin->m_openPlot = this->openPlotCheckBox->checkState() == Qt::Checked;
742 mainWin->m_openBrowser = this->openBrowserCheckBox->checkState() == Qt::Checked;
743 mainWin->m_openDirStat = this->openDirStatCheckBox->checkState() == Qt::Checked;
745 QSettings settings("www.bacula.org", "bat");
746 settings.beginGroup("Debug");
747 settings.setValue("commDebug", mainWin->m_commDebug);
748 settings.setValue("displayAll", mainWin->m_displayAll);
749 settings.setValue("sqlDebug", mainWin->m_sqlDebug);
750 settings.setValue("commandDebug", mainWin->m_commandDebug);
751 settings.setValue("miscDebug", mainWin->m_miscDebug);
753 settings.beginGroup("JobList");
754 settings.setValue("recordLimitCheck", mainWin->m_recordLimitCheck);
755 settings.setValue("recordLimitVal", mainWin->m_recordLimitVal);
756 settings.setValue("daysLimitCheck", mainWin->m_daysLimitCheck);
757 settings.setValue("daysLimitVal", mainWin->m_daysLimitVal);
759 settings.beginGroup("Timers");
760 settings.setValue("checkMessages", mainWin->m_checkMessages);
761 settings.setValue("checkMessagesInterval", mainWin->m_checkMessagesInterval);
762 settings.setValue("refreshStatusDir", mainWin->m_refreshStatusDir);
763 settings.setValue("refreshStatusDirInterval", mainWin->m_refreshStatusDirInterval);
765 settings.beginGroup("Misc");
766 settings.setValue("longList", mainWin->m_longList);
767 settings.setValue("byteConvert", ItemFormatterBase::getBytesConversion());
768 settings.setValue("openplot", mainWin->m_openPlot);
769 settings.setValue("openbrowser", mainWin->m_openBrowser);
770 settings.setValue("opendirstat", mainWin->m_openDirStat);
772 settings.beginGroup("RestoreTree");
773 settings.setValue("rtPopDirDebug", mainWin->m_rtPopDirDebug);
774 settings.setValue("rtDirCurICDebug", mainWin->m_rtDirCurICDebug);
775 settings.setValue("rtDirCurICRetDebug", mainWin->m_rtDirICDebug);
776 settings.setValue("rtFileTabICDebug", mainWin->m_rtFileTabICDebug);
777 settings.setValue("rtVerTabICDebug", mainWin->m_rtVerTabICDebug);
778 settings.setValue("rtUpdateFTDebug", mainWin->m_rtUpdateFTDebug);
779 settings.setValue("rtUpdateVTDebug", mainWin->m_rtUpdateVTDebug);
780 settings.setValue("rtChecksDebug", mainWin->m_rtChecksDebug);
781 settings.setValue("rtIconStateDebug", mainWin->m_rtIconStateDebug);
782 settings.setValue("rtRestore1Debug", mainWin->m_rtRestore1Debug);
783 settings.setValue("rtRestore2Debug", mainWin->m_rtRestore2Debug);
784 settings.setValue("rtRestore3Debug", mainWin->m_rtRestore3Debug);
786 foreach(Console *console, mainWin->m_consoleHash) {
787 console->startTimer();
791 void prefsDialog::reject()
794 mainWin->set_status(tr("Canceled"));
797 /* read preferences for the prefences dialog box */
798 void MainWin::readPreferences()
800 QSettings settings("www.bacula.org", "bat");
801 settings.beginGroup("Debug");
802 m_commDebug = settings.value("commDebug", false).toBool();
803 m_displayAll = settings.value("displayAll", false).toBool();
804 m_sqlDebug = settings.value("sqlDebug", false).toBool();
805 m_commandDebug = settings.value("commandDebug", false).toBool();
806 m_miscDebug = settings.value("miscDebug", false).toBool();
808 settings.beginGroup("JobList");
809 m_recordLimitCheck = settings.value("recordLimitCheck", true).toBool();
810 m_recordLimitVal = settings.value("recordLimitVal", 150).toInt();
811 m_daysLimitCheck = settings.value("daysLimitCheck", false).toBool();
812 m_daysLimitVal = settings.value("daysLimitVal", 28).toInt();
814 settings.beginGroup("Timers");
815 m_checkMessages = settings.value("checkMessages", false).toBool();
816 m_checkMessagesInterval = settings.value("checkMessagesInterval", 28).toInt();
817 m_refreshStatusDir = settings.value("refreshStatusDir", false).toBool();
818 m_refreshStatusDirInterval = settings.value("refreshStatusDirInterval", 28).toInt();
820 settings.beginGroup("Misc");
821 m_longList = settings.value("longList", false).toBool();
822 ItemFormatterBase::setBytesConversion(
823 (ItemFormatterBase::BYTES_CONVERSION) settings.value("byteConvert",
824 ItemFormatterBase::BYTES_CONVERSION_IEC).toInt());
825 m_openPlot = settings.value("openplot", false).toBool();
826 m_openBrowser = settings.value("openbrowser", false).toBool();
827 m_openDirStat = settings.value("opendirstat", false).toBool();
829 settings.beginGroup("RestoreTree");
830 m_rtPopDirDebug = settings.value("rtPopDirDebug", false).toBool();
831 m_rtDirCurICDebug = settings.value("rtDirCurICDebug", false).toBool();
832 m_rtDirICDebug = settings.value("rtDirCurICRetDebug", false).toBool();
833 m_rtFileTabICDebug = settings.value("rtFileTabICDebug", false).toBool();
834 m_rtVerTabICDebug = settings.value("rtVerTabICDebug", false).toBool();
835 m_rtUpdateFTDebug = settings.value("rtUpdateFTDebug", false).toBool();
836 m_rtUpdateVTDebug = settings.value("rtUpdateVTDebug", false).toBool();
837 m_rtChecksDebug = settings.value("rtChecksDebug", false).toBool();
838 m_rtIconStateDebug = settings.value("rtIconStateDebug", false).toBool();
839 m_rtRestore1Debug = settings.value("rtRestore1Debug", false).toBool();
840 m_rtRestore2Debug = settings.value("rtRestore2Debug", false).toBool();
841 m_rtRestore3Debug = settings.value("rtRestore3Debug", false).toBool();