X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fqt-console%2Fpages.cpp;h=1efc60a1016037529ed5489e9418b8ddfed3978c;hb=8706ead8e682475f89d69bb0fda32fb678b4be3f;hp=907e551498a9d31fe8a9daad85740defdb4b4426;hpb=506d052e7faf797155583f0409af20ab91fc5683;p=bacula%2Fbacula diff --git a/bacula/src/qt-console/pages.cpp b/bacula/src/qt-console/pages.cpp index 907e551498..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,38 @@ 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); -// setParent(m_parent); + + /* 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; + m_onceDocked = true; + mainWin->tabWidget->setCurrentWidget(this); + /* lets set the page selectors action for docking or undocking */ + setContextMenuDockText(); } /* @@ -63,12 +118,18 @@ 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 */ m_docked = false; + /* The window has been undocked, lets change the context menu */ + setContextMenuDockText(); } /* @@ -96,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 */ @@ -117,26 +189,13 @@ void Pages::closeEvent(QCloseEvent* event) /* A Widget was closed, lets toggle it back into the window, and set it in front. */ dockPage(); - /* is the tree widget item for "this" the current widget item */ - if (mainWin->treeWidget->currentItem() == mainWin->getFromHash(this)) - /* in case the current widget is the one which represents this, lets set the context - * menu to undock */ - mainWin->setContextMenuDockText(); - else - /* in case the current widget is not the one which represents this, lets set the - * color back to black */ - mainWin->setTreeWidgetItemDockColor(this); - /* this fixes my woes of getting the widget to show up on top when closed */ event->ignore(); - /* put this widget on the top of the stack widget */ - m_parent->setCurrentWidget(this); - /* Set the current tree widget item in the Page Selector window to the item - * which represents "this" */ - QTreeWidgetItem *item= mainWin->getFromHash(this); - mainWin->treeWidget->setCurrentItem(item); + * which represents "this" + * Which will also bring "this" to the top of the stacked widget */ + setCurrent(); } /* @@ -179,12 +238,22 @@ void Pages::closeStackPage() */ void Pages::pgInitialize() { - pgInitialize(NULL); + pgInitialize(QString(), NULL); +} + +void Pages::pgInitialize(const QString &name) +{ + pgInitialize(name, NULL); } -void Pages::pgInitialize(QTreeWidgetItem *parentTreeWidgetItem) +void Pages::pgInitialize(const QString &tname, QTreeWidgetItem *parentTreeWidgetItem) { - m_parent = mainWin->stackedWidget; + m_docked = false; + m_onceDocked = false; + if (tname.size()) { + m_name = tname; + } + m_parent = mainWin->tabWidget; m_console = mainWin->currentConsole(); if (!parentTreeWidgetItem) { @@ -196,6 +265,7 @@ void Pages::pgInitialize(QTreeWidgetItem *parentTreeWidgetItem) treeWidgetName(name); item->setText(0, name); mainWin->hashInsert(item, this); + setTitle(); } /* @@ -213,10 +283,37 @@ void Pages::treeWidgetName(QString &name) */ void Pages::consoleCommand(QString &command) { - m_console->write_dir(command.toUtf8().data()); - m_console->displayToPrompt(); - /* Bring this directors console to the front of the stack */ - mainWin->treeWidget->setCurrentItem(mainWin->getFromHash(m_console)); + 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"); + mainWin->waitEnter(); + m_console->write_dir(conn, command.toUtf8().data(), false); + m_console->displayToPrompt(conn); + mainWin->waitExit(); } /* @@ -228,7 +325,7 @@ void Pages::consoleCommand(QString &command) void Pages::changeEvent(QEvent *event) { if ((event->type() == QEvent::ActivationChange) && (isActiveWindow())) { - mainWin->treeWidget->setCurrentItem(mainWin->getFromHash(this)); + setCurrent(); } } @@ -238,10 +335,103 @@ 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); } + +/* + * Bring the current directors console window to the top of the stack. + */ +void Pages::setConsoleCurrent() +{ + mainWin->treeWidget->setCurrentItem(mainWin->getFromHash(m_console)); +} + +/* + * Bring this window to the top of the stack. + */ +void Pages::setCurrent() +{ + mainWin->treeWidget->setCurrentItem(mainWin->getFromHash(this)); +} + +/* + * Function to set the text of the toggle dock context menu when page and + * widget item are NOT known. + */ +void Pages::setContextMenuDockText() +{ + QTreeWidgetItem *item = mainWin->getFromHash(this); + QString docktext; + if (isDocked()) { + docktext = tr("UnDock %1 Window").arg(item->text(0)); + } else { + docktext = tr("ReDock %1 Window").arg(item->text(0)); + } + + mainWin->actionToggleDock->setText(docktext); + setTreeWidgetItemDockColor(); +} + +/* + * Function to set the color of the tree widget item based on whether it is + * docked or not. + */ +void Pages::setTreeWidgetItemDockColor() +{ + QTreeWidgetItem* item = mainWin->getFromHash(this); + if (item) { + if (item->text(0) != tr("Console")) { + if (isDocked()) { + /* Set the brush to blue if undocked */ + QBrush blackBrush(Qt::black); + item->setForeground(0, blackBrush); + } else { + /* Set the brush back to black if docked */ + QBrush blueBrush(Qt::blue); + item->setForeground(0, blueBrush); + } + } + } +} + +/* 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 */ +}