X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fqt-console%2Fpages.cpp;h=1efc60a1016037529ed5489e9418b8ddfed3978c;hb=8706ead8e682475f89d69bb0fda32fb678b4be3f;hp=1b1201548fa7017ca69ac6cbcb516547fe1460c7;hpb=2d3393586f87856334f04d46e5eba7f31bda8dd9;p=bacula%2Fbacula diff --git a/bacula/src/qt-console/pages.cpp b/bacula/src/qt-console/pages.cpp index 1b1201548f..1efc60a101 100644 --- a/bacula/src/qt-console/pages.cpp +++ b/bacula/src/qt-console/pages.cpp @@ -1,14 +1,14 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2007-2009 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. This program is Free Software; you can redistribute it and/or modify it under the terms of version two of the GNU General Public - License as published by the Free Software Foundation plus additions - that are listed in the file LICENSE. + License as published by the Free Software Foundation and included + in the file LICENSE. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,19 +20,53 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - Bacula® is a registered trademark of John Walker. + Bacula® is a registered trademark of Kern Sibbald. The licensor of Bacula is the Free Software Foundation Europe (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ /* - * Version $Id: batstack.cpp 4230 2007-02-21 20:07:37Z kerns $ + * Version $Id$ * * Dirk Bartley, March 2007 */ -#include "pages.h" #include "bat.h" +#include "pages.h" + +/* A global function */ +bool isWin32Path(QString &fullPath) +{ + if (fullPath.size()<2) { + return false; + } + + bool toret = fullPath[1].toAscii() == ':' && fullPath[0].isLetter(); + if (mainWin->m_miscDebug) { + if (toret) + Pmsg1(000, "returning from isWin32Path true %s\n", fullPath.toUtf8().data()); + else + Pmsg1(000, "returning from isWin32Path false %s\n", fullPath.toUtf8().data()); + } + return toret; +} + +/* Need to initialize variables here */ +Pages::Pages() +{ + m_docked = false; + m_onceDocked = false; + m_closeable = true; + m_dockOnFirstUse = true; +} + +/* first Use Dock */ +void Pages::firstUseDock() +{ + if (!m_onceDocked && m_dockOnFirstUse) { + dockPage(); + } +} /* * dockPage @@ -42,17 +76,36 @@ void Pages::dockPage() { + if (isDocked()) { + return; + } + /* These two lines are for making sure if it is being changed from a window * that it has the proper window flag and parent. */ setWindowFlags(Qt::Widget); + /* calculate the index that the tab should be inserted into */ + int tabPos = 0; + QTreeWidgetItemIterator it(mainWin->treeWidget); + while (*it) { + Pages *somepage = mainWin->getFromHash(*it); + if (this == somepage) { + tabPos += 1; + break; + } + int pageindex = mainWin->tabWidget->indexOf(somepage); + if (pageindex != -1) { tabPos = pageindex; } + ++it; + } + /* This was being done already */ - m_parent->addWidget(this); + m_parent->insertTab(tabPos, this, m_name); /* Set docked flag */ m_docked = true; - mainWin->stackedWidget->setCurrentWidget(this); + m_onceDocked = true; + mainWin->tabWidget->setCurrentWidget(this); /* lets set the page selectors action for docking or undocking */ setContextMenuDockText(); } @@ -65,8 +118,12 @@ void Pages::dockPage() void Pages::undockPage() { + if (!isDocked()) { + return; + } + /* Change from a stacked widget to a normal window */ - m_parent->removeWidget(this); + m_parent->removeTab(m_parent->indexOf(this)); setWindowFlags(Qt::Window); show(); /* Clear docked flag */ @@ -100,6 +157,17 @@ bool Pages::isDocked() return m_docked; } +/* + * This function is because after the tabbed widget was added I could not tell + * from is docked if it had been docked yet. To prevent status pages from requesting + * status from the director + */ +bool Pages::isOnceDocked() +{ + return m_onceDocked; +} + + /* * To keep m_closeable protected as well */ @@ -170,12 +238,22 @@ void Pages::closeStackPage() */ void Pages::pgInitialize() { - pgInitialize(NULL); + pgInitialize(QString(), NULL); } -void Pages::pgInitialize(QTreeWidgetItem *parentTreeWidgetItem) +void Pages::pgInitialize(const QString &name) { - m_parent = mainWin->stackedWidget; + pgInitialize(name, NULL); +} + +void Pages::pgInitialize(const QString &tname, QTreeWidgetItem *parentTreeWidgetItem) +{ + m_docked = false; + m_onceDocked = false; + if (tname.size()) { + m_name = tname; + } + m_parent = mainWin->tabWidget; m_console = mainWin->currentConsole(); if (!parentTreeWidgetItem) { @@ -205,18 +283,37 @@ void Pages::treeWidgetName(QString &name) */ void Pages::consoleCommand(QString &command) { - /*if (!m_console->is_connectedGui()) - return;*/ - if (!m_console->preventInUseConnect()) - return; - /* Bring this directors console to the front of the stack */ - setConsoleCurrent(); + consoleCommand(command, true); +} +void Pages::consoleCommand(QString &command, bool setCurrent) +{ + int conn; + bool donotify = false; + if (m_console->getDirComm(conn)) { + if (m_console->is_notify_enabled(conn)) { + donotify = true; + m_console->notify(conn, false); + } + consoleCommand(command, conn, setCurrent); + if (donotify) { m_console->notify(conn, true); } + } +} +void Pages::consoleCommand(QString &command, int conn) +{ + consoleCommand(command, conn, true); +} +void Pages::consoleCommand(QString &command, int conn, bool setCurrent) +{ + /* Bring this director's console to the front of the stack */ + if (setCurrent) { setConsoleCurrent(); } QString displayhtml(""); displayhtml += command + "\n"; m_console->display_html(displayhtml); m_console->display_text("\n"); - m_console->write_dir(command.toUtf8().data()); - m_console->displayToPrompt(); + mainWin->waitEnter(); + m_console->write_dir(conn, command.toUtf8().data(), false); + m_console->displayToPrompt(conn); + mainWin->waitExit(); } /* @@ -238,11 +335,10 @@ void Pages::changeEvent(QEvent *event) */ void Pages::setTitle() { - QString title, director; - treeWidgetName(title); + QString wdgname, director; + treeWidgetName(wdgname); m_console->getDirResName(director); - title += " of Director "; - title += director; + QString title = tr("%1 of Director %2").arg(wdgname).arg(director); setWindowTitle(title); } @@ -269,13 +365,12 @@ void Pages::setCurrent() void Pages::setContextMenuDockText() { QTreeWidgetItem *item = mainWin->getFromHash(this); - QString docktext(""); + QString docktext; if (isDocked()) { - docktext += "UnDock "; + docktext = tr("UnDock %1 Window").arg(item->text(0)); } else { - docktext += "ReDock "; + docktext = tr("ReDock %1 Window").arg(item->text(0)); } - docktext += item->text(0) += " Window"; mainWin->actionToggleDock->setText(docktext); setTreeWidgetItemDockColor(); @@ -289,7 +384,7 @@ void Pages::setTreeWidgetItemDockColor() { QTreeWidgetItem* item = mainWin->getFromHash(this); if (item) { - if (item->text(0) != "Console") { + if (item->text(0) != tr("Console")) { if (isDocked()) { /* Set the brush to blue if undocked */ QBrush blackBrush(Qt::black); @@ -302,3 +397,41 @@ void Pages::setTreeWidgetItemDockColor() } } } + +/* Function to get a list of volumes */ +void Pages::getVolumeList(QStringList &volumeList) +{ + QString query("SELECT VolumeName AS Media FROM Media ORDER BY Media"); + if (mainWin->m_sqlDebug) { + Pmsg1(000, "Query cmd : %s\n",query.toUtf8().data()); + } + QStringList results; + if (m_console->sql_cmd(query, results)) { + QString field; + QStringList fieldlist; + /* Iterate through the lines of results. */ + foreach (QString resultline, results) { + fieldlist = resultline.split("\t"); + volumeList.append(fieldlist[0]); + } /* foreach resultline */ + } /* if results from query */ +} + +/* Function to get a list of volumes */ +void Pages::getStatusList(QStringList &statusLongList) +{ + QString statusQuery("SELECT JobStatusLong FROM Status"); + if (mainWin->m_sqlDebug) { + Pmsg1(000, "Query cmd : %s\n",statusQuery.toUtf8().data()); + } + QStringList statusResults; + if (m_console->sql_cmd(statusQuery, statusResults)) { + QString field; + QStringList fieldlist; + /* Iterate through the lines of results. */ + foreach (QString resultline, statusResults) { + fieldlist = resultline.split("\t"); + statusLongList.append(fieldlist[0]); + } /* foreach resultline */ + } /* if results from statusquery */ +}