From: <bar...@us...> - 2008-02-19 20:28:08
|
Revision: 6447 http://bacula.svn.sourceforge.net/bacula/?rev=6447&view=rev Author: bartleyd2 Date: 2008-02-19 12:28:13 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Add preference to have the status dir screen auto refresh. Modified Paths: -------------- trunk/bacula/src/qt-console/mainwin.cpp trunk/bacula/src/qt-console/mainwin.h trunk/bacula/src/qt-console/prefs.ui trunk/bacula/src/qt-console/status/dirstat.cpp trunk/bacula/src/qt-console/status/dirstat.h Modified: trunk/bacula/src/qt-console/mainwin.cpp =================================================================== --- trunk/bacula/src/qt-console/mainwin.cpp 2008-02-19 02:51:53 UTC (rev 6446) +++ trunk/bacula/src/qt-console/mainwin.cpp 2008-02-19 20:28:13 UTC (rev 6447) @@ -646,6 +646,8 @@ prefs.daysSpinBox->setValue(m_daysLimitVal); prefs.checkMessages->setCheckState(m_checkMessages ? Qt::Checked : Qt::Unchecked); prefs.checkMessagesSpin->setValue(m_checkMessagesInterval); + prefs.refreshStatusDir->setCheckState(m_refreshStatusDir ? Qt::Checked : Qt::Unchecked); + prefs.refreshStatusDirSpin->setValue(m_refreshStatusDirInterval); prefs.executeLongCheckBox->setCheckState(m_longList ? Qt::Checked : Qt::Unchecked); prefs.rtPopDirCheckBox->setCheckState(m_rtPopDirDebug ? Qt::Checked : Qt::Unchecked); prefs.rtDirCurICCheckBox->setCheckState(m_rtDirCurICDebug ? Qt::Checked : Qt::Unchecked); @@ -693,6 +695,8 @@ mainWin->m_daysLimitVal = this->daysSpinBox->value(); mainWin->m_checkMessages = this->checkMessages->checkState() == Qt::Checked; mainWin->m_checkMessagesInterval = this->checkMessagesSpin->value(); + mainWin->m_refreshStatusDir = this->refreshStatusDir->checkState() == Qt::Checked; + mainWin->m_refreshStatusDirInterval = this->refreshStatusDirSpin->value(); mainWin->m_longList = this->executeLongCheckBox->checkState() == Qt::Checked; mainWin->m_rtPopDirDebug = this->rtPopDirCheckBox->checkState() == Qt::Checked; @@ -732,9 +736,11 @@ settings.setValue("daysLimitCheck", mainWin->m_daysLimitCheck); settings.setValue("daysLimitVal", mainWin->m_daysLimitVal); settings.endGroup(); - settings.beginGroup("Messages"); + settings.beginGroup("Timers"); settings.setValue("checkMessages", mainWin->m_checkMessages); settings.setValue("checkMessagesInterval", mainWin->m_checkMessagesInterval); + settings.setValue("refreshStatusDir", mainWin->m_refreshStatusDir); + settings.setValue("refreshStatusDirInterval", mainWin->m_refreshStatusDirInterval); settings.endGroup(); settings.beginGroup("Misc"); settings.setValue("longList", mainWin->m_longList); @@ -785,9 +791,11 @@ m_daysLimitCheck = settings.value("daysLimitCheck", false).toBool(); m_daysLimitVal = settings.value("daysLimitVal", 28).toInt(); settings.endGroup(); - settings.beginGroup("Messages"); + settings.beginGroup("Timers"); m_checkMessages = settings.value("checkMessages", false).toBool(); m_checkMessagesInterval = settings.value("checkMessagesInterval", 28).toInt(); + m_refreshStatusDir = settings.value("refreshStatusDir", false).toBool(); + m_refreshStatusDirInterval = settings.value("refreshStatusDirInterval", 28).toInt(); settings.endGroup(); settings.beginGroup("Misc"); m_longList = settings.value("longList", false).toBool(); Modified: trunk/bacula/src/qt-console/mainwin.h =================================================================== --- trunk/bacula/src/qt-console/mainwin.h 2008-02-19 02:51:53 UTC (rev 6446) +++ trunk/bacula/src/qt-console/mainwin.h 2008-02-19 20:28:13 UTC (rev 6447) @@ -86,6 +86,8 @@ int m_daysLimitVal; bool m_checkMessages; int m_checkMessagesInterval; + bool m_refreshStatusDir; + int m_refreshStatusDirInterval; bool m_longList; bool m_rtPopDirDebug; bool m_rtDirCurICDebug; Modified: trunk/bacula/src/qt-console/prefs.ui =================================================================== --- trunk/bacula/src/qt-console/prefs.ui 2008-02-19 02:51:53 UTC (rev 6446) +++ trunk/bacula/src/qt-console/prefs.ui 2008-02-19 20:28:13 UTC (rev 6447) @@ -5,14 +5,12 @@ <rect> <x>0</x> <y>0</y> - <width>435</width> - <height>499</height> + <width>470</width> + <height>533</height> </rect> </property> <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -24,91 +22,180 @@ <iconset>images/bat.png</iconset> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="1" column="0" > <widget class="QTabWidget" name="tabWidget" > <property name="currentIndex" > - <number>2</number> + <number>0</number> </property> <widget class="QWidget" name="tab" > <attribute name="title" > - <string>Messages</string> + <string>Timers</string> </attribute> - <layout class="QGridLayout" > - <property name="margin" > - <number>9</number> + <widget class="QGroupBox" name="groupBox" > + <property name="geometry" > + <rect> + <x>60</x> + <y>60</y> + <width>180</width> + <height>106</height> + </rect> </property> - <property name="spacing" > - <number>6</number> + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <item row="0" column="0" > - <widget class="QGroupBox" name="groupBox" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title" > - <string>Messages Options</string> - </property> - <layout class="QGridLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item row="2" column="0" > - <widget class="QLabel" name="checkLabel" > - <property name="text" > - <string>Message check interval in seconds</string> - </property> - </widget> - </item> - <item row="0" column="0" > - <widget class="QCheckBox" name="checkMessages" > - <property name="text" > - <string>Check Messages</string> - </property> - </widget> - </item> - <item row="1" column="0" > - <widget class="QSpinBox" name="checkMessagesSpin" > - <property name="maximum" > - <number>3600</number> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> + <property name="title" > + <string>Messages Options</string> + </property> + <widget class="QLabel" name="checkLabel" > + <property name="geometry" > + <rect> + <x>11</x> + <y>81</y> + <width>158</width> + <height>16</height> + </rect> + </property> + <property name="text" > + <string>Message check interval in seconds</string> + </property> + </widget> + <widget class="QCheckBox" name="checkMessages" > + <property name="geometry" > + <rect> + <x>11</x> + <y>25</y> + <width>158</width> + <height>20</height> + </rect> + </property> + <property name="text" > + <string>Check Messages</string> + </property> + </widget> + <widget class="QSpinBox" name="checkMessagesSpin" > + <property name="geometry" > + <rect> + <x>11</x> + <y>51</y> + <width>158</width> + <height>24</height> + </rect> + </property> + <property name="maximum" > + <number>3600</number> + </property> + </widget> + </widget> + <widget class="QGroupBox" name="groupBox_8" > + <property name="geometry" > + <rect> + <x>60</x> + <y>200</y> + <width>180</width> + <height>106</height> + </rect> + </property> + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Status Dir</string> + </property> + <widget class="QLabel" name="checkLabel_2" > + <property name="geometry" > + <rect> + <x>11</x> + <y>81</y> + <width>158</width> + <height>16</height> + </rect> + </property> + <property name="text" > + <string>Refresh Status Dir Interval</string> + </property> + </widget> + <widget class="QCheckBox" name="refreshStatusDir" > + <property name="geometry" > + <rect> + <x>11</x> + <y>25</y> + <width>158</width> + <height>20</height> + </rect> + </property> + <property name="text" > + <string>Refresh Status Dir</string> + </property> + </widget> + <widget class="QSpinBox" name="refreshStatusDirSpin" > + <property name="geometry" > + <rect> + <x>11</x> + <y>51</y> + <width>158</width> + <height>24</height> + </rect> + </property> + <property name="minimum" > + <number>20</number> + </property> + <property name="maximum" > + <number>3600</number> + </property> + </widget> + </widget> </widget> <widget class="QWidget" name="tab_2" > <attribute name="title" > <string>Joblist</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QGroupBox" name="groupBox_2" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -117,20 +204,44 @@ <string>Jolist Limit Options</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="2" column="0" > <widget class="QCheckBox" name="daysLimit" > <property name="text" > @@ -140,12 +251,12 @@ </item> <item row="3" column="0" > <widget class="QSpinBox" name="daysSpinBox" > + <property name="minimum" > + <number>1</number> + </property> <property name="maximum" > <number>10000</number> </property> - <property name="minimum" > - <number>1</number> - </property> <property name="singleStep" > <number>7</number> </property> @@ -153,12 +264,12 @@ </item> <item row="1" column="0" > <widget class="QSpinBox" name="recordSpinBox" > + <property name="minimum" > + <number>1</number> + </property> <property name="maximum" > <number>10000</number> </property> - <property name="minimum" > - <number>1</number> - </property> <property name="singleStep" > <number>25</number> </property> @@ -247,12 +358,24 @@ <string>Context Sensitive List Commands</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QCheckBox" name="executeLongCheckBox" > <property name="text" > @@ -272,7 +395,7 @@ </rect> </property> <property name="title" > - <string>GroupBox</string> + <string>Open Pages</string> </property> <widget class="QCheckBox" name="openPlotCheckBox" > <property name="geometry" > @@ -320,18 +443,28 @@ <string>Debug</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QGroupBox" name="groupBox_3" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -340,20 +473,44 @@ <string>Debugging Options</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QCheckBox" name="commDebug" > <property name="text" > @@ -401,18 +558,28 @@ <string>RestoreTree</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QGroupBox" name="groupBox_5" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -421,20 +588,44 @@ <string>Debugging Options</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="10" column="0" > <widget class="QCheckBox" name="rtRestore2CheckBox" > <property name="text" > @@ -540,12 +731,21 @@ </item> <item row="0" column="0" > <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> <item> <spacer> <property name="orientation" > @@ -562,9 +762,7 @@ <item> <widget class="QLabel" name="headingLabel" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> Modified: trunk/bacula/src/qt-console/status/dirstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/dirstat.cpp 2008-02-19 02:51:53 UTC (rev 6446) +++ trunk/bacula/src/qt-console/status/dirstat.cpp 2008-02-19 20:28:13 UTC (rev 6447) @@ -53,8 +53,7 @@ dockPage(); m_timer = new QTimer(this); QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered())); - //m_timer->start(mainWin->m_checkMessagesInterval*1000); - m_timer->start(10*1000); + m_timer->start(mainWin->m_refreshStatusDirInterval*1000); } void DirStat::getFont() @@ -99,7 +98,7 @@ void DirStat::timerTriggered() { bool iscurrent = mainWin->stackedWidget->currentIndex() == mainWin->stackedWidget->indexOf(this); - if ((isDocked() && iscurrent) || (!isDocked())) { + if (((isDocked() && iscurrent) || (!isDocked())) && mainWin->m_refreshStatusDir) { if (m_console->is_ready()) populateAll(); } Modified: trunk/bacula/src/qt-console/status/dirstat.h =================================================================== --- trunk/bacula/src/qt-console/status/dirstat.h 2008-02-19 02:51:53 UTC (rev 6446) +++ trunk/bacula/src/qt-console/status/dirstat.h 2008-02-19 20:28:13 UTC (rev 6447) @@ -53,7 +53,6 @@ void populateTerminated(); void populateScheduled(); void populateRunning(); -// virtual void treeWidgetName(QString &); void populateAll(); private slots: @@ -67,7 +66,7 @@ QTextCursor *m_cursor; void getFont(); QString m_groupText, m_splitText; - QTimer * m_timer; + QTimer *m_timer; }; #endif /* _DIRSTAT_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-02-19 21:53:50
|
Revision: 6449 http://bacula.svn.sourceforge.net/bacula/?rev=6449&view=rev Author: bartleyd2 Date: 2008-02-19 13:53:56 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Add feature to run a couple of commands from within context in the status dir window. Modified Paths: -------------- trunk/bacula/src/qt-console/fileset/fileset.cpp trunk/bacula/src/qt-console/status/dirstat.cpp trunk/bacula/src/qt-console/status/dirstat.h trunk/bacula/src/qt-console/status/dirstat.ui trunk/bacula/src/qt-console/storage/storage.cpp Modified: trunk/bacula/src/qt-console/fileset/fileset.cpp =================================================================== --- trunk/bacula/src/qt-console/fileset/fileset.cpp 2008-02-19 21:07:23 UTC (rev 6448) +++ trunk/bacula/src/qt-console/fileset/fileset.cpp 2008-02-19 21:53:56 UTC (rev 6449) @@ -79,7 +79,7 @@ mp_treeWidget->clear(); m_checkcurwidget = true; - QStringList headerlist = (QStringList() << tr(" FileSet Name ") << tr("FileSet Id") + QStringList headerlist = (QStringList() << tr("FileSet Name") << tr("FileSet Id") << tr("Create Time")); topItem = new QTreeWidgetItem(mp_treeWidget); @@ -132,10 +132,9 @@ } } /* Resize the columns */ - for (int cnter=1; cnter<headerlist.size(); cnter++) { + for (int cnter=0; cnter<headerlist.size(); cnter++) { mp_treeWidget->resizeColumnToContents(cnter); } - } /* Modified: trunk/bacula/src/qt-console/status/dirstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/dirstat.cpp 2008-02-19 21:07:23 UTC (rev 6448) +++ trunk/bacula/src/qt-console/status/dirstat.cpp 2008-02-19 21:53:56 UTC (rev 6449) @@ -54,6 +54,8 @@ m_timer = new QTimer(this); QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered())); m_timer->start(mainWin->m_refreshStatusDirInterval*1000); + + createConnections(); } void DirStat::getFont() @@ -292,6 +294,21 @@ */ void DirStat::createConnections() { + connect(actionRefresh, SIGNAL(triggered()), this, + SLOT(populateAll())); + connect(actionCancelRunning, SIGNAL(triggered()), this, + SLOT(consoleCancelJob())); + connect(actionDisableScheduledJob, SIGNAL(triggered()), this, + SLOT(consoleDisableJob())); + + scheduledTable->setContextMenuPolicy(Qt::ActionsContextMenu); + scheduledTable->addAction(actionRefresh); + scheduledTable->addAction(actionDisableScheduledJob); + terminatedTable->setContextMenuPolicy(Qt::ActionsContextMenu); + terminatedTable->addAction(actionRefresh); + runningTable->setContextMenuPolicy(Qt::ActionsContextMenu); + runningTable->addAction(actionRefresh); + runningTable->addAction(actionCancelRunning); } /* @@ -317,3 +334,34 @@ splitter->restoreState(settings.value(m_splitText).toByteArray()); settings.endGroup(); } + +/* + * Cancel a running job + */ +void DirStat::consoleCancelJob() +{ + int currentrow = runningTable->currentRow(); + QTableWidgetItem *item = runningTable->item(currentrow, 0); + if (item) { + QString text = item->text(); + QString cmd("cancel jobid="); + cmd += text; + consoleCommand(cmd); + } +} + +/* + * Disable a scheduled Job + */ +void DirStat::consoleDisableJob() +{ + int currentrow = scheduledTable->currentRow(); + QTableWidgetItem *item = scheduledTable->item(currentrow, 4); + if (item) { + QString text = item->text(); + QString cmd("disable job=\""); + cmd += text + '"'; + consoleCommand(cmd); + } +} + Modified: trunk/bacula/src/qt-console/status/dirstat.h =================================================================== --- trunk/bacula/src/qt-console/status/dirstat.h 2008-02-19 21:07:23 UTC (rev 6448) +++ trunk/bacula/src/qt-console/status/dirstat.h 2008-02-19 21:53:56 UTC (rev 6449) @@ -57,6 +57,8 @@ private slots: void timerTriggered(); + void consoleCancelJob(); + void consoleDisableJob(); private: void createConnections(); Modified: trunk/bacula/src/qt-console/status/dirstat.ui =================================================================== --- trunk/bacula/src/qt-console/status/dirstat.ui 2008-02-19 21:07:23 UTC (rev 6448) +++ trunk/bacula/src/qt-console/status/dirstat.ui 2008-02-19 21:53:56 UTC (rev 6449) @@ -13,12 +13,24 @@ <string>Form</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QSplitter" name="splitter" > <property name="orientation" > @@ -26,9 +38,7 @@ </property> <widget class="QTextEdit" name="textEdit" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> + <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>200</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -85,14 +95,23 @@ <bool>true</bool> </property> </widget> - <widget class="QWidget" name="" > + <widget class="QWidget" name="layoutWidget" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> <item> <widget class="QLabel" name="scheduledLabel" > <property name="layoutDirection" > @@ -116,12 +135,21 @@ </widget> <widget class="QWidget" name="layoutWidget_2" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> <item> <widget class="QLabel" name="runningLabel" > <property name="layoutDirection" > @@ -145,12 +173,21 @@ </widget> <widget class="QWidget" name="layoutWidget" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> <item> <widget class="QLabel" name="terminatedLabel" > <property name="layoutDirection" > @@ -175,6 +212,30 @@ </widget> </item> </layout> + <action name="actionRefresh" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/view-refresh.png</iconset> + </property> + <property name="text" > + <string>Refresh</string> + </property> + </action> + <action name="actionCancelRunning" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/utilities-terminal.png</iconset> + </property> + <property name="text" > + <string>Cancel Running Job</string> + </property> + </action> + <action name="actionDisableScheduledJob" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/utilities-terminal.png</iconset> + </property> + <property name="text" > + <string>Disable Scheduled Job</string> + </property> + </action> </widget> <resources> <include location="../main.qrc" /> Modified: trunk/bacula/src/qt-console/storage/storage.cpp =================================================================== --- trunk/bacula/src/qt-console/storage/storage.cpp 2008-02-19 21:07:23 UTC (rev 6448) +++ trunk/bacula/src/qt-console/storage/storage.cpp 2008-02-19 21:53:56 UTC (rev 6449) @@ -132,7 +132,7 @@ } } /* Resize the columns */ - for(int cnter=1; cnter<headerlist.size(); cnter++) { + for(int cnter=0; cnter<headerlist.size(); cnter++) { mp_treeWidget->resizeColumnToContents(cnter); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-02-24 16:31:57
|
Revision: 6481 http://bacula.svn.sourceforge.net/bacula/?rev=6481&view=rev Author: bartleyd2 Date: 2008-02-24 08:32:02 -0800 (Sun, 24 Feb 2008) Log Message: ----------- Change some icons around to make a little more senese with a status in console option and a status page option. Modified Paths: -------------- trunk/bacula/src/qt-console/clients/clients.ui trunk/bacula/src/qt-console/fileset/fileset.ui trunk/bacula/src/qt-console/images/status.png trunk/bacula/src/qt-console/jobgraphs/jobplot.cpp trunk/bacula/src/qt-console/main.qrc trunk/bacula/src/qt-console/main.ui trunk/bacula/src/qt-console/prefs.ui trunk/bacula/src/qt-console/status/dirstat.cpp trunk/bacula/src/qt-console/status/dirstat.ui trunk/bacula/src/qt-console/storage/storage.ui Added Paths: ----------- trunk/bacula/src/qt-console/images/applications-graphics.png trunk/bacula/src/qt-console/images/applications-graphics.svg trunk/bacula/src/qt-console/images/status-console.png trunk/bacula/src/qt-console/images/status-console.svg trunk/bacula/src/qt-console/images/status.svg Modified: trunk/bacula/src/qt-console/clients/clients.ui =================================================================== --- trunk/bacula/src/qt-console/clients/clients.ui 2008-02-24 14:53:54 UTC (rev 6480) +++ trunk/bacula/src/qt-console/clients/clients.ui 2008-02-24 16:32:02 UTC (rev 6481) @@ -47,7 +47,7 @@ </action> <action name="actionStatusClientInConsole" > <property name="icon" > - <iconset resource="../main.qrc" >:/images/status.png</iconset> + <iconset resource="../main.qrc" >:/images/status-console.png</iconset> </property> <property name="text" > <string>Status Client In Console</string> Modified: trunk/bacula/src/qt-console/fileset/fileset.ui =================================================================== --- trunk/bacula/src/qt-console/fileset/fileset.ui 2008-02-24 14:53:54 UTC (rev 6480) +++ trunk/bacula/src/qt-console/fileset/fileset.ui 2008-02-24 16:32:02 UTC (rev 6481) @@ -36,7 +36,7 @@ </action> <action name="actionStatusFileSetInConsole" > <property name="icon" > - <iconset resource="../main.qrc" >:/images/status.png</iconset> + <iconset resource="../main.qrc" >:/images/status-console.png</iconset> </property> <property name="text" > <string>Status FileSet In Console</string> Added: trunk/bacula/src/qt-console/images/applications-graphics.png =================================================================== (Binary files differ) Property changes on: trunk/bacula/src/qt-console/images/applications-graphics.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/bacula/src/qt-console/images/applications-graphics.svg =================================================================== --- trunk/bacula/src/qt-console/images/applications-graphics.svg (rev 0) +++ trunk/bacula/src/qt-console/images/applications-graphics.svg 2008-02-24 16:32:02 UTC (rev 6481) @@ -0,0 +1,545 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + inkscape:export-ydpi="60" + inkscape:export-xdpi="60" + inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/application-graphics.png" + width="48px" + height="48px" + id="svg9121" + sodipodi:version="0.32" + inkscape:version="0.43" + sodipodi:docbase="/home/dbartley/src/bacula/src/qt-console/images" + sodipodi:docname="applications-graphics.svg"> + <defs + id="defs3"> + <linearGradient + inkscape:collect="always" + id="linearGradient6835"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop6837" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop6839" /> + </linearGradient> + <linearGradient + id="linearGradient6748"> + <stop + style="stop-color:#729fcf;stop-opacity:1;" + offset="0" + id="stop6750" /> + <stop + style="stop-color:#2b5582;stop-opacity:1;" + offset="1" + id="stop6752" /> + </linearGradient> + <linearGradient + id="linearGradient6721"> + <stop + style="stop-color:#729fcf;stop-opacity:1;" + offset="0" + id="stop6723" /> + <stop + style="stop-color:#3c74b1;stop-opacity:1;" + offset="1" + id="stop6725" /> + </linearGradient> + <linearGradient + id="linearGradient6651"> + <stop + style="stop-color:#f2f2f2;stop-opacity:1;" + offset="0" + id="stop6653" /> + <stop + style="stop-color:#c3c3c3;stop-opacity:1;" + offset="1" + id="stop6655" /> + </linearGradient> + <linearGradient + id="linearGradient6629"> + <stop + style="stop-color:#aeaeae;stop-opacity:1;" + offset="0" + id="stop6631" /> + <stop + style="stop-color:#c4c4c4;stop-opacity:0;" + offset="1" + id="stop6633" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2446"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2448" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2450" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6975"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop6977" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop6979" /> + </linearGradient> + <linearGradient + id="linearGradient6963"> + <stop + style="stop-color:#696969;stop-opacity:1;" + offset="0" + id="stop6965" /> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="1" + id="stop6967" /> + </linearGradient> + <linearGradient + id="linearGradient6951"> + <stop + style="stop-color:#6e3d09;stop-opacity:1;" + offset="0" + id="stop6953" /> + <stop + id="stop6959" + offset="0.24242425" + style="stop-color:#ea8113;stop-opacity:1;" /> + <stop + style="stop-color:#5c3307;stop-opacity:1;" + offset="0.62121212" + id="stop6961" /> + <stop + style="stop-color:#e07c12;stop-opacity:1;" + offset="1" + id="stop6955" /> + </linearGradient> + <linearGradient + id="linearGradient6939"> + <stop + style="stop-color:#bdbdbd;stop-opacity:1;" + offset="0" + id="stop6941" /> + <stop + id="stop6947" + offset="0.33333334" + style="stop-color:#e2e2e2;stop-opacity:1;" /> + <stop + style="stop-color:#a3a3a3;stop-opacity:1;" + offset="0.66666669" + id="stop6949" /> + <stop + style="stop-color:#dddddd;stop-opacity:1;" + offset="1" + id="stop6943" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6939" + id="linearGradient6945" + x1="19.394735" + y1="30.001331" + x2="23.109331" + y2="33.438831" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.90695,-1.802856)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6951" + id="linearGradient6957" + x1="28.058632" + y1="18.867767" + x2="33.436985" + y2="23.742767" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.90695,-1.802856)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient6963" + id="radialGradient6969" + cx="15.415101" + cy="35.356506" + fx="15.415101" + fy="35.356506" + r="7.5791561" + gradientTransform="matrix(0.994655,3.262876e-16,6.564546e-13,0.969322,-4.583017,0.165919)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient6975" + id="radialGradient6981" + cx="26.78167" + cy="42.343147" + fx="26.78167" + fy="42.343147" + r="14.407301" + gradientTransform="matrix(1,0,0,0.282209,1.679212e-15,30.39355)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2446" + id="linearGradient2452" + x1="13.236155" + y1="37.752247" + x2="7.7521091" + y2="42.282146" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.852298,0,0,0.852298,-1.675107,3.753977)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient6975" + id="radialGradient6903" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.282209,2.936128e-15,30.39355)" + cx="26.78167" + cy="42.343147" + fx="26.78167" + fy="42.343147" + r="14.407301" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6835" + id="linearGradient7005" + gradientUnits="userSpaceOnUse" + x1="48.25" + y1="54.75" + x2="48.25" + y2="71.25" + gradientTransform="matrix(0.718914,0,0,0.718914,-1.897103,-20.68606)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6651" + id="linearGradient7010" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.737307,0,0,0.770854,-8.532023,7.121636)" + x1="60.168766" + y1="40.119797" + x2="60.440994" + y2="43.869797" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6748" + id="linearGradient7014" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.718914,0,0,0.718914,-1.897103,-22.42481)" + x1="49.853037" + y1="64.259623" + x2="62.768221" + y2="64.259623" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6629" + id="linearGradient7017" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.888619,0,0,0.718914,-18.29768,9.471728)" + x1="61.871845" + y1="29.615223" + x2="61.871845" + y2="41.459263" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6651" + id="linearGradient7020" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.71944,0,0,0.718914,-7.696252,9.471728)" + x1="53.168766" + y1="24.244797" + x2="69.690994" + y2="24.244797" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6721" + id="linearGradient7025" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.862482,0,0,0.580718,-16.25697,11.01348)" + x1="52.717936" + y1="2.3161638" + x2="67.465988" + y2="2.3161638" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="0.17254902" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4" + inkscape:cx="61.036363" + inkscape:cy="25.863906" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1295" + inkscape:window-height="1151" + inkscape:window-x="472" + inkscape:window-y="0" + inkscape:showpageshadow="false" + stroke="#204a87" + fill="#3465a4" /> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Graphics Category</dc:title> + <dc:date /> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" /> + <dc:subject> + <rdf:Bag> + <rdf:li>graphics</rdf:li> + <rdf:li>category</rdf:li> + <rdf:li>pixel</rdf:li> + <rdf:li>vector</rdf:li> + <rdf:li>editor</rdf:li> + <rdf:li>draw</rdf:li> + <rdf:li>paint</rdf:li> + </rdf:Bag> + </dc:subject> + <dc:source>http://tango-project.org</dc:source> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/2.0/"> + <cc:permits + rdf:resource="http://web.resource.org/cc/Reproduction" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/Distribution" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Notice" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Attribution" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/ShareAlike" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + transform="matrix(1.069224,0,0,1.122975,5.769028,-7.11616)" + inkscape:r_cy="true" + inkscape:r_cx="true" + d="M 41.188971 42.343147 A 14.407301 4.0658641 0 1 1 12.374369,42.343147 A 14.407301 4.0658641 0 1 1 41.188971 42.343147 z" + sodipodi:ry="4.0658641" + sodipodi:rx="14.407301" + sodipodi:cy="42.343147" + sodipodi:cx="26.78167" + id="path6901" + style="opacity:0.3;color:#000000;fill:url(#radialGradient6903);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + style="opacity:1;color:#000000;fill:url(#linearGradient6957);fill-opacity:1;fill-rule:nonzero;stroke:#673907;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 19.651682,22.586735 L 23.717546,26.387433 C 30.905045,19.324934 41.500606,2.4101455 41.500606,2.4101455 C 41.930096,1.1856993 40.413361,0.41425264 39.654254,1.2396505 C 39.654254,1.2396505 25.964181,15.336736 19.651682,22.586735 z " + id="path6937" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="ccssc" /> + <path + style="opacity:1;color:#000000;fill:url(#linearGradient6945);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 12.050285,32.813894 L 14.296605,34.747714 L 22.789371,27.380683 L 23.064432,26.674855 L 24.158837,26.65704 C 23.721337,25.09454 21.217323,22.273585 19.342323,22.273585 L 19.424342,23.36366 L 18.754351,23.743687 L 12.050285,32.813894 z " + id="path6935" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="ccccccccc" /> + <path + sodipodi:type="arc" + style="opacity:0.3;color:#000000;fill:url(#radialGradient6981);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path6973" + sodipodi:cx="26.78167" + sodipodi:cy="42.343147" + sodipodi:rx="14.407301" + sodipodi:ry="4.0658641" + d="M 41.188971 42.343147 A 14.407301 4.0658641 0 1 1 12.374369,42.343147 A 14.407301 4.0658641 0 1 1 41.188971 42.343147 z" + inkscape:r_cx="true" + inkscape:r_cy="true" + transform="matrix(1.33837,0,0,1,-20.9264,-3.409011)" /> + <path + style="opacity:1;color:#000000;fill:url(#radialGradient6969);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 1.757709,40.723915 C 8.3630216,40.723915 13.375896,41.510516 14.324934,36.704842 C 15.089727,32.832133 9.7646096,30.976482 7.1258026,34.433791 C 4.583799,37.76427 1.757709,40.723915 1.757709,40.723915 z " + id="path6933" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="cssc" /> + <path + sodipodi:type="arc" + style="opacity:0.52777782;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path6971" + sodipodi:cx="7.624999" + sodipodi:cy="37.75" + sodipodi:rx="1.2499999" + sodipodi:ry="1.2499999" + d="M 8.8749989 37.75 A 1.2499999 1.2499999 0 1 1 6.3749992,37.75 A 1.2499999 1.2499999 0 1 1 8.8749989 37.75 z" + inkscape:r_cx="true" + inkscape:r_cy="true" + transform="matrix(0.852298,0,0,0.852298,3.733554,2.575604)" /> + <path + transform="matrix(0.787867,0,0,0.787867,14.26538,-4.723366)" + inkscape:r_cy="true" + inkscape:r_cx="true" + d="M 8.8749989 37.75 A 1.2499999 1.2499999 0 1 1 6.3749992,37.75 A 1.2499999 1.2499999 0 1 1 8.8749989 37.75 z" + sodipodi:ry="1.2499999" + sodipodi:rx="1.2499999" + sodipodi:cy="37.75" + sodipodi:cx="7.624999" + id="path6983" + style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 18.941438,26.398154 L 13.638137,32.541144" + id="path6985" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + <path + style="opacity:0.42777776;color:#000000;fill:url(#linearGradient2452);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 3.0708872,40.068976 C 3.0708872,40.068976 6.4119986,38.427155 7.8357156,35.982147 C 8.3394226,35.11711 9.4800886,35.855311 8.7773816,36.716646 C 7.2595536,38.577104 3.0708872,40.068976 3.0708872,40.068976 z " + id="path1571" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="cssc" /> + <path + sodipodi:type="arc" + style="opacity:0.53333327;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path2454" + sodipodi:cx="7.624999" + sodipodi:cy="37.75" + sodipodi:rx="1.2499999" + sodipodi:ry="1.2499999" + d="M 8.8749989 37.75 A 1.2499999 1.2499999 0 1 1 6.3749992,37.75 A 1.2499999 1.2499999 0 1 1 8.8749989 37.75 z" + inkscape:r_cx="true" + inkscape:r_cy="true" + transform="matrix(0.237867,0,0,0.237867,38.43389,-7.101028)" /> + <g + id="g7038"> + <path + inkscape:r_cy="true" + inkscape:r_cx="true" + sodipodi:nodetypes="cssssssc" + id="path6659" + d="M 35.12694,7.3500759 C 32.069084,7.4373648 29.642551,8.4061584 29.642551,9.5744095 C 29.642551,9.8521085 29.642551,12.866829 29.642551,13.144528 C 29.642551,14.370234 32.313483,15.368861 35.583971,15.368861 C 38.854457,15.368861 41.5,14.370234 41.5,13.144528 C 41.5,12.866829 41.5,9.8521085 41.5,9.5744095 C 41.5,8.3487033 38.854457,7.3500759 35.583971,7.3500759 C 35.430666,7.3500759 35.277325,7.3457826 35.12694,7.3500759 z " + style="color:#000000;fill:url(#linearGradient7025);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + transform="matrix(0.886278,0,0,0.468914,-10.44392,-9.718859)" + inkscape:r_cy="true" + inkscape:r_cx="true" + d="M 57.375 49.75 A 5.375 1.5 0 1 1 46.625,49.75 A 5.375 1.5 0 1 1 57.375 49.75 z" + sodipodi:ry="1.5" + sodipodi:rx="5.375" + sodipodi:cy="49.75" + sodipodi:cx="52" + id="path6729" + style="color:#000000;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="ccccccc" + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path6617" + d="M 27.926447,39.155467 L 28.973456,17.806032 L 31.460102,14.14252 C 33.431394,13.507083 38.186529,13.507083 39.96705,14.14252 L 42.453697,17.174393 L 45.07122,39.66078 L 27.926447,39.155467 z " + style="color:#000000;fill:url(#linearGradient7020);fill-opacity:1;fill-rule:nonzero;stroke:#5a5a5a;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="czcc" + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path6619" + d="M 28.828495,38.896108 C 28.828495,38.896108 31.419168,29.364565 36.368683,29.364565 C 41.475284,29.364565 44.537218,39.27737 44.537218,39.27737 L 28.828495,38.896108 z " + style="color:#000000;fill:url(#linearGradient7017);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path6641" + d="M 29.180138,20.498708 L 28.884225,26.97345 C 30.546714,25.895079 40.876736,25.708964 43.22785,27.361098 L 42.526302,20.763785 C 41.128342,19.810631 31.943464,19.28554 29.180138,20.498708 z " + style="color:#000000;fill:url(#linearGradient7014);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="opacity:0.5944443;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 29.048762,38.222096 L 29.926259,18.027784 L 31.766226,14.994949 C 33.584782,14.402774 37.971484,14.402774 39.614049,14.994949 L 41.57453,17.527535 L 44.026754,38.7759 L 29.048762,38.222096 z " + id="path6670" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="ccccccc" /> + <rect + ry="0.88388366" + rx="0.88388413" + inkscape:r_cy="true" + inkscape:r_cx="true" + y="37.536133" + x="26.512789" + height="3.9277525" + width="19.974413" + id="rect5742" + style="color:#000000;fill:url(#linearGradient7010);fill-opacity:1;fill-rule:nonzero;stroke:#5a5a5a;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path6668" + d="M 29.395219,17.996451 C 31.269756,16.630263 38.493153,16.341277 42.115139,17.389747 L 39.777733,14.504124 C 37.299532,13.836916 33.853386,14.128358 31.502272,14.573164 L 29.395219,17.996451 z " + style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path6833" + d="M 31.172941,17.416382 L 31.172941,32.873033 L 34.408054,29.278463 L 34.048597,16.697468 L 31.172941,17.416382 z " + style="opacity:0.86111109;color:#000000;fill:url(#linearGradient7005);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <g + style="opacity:0.57777778" + id="g7033"> + <path + style="color:#000000;fill:#e6e7e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.41111111" + d="M 31.009391,9.3809738 L 31.009391,12.621009 C 31.009391,12.621009 31.62058,12.273323 32,12.259688 L 32,9 C 31.518428,9.0694626 31.009391,9.3809738 31.009391,9.3809738 z " + id="path6666" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="ccccc" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path7029" + d="M 33.009391,8.7599648 L 33.009391,12 C 33.009391,12 33.62058,11.917479 34,11.903844 L 34,8.5889133 C 33.488399,8.6147179 33.009391,8.7599648 33.009391,8.7599648 z " + style="color:#000000;fill:#e6e7e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="color:#000000;fill:#e6e7e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.44444444" + d="M 35.009391,8.561091 L 35.009391,11.856369 C 35.009391,11.856369 35.565337,11.851187 36,11.870698 L 36,8.5336706 C 35.499448,8.4821354 35.009391,8.561091 35.009391,8.561091 z " + id="path7031" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="ccccc" /> + </g> + </g> + </g> +</svg> Added: trunk/bacula/src/qt-console/images/status-console.png =================================================================== (Binary files differ) Property changes on: trunk/bacula/src/qt-console/images/status-console.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/bacula/src/qt-console/images/status-console.svg =================================================================== --- trunk/bacula/src/qt-console/images/status-console.svg (rev 0) +++ trunk/bacula/src/qt-console/images/status-console.svg 2008-02-24 16:32:02 UTC (rev 6481) @@ -0,0 +1,606 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg1306" + sodipodi:version="0.32" + inkscape:version="0.45.1" + sodipodi:docbase="/home/dbartley/src/bacula/src/qt-console/images" + sodipodi:docname="status-console.svg" + inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/status-console.png" + inkscape:export-xdpi="57.226509" + inkscape:export-ydpi="57.226509" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs1308"> + <linearGradient + inkscape:collect="always" + id="linearGradient2223"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2225" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2229" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2223" + id="linearGradient2231" + x1="35.694206" + y1="37.333858" + x2="15.044075" + y2="5.9588566" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.8401558,0,0,0.6712566,-1.2511777,-0.869728)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2180"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2182" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2184" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2180" + id="linearGradient1378" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.809547,0,0,1.750325,-16.00036,-15.78719)" + x1="8.8207808" + y1="12.53757" + x2="12.499243" + y2="24.238262" /> + <linearGradient + id="linearGradient2222"> + <stop + style="stop-color:#5187d6;stop-opacity:1;" + offset="0" + id="stop2224" /> + <stop + style="stop-color:#1e4580;stop-opacity:1;" + offset="1" + id="stop2227" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2222" + id="radialGradient2229" + cx="23.994133" + cy="32.266911" + fx="23.994133" + fy="32.266911" + r="19.088932" + gradientTransform="matrix(1.775581,0,0,1.12776,-23.97844,-16.398126)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5031" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5060"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop5062" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5064" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5029" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <linearGradient + id="linearGradient5048"> + <stop + style="stop-color:black;stop-opacity:0;" + offset="0" + id="stop5050" /> + <stop + id="stop5056" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5052" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5048" + id="linearGradient5027" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" + x1="302.85715" + y1="366.64789" + x2="302.85715" + y2="609.50507" /> + <linearGradient + inkscape:collect="always" + id="linearGradient6447"> + <stop + style="stop-color:#777973;stop-opacity:1;" + offset="0" + id="stop6449" /> + <stop + style="stop-color:#777973;stop-opacity:0;" + offset="1" + id="stop6451" /> + </linearGradient> + <linearGradient + id="linearGradient4254"> + <stop + style="stop-color:#616161;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop4256" /> + <stop + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop4258" /> + </linearGradient> + <linearGradient + id="linearGradient5176"> + <stop + id="stop5178" + offset="0.0000000" + style="stop-color:#a2a59c;stop-opacity:1.0000000;" /> + <stop + id="stop5180" + offset="1.0000000" + style="stop-color:#535750;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2667"> + <stop + id="stop2669" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop2671" + offset="1.0000000" + style="stop-color:#fcfcff;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="26.729263" + x2="17.199417" + y1="1.6537577" + x1="11.492236" + gradientTransform="matrix(0.9895345,0,0,0.6041874,9.5626046,21.074929)" + id="linearGradient2673" + xlink:href="#linearGradient2667" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2238"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2240" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2242" /> + </linearGradient> + <linearGradient + id="linearGradient2224"> + <stop + style="stop-color:#32342f;stop-opacity:0.54639173;" + offset="0.0000000" + id="stop2226" /> + <stop + style="stop-color:#32342f;stop-opacity:0;" + offset="1" + id="stop2228" /> + </linearGradient> + <linearGradient + id="linearGradient2214"> + <stop + style="stop-color:#a9aaa7;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2216" /> + <stop + style="stop-color:#676964;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2218" /> + </linearGradient> + <linearGradient + id="linearGradient2206"> + <stop + style="stop-color:#777973;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2208" /> + <stop + style="stop-color:#cbccca;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2210" /> + </linearGradient> + <linearGradient + id="linearGradient2198"> + <stop + style="stop-color:#748f48;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop2200" /> + <stop + style="stop-color:#1f2816;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop2202" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2198" + id="linearGradient2204" + x1="23.118565" + y1="9.5830288" + x2="22.440805" + y2="34.225887" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7605359,0,0,0.6511225,11.424388,19.338423)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2206" + id="linearGradient2212" + x1="29.870447" + y1="32.285740" + x2="24.841814" + y2="14.157946" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7664012,0,0,0.6421357,11.24731,19.256137)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5176" + id="linearGradient2220" + x1="8.6529236" + y1="9.5865316" + x2="21.305075" + y2="32.497993" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7664012,0,0,0.6421357,11.24731,19.256137)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2224" + id="radialGradient2230" + cx="24.041630" + cy="42.242130" + fx="24.041630" + fy="42.242130" + r="17.576654" + gradientTransform="matrix(1.000000,0.000000,0.000000,0.304598,-1.841788e-16,29.37527)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2238" + id="linearGradient2244" + x1="20.338758" + y1="19.636894" + x2="48.845253" + y2="49.730762" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7632745,0,0,0.6391298,11.342378,19.979155)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4254" + id="linearGradient4260" + x1="11.048059" + y1="9.1463490" + x2="26.178129" + y2="30.343304" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7985577,0,0,0.6674953,10.511957,19.213646)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2214" + id="linearGradient5719" + x1="40.253334" + y1="42.318577" + x2="36.451904" + y2="37.999615" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.8004925,0,0,0.5021725,10.428593,25.618506)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient6447" + id="radialGradient6453" + cx="37.495606" + cy="39.510023" + fx="37.495606" + fy="39.510023" + r="2.5100370" + gradientTransform="matrix(0.8004925,0,0,0.4974754,10.428593,25.804059)" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="0.19607843" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="5.2885695" + inkscape:cx="24" + inkscape:cy="24" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="926" + inkscape:window-height="934" + inkscape:window-x="346" + inkscape:window-y="25" + showguides="true" + inkscape:guide-bbox="true" + inkscape:showpageshadow="false" /> + <metadata + id="metadata1311"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Terminal</dc:title> + <dc:date>2005-10-15</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Andreas Nilsson</dc:title> + </cc:Agent> + </dc:creator> + <dc:subject> + <rdf:Bag> + <rdf:li>terminal</rdf:li> + <rdf:li>emulator</rdf:li> + <rdf:li>term</rdf:li> + <rdf:li>command line</rdf:li> + </rdf:Bag> + </dc:subject> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" /> + <dc:contributor> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:contributor> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/2.0/"> + <cc:permits + rdf:resource="http://web.resource.org/cc/Reproduction" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/Distribution" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Notice" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Attribution" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/ShareAlike" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <g + id="g5022" + transform="matrix(1.9648081e-2,0,0,1.4070548e-2,47.366273,45.693079)"> + <rect + y="-150.69685" + x="-1559.2523" + height="478.35718" + width="1339.6335" + id="rect4173" + style="opacity:0.40206185;color:#000000;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="cccc" + id="path5058" + d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z " + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z " + id="path5018" + sodipodi:nodetypes="cccc" /> + </g> + <rect + style="opacity:1;fill:url(#linearGradient2212);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2220);stroke-width:0.7346794;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1316" + width="36.018993" + height="26.295984" + x="11.631441" + y="21.527271" + rx="3.8837559" + ry="3.2713993" /> + <rect + style="opacity:1;fill:url(#linearGradient2204);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:0.73097539;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1314" + width="29.688673" + height="19.569111" + x="14.828322" + y="24.211678" + rx="1.3169824" + ry="1.1093317" /> + <g + id="g2286" + style="opacity:0.25568183" + transform="matrix(0.8004925,0,0,0.6742779,10.428593,19.166252)"> + <path + id="path1345" + d="M 8.0152033,11.500361 L 39.994145,11.500361" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.0152033,13.500361 L 39.994145,13.500361" + id="path2264" /> + <path + id="path2266" + d="M 8.0152033,15.500361 L 39.994145,15.500361" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.0152033,17.500361 L 39.994145,17.500361" + id="path2268" /> + <path + id="path2270" + d="M 8.0152033,19.500361 L 39.994145,19.500361" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.0152033,21.500361 L 39.994145,21.500361" + id="path2272" /> + <path + id="path2274" + d="M 8.0152033,23.500361 L 39.994145,23.500361" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.0152033,25.500361 L 39.994145,25.500361" + id="path2276" /> + <path + id="path2278" + d="M 8.0152033,27.500361 L 39.994145,27.500361" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.0152033,29.500361 L 39.994145,29.500361" + id="path2280" /> + <path + id="path2282" + d="M 8.0152033,31.500361 L 39.994145,31.500361" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 8.0152033,33.500361 L 39.994145,33.500361" + id="path2284" /> + </g> + <rect + style="opacity:0.76373626;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2244);stroke-width:0.7346794;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2232" + width="34.377266" + height="24.948679" + x="12.473256" + y="22.200983" + rx="3.0347047" + ry="2.5562191" /> + <path + style="font-size:18.58501053px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#6ed66e;stroke-width:0.73467979pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.27868856;font-family:Bitstream Vera Sans Mono" + d="M 19.734319,33.109909 L 19.734319,31.0504 L 26.926607,33.788504 L 26.926607,35.039909 L 19.734319,37.795975 L 19.734319,35.742585 L 25.309267,34.492569 L 19.734319,33.109909 z M 34.857733,39.870462 L 34.857733,41.201619 L 26.129637,41.201619 L 26.129637,39.870462 L 34.857733,39.870462" + id="text1340" + sodipodi:nodetypes="ccccccccccccc" /> + <path + sodipodi:nodetypes="ccccccc" + style="opacity:0.53142856;fill:url(#linearGradient2673);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 16.532659,24.560475 C 16.113773,24.560475 15.272798,24.688715 15.272798,25.252268 L 15.367296,36.389008 C 29.51359,35.739419 26.674136,30.822107 44.04928,28.358897 L 43.999061,25.431223 C 43.936412,24.672599 43.567341,24.600564 42.710148,24.605025 L 16.532659,24.560475 z " + id="path2443" /> + <rect + style="opacity:0.71428576;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.46935904;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect1340" + width="27.237585" + height="17.569975" + x="16.023602" + y="25.221615" + rx="0.094243728" + ry="0.0793842" /> + <rect + style="opacity:1;fill:url(#radialGradient6453);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5719);stroke-width:0.73468071;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5025" + width="3.2180388" + height="1.9951926" + x="38.834526" + y="44.461742" + rx="0.28673166" + ry="0.37774798" /> + <rect + style="opacity:1;fill:#93d94c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6458" + width="1.6009852" + height="1.3485558" + x="36.044353" + y="44.788815" + rx="0.44845626" + ry="0.37774763" /> + <path + sodipodi:type="arc" + style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path2300" + sodipodi:cx="28.3125" + sodipodi:cy="38.75" + sodipodi:rx="0.5625" + sodipodi:ry="0.5625" + d="M 28.875 38.75 A 0.5625 0.5625 0 1 1 27.75,38.75 A 0.5625 0.5625 0 1 1 28.875 38.75 z" + transform="matrix(0.8004925,0,0,0.6742779,13.930748,19.12411)" /> + <rect + style="opacity:1;fill:url(#radialGradient2229);fill-opacity:1;fill-rule:evenodd;stroke:#173562;stroke-width:0.90345502;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2388" + width="37.324074" + height="23.541059" + x="-0.036964219" + y="0.49202013" + rx="1.394119" + ry="0.87243021" /> + <g + id="g1372" + transform="matrix(0.8226489,0,0,0.7703433,-1.1843127,-2.931773)"> + <path + sodipodi:nodetypes="ccccccccccccccccc" + id="path2188" + d="M 12.390689,20.935247 L 6.3688614,20.935247 L 6.3688614,22.152253 L 14.087646,22.152253 L 15.493568,16.239132 L 18.956082,29.936652 L 22.164804,19.116952 L 25.059348,25.028755 L 28.946308,21.516786 L 41.654736,21.516786 L 41.654736,19.457141 L 28.505235,19.457141 L 25.335019,22.596741 L 22.059557,15.937588 L 19.049723,24.112486 L 15.78119,11.248712 L 12.390689,20.935247 z " + style="opacity:1;fill:#ecffd9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.41618497" /> + <g + id="g1366"> + <path + sodipodi:nodetypes="ccccccccccccccccc" + id="path3088" + d="M 11.515689,20.012278 L 6.3688614,20.012278 L 6.3688614,23.061029 L 14.962646,22.936029 L 15.618568,19.893387 L 18.963229,32.601726 L 22.539804,21.135091 L 25.059348,26.551191 L 29.321308,22.442609 L 41.654736,22.317609 L 40.904736,18.408071 L 28.505235,18.283071 L 25.460019,21.456026 L 22.059557,13.665616 L 19.424723,20.604266 L 15.90619,8.333659 L 11.515689,20.012278 z " + style="opacity:0.38068183;fill:#ecffd9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.41618497" /> + <path + style="opacity:0.43181817;fill:url(#linearGradient1378);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 6.84375,6.96875 L 6.84375,15.795073 C 10.513653,16.483179 14.582567,16.875 18.875,16.875 C 27.810295,16.875 35.812258,15.21019 41.15625,12.596829 L 41.15625,6.96875 L 6.84375,6.96875 z " + id="rect2178" + sodipodi:nodetypes="ccsccc" /> + </g> + </g> + <rect + ry="1.3228875" + rx="2.1139376" + y="2.2420583" + x="2.3776248" + height="20.571449" + width="33.060009" + id="rect2221" + style="opacity:0.57386361;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2231);stroke-width:0.75097263;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> +</svg> Modified: trunk/bacula/src/qt-console/images/status.png =================================================================== (Binary files differ) Added: trunk/bacula/src/qt-console/images/status.svg =================================================================== --- trunk/bacula/src/qt-console/images/status.svg (rev 0) +++ trunk/bacula/src/qt-console/images/status.svg 2008-02-24 16:32:02 UTC (rev 6481) @@ -0,0 +1,380 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg1306" + sodipodi:version="0.32" + inkscape:version="0.43" + sodipodi:docbase="/home/dbartley/src/bacula/src/qt-console/images" + sodipodi:docname="graph1.svg" + inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/graph1.png" + inkscape:export-xdpi="60" + inkscape:export-ydpi="60"> + <defs + id="defs1308"> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5031" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5060"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop5062" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5064" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5060" + id="radialGradient5029" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" + cx="605.71429" + cy="486.64789" + fx="605.71429" + fy="486.64789" + r="117.14286" /> + <linearGradient + id="linearGradient5048"> + <stop + style="stop-color:black;stop-opacity:0;" + offset="0" + id="stop5050" /> + <stop + id="stop5056" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop5052" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5048" + id="linearGradient5027" + ... [truncated message content] |
From: <bar...@us...> - 2008-03-09 15:10:41
|
Revision: 6565 http://bacula.svn.sourceforge.net/bacula/?rev=6565&view=rev Author: bartleyd2 Date: 2008-03-09 08:10:43 -0700 (Sun, 09 Mar 2008) Log Message: ----------- Add new status client window. Modified Paths: -------------- trunk/bacula/src/qt-console/bat.pro.in trunk/bacula/src/qt-console/clients/clients.cpp trunk/bacula/src/qt-console/clients/clients.h trunk/bacula/src/qt-console/clients/clients.ui Added Paths: ----------- trunk/bacula/src/qt-console/status/clientstat.cpp trunk/bacula/src/qt-console/status/clientstat.h trunk/bacula/src/qt-console/status/clientstat.ui Modified: trunk/bacula/src/qt-console/bat.pro.in =================================================================== --- trunk/bacula/src/qt-console/bat.pro.in 2008-03-09 14:35:16 UTC (rev 6564) +++ trunk/bacula/src/qt-console/bat.pro.in 2008-03-09 15:10:43 UTC (rev 6565) @@ -44,6 +44,7 @@ FORMS += help/help.ui FORMS += jobgraphs/jobplotcontrols.ui FORMS += status/dirstat.ui +FORMS += status/clientstat.ui # Main directory HEADERS += mainwin.h bat.h bat_conf.h qstd.h pages.h @@ -129,6 +130,10 @@ HEADERS += status/dirstat.h SOURCES += status/dirstat.cpp +## Status Client +HEADERS += status/clientstat.h +SOURCES += status/clientstat.cpp + INSTALLS += bins INSTALLS += confs Modified: trunk/bacula/src/qt-console/clients/clients.cpp =================================================================== --- trunk/bacula/src/qt-console/clients/clients.cpp 2008-03-09 14:35:16 UTC (rev 6564) +++ trunk/bacula/src/qt-console/clients/clients.cpp 2008-03-09 15:10:43 UTC (rev 6565) @@ -40,6 +40,7 @@ #include "bat.h" #include "clients/clients.h" #include "run/run.h" +#include "status/clientstat.h" Clients::Clients() { @@ -163,6 +164,7 @@ if (treedepth == 1){ mp_treeWidget->removeAction(actionListJobsofClient); mp_treeWidget->removeAction(actionStatusClientInConsole); + mp_treeWidget->removeAction(actionStatusClientWindow); mp_treeWidget->removeAction(actionPurgeJobs); mp_treeWidget->removeAction(actionPrune); } @@ -175,6 +177,7 @@ m_currentlyselected=currentwidgetitem->text(0); mp_treeWidget->addAction(actionListJobsofClient); mp_treeWidget->addAction(actionStatusClientInConsole); + mp_treeWidget->addAction(actionStatusClientWindow); mp_treeWidget->addAction(actionPurgeJobs); mp_treeWidget->addAction(actionPrune); } @@ -200,6 +203,8 @@ SLOT(showJobs())); connect(actionStatusClientInConsole, SIGNAL(triggered()), this, SLOT(consoleStatusClient())); + connect(actionStatusClientWindow, SIGNAL(triggered()), this, + SLOT(statusClientWindow())); connect(actionPurgeJobs, SIGNAL(triggered()), this, SLOT(consolePurgeJobs())); connect(actionPrune, SIGNAL(triggered()), this, @@ -270,3 +275,11 @@ { new prunePage("", m_currentlyselected); } + +/* + * Function responding to action to create new client status window + */ +void Clients::statusClientWindow() +{ + new ClientStat(m_currentlyselected); +} Modified: trunk/bacula/src/qt-console/clients/clients.h =================================================================== --- trunk/bacula/src/qt-console/clients/clients.h 2008-03-09 14:35:16 UTC (rev 6564) +++ trunk/bacula/src/qt-console/clients/clients.h 2008-03-09 15:10:43 UTC (rev 6565) @@ -55,6 +55,7 @@ void populateTree(); void showJobs(); void consoleStatusClient(); + void statusClientWindow(); void consolePurgeJobs(); void prune(); Modified: trunk/bacula/src/qt-console/clients/clients.ui =================================================================== --- trunk/bacula/src/qt-console/clients/clients.ui 2008-03-09 14:35:16 UTC (rev 6564) +++ trunk/bacula/src/qt-console/clients/clients.ui 2008-03-09 15:10:43 UTC (rev 6565) @@ -13,14 +13,32 @@ <string>Client Tree</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > - <widget class="QTreeWidget" name="mp_treeWidget" /> + <widget class="QTreeWidget" name="mp_treeWidget" > + <column> + <property name="text" > + <string>1</string> + </property> + </column> + </widget> </item> </layout> <action name="actionRefreshClients" > @@ -78,6 +96,14 @@ <string>Open the diaolog to prune for this client.</string> </property> </action> + <action name="actionStatusClientWindow" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/status.png</iconset> + </property> + <property name="text" > + <string>Status Client Window</string> + </property> + </action> </widget> <resources> <include location="../main.qrc" /> Added: trunk/bacula/src/qt-console/status/clientstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/clientstat.cpp (rev 0) +++ trunk/bacula/src/qt-console/status/clientstat.cpp 2008-03-09 15:10:43 UTC (rev 6565) @@ -0,0 +1,306 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2008 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id: clientstat.cpp 5880 2007-11-09 01:20:40Z bartleyd2 $ + * + * Dirk Bartley, March 2007 + */ + +#include <QAbstractEventDispatcher> +#include <QTableWidgetItem> +#include "bat.h" +#include "clientstat.h" + +/* + * .status client=XXX header + * .status client=XXX running + * .status client=XXX terminated + */ + +/* + * Constructor for the class + */ +ClientStat::ClientStat(QString &client) +{ + m_client = client; + setupUi(this); + m_name = tr("Director Status"); + m_closeable = true; + pgInitialize(); + QTreeWidgetItem* thisitem = mainWin->getFromHash(this); + thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/status.png"))); + m_cursor = new QTextCursor(textEdit->document()); + + readSettings(); + dockPage(); + m_timer = new QTimer(this); + QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered())); + m_timer->start(mainWin->m_refreshStatusDirInterval*1000); + + createConnections(); +} + +void ClientStat::getFont() +{ + QFont font = textEdit->font(); + + QString dirname; + m_console->getDirResName(dirname); + QSettings settings(dirname, "bat"); + settings.beginGroup("Console"); + font.setFamily(settings.value("consoleFont", "Courier").value<QString>()); + font.setPointSize(settings.value("consolePointSize", 10).toInt()); + font.setFixedPitch(settings.value("consoleFixedPitch", true).toBool()); + settings.endGroup(); + textEdit->setFont(font); +} + +/* + * Write the m_splitter settings in the destructor + */ +ClientStat::~ClientStat() +{ + writeSettings(); +} + +/* + * Populate all tables and header widgets + */ +void ClientStat::populateAll() +{ + if (!m_console->preventInUseConnect()) + return; + populateHeader(); + populateTerminated(); + populateRunning(); +} + +/* + * Timer is triggered, see if is current and repopulate. + */ +void ClientStat::timerTriggered() +{ + bool iscurrent = mainWin->stackedWidget->currentIndex() == mainWin->stackedWidget->indexOf(this); + if (((isDocked() && iscurrent) || (!isDocked())) && mainWin->m_refreshStatusDir) { + if (m_console->is_ready()) + populateAll(); + } +} + +/* + * Populate header text widget + */ +void ClientStat::populateHeader() +{ + QString command = QString(".status client=\"" + m_client + "\" header"); + QStringList results; + textEdit->clear(); + + if (m_console->dir_cmd(command, results)) { + foreach (QString line, results) { + line += "\n"; + textEdit->insertPlainText(line); + } + } +} + +/* + * Populate teminated table + */ +void ClientStat::populateTerminated() +{ + QString command = QString(".status client=\"" + m_client + "\" terminated"); + QStringList results; + QBrush blackBrush(Qt::black); + + terminatedTable->clear(); + QStringList headerlist = (QStringList() + << tr("Job Id") << tr("Job Level") << tr("Job Files") + << tr("Job Bytes") << tr("Job Status") << tr("Job Time") + << tr("Job Name")); + QStringList flaglist = (QStringList() + << "R" << "L" << "R" << "R" << "LC" + << "L" << "L"); + + terminatedTable->setColumnCount(headerlist.size()); + terminatedTable->setHorizontalHeaderLabels(headerlist); + + if (m_console->dir_cmd(command, results)) { + int row = 0; + QTableWidgetItem* p_tableitem; + terminatedTable->setRowCount(results.size()); + foreach (QString line, results) { + /* Iterate through the record returned from the query */ + QStringList fieldlist = line.split("\t"); + int column = 0; + QString statusCode(""); + /* Iterate through fields in the record */ + foreach (QString field, fieldlist) { + field = field.trimmed(); /* strip leading & trailing spaces */ + p_tableitem = new QTableWidgetItem(field, 1); + p_tableitem->setForeground(blackBrush); + p_tableitem->setFlags(0); + if (flaglist[column].contains("R")) + p_tableitem->setTextAlignment(Qt::AlignRight); + if (flaglist[column].contains("C")) + if (field == "OK") + p_tableitem->setBackground(Qt::green); + else + p_tableitem->setBackground(Qt::red); + terminatedTable->setItem(row, column, p_tableitem); + column += 1; + } + row += 1; + } + } + terminatedTable->resizeColumnsToContents(); + terminatedTable->resizeRowsToContents(); + terminatedTable->verticalHeader()->hide(); +} + +/* + * Populate running table + */ +void ClientStat::populateRunning() +{ + QString command = QString(".status client=\"" + m_client + "\" running"); + Pmsg1(000, "Clients running cmd : %s\n",command.toUtf8().data()); + QStringList results; + QBrush blackBrush(Qt::black); + + runningTable->clear(); + QStringList headerlist = (QStringList() + << tr("Job Id") << tr("Job Level") << tr("Job Data") << tr("Job Info")); + + runningTable->setColumnCount(headerlist.size()); + runningTable->setHorizontalHeaderLabels(headerlist); + + if (m_console->dir_cmd(command, results)) { + int row = 0; + QTableWidgetItem* p_tableitem; + runningTable->setRowCount(results.size()); + foreach (QString line, results) { + /* Iterate through the record returned from the query */ + QStringList fieldlist = line.split("\t"); + int column = 0; + QString statusCode(""); + /* Iterate through fields in the record */ + foreach (QString field, fieldlist) { + field = field.trimmed(); /* strip leading & trailing spaces */ + p_tableitem = new QTableWidgetItem(field, 1); + p_tableitem->setForeground(blackBrush); + p_tableitem->setFlags(0); + runningTable->setItem(row, column, p_tableitem); + column += 1; + } + row += 1; + } + } + runningTable->resizeColumnsToContents(); + runningTable->resizeRowsToContents(); + runningTable->verticalHeader()->hide(); +} + +/* + * When the treeWidgetItem in the page selector tree is singleclicked, Make sure + * The tree has been populated. + */ +void ClientStat::PgSeltreeWidgetClicked() +{ + if (!m_populated) { + populateAll(); + m_populated=true; + } +} + +/* + * Virtual function override of pages function which is called when this page + * is visible on the stack + */ +void ClientStat::currentStackItem() +{ + populateAll(); + if (!m_populated) { + m_populated=true; + } +} + +/* + * Function to create connections for context sensitive menu for this and + * the page selector + */ +void ClientStat::createConnections() +{ + connect(actionRefresh, SIGNAL(triggered()), this, + SLOT(populateAll())); + connect(actionCancelRunning, SIGNAL(triggered()), this, + SLOT(consoleCancelJob())); + + runningTable->setContextMenuPolicy(Qt::ActionsContextMenu); + runningTable->addAction(actionRefresh); + runningTable->addAction(actionCancelRunning); +} + +/* + * Save user settings associated with this page + */ +void ClientStat::writeSettings() +{ + QSettings settings(m_console->m_dir->name(), "bat"); + settings.beginGroup(m_groupText); + settings.setValue(m_splitText, splitter->saveState()); + settings.endGroup(); +} + +/* + * Read and restore user settings associated with this page + */ +void ClientStat::readSettings() +{ + m_groupText = "ClientStatPage"; + m_splitText = "splitterSizes_0"; + QSettings settings(m_console->m_dir->name(), "bat"); + settings.beginGroup(m_groupText); + splitter->restoreState(settings.value(m_splitText).toByteArray()); + settings.endGroup(); +} + +/* + * Cancel a running job + */ +void ClientStat::consoleCancelJob() +{ + int currentrow = runningTable->currentRow(); + QTableWidgetItem *item = runningTable->item(currentrow, 0); + if (item) { + QString text = item->text(); + QString cmd("cancel jobid="); + cmd += text; + consoleCommand(cmd); + } +} Added: trunk/bacula/src/qt-console/status/clientstat.h =================================================================== --- trunk/bacula/src/qt-console/status/clientstat.h (rev 0) +++ trunk/bacula/src/qt-console/status/clientstat.h 2008-03-09 15:10:43 UTC (rev 6565) @@ -0,0 +1,73 @@ +#ifndef _CLIENTSTAT_H_ +#define _CLIENTSTAT_H_ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2007 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id: clientstat.h 5372 2007-08-17 12:17:04Z kerns $ + * + * Dirk Bartley, March 2007 + */ + +#include <QtGui> +#include "ui_clientstat.h" +#include "console.h" +#include "pages.h" + +class ClientStat : public Pages, public Ui::ClientStatForm +{ + Q_OBJECT + +public: + ClientStat(QString&); + ~ClientStat(); + virtual void PgSeltreeWidgetClicked(); + virtual void currentStackItem(); + +public slots: + void populateHeader(); + void populateTerminated(); + void populateRunning(); + void populateAll(); + +private slots: + void timerTriggered(); + void consoleCancelJob(); + +private: + void createConnections(); + void writeSettings(); + void readSettings(); + bool m_populated; + QTextCursor *m_cursor; + void getFont(); + QString m_groupText, m_splitText; + QTimer *m_timer; + QString m_client; +}; + +#endif /* _CLIENTSTAT_H_ */ Added: trunk/bacula/src/qt-console/status/clientstat.ui =================================================================== --- trunk/bacula/src/qt-console/status/clientstat.ui (rev 0) +++ trunk/bacula/src/qt-console/status/clientstat.ui 2008-03-09 15:10:43 UTC (rev 6565) @@ -0,0 +1,198 @@ +<ui version="4.0" > + <class>ClientStatForm</class> + <widget class="QWidget" name="ClientStatForm" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>504</width> + <height>410</height> + </rect> + </property> + <property name="windowTitle" > + <string>Form</string> + </property> + <layout class="QGridLayout" > + <property name="leftMargin" > + <number>9</number> + </property> + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > + <number>6</number> + </property> + <property name="verticalSpacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QSplitter" name="splitter" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <widget class="QTextEdit" name="textEdit" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > + <horstretch>200</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize" > + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="maximumSize" > + <size> + <width>16777215</width> + <height>100</height> + </size> + </property> + <property name="sizeIncrement" > + <size> + <width>1</width> + <height>0</height> + </size> + </property> + <property name="focusPolicy" > + <enum>Qt::StrongFocus</enum> + </property> + <property name="acceptDrops" > + <bool>false</bool> + </property> + <property name="toolTip" > + <string comment="Joblog Window" /> + </property> + <property name="statusTip" > + <string comment="Joblog Window" /> + </property> + <property name="whatsThis" > + <string comment="Joblog Window" /> + </property> + <property name="horizontalScrollBarPolicy" > + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="autoFormatting" > + <set>QTextEdit::AutoNone</set> + </property> + <property name="tabChangesFocus" > + <bool>false</bool> + </property> + <property name="documentTitle" > + <string comment="Joblog Window" /> + </property> + <property name="lineWrapMode" > + <enum>QTextEdit::NoWrap</enum> + </property> + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + <widget class="QWidget" name="layoutWidget_2" > + <layout class="QVBoxLayout" > + <property name="spacing" > + <number>6</number> + </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <item> + <widget class="QLabel" name="runningLabel" > + <property name="layoutDirection" > + <enum>Qt::LeftToRight</enum> + </property> + <property name="text" > + <string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:13pt; font-weight:600;">Running Jobs</span></p></body></html></string> + </property> + <property name="alignment" > + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="runningTable" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="layoutWidget" > + <layout class="QVBoxLayout" > + <property name="spacing" > + <number>6</number> + </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <item> + <widget class="QLabel" name="terminatedLabel" > + <property name="layoutDirection" > + <enum>Qt::LeftToRight</enum> + </property> + <property name="text" > + <string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:13pt; font-weight:600;">Terminated Jobs</span></p></body></html></string> + </property> + <property name="alignment" > + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="terminatedTable" /> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + <action name="actionRefresh" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/view-refresh.png</iconset> + </property> + <property name="text" > + <string>Refresh</string> + </property> + </action> + <action name="actionCancelRunning" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/utilities-terminal.png</iconset> + </property> + <property name="text" > + <string>Cancel Running Job</string> + </property> + </action> + </widget> + <resources> + <include location="../main.qrc" /> + </resources> + <connections/> +</ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-03-09 17:10:31
|
Revision: 6567 http://bacula.svn.sourceforge.net/bacula/?rev=6567&view=rev Author: bartleyd2 Date: 2008-03-09 10:10:35 -0700 (Sun, 09 Mar 2008) Log Message: ----------- Change the icon on the graph button in joblist. Get new client status window to show up in the page selector as a child of the client window. Modified Paths: -------------- trunk/bacula/src/qt-console/clients/clients.cpp trunk/bacula/src/qt-console/joblist/joblist.ui trunk/bacula/src/qt-console/status/clientstat.cpp trunk/bacula/src/qt-console/status/clientstat.h Modified: trunk/bacula/src/qt-console/clients/clients.cpp =================================================================== --- trunk/bacula/src/qt-console/clients/clients.cpp 2008-03-09 15:57:25 UTC (rev 6566) +++ trunk/bacula/src/qt-console/clients/clients.cpp 2008-03-09 17:10:35 UTC (rev 6567) @@ -281,5 +281,6 @@ */ void Clients::statusClientWindow() { - new ClientStat(m_currentlyselected); + QTreeWidgetItem *parentItem = mainWin->getFromHash(this); + new ClientStat(m_currentlyselected, parentItem); } Modified: trunk/bacula/src/qt-console/joblist/joblist.ui =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.ui 2008-03-09 15:57:25 UTC (rev 6566) +++ trunk/bacula/src/qt-console/joblist/joblist.ui 2008-03-09 17:10:35 UTC (rev 6567) @@ -44,20 +44,44 @@ <enum>QFrame::Raised</enum> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="4" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="1" column="1" > <spacer> <property name="orientation" > @@ -76,12 +100,24 @@ </item> <item row="1" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>3</number> </property> - <property name="spacing" > + <property name="topMargin" > <number>3</number> </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> + <property name="horizontalSpacing" > + <number>3</number> + </property> + <property name="verticalSpacing" > + <number>3</number> + </property> <item row="0" column="0" > <widget class="QPushButton" name="refreshButton" > <property name="text" > @@ -98,7 +134,7 @@ <string>Graph</string> </property> <property name="icon" > - <iconset resource="../main.qrc" >:/images/graph1.png</iconset> + <iconset resource="../main.qrc" >:/images/applications-graphics.png</iconset> </property> </widget> </item> @@ -106,12 +142,21 @@ </item> <item row="0" column="0" colspan="2" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="fileSetLabel" > <property name="maximumSize" > @@ -134,20 +179,38 @@ </item> <item row="0" column="3" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="statusLabel" > <property name="text" > @@ -162,12 +225,21 @@ </item> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="purgedLabel" > <property name="text" > @@ -184,20 +256,38 @@ </item> <item row="0" column="0" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QCheckBox" name="limitCheckBox" > <property name="text" > @@ -207,12 +297,12 @@ </item> <item> <widget class="QSpinBox" name="limitSpinBox" > + <property name="minimum" > + <number>1</number> + </property> <property name="maximum" > <number>10000</number> </property> - <property name="minimum" > - <number>1</number> - </property> <property name="singleStep" > <number>25</number> </property> @@ -222,12 +312,21 @@ </item> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QCheckBox" name="daysCheckBox" > <property name="text" > @@ -248,20 +347,38 @@ </item> <item row="0" column="1" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="clientsLabel" > <property name="text" > @@ -276,12 +393,21 @@ </item> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="volumeLabel" > <property name="text" > @@ -298,20 +424,38 @@ </item> <item row="0" column="2" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="jobLabel" > <property name="text" > @@ -326,12 +470,21 @@ </item> <item> <layout class="QVBoxLayout" > - <property name="margin" > - <number>3</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>3</number> + </property> + <property name="topMargin" > + <number>3</number> + </property> + <property name="rightMargin" > + <number>3</number> + </property> + <property name="bottomMargin" > + <number>3</number> + </property> <item> <widget class="QLabel" name="levelLabel" > <property name="text" > Modified: trunk/bacula/src/qt-console/status/clientstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/clientstat.cpp 2008-03-09 15:57:25 UTC (rev 6566) +++ trunk/bacula/src/qt-console/status/clientstat.cpp 2008-03-09 17:10:35 UTC (rev 6567) @@ -45,13 +45,13 @@ /* * Constructor for the class */ -ClientStat::ClientStat(QString &client) +ClientStat::ClientStat(QString &client, QTreeWidgetItem *parentTreeWidgetItem) { m_client = client; setupUi(this); - m_name = tr("Director Status"); + m_name = tr("Client Status"); m_closeable = true; - pgInitialize(); + pgInitialize(parentTreeWidgetItem); QTreeWidgetItem* thisitem = mainWin->getFromHash(this); thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/status.png"))); m_cursor = new QTextCursor(textEdit->document()); @@ -63,6 +63,7 @@ m_timer->start(mainWin->m_refreshStatusDirInterval*1000); createConnections(); + setCurrent(); } void ClientStat::getFont() Modified: trunk/bacula/src/qt-console/status/clientstat.h =================================================================== --- trunk/bacula/src/qt-console/status/clientstat.h 2008-03-09 15:57:25 UTC (rev 6566) +++ trunk/bacula/src/qt-console/status/clientstat.h 2008-03-09 17:10:35 UTC (rev 6567) @@ -43,7 +43,7 @@ Q_OBJECT public: - ClientStat(QString&); + ClientStat(QString&, QTreeWidgetItem*); ~ClientStat(); virtual void PgSeltreeWidgetClicked(); virtual void currentStackItem(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-03-12 02:50:47
|
Revision: 6590 http://bacula.svn.sourceforge.net/bacula/?rev=6590&view=rev Author: bartleyd2 Date: 2008-03-11 19:50:53 -0700 (Tue, 11 Mar 2008) Log Message: ----------- Add a storage status page. Modified Paths: -------------- trunk/bacula/src/qt-console/bat.pro.in trunk/bacula/src/qt-console/storage/storage.cpp trunk/bacula/src/qt-console/storage/storage.h trunk/bacula/src/qt-console/storage/storage.ui Added Paths: ----------- trunk/bacula/src/qt-console/status/storstat.cpp trunk/bacula/src/qt-console/status/storstat.h trunk/bacula/src/qt-console/status/storstat.ui Modified: trunk/bacula/src/qt-console/bat.pro.in =================================================================== --- trunk/bacula/src/qt-console/bat.pro.in 2008-03-12 00:37:50 UTC (rev 6589) +++ trunk/bacula/src/qt-console/bat.pro.in 2008-03-12 02:50:53 UTC (rev 6590) @@ -45,6 +45,7 @@ FORMS += jobgraphs/jobplotcontrols.ui FORMS += status/dirstat.ui FORMS += status/clientstat.ui +FORMS += status/storstat.ui # Main directory HEADERS += mainwin.h bat.h bat_conf.h qstd.h pages.h @@ -134,6 +135,10 @@ HEADERS += status/clientstat.h SOURCES += status/clientstat.cpp +## Status Client +HEADERS += status/storstat.h +SOURCES += status/storstat.cpp + INSTALLS += bins INSTALLS += confs Added: trunk/bacula/src/qt-console/status/storstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/storstat.cpp (rev 0) +++ trunk/bacula/src/qt-console/status/storstat.cpp 2008-03-12 02:50:53 UTC (rev 6590) @@ -0,0 +1,375 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2008 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id: storstat.cpp 5880 2007-11-09 01:20:40Z bartleyd2 $ + * + * Dirk Bartley, March 2007 + */ + +#include <QAbstractEventDispatcher> +#include <QTableWidgetItem> +#include "bat.h" +#include "storstat.h" + +/* +.status storage=<storage-name> <keyword> +where <storage-name> is the storage name in the Director, and +<keyword> is one of the following: +header +running +terminated + +waitreservation +devices +volumes +spooling +*/ + +/* + * Constructor for the class + */ +StorStat::StorStat(QString &storage, QTreeWidgetItem *parentTreeWidgetItem) +{ + m_storage = storage; + setupUi(this); + m_name = tr("Storage Status"); + m_closeable = true; + pgInitialize(parentTreeWidgetItem); + QTreeWidgetItem* thisitem = mainWin->getFromHash(this); + thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/status.png"))); + m_cursor = new QTextCursor(textEditHeader->document()); + + readSettings(); + dockPage(); + m_timer = new QTimer(this); + QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered())); + m_timer->start(mainWin->m_refreshStatusDirInterval*1000); + + createConnections(); + setCurrent(); +} + +void StorStat::getFont() +{ + QFont font = textEditHeader->font(); + + QString dirname; + m_console->getDirResName(dirname); + QSettings settings(dirname, "bat"); + settings.beginGroup("Console"); + font.setFamily(settings.value("consoleFont", "Courier").value<QString>()); + font.setPointSize(settings.value("consolePointSize", 10).toInt()); + font.setFixedPitch(settings.value("consoleFixedPitch", true).toBool()); + settings.endGroup(); + textEditHeader->setFont(font); +} + +/* + * Write the m_splitter settings in the destructor + */ +StorStat::~StorStat() +{ + writeSettings(); +} + +/* + * Populate all tables and header widgets + */ +void StorStat::populateAll() +{ + if (!m_console->preventInUseConnect()) + return; + populateHeader(); + populateTerminated(); + populateRunning(); + populateWaitReservation(); + populateDevices(); + populateVolumes(); + populateSpooling(); +} + +/* + * Timer is triggered, see if is current and repopulate. + */ +void StorStat::timerTriggered() +{ + bool iscurrent = mainWin->stackedWidget->currentIndex() == mainWin->stackedWidget->indexOf(this); + if (((isDocked() && iscurrent) || (!isDocked())) && mainWin->m_refreshStatusDir) { + if (m_console->is_ready()) + populateAll(); + } +} + +/* + * Populate header text widget + */ +void StorStat::populateHeader() +{ + QString command = QString(".status storage=\"" + m_storage + "\" header"); + QStringList results; + textEditHeader->clear(); + + if (m_console->dir_cmd(command, results)) { + foreach (QString line, results) { + line += "\n"; + textEditHeader->insertPlainText(line); + } + } +} + +void StorStat::populateWaitReservation() +{ + QString command = QString(".status storage=\"" + m_storage + "\" waitreservation"); + QStringList results; + textEditWaitReservation->clear(); + + if (m_console->dir_cmd(command, results)) { + foreach (QString line, results) { + line += "\n"; + textEditWaitReservation->insertPlainText(line); + } + } +} + +void StorStat::populateDevices() +{ + QString command = QString(".status storage=\"" + m_storage + "\" devices"); + QStringList results; + textEditDevices->clear(); + + if (m_console->dir_cmd(command, results)) { + foreach (QString line, results) { + line += "\n"; + textEditDevices->insertPlainText(line); + } + } +} + +void StorStat::populateVolumes() +{ + QString command = QString(".status storage=\"" + m_storage + "\" volumes"); + QStringList results; + textEditVolumes->clear(); + + if (m_console->dir_cmd(command, results)) { + foreach (QString line, results) { + line += "\n"; + textEditVolumes->insertPlainText(line); + } + } +} + +void StorStat::populateSpooling() +{ + QString command = QString(".status storage=\"" + m_storage + "\" spooling"); + QStringList results; + textEditSpooling->clear(); + + if (m_console->dir_cmd(command, results)) { + foreach (QString line, results) { + line += "\n"; + textEditSpooling->insertPlainText(line); + } + } +} + +/* + * Populate teminated table + */ +void StorStat::populateTerminated() +{ + QString command = QString(".status storage=\"" + m_storage + "\" terminated"); + QStringList results; + QBrush blackBrush(Qt::black); + + terminatedTable->clear(); + QStringList headerlist = (QStringList() + << tr("Job Id") << tr("Job Level") << tr("Job Files") + << tr("Job Bytes") << tr("Job Status") << tr("Job Time") + << tr("Job Name")); + QStringList flaglist = (QStringList() + << "R" << "L" << "R" << "R" << "LC" + << "L" << "L"); + + terminatedTable->setColumnCount(headerlist.size()); + terminatedTable->setHorizontalHeaderLabels(headerlist); + + if (m_console->dir_cmd(command, results)) { + int row = 0; + QTableWidgetItem* p_tableitem; + terminatedTable->setRowCount(results.size()); + foreach (QString line, results) { + /* Iterate through the record returned from the query */ + QStringList fieldlist = line.split("\t"); + int column = 0; + QString statusCode(""); + /* Iterate through fields in the record */ + foreach (QString field, fieldlist) { + field = field.trimmed(); /* strip leading & trailing spaces */ + p_tableitem = new QTableWidgetItem(field, 1); + p_tableitem->setForeground(blackBrush); + p_tableitem->setFlags(0); + if (flaglist[column].contains("R")) + p_tableitem->setTextAlignment(Qt::AlignRight); + if (flaglist[column].contains("C")) + if (field == "OK") + p_tableitem->setBackground(Qt::green); + else + p_tableitem->setBackground(Qt::red); + terminatedTable->setItem(row, column, p_tableitem); + column += 1; + } + row += 1; + } + } + terminatedTable->resizeColumnsToContents(); + terminatedTable->resizeRowsToContents(); + terminatedTable->verticalHeader()->hide(); +} + +/* + * Populate running table + */ +void StorStat::populateRunning() +{ + QString command = QString(".status dir running"); + QStringList results; + QBrush blackBrush(Qt::black); + + runningTable->clear(); + QStringList headerlist = (QStringList() + << tr("Job Id") << tr("Job Level") << tr("Job Data") << tr("Job Info")); + + runningTable->setColumnCount(headerlist.size()); + runningTable->setHorizontalHeaderLabels(headerlist); + + if (m_console->dir_cmd(command, results)) { + int row = 0; + QTableWidgetItem* p_tableitem; + runningTable->setRowCount(results.size()); + foreach (QString line, results) { + /* Iterate through the record returned from the query */ + QStringList fieldlist = line.split("\t"); + int column = 0; + QString statusCode(""); + /* Iterate through fields in the record */ + foreach (QString field, fieldlist) { + field = field.trimmed(); /* strip leading & trailing spaces */ + p_tableitem = new QTableWidgetItem(field, 1); + p_tableitem->setForeground(blackBrush); + p_tableitem->setFlags(0); + runningTable->setItem(row, column, p_tableitem); + column += 1; + } + row += 1; + } + } + runningTable->resizeColumnsToContents(); + runningTable->resizeRowsToContents(); + runningTable->verticalHeader()->hide(); +} + +/* + * When the treeWidgetItem in the page selector tree is singleclicked, Make sure + * The tree has been populated. + */ +void StorStat::PgSeltreeWidgetClicked() +{ + if (!m_populated) { + populateAll(); + m_populated=true; + } +} + +/* + * Virtual function override of pages function which is called when this page + * is visible on the stack + */ +void StorStat::currentStackItem() +{ + populateAll(); + if (!m_populated) { + m_populated=true; + } +} + +/* + * Function to create connections for context sensitive menu for this and + * the page selector + */ +void StorStat::createConnections() +{ + connect(actionRefresh, SIGNAL(triggered()), this, + SLOT(populateAll())); + connect(actionCancelRunning, SIGNAL(triggered()), this, + SLOT(consoleCancelJob())); + terminatedTable->setContextMenuPolicy(Qt::ActionsContextMenu); + terminatedTable->addAction(actionRefresh); + runningTable->setContextMenuPolicy(Qt::ActionsContextMenu); + runningTable->addAction(actionRefresh); + runningTable->addAction(actionCancelRunning); +} + +/* + * Save user settings associated with this page + */ +void StorStat::writeSettings() +{ + QSettings settings(m_console->m_dir->name(), "bat"); + settings.beginGroup(m_groupText); + settings.setValue(m_splitText, splitter->saveState()); + settings.endGroup(); +} + +/* + * Read and restore user settings associated with this page + */ +void StorStat::readSettings() +{ + m_groupText = "StorStatPage"; + m_splitText = "splitterSizes_0"; + QSettings settings(m_console->m_dir->name(), "bat"); + settings.beginGroup(m_groupText); + splitter->restoreState(settings.value(m_splitText).toByteArray()); + settings.endGroup(); +} + +/* + * Cancel a running job + */ +void StorStat::consoleCancelJob() +{ + int currentrow = runningTable->currentRow(); + QTableWidgetItem *item = runningTable->item(currentrow, 0); + if (item) { + QString text = item->text(); + QString cmd("cancel jobid="); + cmd += text; + consoleCommand(cmd); + } +} Added: trunk/bacula/src/qt-console/status/storstat.h =================================================================== --- trunk/bacula/src/qt-console/status/storstat.h (rev 0) +++ trunk/bacula/src/qt-console/status/storstat.h 2008-03-12 02:50:53 UTC (rev 6590) @@ -0,0 +1,78 @@ +#ifndef _STORSTAT_H_ +#define _STORSTAT_H_ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2007 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id: dirstat.h 5372 2007-08-17 12:17:04Z kerns $ + * + * Dirk Bartley, March 2007 + */ + +#include <QtGui> +#include "ui_storstat.h" +#include "console.h" +#include "pages.h" + +class StorStat : public Pages, public Ui::StorStatForm +{ + Q_OBJECT + +public: + StorStat(QString &, QTreeWidgetItem *); + ~StorStat(); + virtual void PgSeltreeWidgetClicked(); + virtual void currentStackItem(); + +public slots: + void populateHeader(); + void populateTerminated(); + void populateRunning(); + void populateWaitReservation(); + void populateDevices(); + void populateVolumes(); + void populateSpooling(); + void populateAll(); + +private slots: + void timerTriggered(); + void consoleCancelJob(); + +private: + void createConnections(); + void writeSettings(); + void readSettings(); + bool m_populated; + QTextCursor *m_cursor; + void getFont(); + QString m_groupText; + QString m_splitText; + QTimer *m_timer; + QString m_storage; +}; + +#endif /* _STORSTAT_H_ */ Added: trunk/bacula/src/qt-console/status/storstat.ui =================================================================== --- trunk/bacula/src/qt-console/status/storstat.ui (rev 0) +++ trunk/bacula/src/qt-console/status/storstat.ui 2008-03-12 02:50:53 UTC (rev 6590) @@ -0,0 +1,154 @@ +<ui version="4.0" > + <class>StorStatForm</class> + <widget class="QWidget" name="StorStatForm" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>560</width> + <height>477</height> + </rect> + </property> + <property name="windowTitle" > + <string>Form</string> + </property> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QSplitter" name="splitter" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <widget class="QTabWidget" name="tabWidget" > + <property name="currentIndex" > + <number>0</number> + </property> + <widget class="QWidget" name="tab" > + <attribute name="title" > + <string>Header</string> + </attribute> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QTextEdit" name="textEditHeader" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_2" > + <attribute name="title" > + <string>Waitreservation</string> + </attribute> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QTextEdit" name="textEditWaitReservation" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_3" > + <attribute name="title" > + <string>Devices</string> + </attribute> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QTextEdit" name="textEditDevices" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_4" > + <attribute name="title" > + <string>Volumes</string> + </attribute> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QTextEdit" name="textEditVolumes" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_5" > + <attribute name="title" > + <string>Spooling</string> + </attribute> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QTextEdit" name="textEditSpooling" /> + </item> + </layout> + </widget> + </widget> + <widget class="QWidget" name="" > + <layout class="QVBoxLayout" > + <item> + <widget class="QLabel" name="runningLabel" > + <property name="layoutDirection" > + <enum>Qt::LeftToRight</enum> + </property> + <property name="text" > + <string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:13pt; font-weight:600;">Running Jobs</span></p></body></html></string> + </property> + <property name="alignment" > + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="runningTable" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="" > + <layout class="QVBoxLayout" > + <item> + <widget class="QLabel" name="terminatedLabel" > + <property name="layoutDirection" > + <enum>Qt::LeftToRight</enum> + </property> + <property name="text" > + <string><html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:13pt; font-weight:600;">Terminated Jobs</span></p></body></html></string> + </property> + <property name="alignment" > + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="terminatedTable" /> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + <action name="actionRefresh" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/view-refresh.png</iconset> + </property> + <property name="text" > + <string>Refresh</string> + </property> + </action> + <action name="actionCancelRunning" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/utilities-terminal.png</iconset> + </property> + <property name="text" > + <string>Cancel Running Job</string> + </property> + </action> + <action name="actionDisableScheduledJob" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/utilities-terminal.png</iconset> + </property> + <property name="text" > + <string>Disable Scheduled Job</string> + </property> + </action> + </widget> + <resources> + <include location="../main.qrc" /> + </resources> + <connections/> +</ui> Modified: trunk/bacula/src/qt-console/storage/storage.cpp =================================================================== --- trunk/bacula/src/qt-console/storage/storage.cpp 2008-03-12 00:37:50 UTC (rev 6589) +++ trunk/bacula/src/qt-console/storage/storage.cpp 2008-03-12 02:50:53 UTC (rev 6590) @@ -40,7 +40,8 @@ #include "bat.h" #include "storage.h" #include "label/label.h" -#include "../mount/mount.h" +#include "mount/mount.h" +#include "status/storstat.h" Storage::Storage() { @@ -163,6 +164,7 @@ int treedepth = previouswidgetitem->data(0, Qt::UserRole).toInt(); if (treedepth == 1){ mp_treeWidget->removeAction(actionStatusStorageInConsole); + mp_treeWidget->removeAction(actionStatusStorageWindow); mp_treeWidget->removeAction(actionLabelStorage); mp_treeWidget->removeAction(actionMountStorage); mp_treeWidget->removeAction(actionUnMountStorage); @@ -179,6 +181,7 @@ m_currentStorage = currentwidgetitem->text(0); m_currentAutoChanger = currentwidgetitem->text(2).toInt(); mp_treeWidget->addAction(actionStatusStorageInConsole); + mp_treeWidget->addAction(actionStatusStorageWindow); mp_treeWidget->addAction(actionLabelStorage); mp_treeWidget->addAction(actionMountStorage); mp_treeWidget->addAction(actionUnMountStorage); @@ -186,6 +189,8 @@ QString text; text = "Status Storage \"" + m_currentStorage + "\""; actionStatusStorageInConsole->setText(text); + text = "Status Storage \"" + m_currentStorage + "\" in Window"; + actionStatusStorageWindow->setText(text); text = "Label media in Storage \"" + m_currentStorage + "\""; actionLabelStorage->setText(text); text = "Mount media in Storage \"" + m_currentStorage + "\""; @@ -235,6 +240,8 @@ SLOT(consoleUpdateSlotsScan())); connect(actionRelease, SIGNAL(triggered()), this, SLOT(consoleRelease())); + connect(actionStatusStorageWindow, SIGNAL(triggered()), this, + SLOT(statusStorageWindow())); } /* @@ -313,3 +320,12 @@ cmd += m_currentStorage; consoleCommand(cmd); } + +/* + * Open a status storage window + */ +void Storage::statusStorageWindow() +{ + QTreeWidgetItem *parentItem = mainWin->getFromHash(this); + new StorStat(m_currentStorage, parentItem); +} Modified: trunk/bacula/src/qt-console/storage/storage.h =================================================================== --- trunk/bacula/src/qt-console/storage/storage.h 2008-03-12 00:37:50 UTC (rev 6589) +++ trunk/bacula/src/qt-console/storage/storage.h 2008-03-12 02:50:53 UTC (rev 6590) @@ -60,6 +60,7 @@ void consoleUpdateSlots(); void consoleUpdateSlotsScan(); void consoleRelease(); + void statusStorageWindow(); private: void createContextMenu(); Modified: trunk/bacula/src/qt-console/storage/storage.ui =================================================================== --- trunk/bacula/src/qt-console/storage/storage.ui 2008-03-12 00:37:50 UTC (rev 6589) +++ trunk/bacula/src/qt-console/storage/storage.ui 2008-03-12 02:50:53 UTC (rev 6590) @@ -5,22 +5,40 @@ <rect> <x>0</x> <y>0</y> - <width>431</width> - <height>296</height> + <width>467</width> + <height>383</height> </rect> </property> <property name="windowTitle" > <string>Storage Tree</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > - <widget class="QTreeWidget" name="mp_treeWidget" /> + <widget class="QTreeWidget" name="mp_treeWidget" > + <column> + <property name="text" > + <string>1</string> + </property> + </column> + </widget> </item> </layout> <action name="actionRefreshStorage" > @@ -108,6 +126,14 @@ <string>Release</string> </property> </action> + <action name="actionStatusStorageWindow" > + <property name="icon" > + <iconset resource="../main.qrc" >:/images/status.png</iconset> + </property> + <property name="text" > + <string>Status Storage Window</string> + </property> + </action> </widget> <resources> <include location="../main.qrc" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-04-28 23:30:16
|
Revision: 6857 http://bacula.svn.sourceforge.net/bacula/?rev=6857&view=rev Author: bartleyd2 Date: 2008-04-28 16:30:18 -0700 (Mon, 28 Apr 2008) Log Message: ----------- Change fileset and client windows from tree widgets to table widgets. Fix a segfault on closing the window in mainwin. You may desire to look at the change to mainwin. 2 more windows to change to table widgets. Modified Paths: -------------- trunk/bacula/src/qt-console/clients/clients.cpp trunk/bacula/src/qt-console/clients/clients.h trunk/bacula/src/qt-console/clients/clients.ui trunk/bacula/src/qt-console/fileset/fileset.cpp trunk/bacula/src/qt-console/fileset/fileset.h trunk/bacula/src/qt-console/fileset/fileset.ui trunk/bacula/src/qt-console/mainwin.cpp Modified: trunk/bacula/src/qt-console/clients/clients.cpp =================================================================== --- trunk/bacula/src/qt-console/clients/clients.cpp 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/clients/clients.cpp 2008-04-28 23:30:18 UTC (rev 6857) @@ -50,7 +50,7 @@ QTreeWidgetItem* thisitem = mainWin->getFromHash(this); thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/network-server.png"))); - /* mp_treeWidget, Storage Tree Tree Widget inherited from ui_client.h */ + /* tableWidget, Storage Tree Tree Widget inherited from ui_client.h */ m_populated = false; m_checkcurwidget = true; m_closeable = false; @@ -69,36 +69,30 @@ * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ -void Clients::populateTree() +void Clients::populateTable() { - QTreeWidgetItem *clientItem, *topItem; + QTableWidgetItem *tableItem; + QBrush blackBrush(Qt::black); if (!m_console->preventInUseConnect()) return; m_checkcurwidget = false; - mp_treeWidget->clear(); + tableWidget->clear(); m_checkcurwidget = true; QStringList headerlist = (QStringList() << tr("Client Name") << tr("File Retention") << tr("Job Retention") << tr("AutoPrune") << tr("ClientId") << tr("Uname") ); - topItem = new QTreeWidgetItem(mp_treeWidget); - topItem->setText(0, tr("Clients")); - topItem->setData(0, Qt::UserRole, 0); - topItem->setExpanded(true); + tableWidget->setColumnCount(headerlist.count()); + tableWidget->setHorizontalHeaderLabels(headerlist); + tableWidget->setRowCount(m_console->client_list.count()); + tableWidget->verticalHeader()->hide(); + int row = 0; - mp_treeWidget->setColumnCount(headerlist.count()); - mp_treeWidget->setHeaderLabels(headerlist); - foreach (QString clientName, m_console->client_list){ - clientItem = new QTreeWidgetItem(topItem); - clientItem->setText(0, clientName); - clientItem->setData(0, Qt::UserRole, 1); - clientItem->setExpanded(true); - /* Set up query QString and header QStringList */ QString query(""); - query += "SELECT FileRetention, JobRetention, AutoPrune, ClientId, Uname" + query += "SELECT Name, FileRetention, JobRetention, AutoPrune, ClientId, Uname" " FROM Client" " WHERE "; query += " Name='" + clientName + "'"; @@ -118,23 +112,25 @@ /* there will only be one of these */ foreach (resultline, results) { fieldlist = resultline.split("\t"); - int index = 0; + int column = 0; /* Iterate through fields in the record */ foreach (field, fieldlist) { field = field.trimmed(); /* strip leading & trailing spaces */ - clientItem->setData(index+1, Qt::UserRole, 1); - /* Put media fields under the pool tree item */ - clientItem->setData(index+1, Qt::UserRole, 1); - clientItem->setText(index+1, field); - index++; + tableItem = new QTableWidgetItem(field, 1); + tableItem->setFlags(Qt::ItemIsSelectable); + tableItem->setForeground(blackBrush); + tableItem->setData(Qt::UserRole, 1); + tableWidget->setItem(row, column, tableItem); + column++; } } } } + row ++; } /* Resize the columns */ for(int cnter=0; cnter<headerlist.size(); cnter++) { - mp_treeWidget->resizeColumnToContents(cnter); + tableWidget->resizeColumnToContents(cnter); } } @@ -145,7 +141,7 @@ void Clients::PgSeltreeWidgetClicked() { if(!m_populated) { - populateTree(); + populateTable(); m_populated=true; } } @@ -154,32 +150,31 @@ * Added to set the context menu policy based on currently active treeWidgetItem * signaled by currentItemChanged */ -void Clients::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetItem *previouswidgetitem ) +void Clients::tableItemChanged(QTableWidgetItem *currentwidgetitem, QTableWidgetItem *previouswidgetitem ) { /* m_checkcurwidget checks to see if this is during a refresh, which will segfault */ if (m_checkcurwidget) { + int currentRow = currentwidgetitem->row(); + QTableWidgetItem *currentrowzeroitem = tableWidget->item(currentRow, 0); + m_currentlyselected = currentrowzeroitem->text(); + /* The Previous item */ if (previouswidgetitem) { /* avoid a segfault if first time */ - int treedepth = previouswidgetitem->data(0, Qt::UserRole).toInt(); - if (treedepth == 1){ - mp_treeWidget->removeAction(actionListJobsofClient); - mp_treeWidget->removeAction(actionStatusClientInConsole); - mp_treeWidget->removeAction(actionStatusClientWindow); - mp_treeWidget->removeAction(actionPurgeJobs); - mp_treeWidget->removeAction(actionPrune); - } + tableWidget->removeAction(actionListJobsofClient); + tableWidget->removeAction(actionStatusClientInConsole); + tableWidget->removeAction(actionStatusClientWindow); + tableWidget->removeAction(actionPurgeJobs); + tableWidget->removeAction(actionPrune); } - int treedepth = currentwidgetitem->data(0, Qt::UserRole).toInt(); - if (treedepth == 1){ + if (m_currentlyselected.length() != 0) { /* set a hold variable to the client name in case the context sensitive * menu is used */ - m_currentlyselected=currentwidgetitem->text(0); - mp_treeWidget->addAction(actionListJobsofClient); - mp_treeWidget->addAction(actionStatusClientInConsole); - mp_treeWidget->addAction(actionStatusClientWindow); - mp_treeWidget->addAction(actionPurgeJobs); - mp_treeWidget->addAction(actionPrune); + tableWidget->addAction(actionListJobsofClient); + tableWidget->addAction(actionStatusClientInConsole); + tableWidget->addAction(actionStatusClientWindow); + tableWidget->addAction(actionPurgeJobs); + tableWidget->addAction(actionPrune); } } } @@ -191,14 +186,16 @@ */ void Clients::createContextMenu() { - mp_treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu); - mp_treeWidget->addAction(actionRefreshClients); - connect(mp_treeWidget, SIGNAL( - currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), - this, SLOT(treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *))); + tableWidget->setContextMenuPolicy(Qt::ActionsContextMenu); + tableWidget->addAction(actionRefreshClients); + /* for the tableItemChanged to maintain m_currentJob */ + connect(tableWidget, SIGNAL( + currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)), + this, SLOT(tableItemChanged(QTableWidgetItem *, QTableWidgetItem *))); + /* connect to the action specific to this pages class */ connect(actionRefreshClients, SIGNAL(triggered()), this, - SLOT(populateTree())); + SLOT(populateTable())); connect(actionListJobsofClient, SIGNAL(triggered()), this, SLOT(showJobs())); connect(actionStatusClientInConsole, SIGNAL(triggered()), this, @@ -238,8 +235,8 @@ void Clients::currentStackItem() { if(!m_populated) { - populateTree(); - /* Create the context menu for the client tree */ + populateTable(); + /* Create the context menu for the client table */ m_populated=true; } } Modified: trunk/bacula/src/qt-console/clients/clients.h =================================================================== --- trunk/bacula/src/qt-console/clients/clients.h 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/clients/clients.h 2008-04-28 23:30:18 UTC (rev 6857) @@ -49,10 +49,10 @@ virtual void currentStackItem(); public slots: - void treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *); + void tableItemChanged(QTableWidgetItem *, QTableWidgetItem *); private slots: - void populateTree(); + void populateTable(); void showJobs(); void consoleStatusClient(); void statusClientWindow(); Modified: trunk/bacula/src/qt-console/clients/clients.ui =================================================================== --- trunk/bacula/src/qt-console/clients/clients.ui 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/clients/clients.ui 2008-04-28 23:30:18 UTC (rev 6857) @@ -5,40 +5,16 @@ <rect> <x>0</x> <y>0</y> - <width>413</width> - <height>258</height> + <width>492</width> + <height>428</height> </rect> </property> <property name="windowTitle" > <string>Client Tree</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > - <number>9</number> - </property> - <property name="topMargin" > - <number>9</number> - </property> - <property name="rightMargin" > - <number>9</number> - </property> - <property name="bottomMargin" > - <number>9</number> - </property> - <property name="horizontalSpacing" > - <number>6</number> - </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="0" column="0" > - <widget class="QTreeWidget" name="mp_treeWidget" > - <column> - <property name="text" > - <string>1</string> - </property> - </column> - </widget> + <widget class="QTableWidget" name="tableWidget" /> </item> </layout> <action name="actionRefreshClients" > Modified: trunk/bacula/src/qt-console/fileset/fileset.cpp =================================================================== --- trunk/bacula/src/qt-console/fileset/fileset.cpp 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/fileset/fileset.cpp 2008-04-28 23:30:18 UTC (rev 6857) @@ -48,7 +48,7 @@ QTreeWidgetItem* thisitem = mainWin->getFromHash(this); thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/system-file-manager.png"))); - /* mp_treeWidget, FileSet Tree Tree Widget inherited from ui_fileset.h */ + /* tableWidget, FileSet Tree Tree Widget inherited from ui_fileset.h */ m_populated = false; m_checkcurwidget = true; m_closeable = false; @@ -68,33 +68,28 @@ * The main meat of the class!! The function that querries the director and * creates the widgets with appropriate values. */ -void FileSet::populateTree() +void FileSet::populateTable() { - QTreeWidgetItem *filesetItem, *topItem; + QTableWidgetItem *tableItem; + QBrush blackBrush(Qt::black); if (!m_console->preventInUseConnect()) return; m_checkcurwidget = false; - mp_treeWidget->clear(); + tableWidget->clear(); m_checkcurwidget = true; QStringList headerlist = (QStringList() << tr("FileSet Name") << tr("FileSet Id") << tr("Create Time")); - topItem = new QTreeWidgetItem(mp_treeWidget); - topItem->setText(0, tr("FileSet")); - topItem->setData(0, Qt::UserRole, 0); - topItem->setExpanded(true); + tableWidget->setColumnCount(headerlist.count()); + tableWidget->setHorizontalHeaderLabels(headerlist); + tableWidget->setRowCount(m_console->fileset_list.count()); + tableWidget->verticalHeader()->hide(); + int row = 0; - mp_treeWidget->setColumnCount(headerlist.count()); - mp_treeWidget->setHeaderLabels(headerlist); - foreach(QString filesetName, m_console->fileset_list) { - filesetItem = new QTreeWidgetItem(topItem); - filesetItem->setText(0, filesetName); - filesetItem->setData(0, Qt::UserRole, 1); - filesetItem->setExpanded(true); /* Set up query QString and header QStringList */ QString query(""); @@ -102,7 +97,7 @@ " FROM FileSet" " WHERE "; query += " FileSet='" + filesetName + "'"; - query += " ORDER BY FileSet"; + query += " ORDER BY CreateTime DESC LIMIT 1"; QStringList results; if (mainWin->m_sqlDebug) { @@ -110,30 +105,31 @@ } if (m_console->sql_cmd(query, results)) { int resultCount = results.count(); - if (resultCount == 1){ + if (resultCount) { QString resultline; QString field; QStringList fieldlist; - /* there will only be one of these */ - foreach (resultline, results) { - fieldlist = resultline.split("\t"); - int index = 0; - /* Iterate through fields in the record */ - foreach (field, fieldlist) { - field = field.trimmed(); /* strip leading & trailing spaces */ - filesetItem->setData(index, Qt::UserRole, 1); - /* Put media fields under the pool tree item */ - filesetItem->setData(index, Qt::UserRole, 1); - filesetItem->setText(index, field); - index++; - } + /* only use the last one */ + resultline = results[resultCount - 1]; + fieldlist = resultline.split("\t"); + int column = 0; + /* Iterate through fields in the record */ + foreach (field, fieldlist) { + field = field.trimmed(); /* strip leading & trailing spaces */ + tableItem = new QTableWidgetItem(field, 1); + tableItem->setFlags(Qt::ItemIsSelectable); + tableItem->setForeground(blackBrush); + tableItem->setData(Qt::UserRole, 1); + tableWidget->setItem(row, column, tableItem); + column++; } } } + row++; } /* Resize the columns */ for (int cnter=0; cnter<headerlist.size(); cnter++) { - mp_treeWidget->resizeColumnToContents(cnter); + tableWidget->resizeColumnToContents(cnter); } } @@ -144,7 +140,7 @@ void FileSet::PgSeltreeWidgetClicked() { if (!m_populated) { - populateTree(); + populateTable(); createContextMenu(); m_populated = true; } @@ -154,27 +150,25 @@ * Added to set the context menu policy based on currently active treeWidgetItem * signaled by currentItemChanged */ -void FileSet::treeItemChanged(QTreeWidgetItem *currentwidgetitem, - QTreeWidgetItem *previouswidgetitem ) +void FileSet::tableItemChanged(QTableWidgetItem *currentwidgetitem, QTableWidgetItem *previouswidgetitem) { /* m_checkcurwidget checks to see if this is during a refresh, which will segfault */ if (m_checkcurwidget) { + int currentRow = currentwidgetitem->row(); + QTableWidgetItem *currentrowzeroitem = tableWidget->item(currentRow, 0); + m_currentlyselected = currentrowzeroitem->text(); + /* The Previous item */ if (previouswidgetitem) { /* avoid a segfault if first time */ - int treedepth = previouswidgetitem->data(0, Qt::UserRole).toInt(); - if (treedepth == 1) { - mp_treeWidget->removeAction(actionStatusFileSetInConsole); - mp_treeWidget->removeAction(actionShowJobs); - } + tableWidget->removeAction(actionStatusFileSetInConsole); + tableWidget->removeAction(actionShowJobs); } - int treedepth = currentwidgetitem->data(0, Qt::UserRole).toInt(); - if (treedepth == 1){ + if (m_currentlyselected.length() != 0) { /* set a hold variable to the fileset name in case the context sensitive * menu is used */ - m_currentlyselected=currentwidgetitem->text(0); - mp_treeWidget->addAction(actionStatusFileSetInConsole); - mp_treeWidget->addAction(actionShowJobs); + tableWidget->addAction(actionStatusFileSetInConsole); + tableWidget->addAction(actionShowJobs); } } } @@ -186,14 +180,14 @@ */ void FileSet::createContextMenu() { - mp_treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu); - mp_treeWidget->addAction(actionRefreshFileSet); - connect(mp_treeWidget, SIGNAL( - currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), - this, SLOT(treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *))); + tableWidget->setContextMenuPolicy(Qt::ActionsContextMenu); + tableWidget->addAction(actionRefreshFileSet); + connect(tableWidget, SIGNAL( + currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)), + this, SLOT(tableItemChanged(QTableWidgetItem *, QTableWidgetItem *))); /* connect to the action specific to this pages class */ connect(actionRefreshFileSet, SIGNAL(triggered()), this, - SLOT(populateTree())); + SLOT(populateTable())); connect(actionStatusFileSetInConsole, SIGNAL(triggered()), this, SLOT(consoleStatusFileSet())); connect(actionShowJobs, SIGNAL(triggered()), this, @@ -217,8 +211,8 @@ void FileSet::currentStackItem() { if(!m_populated) { - populateTree(); - /* Create the context menu for the fileset tree */ + populateTable(); + /* Create the context menu for the fileset table */ createContextMenu(); m_populated=true; } Modified: trunk/bacula/src/qt-console/fileset/fileset.h =================================================================== --- trunk/bacula/src/qt-console/fileset/fileset.h 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/fileset/fileset.h 2008-04-28 23:30:18 UTC (rev 6857) @@ -49,10 +49,10 @@ virtual void currentStackItem(); public slots: - void treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *); + void tableItemChanged(QTableWidgetItem *, QTableWidgetItem *); private slots: - void populateTree(); + void populateTable(); void consoleStatusFileSet(); void showJobs(); Modified: trunk/bacula/src/qt-console/fileset/fileset.ui =================================================================== --- trunk/bacula/src/qt-console/fileset/fileset.ui 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/fileset/fileset.ui 2008-04-28 23:30:18 UTC (rev 6857) @@ -5,22 +5,16 @@ <rect> <x>0</x> <y>0</y> - <width>318</width> - <height>246</height> + <width>341</width> + <height>277</height> </rect> </property> <property name="windowTitle" > <string>FileSet Tree</string> </property> <layout class="QGridLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> <item row="0" column="0" > - <widget class="QTreeWidget" name="mp_treeWidget" /> + <widget class="QTableWidget" name="tableWidget" /> </item> </layout> <action name="actionRefreshFileSet" > Modified: trunk/bacula/src/qt-console/mainwin.cpp =================================================================== --- trunk/bacula/src/qt-console/mainwin.cpp 2008-04-28 20:45:11 UTC (rev 6856) +++ trunk/bacula/src/qt-console/mainwin.cpp 2008-04-28 23:30:18 UTC (rev 6857) @@ -254,11 +254,11 @@ { m_isClosing = true; writeSettings(); - foreach(Console *console, m_consoleHash){ +/* foreach(Console *console, m_consoleHash){ console->writeSettings(); console->terminate(); console->closeStackPage(); - } + } */ /* close all non console pages, this will call settings in destructors */ while (m_consoleHash.count() < m_pagehash.count()) { foreach(Pages *page, m_pagehash) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-05-07 01:13:20
|
Revision: 6904 http://bacula.svn.sourceforge.net/bacula/?rev=6904&view=rev Author: bartleyd2 Date: 2008-05-06 18:13:27 -0700 (Tue, 06 May 2008) Log Message: ----------- This is the patch as sent to me by Ricardo. Modified Paths: -------------- trunk/bacula/src/qt-console/bat.pro.in trunk/bacula/src/qt-console/console/console.cpp trunk/bacula/src/qt-console/medialist/medialist.cpp trunk/bacula/src/qt-console/medialist/medialist.h trunk/bacula/src/qt-console/storage/storage.cpp trunk/bacula/src/qt-console/storage/storage.h Added Paths: ----------- trunk/bacula/src/qt-console/util/ trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp trunk/bacula/src/qt-console/util/fmtwidgetitem.h Modified: trunk/bacula/src/qt-console/bat.pro.in =================================================================== --- trunk/bacula/src/qt-console/bat.pro.in 2008-05-06 21:09:28 UTC (rev 6903) +++ trunk/bacula/src/qt-console/bat.pro.in 2008-05-07 01:13:27 UTC (rev 6904) @@ -139,6 +139,10 @@ HEADERS += status/storstat.h SOURCES += status/storstat.cpp +# Utility sources +HEADERS += util/fmtwidgetitem.h +SOURCES += util/fmtwidgetitem.cpp + INSTALLS += bins INSTALLS += confs Modified: trunk/bacula/src/qt-console/console/console.cpp =================================================================== --- trunk/bacula/src/qt-console/console/console.cpp 2008-05-06 21:09:28 UTC (rev 6903) +++ trunk/bacula/src/qt-console/console/console.cpp 2008-05-07 01:13:27 UTC (rev 6904) @@ -314,7 +314,10 @@ pm_strcat(cmd, "\""); write(cmd.c_str()); while ((stat = read()) > 0) { - if (mainWin->m_displayAll) display_text(msg()); + if (mainWin->m_displayAll) { + display_text(msg()); + display_text("\n"); + } strip_trailing_junk(msg()); results << msg(); } Modified: trunk/bacula/src/qt-console/medialist/medialist.cpp =================================================================== --- trunk/bacula/src/qt-console/medialist/medialist.cpp 2008-05-06 21:09:28 UTC (rev 6903) +++ trunk/bacula/src/qt-console/medialist/medialist.cpp 2008-05-07 01:13:27 UTC (rev 6904) @@ -37,12 +37,14 @@ #include <QAbstractEventDispatcher> #include <QMenu> +#include <math.h> #include "bat.h" #include "medialist.h" #include "mediaedit/mediaedit.h" #include "joblist/joblist.h" #include "relabel/relabel.h" #include "run/run.h" +#include "util/fmtwidgetitem.h" MediaList::MediaList() { @@ -74,7 +76,7 @@ */ void MediaList::populateTree() { - QTreeWidgetItem *mediatreeitem, *pooltreeitem; + QTreeWidgetItem *pooltreeitem; if (!m_console->preventInUseConnect()) return; @@ -82,14 +84,8 @@ QStringList headerlist = (QStringList() << tr("Volume Name") << tr("Id") << tr("Status") << tr("Enabled") << tr("Bytes") << tr("Files") << tr("Jobs") << tr("Retention") << tr("Media Type") << tr("Slot") << tr("Use Duration") - << tr("Max Jobs") << tr("Max Files") << tr("Max Bytes") << tr("Recycle") << tr("Enabled") + << tr("Max Jobs") << tr("Max Files") << tr("Max Bytes") << tr("Recycle") << tr("RecyclePool") << tr("Last Written")); - int statusIndex = headerlist.indexOf("Status"); - QStringList flaglist = (QStringList() - << "L" << "R" << "L" << "R" << "BR" << "R" - << "R" << "RS" << "L" << "R" << "RS" - << "R" << "R" << "BR" << "R" << "R" - << "L" << "L"); m_checkcurwidget = false; if (m_populated) @@ -123,11 +119,11 @@ " Media.Enabled AS Enabled, Media.VolBytes AS Bytes," " Media.VolFiles AS FileCount, Media.VolJobs AS JobCount," " Media.VolRetention AS VolumeRetention, Media.MediaType AS MediaType," - " Media.Slot AS Slot, Media.VolUseDuration AS UseDuration," + " Media.InChanger AS InChanger, Media.Slot AS Slot, " + " Media.VolUseDuration AS UseDuration," " Media.MaxVolJobs AS MaxJobs, Media.MaxVolFiles AS MaxFiles," " Media.MaxVolBytes AS MaxBytes, Media.Recycle AS Recycle," - " Media.Enabled AS enabled, Pol.Name AS RecyclePool," - " Media.LastWritten AS LastWritten" + " Pol.Name AS RecyclePool, Media.LastWritten AS LastWritten" " FROM Media" " JOIN Pool ON (Media.PoolId=Pool.PoolId)" " LEFT OUTER JOIN Pool AS Pol ON (Media.RecyclePoolId=Pol.PoolId)" @@ -140,50 +136,80 @@ } 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"); + + if (fieldlist.size() < 18) + continue; // some fields missing, ignore row + int index = 0; - mediatreeitem = new QTreeWidgetItem(pooltreeitem); + ItemFormatter mediaitem(*pooltreeitem, 2); + + /* Iterate through fields in the record */ + QStringListIterator fld(fieldlist); - /* Iterate through fields in the record */ - foreach (field, fieldlist) { - field = field.trimmed(); /* strip leading & trailing spaces */ - if (field != "") { - mediatreeitem->setData(index, Qt::UserRole, 2); - mediatreeitem->setData(index, Qt::UserRole, 2); - mediatreeitem->setText(index, field); - if (index == statusIndex) { - setStatusColor(mediatreeitem, field, index); - } - if (flaglist[index].contains("B")) { - QString text; - bool okay; - qlonglong bytes = field.toULongLong(&okay); - if (okay){ - QString test = QString("%1").arg(bytes); - mainWin->hrConvert(text, bytes); - mediatreeitem->setText(index, text); - } else { Pmsg1(000, "conversion error %s\n", field.toUtf8().data()); } - } - if (flaglist[index].contains("S")) { - QString text; - bool okay; - qlonglong seconds = field.toULongLong(&okay); - if (okay){ - QString test = QString("%1").arg(seconds); - mainWin->hrConvertSeconds(text, seconds); - mediatreeitem->setText(index, text); - } else { Pmsg1(000, "conversion error %s\n", field.toUtf8().data()); } - } - if (flaglist[index].contains("R")) - mediatreeitem->setTextAlignment(index, Qt::AlignRight); - } - index++; - } /* foreach field */ + /* volname */ + mediaitem.setTextFld(index++, fld.next()); + + /* id */ + mediaitem.setNumericFld(index++, fld.next()); + + /* status */ + mediaitem.setVolStatusFld(index++, fld.next()); + + /* enabled */ + mediaitem.setBoolFld(index++, fld.next()); + + /* bytes */ + mediaitem.setBytesFld(index++, fld.next()); + + /* files */ + mediaitem.setNumericFld(index++, fld.next()); + + /* jobs */ + mediaitem.setNumericFld(index++, fld.next()); + + /* retention */ + mediaitem.setDurationFld(index++, fld.next()); + + /* media type */ + mediaitem.setTextFld(index++, fld.next()); + + /* inchanger + slot */ + int inchanger = fld.next().toInt(); + if (inchanger) { + mediaitem.setNumericFld(index++, fld.next()); + } + else { + /* volume not in changer, show blank slot */ + mediaitem.setNumericFld(index++, ""); + fld.next(); + } + + /* use duration */ + mediaitem.setDurationFld(index++, fld.next()); + + /* max jobs */ + mediaitem.setNumericFld(index++, fld.next()); + + /* max files */ + mediaitem.setNumericFld(index++, fld.next()); + + /* max bytes */ + mediaitem.setBytesFld(index++, fld.next()); + + /* recycle */ + mediaitem.setBoolFld(index++, fld.next()); + + /* recycle pool */ + mediaitem.setTextFld(index++, fld.next()); + + /* last written */ + mediaitem.setTextFld(index++, fld.next()); + } /* foreach resultline */ } /* if results from query */ } /* foreach pool_listItem */ @@ -194,17 +220,6 @@ } } -void MediaList::setStatusColor(QTreeWidgetItem *item, QString &field, int &index) -{ - if (field == "Append" ) { - item->setBackground(index, Qt::green); - } else if (field == "Error") { - item->setBackground(index, Qt::red); - } else if ((field == "Used") || ("Full")){ - item->setBackground(index, Qt::yellow); - } -} - /* * Called from the signal of the context sensitive menu! */ Modified: trunk/bacula/src/qt-console/medialist/medialist.h =================================================================== --- trunk/bacula/src/qt-console/medialist/medialist.h 2008-05-06 21:09:28 UTC (rev 6903) +++ trunk/bacula/src/qt-console/medialist/medialist.h 2008-05-07 01:13:27 UTC (rev 6904) @@ -65,7 +65,6 @@ private: void createContextMenu(); - void setStatusColor(QTreeWidgetItem *, QString &, int &); void writeExpandedSettings(); QString m_currentVolumeName; QString m_currentVolumeId; Modified: trunk/bacula/src/qt-console/storage/storage.cpp =================================================================== --- trunk/bacula/src/qt-console/storage/storage.cpp 2008-05-06 21:09:28 UTC (rev 6903) +++ trunk/bacula/src/qt-console/storage/storage.cpp 2008-05-07 01:13:27 UTC (rev 6904) @@ -42,6 +42,7 @@ #include "label/label.h" #include "mount/mount.h" #include "status/storstat.h" +#include "util/fmtwidgetitem.h" Storage::Storage() { @@ -72,7 +73,7 @@ */ void Storage::populateTree() { - QTreeWidgetItem *storageItem, *topItem; + QTreeWidgetItem *topItem; if (!m_console->preventInUseConnect()) return; @@ -81,8 +82,9 @@ mp_treeWidget->clear(); m_checkcurwidget = true; - QStringList headerlist = (QStringList() << tr("Storage Name") << tr("Storage Id") - << tr("Auto Changer")); + QStringList headerlist = (QStringList() << tr("Name") << tr("Id") + << tr("Changer") << tr("Slot") << tr("Status") << tr("Enabled") << tr("Pool") + << tr("Media Type") ); topItem = new QTreeWidgetItem(mp_treeWidget); topItem->setText(0, tr("Storage")); @@ -93,10 +95,9 @@ mp_treeWidget->setHeaderLabels(headerlist); foreach(QString storageName, m_console->storage_list){ - storageItem = new QTreeWidgetItem(topItem); - storageItem->setText(0, storageName); - storageItem->setData(0, Qt::UserRole, 1); - storageItem->setExpanded(true); + ItemFormatter storageItem(*topItem, 1); + storageItem.setTextFld(0, storageName); + storageItem.widget()->setExpanded(true); /* Set up query QString and header QStringList */ QString query("SELECT StorageId AS ID, AutoChanger AS Changer" @@ -118,16 +119,16 @@ /* there will only be one of these */ foreach (resultline, results) { fieldlist = resultline.split("\t"); - int index = 0; - /* Iterate through fields in the record */ - foreach (field, fieldlist) { - field = field.trimmed(); /* strip leading & trailing spaces */ - storageItem->setData(index+1, Qt::UserRole, 1); - /* Put media fields under the pool tree item */ - storageItem->setData(index+1, Qt::UserRole, 1); - storageItem->setText(index+1, field); - index++; - } + int index = 1; + QStringListIterator fld(fieldlist); + + /* storage id */ + storageItem.setNumericFld(index++, fld.next() ); + + /* changer */ + storageItem.setBoolFld(index++, fld.next() ); + + mediaList(storageItem.widget(), fieldlist.first()); } } } @@ -137,7 +138,62 @@ mp_treeWidget->resizeColumnToContents(cnter); } } +void Storage::mediaList(QTreeWidgetItem *parent, const QString &storageID) +{ + QString query("SELECT Media.VolumeName AS Media, Media.Slot AS Slot," + " Media.VolStatus AS VolStatus, Media.Enabled AS Enabled," + " Pool.Name AS MediaPool, Media.MediaType AS MediaType" + " From Media" + " JOIN Pool ON (Media.PoolId=Pool.PoolId)" + " WHERE Media.StorageId='" + storageID + "'" + " AND Media.InChanger<>0" + " ORDER BY Media.Slot"); + QStringList results; + /* This could be a log item */ + if (mainWin->m_sqlDebug) { + Pmsg1(000, "Storage query cmd : %s\n",query.toUtf8().data()); + } + if (m_console->sql_cmd(query, results)) { + QString resultline; + QString field; + QStringList fieldlist; + + foreach (resultline, results) { + fieldlist = resultline.split("\t"); + if (fieldlist.size() < 6) + continue; + + /* Iterate through fields in the record */ + QStringListIterator fld(fieldlist); + int index = 0; + ItemFormatter fmt(*parent, 2); + + /* volname */ + fmt.setTextFld(index++, fld.next()); + + /* skip the next two columns, unused by media */ + index += 2; + + /* slot */ + fmt.setNumericFld(index++, fld.next()); + + /* status */ + fmt.setVolStatusFld(index++, fld.next()); + + /* enabled */ + fmt.setBoolFld(index++, fld.next()); + + /* pool */ + fmt.setTextFld(index++, fld.next()); + + /* media type */ + fmt.setTextFld(index++, fld.next()); + + } + } +} + /* * When the treeWidgetItem in the page selector tree is singleclicked, Make sure * The tree has been populated. Modified: trunk/bacula/src/qt-console/storage/storage.h =================================================================== --- trunk/bacula/src/qt-console/storage/storage.h 2008-05-06 21:09:28 UTC (rev 6903) +++ trunk/bacula/src/qt-console/storage/storage.h 2008-05-07 01:13:27 UTC (rev 6904) @@ -64,6 +64,7 @@ private: void createContextMenu(); + void mediaList(QTreeWidgetItem *parent, const QString &storageID); QString m_currentStorage; int m_currentAutoChanger; bool m_populated; Added: trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp =================================================================== --- trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp (rev 0) +++ trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp 2008-05-07 01:13:27 UTC (rev 6904) @@ -0,0 +1,146 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2007 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ + +/* + * Version $Id$ + * + * Helper functions for tree widget formatting + * + * Riccardo Ghetta, May 2008 + * + */ + +#include <QTreeWidgetItem> +#include <QString> +#include <QStringList> +#include <math.h> +#include "fmtwidgetitem.h" + +ItemFormatter::ItemFormatter(QTreeWidgetItem &parent, int indent_level): +wdg(new QTreeWidgetItem(&parent)), +level(indent_level) +{ +} + +void ItemFormatter::setBoolFld(int index, const QString &fld, bool center) +{ + if (fld.trimmed().toInt()) + setTextFld(index, "Yes", center); + else + setTextFld(index, "No", center); +} + +void ItemFormatter::setBoolFld(int index, int fld, bool center) +{ + if (fld) + setTextFld(index, "Yes", center); + else + setTextFld(index, "No", center); +} + +void ItemFormatter::setTextFld(int index, const QString &fld, bool center) +{ + wdg->setData(index, Qt::UserRole, level); + if (center) { + wdg->setTextAlignment(index, Qt::AlignHCenter); + } + wdg->setText(index, fld.trimmed()); +} + +void ItemFormatter::setNumericFld(int index, const QString &fld) +{ + wdg->setData(index, Qt::UserRole, level); + wdg->setTextAlignment(index, Qt::AlignRight); + wdg->setText(index, fld.trimmed()); +} + +void ItemFormatter::setBytesFld(int index, const QString &fld) +{ + static const double KB = 1024.0; + static const double MB = KB * KB; + static const double GB = MB * KB; + static const double TB = GB * KB; + + double dfld = fld.trimmed().toDouble(); + QString msg; + if (dfld >= TB) + msg = QString("%1TB").arg(dfld / TB, 0, 'f', 2); + else if (dfld >= GB) + msg = QString("%1GB").arg(dfld / GB, 0, 'f', 2); + else if (dfld >= MB) + msg = QString("%1MB").arg(dfld / MB, 0, 'f', 2); + else if (dfld >= KB) + msg = QString("%1KB").arg(dfld / KB, 0, 'f', 2); + else + msg = QString::number(dfld, 'f', 0); + + wdg->setData(index, Qt::UserRole, level); + wdg->setTextAlignment(index, Qt::AlignRight); + wdg->setText(index, msg); +} + +void ItemFormatter::setDurationFld(int index, const QString &fld) +{ + static const double HOUR = 3600; + static const double DAY = HOUR * 24; + static const double WEEK = DAY * 7; + static const double MONTH = DAY * 30; + static const double YEAR = DAY * 365; + + double dfld = fld.trimmed().toDouble(); + QString msg; + if (fmod(dfld, YEAR) == 0) + msg = QString("%1y").arg(dfld / YEAR, 0, 'f', 0); + else if (fmod(dfld, MONTH) == 0) + msg = QString("%1m").arg(dfld / MONTH, 0, 'f', 0); + else if (fmod(dfld, WEEK) == 0) + msg = QString("%1w").arg(dfld / WEEK, 0, 'f', 0); + else if (fmod(dfld, DAY) == 0) + msg = QString("%1d").arg(dfld / DAY, 0, 'f', 0); + else if (fmod(dfld, HOUR) == 0) + msg = QString("%1h").arg(dfld / HOUR, 0, 'f', 0); + else + msg = QString("%1s").arg(dfld, 0, 'f', 0); + + wdg->setData(index, Qt::UserRole, level); + wdg->setTextAlignment(index, Qt::AlignRight); + wdg->setText(index, msg); +} + +void ItemFormatter::setVolStatusFld(int index, const QString &fld, bool center) +{ + setTextFld(index, fld, center); + + if (fld == "Append" ) { + wdg->setBackground(index, Qt::green); + } else if (fld == "Error") { + wdg->setBackground(index, Qt::red); + } else if (fld == "Used" || fld == "Full"){ + wdg->setBackground(index, Qt::yellow); + } +} Added: trunk/bacula/src/qt-console/util/fmtwidgetitem.h =================================================================== --- trunk/bacula/src/qt-console/util/fmtwidgetitem.h (rev 0) +++ trunk/bacula/src/qt-console/util/fmtwidgetitem.h 2008-05-07 01:13:27 UTC (rev 6904) @@ -0,0 +1,155 @@ +#ifndef _FMTWIDGETITEM_H_ +#define _FMTWIDGETITEM_H_ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2007 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id$ + * + * TreeView formatting helpers - Riccardo Ghetta, May 2008 + */ + +class QTreeWidgetItem; +class QString; + +/* + * This class can be used instead of QTreeWidgetItem (it allocates one internally, + * to format data fields. + * All setXXXFld routines receive a column index and the unformatted string value. + */ +class ItemFormatter +{ +public: + + ItemFormatter(QTreeWidgetItem &parent, int indent_level); + + /* Prints Yes if fld is != 0, No otherwise. Centers field if center true*/ + void setBoolFld(int index, const QString &fld, bool center = true); + void setBoolFld(int index, int fld, bool center = true); + + /* Normal text field. Centers field if center true*/ + void setTextFld(int index, const QString &fld, bool center = false); + + /* Right-aligned text field.*/ + void setNumericFld(int index, const QString &fld); + + /* fld value interpreted as bytes and formatted with size suffixes */ + void setBytesFld(int index, const QString &fld); + + /* fld value interpreted as seconds and formatted with y,m,w,h suffixes */ + void setDurationFld(int index, const QString &fld); + + /* fld value interpreted as volume status. Colored accordingly */ + void setVolStatusFld(int index, const QString &fld, bool center = true); + + /* access internal widget */ + QTreeWidgetItem *widget() { return wdg; } + const QTreeWidgetItem *widget() const { return wdg; } + +private: + QTreeWidgetItem *wdg; + int level; +}; + +#endif /* _FMTWIDGETITEM_H_ */ +#ifndef _FMTWIDGETITEM_H_ +#define _FMTWIDGETITEM_H_ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2007 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id$ + * + * TreeView formatting helpers - Riccardo Ghetta, May 2008 + */ + +class QTreeWidgetItem; +class QString; + +/* + * This class can be used instead of QTreeWidgetItem (it allocates one internally, + * to format data fields. + * All setXXXFld routines receive a column index and the unformatted string value. + */ +class ItemFormatter +{ +public: + + ItemFormatter(QTreeWidgetItem &parent, int indent_level); + + /* Prints Yes if fld is != 0, No otherwise. Centers field if center true*/ + void setBoolFld(int index, const QString &fld, bool center = true); + + /* Normal text field. Centers field if center true*/ + void setTextFld(int index, const QString &fld, bool center = false); + + /* Right-aligned text field.*/ + void setNumericFld(int index, const QString &fld); + + /* fld value interpreted as bytes and formatted with size suffixes */ + void setBytesFld(int index, const QString &fld); + + /* fld value interpreted as seconds and formatted with y,m,w,h suffixes */ + void setDurationFld(int index, const QString &fld); + + /* fld value interpreted as volume status. Colored accordingly */ + void setVolStatusFld(int index, const QString &fld, bool center = true); + + /* access internal widget */ + QTreeWidgetItem *widget() { return wdg; } + const QTreeWidgetItem *widget() const { return wdg; } + +private: + QTreeWidgetItem *wdg; + int level; +}; + +#endif /* _FMTWIDGETITEM_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-05-15 01:53:55
|
Revision: 6977 http://bacula.svn.sourceforge.net/bacula/?rev=6977&view=rev Author: bartleyd2 Date: 2008-05-14 18:54:01 -0700 (Wed, 14 May 2008) Log Message: ----------- Riccardo' patch for formatting text. Modified Paths: -------------- trunk/bacula/src/qt-console/joblist/joblist.cpp trunk/bacula/src/qt-console/joblist/joblist.h trunk/bacula/src/qt-console/mainwin.cpp trunk/bacula/src/qt-console/mainwin.h trunk/bacula/src/qt-console/medialist/medialist.cpp trunk/bacula/src/qt-console/storage/storage.cpp trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp trunk/bacula/src/qt-console/util/fmtwidgetitem.h Modified: trunk/bacula/src/qt-console/joblist/joblist.cpp =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-15 01:54:01 UTC (rev 6977) @@ -40,6 +40,7 @@ #ifdef HAVE_QWT #include "jobgraphs/jobplot.h" #endif +#include "util/fmtwidgetitem.h" /* * Constructor for the class @@ -106,14 +107,120 @@ */ void JobList::populateTable() { - QStringList results; - QString resultline; - QBrush blackBrush(Qt::black); - if (!m_console->preventInUseConnect()) return; /* Can't do this in constructor because not neccesarily conected in constructor */ + prepareFilterWidgets(); + + /* Set up query */ + QString query; + fillQueryString(query); + + /* Set up the Header for the table */ + QStringList headerlist = (QStringList() + << tr("Job Id") << tr("Job Name") << tr("Client") << tr("Job Starttime") + << tr("Job Type") << tr("Job Level") << tr("Job Files") + << tr("Job Bytes") << tr("Job Status") << tr("Purged") << tr("File Set")); + + m_jobIdIndex = headerlist.indexOf(tr("Job Id")); + m_purgedIndex = headerlist.indexOf(tr("Purged")); + m_typeIndex = headerlist.indexOf(tr("Job Type")); + m_statusIndex = headerlist.indexOf(tr("Job Status")); + m_startIndex = headerlist.indexOf(tr("Job Starttime")); + m_filesIndex = headerlist.indexOf(tr("Job Files")); + m_bytesIndex = headerlist.indexOf(tr("Job Bytes")); + + /* Initialize the QTableWidget */ + m_checkCurrentWidget = false; + mp_tableWidget->clear(); + m_checkCurrentWidget = true; + mp_tableWidget->setColumnCount(headerlist.size()); + mp_tableWidget->setHorizontalHeaderLabels(headerlist); + mp_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + mp_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); + + if (mainWin->m_sqlDebug) { + Pmsg1(000, "Query cmd : %s\n",query.toUtf8().data()); + } + + QStringList results; + if (m_console->sql_cmd(query, results)) { + m_resultCount = results.count(); + + QStringList fieldlist; + mp_tableWidget->setRowCount(results.size()); + + int row = 0; + /* Iterate through the record returned from the query */ + QString resultline; + foreach (resultline, results) { + fieldlist = resultline.split("\t"); + if (fieldlist.size() < 12) + continue; // some fields missing, ignore row + + TableItemFormatter jobitem(*mp_tableWidget, row); + + /* Iterate through fields in the record */ + QStringListIterator fld(fieldlist); + int col = 0; + + /* job id */ + jobitem.setNumericFld(col++, fld.next()); + + /* job name */ + jobitem.setTextFld(col++, fld.next()); + + /* client */ + jobitem.setTextFld(col++, fld.next()); + + /* job starttime */ + jobitem.setTextFld(col++, fld.next(), true); + + /* job type */ + jobitem.setJobTypeFld(col++, fld.next()); + + /* job level */ + jobitem.setJobLevelFld(col++, fld.next()); + + /* job files */ + jobitem.setNumericFld(col++, fld.next()); + + /* job bytes */ + jobitem.setBytesFld(col++, fld.next()); + + /* job status */ + QString shortstatus(fld.next()); + QString longstatus(fld.next()); + jobitem.setJobStatusFld(col++, shortstatus, longstatus); + + /* purged */ + if (fld.next().toInt()) + jobitem.setTextFld(col++, tr("IS"), true); + else + jobitem.setTextFld(col++, tr("NOT"), true); + + /* fileset */ + jobitem.setTextFld(col++, fld.next()); + + row++; + } + } + /* Resize the columns */ + mp_tableWidget->resizeColumnsToContents(); + mp_tableWidget->resizeRowsToContents(); + mp_tableWidget->verticalHeader()->hide(); + if ((m_mediaName != tr("Any")) && (m_resultCount == 0)){ + /* for context sensitive searches, let the user know if there were no + * results */ + QMessageBox::warning(this, "Bat", + tr("The Jobs query returned no results.\n" + "Press OK to continue?"), QMessageBox::Ok ); + } +} + +void JobList::prepareFilterWidgets() +{ if (!m_populated) { clientComboBox->addItem(tr("Any")); clientComboBox->addItems(m_console->client_list); @@ -150,9 +257,11 @@ statusComboBox->addItem(tr("Any")); statusComboBox->addItems(statusLongList); } +} - /* Set up query */ - QString query(""); +void JobList::fillQueryString(QString &query) +{ + query = ""; int volumeIndex = volumeComboBox->currentIndex(); if (volumeIndex != -1) m_mediaName = volumeComboBox->itemText(volumeIndex); @@ -221,126 +330,15 @@ } } /* Descending */ - query += " ORDER BY Job.Starttime DESC, Job.JobId DESC"; + query += " ORDER BY Job.Starttime=0 DESC, Job.Starttime DESC, Job.JobId DESC"; /* If Limit check box for limit records returned is checked */ if (limitCheckBox->checkState() == Qt::Checked) { QString limit; limit.setNum(limitSpinBox->value()); query += " LIMIT " + limit; } - - /* Set up the Header for the table */ - QStringList headerlist = (QStringList() - << tr("Job Id") << tr("Job Name") << tr("Client") << tr("Job Starttime") - << tr("Job Type") << tr("Job Level") << tr("Job Files") - << tr("Job Bytes") << tr("Job Status") << tr("Purged") << tr("File Set")); - m_jobIdIndex = headerlist.indexOf(tr("Job Id")); - m_purgedIndex = headerlist.indexOf(tr("Purged")); - m_typeIndex = headerlist.indexOf(tr("Job Type")); - m_statusIndex = headerlist.indexOf(tr("Job Status")); - m_startIndex = headerlist.indexOf(tr("Job Starttime")); - m_filesIndex = headerlist.indexOf(tr("Job Files")); - m_bytesIndex = headerlist.indexOf(tr("Job Bytes")); - int jobLevelIndex = headerlist.indexOf(tr("Job Level")); - - /* Initialize the QTableWidget */ - m_checkCurrentWidget = false; - mp_tableWidget->clear(); - m_checkCurrentWidget = true; - mp_tableWidget->setColumnCount(headerlist.size()); - mp_tableWidget->setHorizontalHeaderLabels(headerlist); - - if (mainWin->m_sqlDebug) { - Pmsg1(000, "Query cmd : %s\n",query.toUtf8().data()); - } - if (m_console->sql_cmd(query, results)) { - m_resultCount = results.count(); - - QTableWidgetItem* p_tableitem; - QString field; - QStringList fieldlist; - mp_tableWidget->setRowCount(results.size()); - - int row = 0; - /* Iterate through the record returned from the query */ - foreach (resultline, results) { - fieldlist = resultline.split("\t"); - int column = 0; - bool m_statusIndexDone = false; - QString statusCode(""); - /* Iterate through fields in the record */ - foreach (field, fieldlist) { - field = field.trimmed(); /* strip leading & trailing spaces */ - if ((column == m_statusIndex) && (!m_statusIndexDone)){ - m_statusIndexDone = true; - statusCode = field; - } else { - p_tableitem = new QTableWidgetItem(field, 1); - p_tableitem->setFlags(Qt::ItemIsSelectable); - p_tableitem->setForeground(blackBrush); - mp_tableWidget->setItem(row, column, p_tableitem); - if (column == m_statusIndex) - setStatusColor(p_tableitem, statusCode); - if (column == m_bytesIndex) { - QString text; - bool okay; - qlonglong bytes = field.toULongLong(&okay); - if (okay){ - QString test = QString("%1").arg(bytes); - mainWin->hrConvert(text, bytes); - p_tableitem->setText(text); - } else { Pmsg1(000, "conversion error %s\n", field.toUtf8().data()); } - } else if (column == m_purgedIndex) { - bool okay; - int isPurged = field.toInt(&okay); - if (okay){ - if (isPurged) { p_tableitem->setText(tr("IS")); - } else { p_tableitem->setText(tr("NOT")); } - } - } else if (column == m_typeIndex) { - if (field == "B") { p_tableitem->setText(tr("Backup")); } - else if (field == "R") { p_tableitem->setText(tr("Restore")); } - } else if (column == jobLevelIndex) { - if (field == "F") { p_tableitem->setText("Full"); } - else if (field == "D") { p_tableitem->setText("Diff"); } - else if (field == "I") { p_tableitem->setText("Incr"); } - } - if ((column == m_bytesIndex) || (column == m_filesIndex)){ - p_tableitem->setTextAlignment(Qt::AlignRight); - } - column++; - } - } - row++; - } - } - /* Resize the columns */ - mp_tableWidget->resizeColumnsToContents(); - mp_tableWidget->resizeRowsToContents(); - mp_tableWidget->verticalHeader()->hide(); - if ((m_mediaName != tr("Any")) && (m_resultCount == 0)){ - /* for context sensitive searches, let the user know if there were no - * results */ - QMessageBox::warning(this, "Bat", - tr("The Jobs query returned no results.\n" - "Press OK to continue?"), QMessageBox::Ok ); - } } -void JobList::setStatusColor(QTableWidgetItem *item, QString &field) -{ - QString greenchars("TCR"); - QString redchars("BEf"); - QString yellowchars("eDAFSMmsjdctp"); - if (greenchars.contains(field, Qt::CaseSensitive)) { - item->setBackground(Qt::green); - } else if (redchars.contains(field, Qt::CaseSensitive)) { - item->setBackground(Qt::red); - } else if (yellowchars.contains(field, Qt::CaseSensitive)){ - item->setBackground(Qt::yellow); - } -} - /* * When the treeWidgetItem in the page selector tree is singleclicked, Make sure * The tree has been populated. Modified: trunk/bacula/src/qt-console/joblist/joblist.h =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.h 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/joblist/joblist.h 2008-05-15 01:54:01 UTC (rev 6977) @@ -73,9 +73,10 @@ private: void createConnections(); - void setStatusColor(QTableWidgetItem *item, QString &field); void writeSettings(); void readSettings(); + void prepareFilterWidgets(); + void fillQueryString(QString &query); void selectedJobsGet(); QSplitter *m_splitter; QString m_groupText; Modified: trunk/bacula/src/qt-console/mainwin.cpp =================================================================== --- trunk/bacula/src/qt-console/mainwin.cpp 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/mainwin.cpp 2008-05-15 01:54:01 UTC (rev 6977) @@ -54,6 +54,7 @@ #include "jobgraphs/jobplot.h" #endif #include "status/dirstat.h" +#include "util/fmtwidgetitem.h" /* * Daemon message callback @@ -674,13 +675,16 @@ prefs.rtRestore1CheckBox->setCheckState(m_rtRestore1Debug ? Qt::Checked : Qt::Unchecked); prefs.rtRestore2CheckBox->setCheckState(m_rtRestore2Debug ? Qt::Checked : Qt::Unchecked); prefs.rtRestore3CheckBox->setCheckState(m_rtRestore3Debug ? Qt::Checked : Qt::Unchecked); - if (m_radioConvert == 0) { + switch (ItemFormatterBase::getBytesConversion()) { + case ItemFormatterBase::BYTES_CONVERSION_NONE: prefs.radioConvertOff->setChecked(Qt::Checked); - } else if (m_radioConvert == 1){ + break; + case ItemFormatterBase::BYTES_CONVERSION_IEC: prefs.radioConvertIEC->setChecked(Qt::Checked); - } else { - m_radioConvert = 2; + break; + default: prefs.radioConvertStandard->setChecked(Qt::Checked); + break; } prefs.openPlotCheckBox->setCheckState(m_openPlot ? Qt::Checked : Qt::Unchecked); prefs.openBrowserCheckBox->setCheckState(m_openBrowser ? Qt::Checked : Qt::Unchecked); @@ -725,11 +729,11 @@ mainWin->m_rtRestore2Debug = this->rtRestore2CheckBox->checkState() == Qt::Checked; mainWin->m_rtRestore3Debug = this->rtRestore3CheckBox->checkState() == Qt::Checked; if (this->radioConvertOff->isChecked()) { - mainWin->m_radioConvert = 0; + ItemFormatterBase::setBytesConversion(ItemFormatterBase::BYTES_CONVERSION_NONE); } else if (this->radioConvertIEC->isChecked()){ - mainWin->m_radioConvert = 1; + ItemFormatterBase::setBytesConversion(ItemFormatterBase::BYTES_CONVERSION_IEC); } else { - mainWin->m_radioConvert = 2; + ItemFormatterBase::setBytesConversion(ItemFormatterBase::BYTES_CONVERSION_SI); } mainWin->m_openPlot = this->openPlotCheckBox->checkState() == Qt::Checked; mainWin->m_openBrowser = this->openBrowserCheckBox->checkState() == Qt::Checked; @@ -757,7 +761,7 @@ settings.endGroup(); settings.beginGroup("Misc"); settings.setValue("longList", mainWin->m_longList); - settings.setValue("byteConvert", mainWin->m_radioConvert); + settings.setValue("byteConvert", ItemFormatterBase::getBytesConversion()); settings.setValue("openplot", mainWin->m_openPlot); settings.setValue("openbrowser", mainWin->m_openBrowser); settings.setValue("opendirstat", mainWin->m_openDirStat); @@ -812,7 +816,9 @@ settings.endGroup(); settings.beginGroup("Misc"); m_longList = settings.value("longList", false).toBool(); - m_radioConvert = settings.value("byteConvert", false).toInt(); + ItemFormatterBase::setBytesConversion( + (ItemFormatterBase::BYTES_CONVERSION) settings.value("byteConvert", + ItemFormatterBase::BYTES_CONVERSION_IEC).toInt()); m_openPlot = settings.value("openplot", false).toBool(); m_openBrowser = settings.value("openbrowser", false).toBool(); m_openDirStat = settings.value("opendirstat", false).toBool(); @@ -833,70 +839,4 @@ settings.endGroup(); } -void MainWin::hrConvert(QString &ret, qlonglong &inval) -{ - double net = 0; - qlonglong base; - QStringList suflist; - if (m_radioConvert == 0) { - ret = QString("%1").arg(inval); - return; - } else if (m_radioConvert == 1){ - base = 1000; - suflist = (QStringList() << "B" << "KiB" << "MiB" << "GiB" << "TiB" << "PiB" << "EiB" << "ZiB"); - } else { - base = 1024; - suflist = (QStringList() << "B" << "KB" << "MB" << "GB" << "TB" << "PB" << "EB" << "ZB"); - } - qlonglong running = base; - bool done = false; - int count = 1; - while (done == false) { - QString test1 = QString("%1").arg(inval); - QString test2 = QString("%1").arg(running); - if (float(inval) < (float)(running)) { - done = true; - ret = suflist[count - 1]; - net = (float)inval / (float)(running/base); - } - count += 1; - if (count > suflist.count()) done = true; - running *= base; - } - char format = 'f'; - if (net != 0) - ret = QString("%1 %2") - .arg(net, 0, format, 2, QLatin1Char(' ')) - .arg(ret); - else ret = "0 B"; -} - -void MainWin::hrConvertSeconds(QString &ret, qlonglong &inval) -{ - double net = 0; - QList<qlonglong> durations; - durations.append(1); - durations.append(60); - durations.append(3600); - durations.append(86400); - durations.append(2592000); - durations.append(31536000); - QStringList abbrlist = (QStringList() << "Sec" << "Min" << "Hrs" << "Days" << "Mnth" << "Yrs"); - bool done = false; - int count = 1; - while (done == false) { - QString test1 = QString("%1").arg(inval); - QString test2 = QString("%1").arg(durations[count]); - if ((inval < durations[count]) || (count >= abbrlist.count() - 1)) { - done = true; - net = (float)inval / (float)(durations[count - 1]); - if (net != 0) - ret = QString("%1 %2") - .arg(net, 0, 'f', 2, QLatin1Char(' ')) - .arg(abbrlist[count - 1]); - else ret = "0 S"; - } - count += 1; - } -} Modified: trunk/bacula/src/qt-console/mainwin.h =================================================================== --- trunk/bacula/src/qt-console/mainwin.h 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/mainwin.h 2008-05-15 01:54:01 UTC (rev 6977) @@ -59,8 +59,6 @@ void hashInsert(QTreeWidgetItem *, Pages *); void hashRemove(Pages *); void hashRemove(QTreeWidgetItem *, Pages *); - void hrConvert(QString &, qlonglong &); - void hrConvertSeconds(QString &, qlonglong &); Console *currentConsole(); QTreeWidgetItem *currentTopItem(); Pages* getFromHash(QTreeWidgetItem *); @@ -101,7 +99,6 @@ bool m_rtRestore1Debug; bool m_rtRestore2Debug; bool m_rtRestore3Debug; - int m_radioConvert; bool m_openBrowser; bool m_openPlot; bool m_openDirStat; Modified: trunk/bacula/src/qt-console/medialist/medialist.cpp =================================================================== --- trunk/bacula/src/qt-console/medialist/medialist.cpp 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/medialist/medialist.cpp 2008-05-15 01:54:01 UTC (rev 6977) @@ -146,7 +146,7 @@ continue; // some fields missing, ignore row int index = 0; - ItemFormatter mediaitem(*pooltreeitem, 2); + TreeItemFormatter mediaitem(*pooltreeitem, 2); /* Iterate through fields in the record */ QStringListIterator fld(fieldlist); Modified: trunk/bacula/src/qt-console/storage/storage.cpp =================================================================== --- trunk/bacula/src/qt-console/storage/storage.cpp 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/storage/storage.cpp 2008-05-15 01:54:01 UTC (rev 6977) @@ -95,7 +95,7 @@ mp_treeWidget->setHeaderLabels(headerlist); foreach(QString storageName, m_console->storage_list){ - ItemFormatter storageItem(*topItem, 1); + TreeItemFormatter storageItem(*topItem, 1); storageItem.setTextFld(0, storageName); storageItem.widget()->setExpanded(true); @@ -167,7 +167,7 @@ /* Iterate through fields in the record */ QStringListIterator fld(fieldlist); int index = 0; - ItemFormatter fmt(*parent, 2); + TreeItemFormatter fmt(*parent, 2); /* volname */ fmt.setTextFld(index++, fld.next()); Modified: trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp =================================================================== --- trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp 2008-05-15 01:54:01 UTC (rev 6977) @@ -36,26 +36,135 @@ */ #include <QTreeWidgetItem> +#include <QTableWidget> +#include <QTableWidgetItem> +#include <QBrush> #include <QString> #include <QStringList> #include <math.h> #include "fmtwidgetitem.h" -ItemFormatter::ItemFormatter(QTreeWidgetItem &parent, int indent_level): -wdg(new QTreeWidgetItem(&parent)), -level(indent_level) +/*********************************************** + * + * ItemFormatterBase static members + * + ***********************************************/ + +ItemFormatterBase::BYTES_CONVERSION ItemFormatterBase::cnvFlag(BYTES_CONVERSION_IEC); + +QString ItemFormatterBase::convertBytesIEC(qint64 qfld) { + static const qint64 KB = Q_INT64_C(1024); + static const qint64 MB = (KB * KB); + static const qint64 GB = (MB * KB); + static const qint64 TB = (GB * KB); + static const qint64 PB = (TB * KB); + static const qint64 EB = (PB * KB); + + /* note: division is integer, so to have some decimals we divide for a + smaller unit (e.g. GB for a TB number and so on) */ + char suffix; + if (qfld >= EB) { + qfld /= PB; + suffix = 'E'; + } + else if (qfld >= PB) { + qfld /= TB; + suffix = 'P'; + } + else if (qfld >= TB) { + qfld /= GB; + suffix = 'T'; + } + else if (qfld >= GB) { + qfld /= MB; + suffix = 'G'; + } + else if (qfld >= MB) { + qfld /= KB; + suffix = 'M'; + } + else if (qfld >= KB) { + suffix = 'K'; + } + else { + /* plain bytes, no need to reformat */ + return QString("%1 B").arg(qfld); + } + + /* having divided for a smaller unit, now we can safely convert to double and + use the extra room for decimals */ + return QString("%1 %2iB").arg(qfld / 1000.0, 0, 'f', 2).arg(suffix); } -void ItemFormatter::setBoolFld(int index, const QString &fld, bool center) +QString ItemFormatterBase::convertBytesSI(qint64 qfld) { + static const qint64 KB = Q_INT64_C(1000); + static const qint64 MB = (KB * KB); + static const qint64 GB = (MB * KB); + static const qint64 TB = (GB * KB); + static const qint64 PB = (TB * KB); + static const qint64 EB = (PB * KB); + + /* note: division is integer, so to have some decimals we divide for a + smaller unit (e.g. GB for a TB number and so on) */ + char suffix; + if (qfld >= EB) { + qfld /= PB; + suffix = 'E'; + } + else if (qfld >= PB) { + qfld /= TB; + suffix = 'P'; + } + else if (qfld >= TB) { + qfld /= GB; + suffix = 'T'; + } + else if (qfld >= GB) { + qfld /= MB; + suffix = 'G'; + } + else if (qfld >= MB) { + qfld /= KB; + suffix = 'M'; + } + else if (qfld >= KB) { + suffix = 'k'; /* SI uses lowercase k */ + } + else { + /* plain bytes, no need to reformat */ + return QString("%1 B").arg(qfld); + } + + /* having divided for a smaller unit, now we can safely convert to double and + use the extra room for decimals */ + return QString("%1 %2B").arg(qfld / 1000.0, 0, 'f', 2).arg(suffix); +} + +/*********************************************** + * + * base formatting routines + * + ***********************************************/ + +ItemFormatterBase::ItemFormatterBase() +{ +} + +ItemFormatterBase::~ItemFormatterBase() +{ +} + +void ItemFormatterBase::setBoolFld(int index, const QString &fld, bool center) +{ if (fld.trimmed().toInt()) setTextFld(index, "Yes", center); else setTextFld(index, "No", center); } -void ItemFormatter::setBoolFld(int index, int fld, bool center) +void ItemFormatterBase::setBoolFld(int index, int fld, bool center) { if (fld) setTextFld(index, "Yes", center); @@ -63,84 +172,234 @@ setTextFld(index, "No", center); } -void ItemFormatter::setTextFld(int index, const QString &fld, bool center) +void ItemFormatterBase::setNumericFld(int index, const QString &fld) { + setTextFld(index, fld); + setTextAlignment(index, Qt::AlignRight | Qt::AlignVCenter); +} + +void ItemFormatterBase::setBytesFld(int index, const QString &fld) +{ + qint64 qfld = fld.trimmed().toLongLong(); + QString msg; + switch (cnvFlag) { + case BYTES_CONVERSION_NONE: + msg = QString::number(qfld); + break; + case BYTES_CONVERSION_IEC: + msg = convertBytesIEC(qfld); + break; + case BYTES_CONVERSION_SI: + msg = convertBytesSI(qfld); + break; + } + setNumericFld(index, msg); +} + +void ItemFormatterBase::setDurationFld(int index, const QString &fld) +{ + static const qint64 HOUR = Q_INT64_C(3600); + static const qint64 DAY = HOUR * 24; + static const qint64 WEEK = DAY * 7; + static const qint64 MONTH = DAY * 30; + static const qint64 YEAR = DAY * 365; + static const qint64 divs[] = { YEAR, MONTH, WEEK, DAY, HOUR }; + static const char sufs[] = { 'y', 'm', 'w', 'd', 'h', '\0' }; + + qint64 dfld = fld.trimmed().toLongLong(); + + char suffix = 's'; + if (dfld) { + for (int pos = 0 ; sufs[pos] ; ++pos) { + if (dfld % divs[pos] == 0) { + dfld /= divs[pos]; + suffix = sufs[pos]; + break; + } + } + } + QString msg; + if (dfld < 100) { + msg = QString("%1%2").arg(dfld).arg(suffix); + } else { + /* previous check returned a number too big. The original specification perhaps + was mixed, like 1d 2h, so we try to match with this routine */ + dfld = fld.trimmed().toLongLong(); + msg = ""; + for (int pos = 0 ; sufs[pos] ; ++pos) { + if (dfld / divs[pos] != 0) { + msg += QString(" %1%2").arg(dfld / divs[pos]).arg(sufs[pos]); + dfld %= divs[pos]; + } + } + if (dfld) + msg += QString(" %1s").arg(dfld); + +/* + double net = 0; + QList<qlonglong> durations; + durations.append(1); + durations.append(60); + durations.append(HOUR); + durations.append(DAY); + durations.append(MONTH); + durations.append(YEAR); + QStringList abbrlist = (QStringList() << "s" << "min" << "h" << "d" << "m" << "y"); + bool done = false; + int count = 1; + while (done == false) { + if ((dfld < durations[count]) || (count >= abbrlist.count() - 1)) { + done = true; + net = (double)dfld / (double)(durations[count - 1]); + if (net != 0) { + msg = QString("%1%2") + .arg(net, 0, 'f', 2, QLatin1Char(' ')) + .arg(abbrlist[count - 1]); + } else { + msg = "0s"; + } + } + count += 1; + } +*/ } + + setNumericFld(index, msg); +} + +void ItemFormatterBase::setVolStatusFld(int index, const QString &fld, bool center) +{ + setTextFld(index, fld, center); + + if (fld == "Append" ) { + setBackground(index, Qt::green); + } else if (fld == "Error") { + setBackground(index, Qt::red); + } else if (fld == "Used" || fld == "Full"){ + setBackground(index, Qt::yellow); + } +} + +void ItemFormatterBase::setJobStatusFld(int index, const QString &shortstatus, + const QString &longstatus, bool center) +{ + /* C (created, not yet running) uses the default background */ + static QString greenchars("TR"); + static QString redchars("BEf"); + static QString yellowchars("eDAFSMmsjdctp"); + + setTextFld(index, longstatus, center); + + QString st(shortstatus.trimmed()); + if (greenchars.contains(st, Qt::CaseSensitive)) { + setBackground(index, Qt::green); + } else if (redchars.contains(st, Qt::CaseSensitive)) { + setBackground(index, Qt::red); + } else if (yellowchars.contains(st, Qt::CaseSensitive)){ + setBackground(index, Qt::yellow); + } +} + +void ItemFormatterBase::setJobTypeFld(int index, const QString &fld, bool center) +{ + static QHash<QString, QString> jobt; + if (jobt.isEmpty()) { + jobt.insert("B", QObject::tr("Backup")); + jobt.insert("R", QObject::tr("Restore")); + jobt.insert("V", QObject::tr("Verify")); + jobt.insert("A", QObject::tr("Admin")); + } + + setTextFld(index, jobt.value(fld.trimmed(), fld.trimmed()), center); +} + +void ItemFormatterBase::setJobLevelFld(int index, const QString &fld, bool center) +{ + static QHash<QString, QString> jobt; + if (jobt.isEmpty()) { + jobt.insert("F", QObject::tr("Full")); + jobt.insert("D", QObject::tr("Differential")); + jobt.insert("I", QObject::tr("Incremental")); + jobt.insert("C", QObject::tr("Catalog")); + jobt.insert("O", QObject::tr("VolToCatalog")); + } + + setTextFld(index, jobt.value(fld.trimmed(), fld.trimmed()), center); +} + + + +/*********************************************** + * + * treeitem formatting routines + * + ***********************************************/ +TreeItemFormatter::TreeItemFormatter(QTreeWidgetItem &parent, int indent_level): +ItemFormatterBase(), +wdg(new QTreeWidgetItem(&parent)), +level(indent_level) +{ +} + +void TreeItemFormatter::setTextFld(int index, const QString &fld, bool center) +{ wdg->setData(index, Qt::UserRole, level); if (center) { - wdg->setTextAlignment(index, Qt::AlignHCenter); + setTextAlignment(index, Qt::AlignCenter); } wdg->setText(index, fld.trimmed()); } -void ItemFormatter::setNumericFld(int index, const QString &fld) +void TreeItemFormatter::setTextAlignment(int index, int align) { - wdg->setData(index, Qt::UserRole, level); - wdg->setTextAlignment(index, Qt::AlignRight); - wdg->setText(index, fld.trimmed()); + wdg->setTextAlignment(index, align); } -void ItemFormatter::setBytesFld(int index, const QString &fld) +void TreeItemFormatter::setBackground(int index, const QBrush &qb) { - static const double KB = 1024.0; - static const double MB = KB * KB; - static const double GB = MB * KB; - static const double TB = GB * KB; + wdg->setBackground(index, qb); +} - double dfld = fld.trimmed().toDouble(); - QString msg; - if (dfld >= TB) - msg = QString("%1TB").arg(dfld / TB, 0, 'f', 2); - else if (dfld >= GB) - msg = QString("%1GB").arg(dfld / GB, 0, 'f', 2); - else if (dfld >= MB) - msg = QString("%1MB").arg(dfld / MB, 0, 'f', 2); - else if (dfld >= KB) - msg = QString("%1KB").arg(dfld / KB, 0, 'f', 2); - else - msg = QString::number(dfld, 'f', 0); - - wdg->setData(index, Qt::UserRole, level); - wdg->setTextAlignment(index, Qt::AlignRight); - wdg->setText(index, msg); + +/*********************************************** + * + * tableitem formatting routines + * + ***********************************************/ +TableItemFormatter::TableItemFormatter(QTableWidget &tparent, int trow): +ItemFormatterBase(), +parent(&tparent), +row(trow), +last(NULL) +{ } -void ItemFormatter::setDurationFld(int index, const QString &fld) +void TableItemFormatter::setTextFld(int col, const QString &fld, bool center) { - static const double HOUR = 3600; - static const double DAY = HOUR * 24; - static const double WEEK = DAY * 7; - static const double MONTH = DAY * 30; - static const double YEAR = DAY * 365; + last = new QTableWidgetItem(1); +/* last->setForeground(blackBrush); */ + parent->setItem(row, col, last); + if (center) { + setTextAlignment(col, Qt::AlignCenter); + } + last->setText(fld.trimmed()); +} - double dfld = fld.trimmed().toDouble(); - QString msg; - if (fmod(dfld, YEAR) == 0) - msg = QString("%1y").arg(dfld / YEAR, 0, 'f', 0); - else if (fmod(dfld, MONTH) == 0) - msg = QString("%1m").arg(dfld / MONTH, 0, 'f', 0); - else if (fmod(dfld, WEEK) == 0) - msg = QString("%1w").arg(dfld / WEEK, 0, 'f', 0); - else if (fmod(dfld, DAY) == 0) - msg = QString("%1d").arg(dfld / DAY, 0, 'f', 0); - else if (fmod(dfld, HOUR) == 0) - msg = QString("%1h").arg(dfld / HOUR, 0, 'f', 0); - else - msg = QString("%1s").arg(dfld, 0, 'f', 0); - - wdg->setData(index, Qt::UserRole, level); - wdg->setTextAlignment(index, Qt::AlignRight); - wdg->setText(index, msg); +void TableItemFormatter::setTextAlignment(int /*index*/, int align) +{ + last->setTextAlignment(align); } -void ItemFormatter::setVolStatusFld(int index, const QString &fld, bool center) +void TableItemFormatter::setBackground(int /*index*/, const QBrush &qb) { - setTextFld(index, fld, center); + last->setBackground(qb); +} - if (fld == "Append" ) { - wdg->setBackground(index, Qt::green); - } else if (fld == "Error") { - wdg->setBackground(index, Qt::red); - } else if (fld == "Used" || fld == "Full"){ - wdg->setBackground(index, Qt::yellow); - } +QTableWidgetItem *TableItemFormatter::widget(int col) +{ + return parent->item(row, col); } + +const QTableWidgetItem *TableItemFormatter::widget(int col) const +{ + return parent->item(row, col); +} Modified: trunk/bacula/src/qt-console/util/fmtwidgetitem.h =================================================================== --- trunk/bacula/src/qt-console/util/fmtwidgetitem.h 2008-05-15 01:45:05 UTC (rev 6976) +++ trunk/bacula/src/qt-console/util/fmtwidgetitem.h 2008-05-15 01:54:01 UTC (rev 6977) @@ -34,25 +34,33 @@ */ class QTreeWidgetItem; +class QTableWidget; +class QTableWidgetItem; class QString; +class QBrush; /* - * This class can be used instead of QTreeWidgetItem (it allocates one internally, - * to format data fields. - * All setXXXFld routines receive a column index and the unformatted string value. + * base class for formatters + * */ -class ItemFormatter +class ItemFormatterBase { public: + enum BYTES_CONVERSION { + BYTES_CONVERSION_NONE, + BYTES_CONVERSION_IEC, + BYTES_CONVERSION_SI, + }; - ItemFormatter(QTreeWidgetItem &parent, int indent_level); +public: + virtual ~ItemFormatterBase(); /* Prints Yes if fld is != 0, No otherwise. Centers field if center true*/ void setBoolFld(int index, const QString &fld, bool center = true); void setBoolFld(int index, int fld, bool center = true); /* Normal text field. Centers field if center true*/ - void setTextFld(int index, const QString &fld, bool center = false); + virtual void setTextFld(int index, const QString &fld, bool center = false) = 0; /* Right-aligned text field.*/ void setNumericFld(int index, const QString &fld); @@ -65,91 +73,93 @@ /* fld value interpreted as volume status. Colored accordingly */ void setVolStatusFld(int index, const QString &fld, bool center = true); + + /* fld value interpreted as job status. Colored accordingly */ + void setJobStatusFld(int index, const QString &shortStatus, const QString &longstatus, + bool center = true); + + /* fld value interpreted as job type. */ + void setJobTypeFld(int index, const QString &fld, bool center = false); + + /* fld value interpreted as job level. */ + void setJobLevelFld(int index, const QString &fld, bool center = false); + + static void setBytesConversion(BYTES_CONVERSION b) { + cnvFlag = b; + } + static BYTES_CONVERSION getBytesConversion() { + return cnvFlag; + } - /* access internal widget */ - QTreeWidgetItem *widget() { return wdg; } - const QTreeWidgetItem *widget() const { return wdg; } +protected: + /* only derived classes can create one of these */ + ItemFormatterBase(); + virtual void setTextAlignment(int index, int align) = 0; + virtual void setBackground(int index, const QBrush &) = 0; + private: - QTreeWidgetItem *wdg; - int level; -}; + /* bytes formatted as power-of-two with IEC suffixes (KiB, MiB, and so on) */ + static QString convertBytesIEC(qint64 fld); -#endif /* _FMTWIDGETITEM_H_ */ -#ifndef _FMTWIDGETITEM_H_ -#define _FMTWIDGETITEM_H_ -/* - Bacula® - The Network Backup Solution + /* bytes formatted as power-of-ten with SI suffixes (kB, MB, and so on) */ + static QString convertBytesSI(qint64 fld); - Copyright (C) 2007-2007 Free Software Foundation Europe e.V. +private: + static BYTES_CONVERSION cnvFlag; +}; - 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 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 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of John Walker. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ft...@fs.... -*/ /* - * Version $Id$ - * - * TreeView formatting helpers - Riccardo Ghetta, May 2008 - */ - -class QTreeWidgetItem; -class QString; - -/* * This class can be used instead of QTreeWidgetItem (it allocates one internally, * to format data fields. * All setXXXFld routines receive a column index and the unformatted string value. */ -class ItemFormatter +class TreeItemFormatter : public ItemFormatterBase { public: - ItemFormatter(QTreeWidgetItem &parent, int indent_level); + TreeItemFormatter(QTreeWidgetItem &parent, int indent_level); - /* Prints Yes if fld is != 0, No otherwise. Centers field if center true*/ - void setBoolFld(int index, const QString &fld, bool center = true); + virtual void setTextFld(int index, const QString &fld, bool center = false); - /* Normal text field. Centers field if center true*/ - void setTextFld(int index, const QString &fld, bool center = false); - - /* Right-aligned text field.*/ - void setNumericFld(int index, const QString &fld); - - /* fld value interpreted as bytes and formatted with size suffixes */ - void setBytesFld(int index, const QString &fld); - - /* fld value interpreted as seconds and formatted with y,m,w,h suffixes */ - void setDurationFld(int index, const QString &fld); - - /* fld value interpreted as volume status. Colored accordingly */ - void setVolStatusFld(int index, const QString &fld, bool center = true); - /* access internal widget */ QTreeWidgetItem *widget() { return wdg; } const QTreeWidgetItem *widget() const { return wdg; } +protected: + virtual void setTextAlignment(int index, int align); + virtual void setBackground(int index, const QBrush &); + private: QTreeWidgetItem *wdg; int level; }; +/* + * This class can be used instead of QTableWidgetItem (it allocates one internally, + * to format data fields. + * All setXXXFld routines receive the column and the unformatted string value. + */ +class TableItemFormatter : public ItemFormatterBase +{ +public: + + TableItemFormatter(QTableWidget &parent, int row); + + virtual void setTextFld(int col, const QString &fld, bool center = false); + + /* access internal widget at column col*/ + QTableWidgetItem *widget(int col); + const QTableWidgetItem *widget(int col) const; + +protected: + virtual void setTextAlignment(int index, int align); + virtual void setBackground(int index, const QBrush &); + +private: + QTableWidget *parent; + int row; + QTableWidgetItem *last; +}; + #endif /* _FMTWIDGETITEM_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-05-17 20:36:28
|
Revision: 6981 http://bacula.svn.sourceforge.net/bacula/?rev=6981&view=rev Author: bartleyd2 Date: 2008-05-17 13:32:00 -0700 (Sat, 17 May 2008) Log Message: ----------- This is the joblist sortable patch from Riccardo. Modified Paths: -------------- trunk/bacula/src/qt-console/console/console.cpp trunk/bacula/src/qt-console/joblist/joblist.cpp Modified: trunk/bacula/src/qt-console/console/console.cpp =================================================================== --- trunk/bacula/src/qt-console/console/console.cpp 2008-05-17 13:55:06 UTC (rev 6980) +++ trunk/bacula/src/qt-console/console/console.cpp 2008-05-17 20:32:00 UTC (rev 6981) @@ -585,12 +585,18 @@ void Console::displayToPrompt() { int stat = 0; + QString buf; if (mainWin->m_commDebug) Pmsg0(000, "DisplaytoPrompt\n"); while (!m_at_prompt) { if ((stat=read()) > 0) { - display_text(msg()); + buf += msg(); + if (buf.size() >= 8196) { + display_text(buf); + buf.clear(); + } } } + display_text(buf); if (mainWin->m_commDebug) Pmsg1(000, "endDisplaytoPrompt=%d\n", stat); } @@ -598,12 +604,14 @@ { int stat = 0; if (mainWin->m_commDebug) Pmsg0(000, "discardToPrompt\n"); - while (!m_at_prompt) { - if ((stat=read()) > 0) { - if (mainWin->m_displayAll) display_text(msg()); + if (mainWin->m_displayAll) { + displayToPrompt(); + } else { + while (!m_at_prompt) { + stat=read(); } } - if (mainWin->m_commDebug) Pmsg1(000, "endDisplayToPrompt=%d\n", stat); + if (mainWin->m_commDebug) Pmsg1(000, "endDiscardToPrompt=%d\n", stat); } Modified: trunk/bacula/src/qt-console/joblist/joblist.cpp =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-17 13:55:06 UTC (rev 6980) +++ trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-17 20:32:00 UTC (rev 6981) @@ -138,6 +138,7 @@ mp_tableWidget->setColumnCount(headerlist.size()); mp_tableWidget->setHorizontalHeaderLabels(headerlist); mp_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + mp_tableWidget->setSortingEnabled(false); /* rows move on insert if sorting enabled */ if (mainWin->m_sqlDebug) { Pmsg1(000, "Query cmd : %s\n",query.toUtf8().data()); @@ -205,6 +206,10 @@ row++; } } + /* set default sorting */ + mp_tableWidget->sortByColumn(m_jobIdIndex, Qt::DescendingOrder); + mp_tableWidget->setSortingEnabled(true); + /* Resize the columns */ mp_tableWidget->resizeColumnsToContents(); mp_tableWidget->resizeRowsToContents(); @@ -329,7 +334,7 @@ } } /* Descending */ - query += " ORDER BY Job.Starttime=0 DESC, Job.Starttime DESC, Job.JobId DESC"; + query += " ORDER BY Job.JobId DESC"; /* If Limit check box for limit records returned is checked */ if (limitCheckBox->checkState() == Qt::Checked) { QString limit; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-05-21 11:37:13
|
Revision: 7000 http://bacula.svn.sourceforge.net/bacula/?rev=7000&view=rev Author: bartleyd2 Date: 2008-05-21 04:37:18 -0700 (Wed, 21 May 2008) Log Message: ----------- This is a patch from Riccardo. It is for updating translations. Modified Paths: -------------- trunk/bacula/src/qt-console/clients/clients.cpp trunk/bacula/src/qt-console/fileset/fileset.cpp trunk/bacula/src/qt-console/joblist/joblist.cpp trunk/bacula/src/qt-console/jobs/jobs.cpp trunk/bacula/src/qt-console/mainwin.cpp trunk/bacula/src/qt-console/pages.cpp trunk/bacula/src/qt-console/prefs.ui trunk/bacula/src/qt-console/run/run.cpp trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp Modified: trunk/bacula/src/qt-console/clients/clients.cpp =================================================================== --- trunk/bacula/src/qt-console/clients/clients.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/clients/clients.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -41,6 +41,7 @@ #include "clients/clients.h" #include "run/run.h" #include "status/clientstat.h" +#include "util/fmtwidgetitem.h" Clients::Clients() { @@ -71,22 +72,33 @@ */ void Clients::populateTable() { - QTableWidgetItem *tableItem; QBrush blackBrush(Qt::black); if (!m_console->preventInUseConnect()) return; + + QStringList headerlist = (QStringList() << tr("Client Name") << tr("File Retention") + << tr("Job Retention") << tr("AutoPrune") << tr("ClientId") << tr("Uname") ); + + int sortcol = headerlist.indexOf(tr("Client Name")); + Qt::SortOrder sortord = Qt::AscendingOrder; + if (tableWidget->rowCount()) { + sortcol = tableWidget->horizontalHeader()->sortIndicatorSection(); + sortord = tableWidget->horizontalHeader()->sortIndicatorOrder(); + } + m_checkcurwidget = false; tableWidget->clear(); m_checkcurwidget = true; - QStringList headerlist = (QStringList() << tr("Client Name") << tr("File Retention") - << tr("Job Retention") << tr("AutoPrune") << tr("ClientId") << tr("Uname") ); - tableWidget->setColumnCount(headerlist.count()); tableWidget->setHorizontalHeaderLabels(headerlist); + tableWidget->horizontalHeader()->setHighlightSections(false); tableWidget->setRowCount(m_console->client_list.count()); tableWidget->verticalHeader()->hide(); + tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); + tableWidget->setSortingEnabled(false); /* rows move on insert if sorting enabled */ int row = 0; foreach (QString clientName, m_console->client_list){ @@ -106,31 +118,45 @@ if (m_console->sql_cmd(query, results)) { int resultCount = results.count(); if (resultCount){ - QString resultline; - QString field; - QStringList fieldlist; - resultline = results[resultCount - 1]; - fieldlist = resultline.split("\t"); + /* only use the last one */ + QString resultline = results[resultCount - 1]; + QStringList fieldlist = resultline.split("\t"); - int column = 0; - /* Iterate through fields in the record */ - foreach (field, fieldlist) { - field = field.trimmed(); /* strip leading & trailing spaces */ - tableItem = new QTableWidgetItem(field, 1); - tableItem->setFlags(Qt::ItemIsSelectable); - tableItem->setForeground(blackBrush); - tableItem->setData(Qt::UserRole, 1); - tableWidget->setItem(row, column, tableItem); - column++; - } + TableItemFormatter item(*tableWidget, row); + + /* Iterate through fields in the record */ + QStringListIterator fld(fieldlist); + int col = 0; + + /* name */ + item.setTextFld(col++, fld.next()); + + /* file retention */ + item.setDurationFld(col++, fld.next()); + + /* job retention */ + item.setDurationFld(col++, fld.next()); + + /* autoprune */ + item.setBoolFld(col++, fld.next()); + + /* client id */ + item.setNumericFld(col++, fld.next()); + + /* uname */ + item.setTextFld(col++, fld.next()); + } } row ++; } - /* Resize the columns */ - for(int cnter=0; cnter<headerlist.size(); cnter++) { - tableWidget->resizeColumnToContents(cnter); - } + /* set default sorting */ + tableWidget->sortByColumn(sortcol, sortord); + tableWidget->setSortingEnabled(true); + + /* Resize rows and columns */ + tableWidget->resizeColumnsToContents(); + tableWidget->resizeRowsToContents(); } /* @@ -246,7 +272,7 @@ void Clients::consolePurgeJobs() { if (QMessageBox::warning(this, "Bat", - tr("Are you sure you want to purge ?? !!!.\n" + tr("Are you sure you want to purge all jobs of client \"%1\" ?\n" "The Purge command will delete associated Catalog database records from Jobs and" " Volumes without considering the retention period. Purge works only on the" " Catalog database and does not affect data written to Volumes. This command can" @@ -255,8 +281,9 @@ " you are doing.\n\n" " Is there any way I can get you to click Cancel here? You really don't want to do" " this\n\n" - "Press OK to proceed with the purge operation?"), - QMessageBox::Ok | QMessageBox::Cancel) + "Press OK to proceed with the purge operation?").arg(m_currentlyselected), + QMessageBox::Ok | QMessageBox::Cancel, + QMessageBox::Cancel) == QMessageBox::Cancel) { return; } QString cmd("purge jobs client="); @@ -280,3 +307,4 @@ QTreeWidgetItem *parentItem = mainWin->getFromHash(this); new ClientStat(m_currentlyselected, parentItem); } + Modified: trunk/bacula/src/qt-console/fileset/fileset.cpp =================================================================== --- trunk/bacula/src/qt-console/fileset/fileset.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/fileset/fileset.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -39,6 +39,7 @@ #include <QMenu> #include "bat.h" #include "fileset/fileset.h" +#include "util/fmtwidgetitem.h" FileSet::FileSet() { @@ -70,7 +71,6 @@ */ void FileSet::populateTable() { - QTableWidgetItem *tableItem; QBrush blackBrush(Qt::black); if (!m_console->preventInUseConnect()) @@ -85,8 +85,12 @@ tableWidget->setColumnCount(headerlist.count()); tableWidget->setHorizontalHeaderLabels(headerlist); + tableWidget->horizontalHeader()->setHighlightSections(false); tableWidget->setRowCount(m_console->fileset_list.count()); tableWidget->verticalHeader()->hide(); + tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); + tableWidget->setSortingEnabled(false); /* rows move on insert if sorting enabled */ int row = 0; foreach(QString filesetName, m_console->fileset_list) { @@ -106,31 +110,36 @@ if (m_console->sql_cmd(query, results)) { int resultCount = results.count(); if (resultCount) { - QString resultline; - QString field; - QStringList fieldlist; /* only use the last one */ - resultline = results[resultCount - 1]; - fieldlist = resultline.split("\t"); - int column = 0; - /* Iterate through fields in the record */ - foreach (field, fieldlist) { - field = field.trimmed(); /* strip leading & trailing spaces */ - tableItem = new QTableWidgetItem(field, 1); - tableItem->setFlags(Qt::ItemIsSelectable); - tableItem->setForeground(blackBrush); - tableItem->setData(Qt::UserRole, 1); - tableWidget->setItem(row, column, tableItem); - column++; - } + QString resultline = results[resultCount - 1]; + QStringList fieldlist = resultline.split("\t"); + + TableItemFormatter item(*tableWidget, row); + + /* Iterate through fields in the record */ + QStringListIterator fld(fieldlist); + int col = 0; + + /* name */ + item.setTextFld(col++, fld.next()); + + /* id */ + item.setNumericFld(col++, fld.next()); + + /* creation time */ + item.setTextFld(col++, fld.next()); + } } row++; } - /* Resize the columns */ - for (int cnter=0; cnter<headerlist.size(); cnter++) { - tableWidget->resizeColumnToContents(cnter); - } + /* set default sorting */ + tableWidget->sortByColumn(headerlist.indexOf(tr("Create Time")), Qt::DescendingOrder); + tableWidget->setSortingEnabled(true); + + /* Resize rows and columns */ + tableWidget->resizeColumnsToContents(); + tableWidget->resizeRowsToContents(); } /* Modified: trunk/bacula/src/qt-console/joblist/joblist.cpp =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -137,6 +137,7 @@ m_checkCurrentWidget = true; mp_tableWidget->setColumnCount(headerlist.size()); mp_tableWidget->setHorizontalHeaderLabels(headerlist); + mp_tableWidget->horizontalHeader()->setHighlightSections(false); mp_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); mp_tableWidget->setSortingEnabled(false); /* rows move on insert if sorting enabled */ @@ -195,10 +196,7 @@ jobitem.setJobStatusFld(col++, shortstatus, longstatus); /* purged */ - if (fld.next().toInt()) - jobitem.setTextFld(col++, tr("IS"), true); - else - jobitem.setTextFld(col++, tr("NOT"), true); + jobitem.setBoolFld(col++, fld.next()); /* fileset */ jobitem.setTextFld(col++, fld.next()); @@ -246,10 +244,23 @@ if (jobIndex != -1) { jobComboBox->setCurrentIndex(jobIndex); } + levelComboBox->addItem(tr("Any")); - levelComboBox->addItems( QStringList() << "F" << "D" << "I"); - purgedComboBox->addItem(tr("Any")); - purgedComboBox->addItems( QStringList() << "0" << "1"); + levelComboBox->addItem(job_level_to_str(L_FULL), L_FULL); + levelComboBox->addItem(job_level_to_str(L_INCREMENTAL), L_INCREMENTAL); + levelComboBox->addItem(job_level_to_str(L_DIFFERENTIAL), L_DIFFERENTIAL); + levelComboBox->addItem(job_level_to_str(L_SINCE), L_SINCE); + levelComboBox->addItem(job_level_to_str(L_VERIFY_CATALOG), L_VERIFY_CATALOG); + levelComboBox->addItem(job_level_to_str(L_VERIFY_INIT), L_VERIFY_INIT); + levelComboBox->addItem(job_level_to_str(L_VERIFY_VOLUME_TO_CATALOG), L_VERIFY_VOLUME_TO_CATALOG); + levelComboBox->addItem(job_level_to_str(L_VERIFY_DISK_TO_CATALOG), L_VERIFY_DISK_TO_CATALOG); + levelComboBox->addItem(job_level_to_str(L_VERIFY_DATA), L_VERIFY_DATA); + /* levelComboBox->addItem(job_level_to_str(L_BASE), L_BASE); base jobs ignored */ + + purgedComboBox->addItem(tr("Any"), -1); + purgedComboBox->addItem(tr("No"), 0); + purgedComboBox->addItem(tr("Yes"), 1); + fileSetComboBox->addItem(tr("Any")); fileSetComboBox->addItems(m_console->fileset_list); int filesetIndex = fileSetComboBox->findText(m_filesetName, Qt::MatchExactly); @@ -302,15 +313,15 @@ } int levelIndex = levelComboBox->currentIndex(); if ((levelIndex != -1) && (levelComboBox->itemText(levelIndex) != tr("Any"))) { - conditions.append("Job.Level='" + levelComboBox->itemText(levelIndex) + "'"); + conditions.append( QString("Job.Level='%1'").arg(levelComboBox->itemData(levelIndex).toChar()) ); } int statusIndex = statusComboBox->currentIndex(); if ((statusIndex != -1) && (statusComboBox->itemText(statusIndex) != tr("Any"))) { conditions.append("Status.JobStatusLong='" + statusComboBox->itemText(statusIndex) + "'"); } int purgedIndex = purgedComboBox->currentIndex(); - if ((purgedIndex != -1) && (purgedComboBox->itemText(purgedIndex) != tr("Any"))) { - conditions.append("Job.PurgedFiles='" + purgedComboBox->itemText(purgedIndex) + "'"); + if (purgedIndex != -1 && purgedComboBox->itemData(purgedIndex).toInt() >= 0 ) { + conditions.append("Job.PurgedFiles='" + purgedComboBox->itemData(purgedIndex).toString() + "'"); } int fileSetIndex = fileSetComboBox->currentIndex(); if (fileSetIndex != -1) @@ -372,22 +383,16 @@ */ void JobList::treeWidgetName(QString &desc) { - if ((m_mediaName == "") && (m_clientName == "") && (m_jobName == "") && (m_filesetName == "")) { - desc = "JobList"; + if (m_mediaName != "" ) { + desc = tr("JobList of Volume %1").arg(m_mediaName); + } else if (m_clientName != "" ) { + desc = tr("JobList of Client %1").arg(m_clientName); + } else if (m_jobName != "" ) { + desc = tr("JobList of Job %1").arg(m_jobName); + } else if (m_filesetName != "" ) { + desc = tr("JobList of fileset %1").arg(m_filesetName); } else { - desc = "JobList "; - if (m_mediaName != "" ) { - desc += "of Volume " + m_mediaName; - } - if (m_clientName != "" ) { - desc += "of Client " + m_clientName; - } - if (m_jobName != "" ) { - desc += "of Job " + m_jobName; - } - if (m_filesetName != "" ) { - desc += "of fileset " + m_filesetName; - } + desc = tr("JobList"); } } @@ -406,7 +411,7 @@ jobitem = mp_tableWidget->item(row, m_purgedIndex); QString purged = jobitem->text(); mp_tableWidget->removeAction(actionPurgeFiles); - if (purged == "NOT") { + if (purged == tr("No") ) { mp_tableWidget->addAction(actionPurgeFiles); } /* include restore from time and job action or not */ @@ -414,7 +419,7 @@ QString type = jobitem->text(); mp_tableWidget->removeAction(actionRestoreFromJob); mp_tableWidget->removeAction(actionRestoreFromTime); - if (type == "Backup") { + if (type == tr("Backup")) { mp_tableWidget->addAction(actionRestoreFromJob); mp_tableWidget->addAction(actionRestoreFromTime); } @@ -422,7 +427,7 @@ jobitem = mp_tableWidget->item(row, m_statusIndex); QString status = jobitem->text(); mp_tableWidget->removeAction(actionCancelJob); - if (status == "Running") { + if (status == tr("Running")) { mp_tableWidget->addAction(actionCancelJob); } } @@ -681,9 +686,9 @@ } m_selectedJobsCount = rowList.count(); if (m_selectedJobsCount > 1) { - QString text = QString("Delete list of %1 Jobs").arg(m_selectedJobsCount); - actionDeleteJob->setText(text); + QString text = QString( tr("Delete list of %1 Jobs")).arg(m_selectedJobsCount); + actionDeleteJob->setText(text); } else { - actionDeleteJob->setText("Delete Single Job"); + actionDeleteJob->setText(tr("Delete Single Job")); } } Modified: trunk/bacula/src/qt-console/jobs/jobs.cpp =================================================================== --- trunk/bacula/src/qt-console/jobs/jobs.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/jobs/jobs.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -38,6 +38,7 @@ #include "bat.h" #include "jobs/jobs.h" #include "run/run.h" +#include "util/fmtwidgetitem.h" Jobs::Jobs() { @@ -68,7 +69,6 @@ */ void Jobs::populateTable() { - QTableWidgetItem *tableItem; QBrush blackBrush(Qt::black); if (!m_console->preventInUseConnect()) @@ -86,56 +86,42 @@ tableWidget->setColumnCount(headerlist.count()); tableWidget->setHorizontalHeaderLabels(headerlist); + tableWidget->horizontalHeader()->setHighlightSections(false); tableWidget->setRowCount(m_console->job_list.count()); tableWidget->verticalHeader()->hide(); - int row = 0; + tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); + tableWidget->setSortingEnabled(false); /* rows move on insert if sorting enabled */ - + int row = 0; foreach (QString jobName, m_console->job_list){ job_defaults job_defs; job_defs.job_name = jobName; if (m_console->get_job_defaults(job_defs)) { + int col = 0; + TableItemFormatter jobsItem(*tableWidget, row); + jobsItem.setTextFld(col++, jobName); + jobsItem.setTextFld(col++, job_defs.pool_name); + jobsItem.setTextFld(col++, job_defs.messages_name); + jobsItem.setTextFld(col++, job_defs.client_name); + jobsItem.setTextFld(col++, job_defs.store_name); + jobsItem.setTextFld(col++, job_defs.level); + jobsItem.setTextFld(col++, job_defs.type); + jobsItem.setTextFld(col++, job_defs.fileset_name); + jobsItem.setTextFld(col++, job_defs.catalog_name); + jobsItem.setBoolFld(col++, job_defs.enabled); + jobsItem.setTextFld(col++, job_defs.where); - for (int column=0; column<headerlist.count(); column++) { - tableItem = new QTableWidgetItem(1); - if (column == 0) - tableItem->setText(job_defs.job_name); - if (column == 1) - tableItem->setText(job_defs.pool_name); - if (column == 2) - tableItem->setText(job_defs.messages_name); - if (column == 3) - tableItem->setText(job_defs.client_name); - if (column == 4) - tableItem->setText(job_defs.store_name); - if (column == 5) - tableItem->setText(job_defs.level); - if (column == 6) - tableItem->setText(job_defs.type); - if (column == 7) - tableItem->setText(job_defs.fileset_name); - if (column == 8) - tableItem->setText(job_defs.catalog_name); - if (column == 9) { - if (job_defs.enabled) - tableItem->setText("Yes"); - else - tableItem->setText("No"); - } - if (column == 10) - tableItem->setText(job_defs.where); - - /* tableItem->setFlags(Qt::ItemIsSelectable); */ - tableItem->setForeground(blackBrush); - tableWidget->setItem(row, column, tableItem); - } } row++; } - /* Resize the columns */ - for(int cnter=0; cnter<headerlist.size(); cnter++) { - tableWidget->resizeColumnToContents(cnter); - } + /* set default sorting */ + tableWidget->sortByColumn(headerlist.indexOf(tr("Job Name")), Qt::AscendingOrder); + tableWidget->setSortingEnabled(true); + + /* Resize rows and columns */ + tableWidget->resizeColumnsToContents(); + tableWidget->resizeRowsToContents(); } /* @@ -180,8 +166,7 @@ tableWidget->addAction(actionConsoleDisableJob); tableWidget->addAction(actionConsoleCancel); tableWidget->addAction(actionJobListQuery); - if (type == tr("Backup")) - tableWidget->addAction(actionRunJob); + tableWidget->addAction(actionRunJob); } } } @@ -274,7 +259,7 @@ } /* - * Open a new job run page with the currentley selected "Backup" job + * Open a new job run page with the currently selected job * defaulted In */ void Jobs::runJob() Modified: trunk/bacula/src/qt-console/mainwin.cpp =================================================================== --- trunk/bacula/src/qt-console/mainwin.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/mainwin.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -74,7 +74,7 @@ readPreferences(); treeWidget->clear(); treeWidget->setColumnCount(1); - treeWidget->setHeaderLabel("Select Page"); + treeWidget->setHeaderLabel( tr("Select Page") ); treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu); createPages(); @@ -125,7 +125,7 @@ /* Create Tree Widget Item */ item = new QTreeWidgetItem(topItem); - item->setText(0, "Console"); + item->setText(0, tr("Console")); if (!m_firstItem){ m_firstItem = item; } item->setIcon(0,QIcon(QString::fromUtf8(":images/utilities-terminal.png"))); @@ -453,7 +453,7 @@ bool found = false; foreach(Pages *page, m_pagehash) { if (m_currentConsole == page->console()) { - if (page->name() == "Director Status") { + if (page->name() == tr("Director Status")) { found = true; page->setCurrent(); } @@ -500,10 +500,10 @@ void MainWin::about() { QMessageBox::about(this, tr("About bat"), - tr("<br><h2>bat " VERSION "(" BDATE "), by Dirk H Bartley and Kern Sibbald</h2>" - "<p>Copyright © 2007-" BYEAR " Free Software Foundation Europe e.V." + tr("<br><h2>bat %1 (%2), by Dirk H Bartley and Kern Sibbald</h2>" + "<p>Copyright © 2007-%3 Free Software Foundation Europe e.V." "<p>The <b>bat</b> is an administrative console" - " interface to the Director.")); + " interface to the Director.").arg(VERSION).arg(BDATE).arg(BYEAR)); } void MainWin::help() Modified: trunk/bacula/src/qt-console/pages.cpp =================================================================== --- trunk/bacula/src/qt-console/pages.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/pages.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -258,11 +258,10 @@ */ void Pages::setTitle() { - QString title, director; - treeWidgetName(title); + QString wdgname, director; + treeWidgetName(wdgname); m_console->getDirResName(director); - title += tr(" of Director "); - title += director; + QString title = tr("%1 of Director %2").arg(wdgname).arg(director); setWindowTitle(title); } @@ -289,13 +288,12 @@ void Pages::setContextMenuDockText() { QTreeWidgetItem *item = mainWin->getFromHash(this); - QString docktext(""); + QString docktext; if (isDocked()) { - docktext += tr("UnDock "); + docktext = tr("UnDock %1 Window").arg(item->text(0)); } else { - docktext += tr("ReDock "); + docktext = tr("ReDock %1 Window").arg(item->text(0)); } - docktext += item->text(0) += tr(" Window"); mainWin->actionToggleDock->setText(docktext); setTreeWidgetItemDockColor(); @@ -309,7 +307,7 @@ { 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); Modified: trunk/bacula/src/qt-console/prefs.ui =================================================================== --- trunk/bacula/src/qt-console/prefs.ui 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/prefs.ui 2008-05-21 11:37:18 UTC (rev 7000) @@ -10,9 +10,7 @@ </rect> </property> <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -24,16 +22,28 @@ <iconset>images/bat.png</iconset> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="1" column="0" > <widget class="QTabWidget" name="tabWidget" > <property name="currentIndex" > - <number>0</number> + <number>2</number> </property> <widget class="QWidget" name="tab" > <attribute name="title" > @@ -49,9 +59,7 @@ </rect> </property> <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -109,9 +117,7 @@ </rect> </property> <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -154,12 +160,12 @@ <height>24</height> </rect> </property> + <property name="minimum" > + <number>15</number> + </property> <property name="maximum" > <number>3600</number> </property> - <property name="minimum" > - <number>15</number> - </property> </widget> </widget> </widget> @@ -168,18 +174,28 @@ <string>Joblist</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QGroupBox" name="groupBox_2" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -188,20 +204,44 @@ <string>Jolist Limit Options</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="2" column="0" > <widget class="QCheckBox" name="daysLimit" > <property name="text" > @@ -211,12 +251,12 @@ </item> <item row="3" column="0" > <widget class="QSpinBox" name="daysSpinBox" > + <property name="minimum" > + <number>1</number> + </property> <property name="maximum" > <number>10000</number> </property> - <property name="minimum" > - <number>1</number> - </property> <property name="singleStep" > <number>7</number> </property> @@ -224,12 +264,12 @@ </item> <item row="1" column="0" > <widget class="QSpinBox" name="recordSpinBox" > + <property name="minimum" > + <number>1</number> + </property> <property name="maximum" > <number>10000</number> </property> - <property name="minimum" > - <number>1</number> - </property> <property name="singleStep" > <number>25</number> </property> @@ -288,7 +328,7 @@ </rect> </property> <property name="text" > - <string>Convert Bytes with IEC 1000B = KB</string> + <string>Display Bytes using IEC units (1024B = 1 KiB)</string> </property> </widget> <widget class="QRadioButton" name="radioConvertStandard" > @@ -301,7 +341,7 @@ </rect> </property> <property name="text" > - <string>Convert Bytes with 1024B = KB</string> + <string>Display Bytes using SI units (1000B = 1KB)</string> </property> </widget> </widget> @@ -318,12 +358,24 @@ <string>Context Sensitive List Commands</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QCheckBox" name="executeLongCheckBox" > <property name="text" > @@ -391,18 +443,28 @@ <string>Debug</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QGroupBox" name="groupBox_3" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -411,20 +473,44 @@ <string>Debugging Options</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QCheckBox" name="commDebug" > <property name="text" > @@ -472,18 +558,28 @@ <string>RestoreTree</string> </attribute> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <widget class="QGroupBox" name="groupBox_5" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -492,20 +588,44 @@ <string>Debugging Options</string> </property> <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>9</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="0" column="0" > <layout class="QGridLayout" > - <property name="margin" > + <property name="leftMargin" > <number>0</number> </property> - <property name="spacing" > + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <property name="horizontalSpacing" > <number>6</number> </property> + <property name="verticalSpacing" > + <number>6</number> + </property> <item row="10" column="0" > <widget class="QCheckBox" name="rtRestore2CheckBox" > <property name="text" > @@ -611,12 +731,21 @@ </item> <item row="0" column="0" > <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> <item> <spacer> <property name="orientation" > @@ -633,9 +762,7 @@ <item> <widget class="QLabel" name="headingLabel" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> Modified: trunk/bacula/src/qt-console/run/run.cpp =================================================================== --- trunk/bacula/src/qt-console/run/run.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/run/run.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -133,6 +133,7 @@ (void)index; job_defs.job_name = jobCombo->currentText(); if (m_console->get_job_defaults(job_defs)) { + typeLabel->setText("<H3>"+job_defs.type+"</H3>"); filesetCombo->setCurrentIndex(filesetCombo->findText(job_defs.fileset_name, Qt::MatchExactly)); levelCombo->setCurrentIndex(levelCombo->findText(job_defs.level, Qt::MatchExactly)); clientCombo->setCurrentIndex(clientCombo->findText(job_defs.client_name, Qt::MatchExactly)); Modified: trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp =================================================================== --- trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp 2008-05-20 15:42:58 UTC (rev 6999) +++ trunk/bacula/src/qt-console/util/fmtwidgetitem.cpp 2008-05-21 11:37:18 UTC (rev 7000) @@ -42,6 +42,7 @@ #include <QString> #include <QStringList> #include <math.h> +#include "bacula.h" #include "fmtwidgetitem.h" /*********************************************** @@ -295,29 +296,22 @@ void ItemFormatterBase::setJobTypeFld(int index, const QString &fld, bool center) { - static QHash<QString, QString> jobt; - if (jobt.isEmpty()) { - jobt.insert("B", QObject::tr("Backup")); - jobt.insert("R", QObject::tr("Restore")); - jobt.insert("V", QObject::tr("Verify")); - jobt.insert("A", QObject::tr("Admin")); + QByteArray jtype(fld.trimmed().toAscii()); + if (jtype.size()) { + setTextFld(index, job_type_to_str(jtype[0]), center); + } else { + setTextFld(index, "", center); } - - setTextFld(index, jobt.value(fld.trimmed(), fld.trimmed()), center); } void ItemFormatterBase::setJobLevelFld(int index, const QString &fld, bool center) { - static QHash<QString, QString> jobt; - if (jobt.isEmpty()) { - jobt.insert("F", QObject::tr("Full")); - jobt.insert("D", QObject::tr("Differential")); - jobt.insert("I", QObject::tr("Incremental")); - jobt.insert("C", QObject::tr("Catalog")); - jobt.insert("O", QObject::tr("VolToCatalog")); + QByteArray lvl(fld.trimmed().toAscii()); + if (lvl.size()) { + setTextFld(index, job_level_to_str(lvl[0]), center); + } else { + setTextFld(index, "", center); } - - setTextFld(index, jobt.value(fld.trimmed(), fld.trimmed()), center); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-05-29 01:19:24
|
Revision: 7051 http://bacula.svn.sourceforge.net/bacula/?rev=7051&view=rev Author: bartleyd2 Date: 2008-05-28 18:19:31 -0700 (Wed, 28 May 2008) Log Message: ----------- This is the application of a patch from Ricardo. Includes a great qty of translation changes as well as some great changes to the jobplot screen. Modified Paths: -------------- trunk/bacula/src/qt-console/bat.pro.in trunk/bacula/src/qt-console/bcomm/dircomm.cpp trunk/bacula/src/qt-console/console/console.cpp trunk/bacula/src/qt-console/jobgraphs/jobplot.cpp trunk/bacula/src/qt-console/jobgraphs/jobplot.h trunk/bacula/src/qt-console/joblist/joblist.cpp trunk/bacula/src/qt-console/joblist/joblist.h trunk/bacula/src/qt-console/mainwin.cpp trunk/bacula/src/qt-console/mainwin.h trunk/bacula/src/qt-console/mount/mount.cpp trunk/bacula/src/qt-console/restore/restore.cpp trunk/bacula/src/qt-console/restore/restoretree.cpp trunk/bacula/src/qt-console/status/clientstat.cpp trunk/bacula/src/qt-console/status/dirstat.cpp trunk/bacula/src/qt-console/status/storstat.cpp Added Paths: ----------- trunk/bacula/src/qt-console/util/comboutil.cpp trunk/bacula/src/qt-console/util/comboutil.h Modified: trunk/bacula/src/qt-console/bat.pro.in =================================================================== --- trunk/bacula/src/qt-console/bat.pro.in 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/bat.pro.in 2008-05-29 01:19:31 UTC (rev 7051) @@ -147,8 +147,8 @@ SOURCES += status/storstat.cpp # Utility sources -HEADERS += util/fmtwidgetitem.h -SOURCES += util/fmtwidgetitem.cpp +HEADERS += util/fmtwidgetitem.h util/comboutil.h +SOURCES += util/fmtwidgetitem.cpp util/comboutil.cpp INSTALLS += bins INSTALLS += confs Modified: trunk/bacula/src/qt-console/bcomm/dircomm.cpp =================================================================== --- trunk/bacula/src/qt-console/bcomm/dircomm.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/bcomm/dircomm.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -107,11 +107,11 @@ m_dir = dir; if (!m_dir) { - mainWin->set_status("No Director found."); + mainWin->set_status( tr("No Director found.") ); return; } if (m_sock) { - mainWin->set_status("Already connected."); + mainWin->set_status( tr("Already connected.") ); return; } @@ -177,7 +177,7 @@ _("Director daemon"), m_dir->address, NULL, m_dir->DIRport, 0); if (m_sock == NULL) { - mainWin->set_status("Connection failed"); + mainWin->set_status( tr("Connection failed") ); return; } else { /* Update page selector to green to indicate that Console is connected */ @@ -289,7 +289,7 @@ QApplication::setOverrideCursor(Qt::WaitCursor); write(msg); } else { - mainWin->set_status(" Director not connected. Click on connect button."); + mainWin->set_status( tr(" Director not connected. Click on connect button.") ); mainWin->actionConnect->setIcon(QIcon(":images/disconnected.png")); QBrush redBrush(Qt::red); QTreeWidgetItem *item = mainWin->getFromHash(this); @@ -518,10 +518,9 @@ if (is_connected()) { return true; } else { - QString message("Director "); - message += " is curerntly disconnected\n Please reconnect!!"; - QMessageBox::warning(this, tr("Bat"), - tr(message.toUtf8().data()), QMessageBox::Ok ); + QString message( tr("Director is currently disconnected\n Please reconnect!")); + QMessageBox::warning(this, "Bat", + message.toUtf8().data(), QMessageBox::Ok ); return false; } } Modified: trunk/bacula/src/qt-console/console/console.cpp =================================================================== --- trunk/bacula/src/qt-console/console/console.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/console/console.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -129,11 +129,11 @@ m_textEdit = textEdit; /* our console screen */ if (!m_dir) { - mainWin->set_status("No Director found."); + mainWin->set_status( tr("No Director found.")); goto bail_out; } if (m_sock) { - mainWin->set_status("Already connected."); + mainWin->set_status( tr("Already connected.")); goto bail_out; } @@ -187,7 +187,7 @@ if (!m_dir->tls_ctx) { display_textf(_("Failed to initialize TLS context for Director \"%s\".\n"), m_dir->name()); - mainWin->set_status("Connection failed"); + mainWin->set_status( tr("Connection failed") ); goto bail_out; } } @@ -537,7 +537,7 @@ QApplication::setOverrideCursor(Qt::WaitCursor); write(msg); } else { - mainWin->set_status(" Director not connected. Click on connect button."); + mainWin->set_status( tr(" Director not connected. Click on connect button.")); mainWin->actionConnect->setIcon(QIcon(":images/disconnected.png")); QBrush redBrush(Qt::red); QTreeWidgetItem *item = mainWin->getFromHash(this); @@ -799,10 +799,8 @@ if (is_connected()) { return true; } else { - QString message("Director "); - message += " is currently disconnected\n Please reconnect!!"; - QMessageBox::warning(this, "Bat", - tr(message.toUtf8().data()), QMessageBox::Ok ); + QString message = tr("Director is currently disconnected\nPlease reconnect!"); + QMessageBox::warning(this, "Bat", message, QMessageBox::Ok ); return false; } } @@ -814,27 +812,21 @@ bool Console::preventInUseConnect() { if (!is_connected()) { - QString message("Director "); - message += m_dir->name(); - message += " is currently disconnected\n Please reconnect!!"; - QMessageBox::warning(this, "Bat", - tr(message.toUtf8().data()), QMessageBox::Ok ); + QString message = tr("Director %1 is currently disconnected\n" + "Please reconnect!").arg(m_dir->name()); + QMessageBox::warning(this, "Bat", message, QMessageBox::Ok ); return false; } else if (!m_at_main_prompt){ - QString message("Director "); - message += m_dir->name(); - message += " is currently busy\n Please complete restore or other " - " operation !! This is a limitation that will be resolved before a beta" - " release. This is currently an alpha release."; - QMessageBox::warning(this, "Bat", - tr(message.toUtf8().data()), QMessageBox::Ok ); + QString message = tr("Director %1 is currently busy\n Please complete " + "restore or other operation! This is a limitation " + "that will be resolved before a beta release. " + "This is currently an alpha release.").arg(m_dir->name()); + QMessageBox::warning(this, "Bat", message, QMessageBox::Ok ); return false; } else if (!m_at_prompt){ - QString message("Director "); - message += m_dir->name(); - message += " is currently not at a prompt\n Please try again!!"; - QMessageBox::warning(this, "Bat", - tr(message.toUtf8().data()), QMessageBox::Ok ); + QString message = tr("Director %1 is currently not at a prompt\n" + " Please try again!").arg(m_dir->name()); + QMessageBox::warning(this, "Bat", message, QMessageBox::Ok ); return false; } else { return true; Modified: trunk/bacula/src/qt-console/jobgraphs/jobplot.cpp =================================================================== --- trunk/bacula/src/qt-console/jobgraphs/jobplot.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/jobgraphs/jobplot.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -37,6 +37,7 @@ #include <QtGui> #include "bat.h" +#include "util/comboutil.h" #include "jobgraphs/jobplot.h" @@ -76,7 +77,7 @@ JobPlot::JobPlot(QTreeWidgetItem *parentTreeWidgetItem, JobPlotPass &passVals) { setupUserInterface(); - m_name = "JobPlot"; + m_name = tr("JobPlot"); pgInitialize(parentTreeWidgetItem); readSplitterSettings(); QTreeWidgetItem* thisitem = mainWin->getFromHash(this); @@ -134,13 +135,13 @@ */ void JobPlot::setupControls() { - QStringList graphType = QStringList() << /* "Fitted" <<*/ "Sticks" << "Lines" << "Steps" << "None"; + QStringList graphType = QStringList() << /* tr("Fitted") <<*/ tr("Sticks") + << tr("Lines") << tr("Steps") << tr("None"); controls->plotTypeCombo->addItems(graphType); - QStringList symbolType = QStringList() << "Ellipse" << "Rect" << "Diamond" << "Triangle" - << "DTrianle" << "UTriangle" << "LTriangle" << "RTriangle" << "Cross" << "XCross" - << "HLine" << "Vline" << "Star1" << "Star2" << "Hexagon" << "None"; - controls->fileSymbolTypeCombo->addItems(symbolType); - controls->byteSymbolTypeCombo->addItems(symbolType); + + fillSymbolCombo(controls->fileSymbolTypeCombo); + fillSymbolCombo(controls->byteSymbolTypeCombo); + readControlSettings(); controls->fileCheck->setCheckState(Qt::Checked); @@ -152,24 +153,25 @@ connect(controls->byteCheck, SIGNAL(stateChanged(int)), this, SLOT(byteCheckChanged(int))); connect(controls->refreshButton, SIGNAL(pressed()), this, SLOT(reGraph())); - controls->clientComboBox->addItem("Any"); + controls->clientComboBox->addItem(tr("Any")); controls->clientComboBox->addItems(m_console->client_list); QStringList volumeList; m_console->getVolumeList(volumeList); - controls->volumeComboBox->addItem("Any"); + controls->volumeComboBox->addItem(tr("Any")); controls->volumeComboBox->addItems(volumeList); - controls->jobComboBox->addItem("Any"); + controls->jobComboBox->addItem(tr("Any")); controls->jobComboBox->addItems(m_console->job_list); - controls->levelComboBox->addItem("Any"); - controls->levelComboBox->addItems( QStringList() << "F" << "D" << "I"); - controls->purgedComboBox->addItem("Any"); - controls->purgedComboBox->addItems( QStringList() << "0" << "1"); - controls->fileSetComboBox->addItem("Any"); + + levelComboFill(controls->levelComboBox); + + boolComboFill(controls->purgedComboBox); + + controls->fileSetComboBox->addItem(tr("Any")); controls->fileSetComboBox->addItems(m_console->fileset_list); QStringList statusLongList; m_console->getStatusList(statusLongList); - controls->statusComboBox->addItem("Any"); + controls->statusComboBox->addItem(tr("Any")); controls->statusComboBox->addItems(statusLongList); if (m_pass.use) { @@ -177,27 +179,15 @@ controls->limitSpinBox->setValue(m_pass.recordLimitSpin); controls->daysCheckBox->setCheckState(m_pass.daysLimitCheck); controls->daysSpinBox->setValue(m_pass.daysLimitSpin); - int jobIndex = controls->jobComboBox->findText(m_pass.jobCombo, Qt::MatchExactly); - if (jobIndex != -1) - controls->jobComboBox->setCurrentIndex(jobIndex); - int clientIndex = controls->clientComboBox->findText(m_pass.clientCombo, Qt::MatchExactly); - if (clientIndex != -1) - controls->clientComboBox->setCurrentIndex(clientIndex); - int volumeIndex = controls->volumeComboBox->findText(m_pass.volumeCombo, Qt::MatchExactly); - if (volumeIndex != -1) - controls->volumeComboBox->setCurrentIndex(volumeIndex); - int filesetIndex = controls->fileSetComboBox->findText(m_pass.fileSetCombo, Qt::MatchExactly); - if (filesetIndex != -1) - controls->fileSetComboBox->setCurrentIndex(filesetIndex); - int purgedIndex = controls->purgedComboBox->findText(m_pass.purgedCombo, Qt::MatchExactly); - if (purgedIndex != -1) - controls->purgedComboBox->setCurrentIndex(purgedIndex); - int levelIndex = controls->levelComboBox->findText(m_pass.levelCombo, Qt::MatchExactly); - if (levelIndex != -1) - controls->levelComboBox->setCurrentIndex(levelIndex); - int statusIndex = controls->statusComboBox->findText(m_pass.statusCombo, Qt::MatchExactly); - if (statusIndex != -1) - controls->statusComboBox->setCurrentIndex(statusIndex); + + comboSel(controls->jobComboBox, m_pass.jobCombo); + comboSel(controls->clientComboBox, m_pass.clientCombo); + comboSel(controls->volumeComboBox, m_pass.volumeCombo); + comboSel(controls->fileSetComboBox, m_pass.fileSetCombo); + comboSel(controls->purgedComboBox, m_pass.purgedCombo); + comboSel(controls->levelComboBox, m_pass.levelCombo); + comboSel(controls->statusComboBox, m_pass.statusCombo); + } else { /* Set Defaults for check and spin for limits */ controls->limitCheckBox->setCheckState(mainWin->m_recordLimitCheck ? Qt::Checked : Qt::Unchecked); @@ -225,30 +215,19 @@ " LEFT OUTER JOIN FileSet ON (FileSet.FileSetId=Job.FileSetId)"; QStringList conditions; - int jobIndex = controls->jobComboBox->currentIndex(); - if ((jobIndex != -1) && (controls->jobComboBox->itemText(jobIndex) != "Any")) - conditions.append("Job.Name='" + controls->jobComboBox->itemText(jobIndex) + "'"); - int clientIndex = controls->clientComboBox->currentIndex(); - if ((clientIndex != -1) && (controls->clientComboBox->itemText(clientIndex) != "Any")) - conditions.append("Client.Name='" + controls->clientComboBox->itemText(clientIndex) + "'"); + comboCond(conditions, controls->jobComboBox, "Job.Name"); + comboCond(conditions, controls->clientComboBox, "Client.Name"); int volumeIndex = controls->volumeComboBox->currentIndex(); - if ((volumeIndex != -1) && (controls->volumeComboBox->itemText(volumeIndex) != "Any")) { + if ((volumeIndex != -1) && (controls->volumeComboBox->itemText(volumeIndex) != tr("Any"))) { query += " LEFT OUTER JOIN JobMedia ON (JobMedia.JobId=Job.JobId)" " LEFT OUTER JOIN Media ON (JobMedia.MediaId=Media.MediaId)"; conditions.append("Media.VolumeName='" + controls->volumeComboBox->itemText(volumeIndex) + "'"); } - int fileSetIndex = controls->fileSetComboBox->currentIndex(); - if ((fileSetIndex != -1) && (controls->fileSetComboBox->itemText(fileSetIndex) != "Any")) - conditions.append("FileSet.FileSet='" + controls->fileSetComboBox->itemText(fileSetIndex) + "'"); - int purgedIndex = controls->purgedComboBox->currentIndex(); - if ((purgedIndex != -1) && (controls->purgedComboBox->itemText(purgedIndex) != "Any")) - conditions.append("Job.PurgedFiles='" + controls->purgedComboBox->itemText(purgedIndex) + "'"); - int levelIndex = controls->levelComboBox->currentIndex(); - if ((levelIndex != -1) && (controls->levelComboBox->itemText(levelIndex) != "Any")) - conditions.append("Job.Level='" + controls->levelComboBox->itemText(levelIndex) + "'"); - int statusIndex = controls->statusComboBox->currentIndex(); - if ((statusIndex != -1) && (controls->statusComboBox->itemText(statusIndex) != "Any")) - conditions.append("Status.JobStatusLong='" + controls->statusComboBox->itemText(statusIndex) + "'"); + comboCond(conditions, controls->fileSetComboBox, "FileSet.FileSet"); + boolComboCond(conditions, controls->purgedComboBox, "Job.PurgedFiles"); + levelComboCond(conditions, controls->levelComboBox, "Job.Level"); + comboCond(conditions, controls->statusComboBox, "Status.JobStatusLong"); + /* If Limit check box For limit by days is checked */ if (controls->daysCheckBox->checkState() == Qt::Checked) { QDateTime stamp = QDateTime::currentDateTime().addDays(-controls->daysSpinBox->value()); @@ -306,10 +285,10 @@ row++; } } - if ((controls->volumeComboBox->itemText(volumeIndex) != "Any") && (results.count() == 0)){ + if ((controls->volumeComboBox->itemText(volumeIndex) != tr("Any")) && (results.count() == 0)){ /* for context sensitive searches, let the user know if there were no * * results */ - QMessageBox::warning(this, tr("Bat"), + QMessageBox::warning(this, "Bat", tr("The Jobs query returned no results.\n" "Press OK to continue?"), QMessageBox::Ok ); } @@ -354,23 +333,23 @@ */ void JobPlot::addCurve() { - m_jobPlot->setTitle("Files and Bytes backed up"); + m_jobPlot->setTitle(tr("Files and Bytes backed up")); m_jobPlot->insertLegend(new QwtLegend(), QwtPlot::RightLegend); // Set axis titles m_jobPlot->enableAxis(QwtPlot::yRight); - m_jobPlot->setAxisTitle(QwtPlot::yRight, "<-- Bytes Kb"); - m_jobPlot->setAxisTitle(m_jobPlot->xBottom, "date of backup -->"); - m_jobPlot->setAxisTitle(m_jobPlot->yLeft, "Number of Files -->"); + m_jobPlot->setAxisTitle(QwtPlot::yRight, tr("<-- Bytes Kb")); + m_jobPlot->setAxisTitle(m_jobPlot->xBottom, tr("date of backup -->")); + m_jobPlot->setAxisTitle(m_jobPlot->yLeft, tr("Number of Files -->")); m_jobPlot->setAxisScaleDraw(QwtPlot::xBottom, new DateTimeScaleDraw()); // Insert new curves - m_fileCurve = new QwtPlotCurve("Files"); + m_fileCurve = new QwtPlotCurve( tr("Files") ); m_fileCurve->setPen(QPen(Qt::red)); m_fileCurve->setCurveType(m_fileCurve->Yfx); m_fileCurve->setYAxis(QwtPlot::yLeft); - m_byteCurve = new QwtPlotCurve("Bytes"); + m_byteCurve = new QwtPlotCurve(tr("Bytes")); m_byteCurve->setPen(QPen(Qt::blue)); m_byteCurve->setCurveType(m_byteCurve->Yfx); m_byteCurve->setYAxis(QwtPlot::yRight); @@ -430,19 +409,19 @@ void JobPlot::setPlotType(QString currentText) { QwtPlotCurve::CurveStyle style = QwtPlotCurve::NoCurve; - if (currentText == "Fitted") { + if (currentText == tr("Fitted")) { style = QwtPlotCurve::Lines; m_fileCurve->setCurveAttribute(QwtPlotCurve::Fitted); m_byteCurve->setCurveAttribute(QwtPlotCurve::Fitted); - } else if (currentText == "Sticks") { + } else if (currentText == tr("Sticks")) { style = QwtPlotCurve::Sticks; - } else if (currentText == "Lines") { + } else if (currentText == tr("Lines")) { style = QwtPlotCurve::Lines; m_fileCurve->setCurveAttribute(QwtPlotCurve::Fitted); m_byteCurve->setCurveAttribute(QwtPlotCurve::Fitted); - } else if (currentText == "Steps") { + } else if (currentText == tr("Steps")) { style = QwtPlotCurve::Steps; - } else if (currentText == "None") { + } else if (currentText == tr("None")) { style = QwtPlotCurve::NoCurve; } m_fileCurve->setStyle(style); @@ -450,6 +429,27 @@ m_jobPlot->replot(); } +void JobPlot::fillSymbolCombo(QComboBox *q) +{ + q->addItem( tr("Ellipse"), (int)QwtSymbol::Ellipse); + q->addItem( tr("Rect"), (int)QwtSymbol::Rect); + q->addItem( tr("Diamond"), (int)QwtSymbol::Diamond); + q->addItem( tr("Triangle"), (int)QwtSymbol::Triangle); + q->addItem( tr("DTrianle"), (int)QwtSymbol::DTriangle); + q->addItem( tr("UTriangle"), (int)QwtSymbol::UTriangle); + q->addItem( tr("LTriangle"), (int)QwtSymbol::LTriangle); + q->addItem( tr("RTriangle"), (int)QwtSymbol::RTriangle); + q->addItem( tr("Cross"), (int)QwtSymbol::Cross); + q->addItem( tr("XCross"), (int)QwtSymbol::XCross); + q->addItem( tr("HLine"), (int)QwtSymbol::HLine); + q->addItem( tr("Vline"), (int)QwtSymbol::VLine); + q->addItem( tr("Star1"), (int)QwtSymbol::Star1); + q->addItem( tr("Star2"), (int)QwtSymbol::Star2); + q->addItem( tr("Hexagon"), (int)QwtSymbol::Hexagon); + q->addItem( tr("None"), (int)QwtSymbol::NoSymbol); +} + + /* * slot to respond to the symbol type combo changing */ @@ -467,44 +467,20 @@ QwtSymbol sym; sym.setPen(QColor(Qt::black)); sym.setSize(7); - if (index == 0) { - sym.setStyle(QwtSymbol::Ellipse); - } else if (index == 1) { - sym.setStyle(QwtSymbol::Rect); - } else if (index == 2) { - sym.setStyle(QwtSymbol::Diamond); - } else if (index == 3) { - sym.setStyle(QwtSymbol::Triangle); - } else if (index == 4) { - sym.setStyle(QwtSymbol::DTriangle); - } else if (index == 5) { - sym.setStyle(QwtSymbol::UTriangle); - } else if (index == 6) { - sym.setStyle(QwtSymbol::LTriangle); - } else if (index == 7) { - sym.setStyle(QwtSymbol::RTriangle); - } else if (index == 8) { - sym.setStyle(QwtSymbol::Cross); - } else if (index == 9) { - sym.setStyle(QwtSymbol::XCross); - } else if (index == 10) { - sym.setStyle(QwtSymbol::HLine); - } else if (index == 11) { - sym.setStyle(QwtSymbol::VLine); - } else if (index == 12) { - sym.setStyle(QwtSymbol::Star1); - } else if (index == 13) { - sym.setStyle(QwtSymbol::Star2); - } else if (index == 14) { - sym.setStyle(QwtSymbol::Hexagon); - } - if (type == 0) { + + QVariant style; + if (0 == type) { + style = controls->fileSymbolTypeCombo->itemData(index); + sym.setStyle( (QwtSymbol::Style)style.toInt() ); sym.setBrush(QColor(Qt::yellow)); m_fileCurve->setSymbol(sym); - } - if (type == 1) { + + } else { + style = controls->byteSymbolTypeCombo->itemData(index); + sym.setStyle( (QwtSymbol::Style)style.toInt() ); sym.setBrush(QColor(Qt::blue)); m_byteCurve->setSymbol(sym); + } m_jobPlot->replot(); } Modified: trunk/bacula/src/qt-console/jobgraphs/jobplot.h =================================================================== --- trunk/bacula/src/qt-console/jobgraphs/jobplot.h 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/jobgraphs/jobplot.h 2008-05-29 01:19:31 UTC (rev 7051) @@ -128,6 +128,7 @@ void reGraph(); private: + void fillSymbolCombo(QComboBox *q); void setSymbolType(int, int type); void addCurve(); void writeSettings(); Modified: trunk/bacula/src/qt-console/joblist/joblist.cpp =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/joblist/joblist.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -41,6 +41,7 @@ #include "jobgraphs/jobplot.h" #endif #include "util/fmtwidgetitem.h" +#include "util/comboutil.h" /* * Constructor for the class @@ -226,47 +227,26 @@ if (!m_populated) { clientComboBox->addItem(tr("Any")); clientComboBox->addItems(m_console->client_list); - int clientIndex = clientComboBox->findText(m_clientName, Qt::MatchExactly); - if (clientIndex != -1) - clientComboBox->setCurrentIndex(clientIndex); + comboSel(clientComboBox, m_clientName); QStringList volumeList; m_console->getVolumeList(volumeList); volumeComboBox->addItem(tr("Any")); volumeComboBox->addItems(volumeList); - int volumeIndex = volumeComboBox->findText(m_mediaName, Qt::MatchExactly); - if (volumeIndex != -1) { - volumeComboBox->setCurrentIndex(volumeIndex); - } + comboSel(volumeComboBox, m_mediaName); + jobComboBox->addItem(tr("Any")); jobComboBox->addItems(m_console->job_list); - int jobIndex = jobComboBox->findText(m_jobName, Qt::MatchExactly); - if (jobIndex != -1) { - jobComboBox->setCurrentIndex(jobIndex); - } + comboSel(jobComboBox, m_jobName); - levelComboBox->addItem(tr("Any")); - levelComboBox->addItem(job_level_to_str(L_FULL), L_FULL); - levelComboBox->addItem(job_level_to_str(L_INCREMENTAL), L_INCREMENTAL); - levelComboBox->addItem(job_level_to_str(L_DIFFERENTIAL), L_DIFFERENTIAL); - levelComboBox->addItem(job_level_to_str(L_SINCE), L_SINCE); - levelComboBox->addItem(job_level_to_str(L_VERIFY_CATALOG), L_VERIFY_CATALOG); - levelComboBox->addItem(job_level_to_str(L_VERIFY_INIT), L_VERIFY_INIT); - levelComboBox->addItem(job_level_to_str(L_VERIFY_VOLUME_TO_CATALOG), L_VERIFY_VOLUME_TO_CATALOG); - levelComboBox->addItem(job_level_to_str(L_VERIFY_DISK_TO_CATALOG), L_VERIFY_DISK_TO_CATALOG); - levelComboBox->addItem(job_level_to_str(L_VERIFY_DATA), L_VERIFY_DATA); - /* levelComboBox->addItem(job_level_to_str(L_BASE), L_BASE); base jobs ignored */ + levelComboFill(levelComboBox); - purgedComboBox->addItem(tr("Any"), -1); - purgedComboBox->addItem(tr("No"), 0); - purgedComboBox->addItem(tr("Yes"), 1); + boolComboFill(purgedComboBox); fileSetComboBox->addItem(tr("Any")); fileSetComboBox->addItems(m_console->fileset_list); - int filesetIndex = fileSetComboBox->findText(m_filesetName, Qt::MatchExactly); - if (filesetIndex != -1) { - fileSetComboBox->setCurrentIndex(filesetIndex); - } + comboSel(fileSetComboBox, m_filesetName); + QStringList statusLongList; m_console->getStatusList(statusLongList); statusComboBox->addItem(tr("Any")); @@ -299,36 +279,14 @@ " LEFT OUTER JOIN Media ON (JobMedia.MediaId=Media.MediaId) "; conditions.append("Media.VolumeName='" + m_mediaName + "'"); } - int clientIndex = clientComboBox->currentIndex(); - if (clientIndex != -1) - m_clientName = clientComboBox->itemText(clientIndex); - if (m_clientName != tr("Any")) { - conditions.append("Client.Name='" + m_clientName + "'"); - } - int jobIndex = jobComboBox->currentIndex(); - if (jobIndex != -1) - m_jobName = jobComboBox->itemText(jobIndex); - if ((jobIndex != -1) && (jobComboBox->itemText(jobIndex) != tr("Any"))) { - conditions.append("Job.Name='" + jobComboBox->itemText(jobIndex) + "'"); - } - int levelIndex = levelComboBox->currentIndex(); - if ((levelIndex != -1) && (levelComboBox->itemText(levelIndex) != tr("Any"))) { - conditions.append( QString("Job.Level='%1'").arg(levelComboBox->itemData(levelIndex).toChar()) ); - } - int statusIndex = statusComboBox->currentIndex(); - if ((statusIndex != -1) && (statusComboBox->itemText(statusIndex) != tr("Any"))) { - conditions.append("Status.JobStatusLong='" + statusComboBox->itemText(statusIndex) + "'"); - } - int purgedIndex = purgedComboBox->currentIndex(); - if (purgedIndex != -1 && purgedComboBox->itemData(purgedIndex).toInt() >= 0 ) { - conditions.append("Job.PurgedFiles='" + purgedComboBox->itemData(purgedIndex).toString() + "'"); - } - int fileSetIndex = fileSetComboBox->currentIndex(); - if (fileSetIndex != -1) - m_filesetName = fileSetComboBox->itemText(fileSetIndex); - if ((fileSetIndex != -1) && (fileSetComboBox->itemText(fileSetIndex) != tr("Any"))) { - conditions.append("FileSet.FileSet='" + fileSetComboBox->itemText(fileSetIndex) + "'"); - } + + comboCond(conditions, clientComboBox, "Client.Name"); + comboCond(conditions, jobComboBox, "Job.Name"); + levelComboCond(conditions, levelComboBox, "Job.Level"); + comboCond(conditions, statusComboBox, "Status.JobStatusLong"); + boolComboCond(conditions, purgedComboBox, "Job.PurgedFiles"); + comboCond(conditions, fileSetComboBox, "FileSet.FileSet"); + /* If Limit check box For limit by days is checked */ if (daysCheckBox->checkState() == Qt::Checked) { QDateTime stamp = QDateTime::currentDateTime().addDays(-daysSpinBox->value()); @@ -448,6 +406,7 @@ connect(graphButton, SIGNAL(pressed()), this, SLOT(graphTable())); #else graphButton->setEnabled(false); + graphButton->setVisible(false); #endif /* for the tableItemChanged to maintain m_currentJob */ connect(mp_tableWidget, SIGNAL( @@ -617,9 +576,9 @@ /* * Graph this table */ -#ifdef HAVE_QWT void JobList::graphTable() { +#ifdef HAVE_QWT JobPlotPass pass; pass.recordLimitCheck = limitCheckBox->checkState(); pass.daysLimitCheck = daysCheckBox->checkState(); @@ -635,8 +594,8 @@ pass.use = true; QTreeWidgetItem* pageSelectorTreeWidgetItem = mainWin->getFromHash(this); new JobPlot(pageSelectorTreeWidgetItem, pass); -} #endif +} /* * Save user settings associated with this page Modified: trunk/bacula/src/qt-console/joblist/joblist.h =================================================================== --- trunk/bacula/src/qt-console/joblist/joblist.h 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/joblist/joblist.h 2008-05-29 01:19:31 UTC (rev 7051) @@ -68,9 +68,7 @@ void preRestoreFromTime(); void showLogForJob(); void consoleCancelJob(); -#ifdef HAVE_QWT void graphTable(); -#endif private: void createConnections(); Modified: trunk/bacula/src/qt-console/mainwin.cpp =================================================================== --- trunk/bacula/src/qt-console/mainwin.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/mainwin.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -83,6 +83,11 @@ createConnections(); +#ifndef HAVE_QWT + actionJobPlot->setEnabled(false); + actionJobPlot->setVisible(false); +#endif + this->show(); readSettings(); @@ -468,14 +473,14 @@ new prerestorePage(); } -#ifdef HAVE_QWT void MainWin::jobPlotButtonClicked() { +#ifdef HAVE_QWT JobPlotPass pass; pass.use = false; new JobPlot(NULL, pass); +#endif } -#endif /* * The user just finished typing a line in the command line edit box @@ -687,6 +692,9 @@ break; } prefs.openPlotCheckBox->setCheckState(m_openPlot ? Qt::Checked : Qt::Unchecked); +#ifndef HAVE_QWT + prefs.openPlotCheckBox->setVisible(false); +#endif prefs.openBrowserCheckBox->setCheckState(m_openBrowser ? Qt::Checked : Qt::Unchecked); prefs.openDirStatCheckBox->setCheckState(m_openDirStat ? Qt::Checked : Qt::Unchecked); prefs.exec(); Modified: trunk/bacula/src/qt-console/mainwin.h =================================================================== --- trunk/bacula/src/qt-console/mainwin.h 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/mainwin.h 2008-05-29 01:19:31 UTC (rev 7051) @@ -113,9 +113,7 @@ void estimateButtonClicked(); void browseButtonClicked(); void statusPageButtonClicked(); -#ifdef HAVE_QWT void jobPlotButtonClicked(); -#endif void restoreButtonClicked(); void undockWindowButton(); void treeItemChanged(QTreeWidgetItem *, QTreeWidgetItem *); Modified: trunk/bacula/src/qt-console/mount/mount.cpp =================================================================== --- trunk/bacula/src/qt-console/mount/mount.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/mount/mount.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -48,8 +48,7 @@ setupUi(this); this->show(); - QString labelText("Storage : "); - labelText += storageName; + QString labelText( tr("Storage : %1").arg(storageName) ); storageLabel->setText(labelText); } @@ -57,7 +56,7 @@ { QString scmd; if (m_storageName == "") { - QMessageBox::warning(this, "No Storage name", "No Storage name given", + QMessageBox::warning(this, tr("No Storage name"), tr("No Storage name given"), QMessageBox::Ok, QMessageBox::Ok); return; } @@ -69,10 +68,10 @@ Pmsg1(000, "sending command : %s\n",scmd.toUtf8().data()); } - m_console->display_text("Context sensitive command :\n\n"); + m_console->display_text( tr("Context sensitive command :\n\n")); m_console->display_text("**** "); m_console->display_text(scmd + " ****\n"); - m_console->display_text("Director Response :\n\n"); + m_console->display_text(tr("Director Response :\n\n")); m_console->write_dir(scmd.toUtf8().data()); m_console->displayToPrompt(); Modified: trunk/bacula/src/qt-console/restore/restore.cpp =================================================================== --- trunk/bacula/src/qt-console/restore/restore.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/restore/restore.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -395,8 +395,8 @@ m_console->discardToPrompt(); } if (count == 0) { - mainWin->set_status("Nothing selected, nothing done"); - statusLine->setText("Nothing selected, nothing done"); + mainWin->set_status(tr("Nothing selected, nothing done")); + statusLine->setText(tr("Nothing selected, nothing done")); } } @@ -420,7 +420,7 @@ Dmsg2(100, "cwd=%s msg=%s\n", m_cwd.toUtf8().data(), m_console->msg()); } else { Dmsg1(000, "stat=%d\n", stat); - QMessageBox::critical(this, "Error", "cd command failed", QMessageBox::Ok); + QMessageBox::critical(this, "Error", tr("cd command failed"), QMessageBox::Ok); } m_console->discardToPrompt(); return true; /* ***FIXME*** return real status */ @@ -439,7 +439,7 @@ Dmsg2(100, "cwd=%s msg=%s\n", m_cwd.toUtf8().data(), m_console->msg()); } else { Dmsg1(000, "Something went wrong read stat=%d\n", stat); - QMessageBox::critical(this, "Error", ".pwd command failed", QMessageBox::Ok); + QMessageBox::critical(this, "Error", tr(".pwd command failed"), QMessageBox::Ok); } m_console->discardToPrompt(); return m_cwd.toUtf8().data(); Modified: trunk/bacula/src/qt-console/restore/restoretree.cpp =================================================================== --- trunk/bacula/src/qt-console/restore/restoretree.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/restore/restoretree.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -174,7 +174,7 @@ prBar1->setVisible(true); prBar1->setRange(0,taskcount); prBar1->setValue(0); - prLabel1->setText(tr("Task ") + QString("%1").arg(ontask)+ " of " + QString("%1").arg(taskcount)); + prLabel1->setText(tr("Task %1 of %2").arg(ontask).arg(taskcount)); prLabel1->setVisible(true); prBar2->setVisible(true); prBar2->setRange(0,0); @@ -192,7 +192,7 @@ m_prevDaysCheckState = daysCheckBox->checkState(); updateRefresh(); prBar1->setValue(ontask++); - prLabel1->setText(tr("Task ") + QString("%1").arg(ontask)+ " of " + QString("%1").arg(taskcount)); + prLabel1->setText(tr("Task %1 of %2").arg(ontask).arg(taskcount)); prBar2->setValue(0); prBar2->setRange(0,0); prLabel2->setText(tr("Querying Jobs")); @@ -235,7 +235,7 @@ if (mainWin->m_sqlDebug) Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data()); prBar1->setValue(ontask++); - prLabel1->setText(tr("Task ") + QString("%1").arg(ontask) + " of " + QString("%1").arg(taskcount)); + prLabel1->setText(tr("Task %1 of %2").arg(ontask).arg(taskcount)); prBar2->setValue(0); prBar2->setRange(0,0); prLabel2->setText(tr("Querying for Directories")); @@ -278,7 +278,7 @@ } else { QMessageBox::warning(this, "Bat", tr("No jobs were selected in the job query !!!.\n" - "Press OK to continue?"), + "Press OK to continue"), QMessageBox::Ok ); } prBar1->setVisible(false); @@ -381,7 +381,7 @@ bool ok = true, added = false; if ((mainWin->m_miscDebug) && (m_debugTrap)) { - QString msg = QString(tr("In addDirectory cwd \"%1\" newdir \"%2\"\n")) + QString msg = QString("In addDirectory cwd \"%1\" newdir \"%2\"\n") .arg(m_cwd) .arg(newdir); Pmsg0(000, msg.toUtf8().data()); @@ -435,7 +435,7 @@ } else { ok = false; if ((mainWin->m_miscDebug) && (m_debugTrap)) { - QString msg = QString(tr("In else of if parent cwd \"%1\" newdir \"%2\"\n")) + QString msg = QString("In else of if parent cwd \"%1\" newdir \"%2\"\n") .arg(m_cwd) .arg(newdir); Pmsg0(000, msg.toUtf8().data()); @@ -518,7 +518,7 @@ this, SLOT(fileTableItemChanged(QTableWidgetItem *))); QBrush blackBrush(Qt::black); QString directory = item->data(0, Qt::UserRole).toString(); - directoryLabel->setText(tr("Present Working Directory : ") + directory); + directoryLabel->setText(tr("Present Working Directory: %1").arg(directory)); int pathid = m_directoryPathIdHash.value(directory, -1); if (pathid != -1) { QString cmd = @@ -1506,9 +1506,9 @@ { /* Set progress bars and repaint */ prLabel1->setVisible(true); - prLabel1->setText("Task 1 of 3"); + prLabel1->setText(tr("Task 1 of 3")); prLabel2->setVisible(true); - prLabel2->setText("Processing Checked directories"); + prLabel2->setText(tr("Processing Checked directories")); prBar1->setVisible(true); prBar1->setRange(0, 3); prBar1->setValue(0); @@ -1613,8 +1613,8 @@ ++diter; } /* while (*diter) */ prBar1->setValue(1); - prLabel1->setText("Task 2 of 3"); - prLabel2->setText("Processing Exceptions"); + prLabel1->setText( tr("Task 2 of 3")); + prLabel2->setText(tr("Processing Exceptions")); prBar2->setRange(0, 0); repaint(); @@ -1651,8 +1651,8 @@ } /* while ftera.hasNext */ /* The progress bars for the next step */ prBar1->setValue(2); - prLabel1->setText("Task 3 of 3"); - prLabel2->setText("Filling Database Table"); + prLabel1->setText(tr("Task 3 of 3")); + prLabel2->setText(tr("Filling Database Table")); prBar2->setRange(0, vFMCounter); vFMCounter = 0; prBar2->setValue(vFMCounter); Modified: trunk/bacula/src/qt-console/status/clientstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/clientstat.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/status/clientstat.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -43,7 +43,7 @@ { m_client = client; setupUi(this); - m_name = tr("Client Status") + " " + m_client; + m_name = tr("Client Status %1").arg(m_client); m_closeable = true; pgInitialize(parentTreeWidgetItem); QTreeWidgetItem* thisitem = mainWin->getFromHash(this); Modified: trunk/bacula/src/qt-console/status/dirstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/dirstat.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/status/dirstat.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -394,8 +394,8 @@ m_selectedJobsList.append(sitem->text()); } if (m_selectedJobsList.count() > 1) { - actionCancelRunning->setText(QString("Cancel list of %1 Jobs").arg(m_selectedJobsList.count())); + actionCancelRunning->setText(tr("Cancel list of %1 Jobs").arg(m_selectedJobsList.count())); } else { - actionCancelRunning->setText("Cancel Single Job"); + actionCancelRunning->setText(tr("Cancel Single Job")); } } Modified: trunk/bacula/src/qt-console/status/storstat.cpp =================================================================== --- trunk/bacula/src/qt-console/status/storstat.cpp 2008-05-28 21:07:21 UTC (rev 7050) +++ trunk/bacula/src/qt-console/status/storstat.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -58,7 +58,7 @@ { m_storage = storage; setupUi(this); - m_name = tr("Storage Status") + " " + m_storage; + m_name = tr("Storage Status %1").arg(m_storage); m_closeable = true; pgInitialize(parentTreeWidgetItem); QTreeWidgetItem* thisitem = mainWin->getFromHash(this); Added: trunk/bacula/src/qt-console/util/comboutil.cpp =================================================================== --- trunk/bacula/src/qt-console/util/comboutil.cpp (rev 0) +++ trunk/bacula/src/qt-console/util/comboutil.cpp 2008-05-29 01:19:31 UTC (rev 7051) @@ -0,0 +1,108 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2008 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ + +/* + * Version $Id$ + * + * ComboBox helper functions + * + * Riccardo Ghetta, May 2008 + * + */ + +#include <QComboBox> +#include <QString> +#include <QStringList> +#include "bat.h" +#include "comboutil.h" + +static const QString QS_ANY(QObject::tr("Any")); + + +/* selects value val on combo, if exists */ +void comboSel(QComboBox *combo, const QString &val) +{ + int index = combo->findText(val, Qt::MatchExactly); + if (index != -1) { + combo->setCurrentIndex(index); + } +} + +/* if the combo has selected something different from "Any" uses the selection + * to build a condition on field fldname and adds it to the condition list */ +void comboCond(QStringList &cndlist, const QComboBox *combo, const char *fldname) +{ + int index = combo->currentIndex(); + if (index != -1 && combo->itemText(index) != QS_ANY) { + cndlist.append( QString("%1='%2'").arg(fldname).arg(combo->itemText(index)) ); + } +} + + +/* boolean combo (yes/no) */ +void boolComboFill(QComboBox *combo) +{ + combo->addItem(QS_ANY, -1); + combo->addItem(QObject::tr("No"), 0); + combo->addItem(QObject::tr("Yes"), 1); +} + +void boolComboCond(QStringList &cndlist, const QComboBox *combo, const char *fldname) +{ + int index = combo->currentIndex(); + if (index != -1 && combo->itemData(index).toInt() >= 0 ) { + QString cnd = combo->itemData(index).toString(); + cndlist.append( QString("%1='%2'").arg(fldname).arg(cnd) ); + } +} + +/* backup level combo */ +void levelComboFill(QComboBox *combo) +{ + combo->addItem(QS_ANY); + combo->addItem(job_level_to_str(L_FULL), L_FULL); + combo->addItem(job_level_to_str(L_INCREMENTAL), L_INCREMENTAL); + combo->addItem(job_level_to_str(L_DIFFERENTIAL), L_DIFFERENTIAL); + combo->addItem(job_level_to_str(L_SINCE), L_SINCE); + combo->addItem(job_level_to_str(L_VERIFY_CATALOG), L_VERIFY_CATALOG); + combo->addItem(job_level_to_str(L_VERIFY_INIT), L_VERIFY_INIT); + combo->addItem(job_level_to_str(L_VERIFY_VOLUME_TO_CATALOG), L_VERIFY_VOLUME_TO_CATALOG); + combo->addItem(job_level_to_str(L_VERIFY_DISK_TO_CATALOG), L_VERIFY_DISK_TO_CATALOG); + combo->addItem(job_level_to_str(L_VERIFY_DATA), L_VERIFY_DATA); + /* combo->addItem(job_level_to_str(L_BASE), L_BASE); base jobs ignored */ +} + +void levelComboCond(QStringList &cndlist, const QComboBox *combo, const char *fldname) +{ + int index = combo->currentIndex(); + if (index != -1 && combo->itemText(index) != QS_ANY ) { + QString cnd = combo->itemData(index).toChar(); + cndlist.append( QString("%1='%2'").arg(fldname).arg(cnd) ); + } +} + Added: trunk/bacula/src/qt-console/util/comboutil.h =================================================================== --- trunk/bacula/src/qt-console/util/comboutil.h (rev 0) +++ trunk/bacula/src/qt-console/util/comboutil.h 2008-05-29 01:19:31 UTC (rev 7051) @@ -0,0 +1,62 @@ +#ifndef _COMBOUTIL_H_ +#define _COMBOUTIL_H_ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2007-2008 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 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ft...@fs.... +*/ +/* + * Version $Id$ + * + * Combobox helpers - Riccardo Ghetta, May 2008 + */ + +class QComboBox; +class QString; +class QStringList; + +/* selects value val on combo, if exists */ +void comboSel(QComboBox *combo, const QString &val); + +/* if the combo has selected something different from "Any" uses the selection + * to build a condition on field fldname and adds it to the condition list */ +void comboCond(QStringList &cndlist, const QComboBox *combo, const char *fldname); + +/* these helpers are used to give an uniform content to common combos. + * There are two routines per combo type: + * - XXXXComboFill fills the combo with values. + * - XXXXComboCond checks the combo and, if selected adds a condition + * on the field fldName to the list of conditions cndList + */ + +/* boolean combo (yes/no) */ +void boolComboFill(QComboBox *combo); +void boolComboCond(QStringList &cndlist, const QComboBox *combo, const char *fldname); + +/* backup level combo */ +void levelComboFill(QComboBox *combo); +void levelComboCond(QStringList &cndlist, const QComboBox *combo, const char *fldname); + +#endif /* _COMBOUTIL_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bar...@us...> - 2008-05-31 21:21:21
|
Revision: 7076 http://bacula.svn.sourceforge.net/bacula/?rev=7076&view=rev Author: bartleyd2 Date: 2008-05-31 14:21:28 -0700 (Sat, 31 May 2008) Log Message: ----------- A bug was introduced in with commit 5727. Restoretree and restore were after that commit using a subroutine in pages to determine if a path was a win32 path. The restore class was sending "/c:/" and restoretree was sending "c:/". The subroutine was working for "c:/" This should fix it and should also resolve the performance issue. I'm a little concerned because I love regexes that maybe a regex would be better, but I'll try this for a bit to see if all works correctly. Modified Paths: -------------- trunk/bacula/src/qt-console/pages.cpp trunk/bacula/src/qt-console/restore/restore.cpp Modified: trunk/bacula/src/qt-console/pages.cpp =================================================================== --- trunk/bacula/src/qt-console/pages.cpp 2008-05-31 18:43:36 UTC (rev 7075) +++ trunk/bacula/src/qt-console/pages.cpp 2008-05-31 21:21:28 UTC (rev 7076) @@ -39,7 +39,15 @@ { char *buf = fullPath.left(2).toUtf8().data(); - return buf[1] == ':' && B_ISALPHA(buf[0]); + //bool toret = B_ISALPHA(buf[1]); + bool toret = buf[1] == ':' && B_ISALPHA(buf[0]); + 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; } Modified: trunk/bacula/src/qt-console/restore/restore.cpp =================================================================== --- trunk/bacula/src/qt-console/restore/restore.cpp 2008-05-31 18:43:36 UTC (rev 7075) +++ trunk/bacula/src/qt-console/restore/restore.cpp 2008-05-31 21:21:28 UTC (rev 7076) @@ -186,33 +186,36 @@ bool windrive = false; if (mainWin->m_miscDebug) { - QString msg = QString(tr("In addDirectory cwd \"%1\" newdir \"%2\"\n")) + QString msg = QString(tr("In addDirectory cwd \"%1\" newdir \"%2\" fullpath \"%3\"\n")) .arg(m_cwd) - .arg(newdir); + .arg(newdir) + .arg(fullpath); Pmsg0(000, msg.toUtf8().data()); } /* add unix '/' directory first */ - if (m_dirPaths.empty() && !isWin32Path(fullpath)) { - QTreeWidgetItem *item = new QTreeWidgetItem(directoryWidget); - item->setIcon(0,QIcon(QString::fromUtf8(":images/folder.png"))); - - QString text("/"); - item->setText(0, text.toUtf8().data()); - if (mainWin->m_miscDebug) { - Pmsg1(000, "Pre Inserting %s\n",text.toUtf8().data()); + if (m_dirPaths.empty()) { + if (isWin32Path(newdir)) { + /* this is a windows drive */ + if (mainWin->m_miscDebug) { + Pmsg0(000, "Need to do windows \"letter\":/\n"); + } + fullpath.replace(0,1,""); + windrive = true; + } else { + QTreeWidgetItem *item = new QTreeWidgetItem(directoryWidget); + item->setIcon(0,QIcon(QString::fromUtf8(":images/folder.png"))); + + QString text("/"); + item->setText(0, text.toUtf8().data()); + if (mainWin->m_miscDebug) { + Pmsg1(000, "Pre Inserting %s\n",text.toUtf8().data()); + } + m_dirPaths.insert(text, item); + m_dirTreeItems.insert(item, text); } - m_dirPaths.insert(text, item); - m_dirTreeItems.insert(item, text); } - if (isWin32Path(fullpath)) { - /* this is a windows drive */ - if (mainWin->m_miscDebug) { - Pmsg0(000, "Need to do windows \"letter\":/\n"); - } - windrive = true; - } /* is it already existent ?? */ if (!m_dirPaths.contains(fullpath)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ri...@us...> - 2008-07-09 16:18:45
|
Revision: 7351 http://bacula.svn.sourceforge.net/bacula/?rev=7351&view=rev Author: ricozz Date: 2008-07-09 09:18:53 -0700 (Wed, 09 Jul 2008) Log Message: ----------- ebl Tweak bat for win32 (it segfault at home, but bat.exe is there !) Added Paths: ----------- trunk/bacula/src/qt-console/README.mingw trunk/bacula/src/qt-console/bat.pro.mingw trunk/bacula/src/qt-console/win32-x-g++/ trunk/bacula/src/qt-console/win32-x-g++/qmake.conf trunk/bacula/src/qt-console/win32-x-g++/qplatformdefs.h Added: trunk/bacula/src/qt-console/README.mingw =================================================================== --- trunk/bacula/src/qt-console/README.mingw (rev 0) +++ trunk/bacula/src/qt-console/README.mingw 2008-07-09 16:18:53 UTC (rev 7351) @@ -0,0 +1,62 @@ + +BUILD SYSTEM: Ubuntu gutsy +STATUS: Bat segfault quickly + +REQUIRE: + - Bacula cross compilation tool (must be able to compile bacula-fd.exe) + - wine (apt-get install wine) + - qt mingw32 distribution + +ORIGINAL HOWTO (french): +http://doc.qtfr.org/post/2007/04/10/Cross-Compilation-Native-dapplication-Qt-depuis-Linux + +Legend: +# comment +$ shell command +* tips + + +bacula setup +------------ +$ cd bacula/src/win32 +$ make + +Don't run any configure, make or make install +Make sure that bacula/src/win32/release/bacula.dll is built + +QT4 setup +---------- + +Install QT for mingw + +Get the mingw installation from http://trolltech.com/developer/downloads/qt/windows + +$ wine qt-win-opensource-4.4.0-mingw.exe + * Install under c:\Qt (no space) + * no worry about mingw installation + +$ cp -r ~/.wine/drive_c/Qt/4.4.0/src/ depkgs-mingw32/include +$ cp -r ~/.wine/drive_c/Qt/4.4.0/include depkgs-mingw32/include/qt +$ cp -r ~/.wine/drive_c/Qt/4.4.0/lib depkgs-mingw32/lib/qt + +Compile bat +----------- + +$ cd bacula/src/qt-console +$ cp bat.pro.mingw bat.pro +$ qmake-qt4 -spec win32-x-g++ +$ make + + +Run Bat with wine +----------------- +$ cd bacula/src/qt-console/debug + +# configure a bat.conf +# copy all dll to this directory + +$ wine bat + + +That all, easy isn't it ? + Added: trunk/bacula/src/qt-console/bat.pro.mingw =================================================================== --- trunk/bacula/src/qt-console/bat.pro.mingw (rev 0) +++ trunk/bacula/src/qt-console/bat.pro.mingw 2008-07-09 16:18:53 UTC (rev 7351) @@ -0,0 +1,165 @@ +###################################################################### +# Version $Id: bat.pro.in 7051 2008-05-29 01:19:31Z bartleyd2 $ +# +# !!!!!!! IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# +# Edit only bat.pro.in -- bat.pro is built by the ./configure program +# +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# +CONFIG += qt debug cross-win32 + +bins.path = ./ +bins.files = ./bat +confs.path = ./ +confs.commands = ./install_conf_file + +TEMPLATE = app +TARGET = bat +DEPENDPATH += . +INCLUDEPATH += .. . ./console ./restore ./select + +cross-win32 { +# LIBS += ../win32/dll/bacula.a + LIBS += -L../win32/release -lbacula +} +!cross-win32 { + LIBS += -L../lib -lbac @OPENSSL_LIBS@ +} + +qwt { + INCLUDEPATH += @QWT_INC@ + LIBS += @QWT_LDFLAGS@ @QWT_LIB@ +} + +RESOURCES = main.qrc +MOC_DIR = moc +OBJECTS_DIR = obj +UI_DIR = ui + +# Main window +FORMS += main.ui +FORMS += prefs.ui +FORMS += label/label.ui +FORMS += relabel/relabel.ui +FORMS += mount/mount.ui +FORMS += console/console.ui +FORMS += restore/restore.ui restore/prerestore.ui restore/brestore.ui +FORMS += restore/restoretree.ui +FORMS += run/run.ui run/runcmd.ui run/estimate.ui run/prune.ui +FORMS += select/select.ui +FORMS += medialist/medialist.ui mediaedit/mediaedit.ui joblist/joblist.ui +FORMS += clients/clients.ui storage/storage.ui fileset/fileset.ui +FORMS += joblog/joblog.ui jobs/jobs.ui +FORMS += help/help.ui +FORMS += status/dirstat.ui +FORMS += status/clientstat.ui +FORMS += status/storstat.ui +qwt { + FORMS += jobgraphs/jobplotcontrols.ui +} + +# Main directory +HEADERS += mainwin.h bat.h bat_conf.h qstd.h pages.h +SOURCES += main.cpp bat_conf.cpp mainwin.cpp qstd.cpp pages.cpp + +# bcomm +HEADERS += bcomm/dircomm.h +SOURCES += bcomm/dircomm.cpp bcomm/dircomm_auth.cpp + +# Console +HEADERS += console/console.h +SOURCES += console/authenticate.cpp console/console.cpp + +# Restore +HEADERS += restore/restore.h +SOURCES += restore/prerestore.cpp restore/restore.cpp restore/brestore.cpp + +# Label dialog +HEADERS += label/label.h +SOURCES += label/label.cpp + +# Relabel dialog +HEADERS += relabel/relabel.h +SOURCES += relabel/relabel.cpp + +# Mount dialog +HEADERS += mount/mount.h +SOURCES += mount/mount.cpp + +# Run dialog +HEADERS += run/run.h +SOURCES += run/run.cpp run/runcmd.cpp run/estimate.cpp run/prune.cpp + +# Select dialog +HEADERS += select/select.h +SOURCES += select/select.cpp + +## MediaList +HEADERS += medialist/medialist.h +SOURCES += medialist/medialist.cpp + +## MediaEdit +HEADERS += mediaedit/mediaedit.h +SOURCES += mediaedit/mediaedit.cpp + +## JobList +HEADERS += joblist/joblist.h +SOURCES += joblist/joblist.cpp + +## Clients +HEADERS += clients/clients.h +SOURCES += clients/clients.cpp + +## Storage +HEADERS += storage/storage.h +SOURCES += storage/storage.cpp + +## Fileset +HEADERS += fileset/fileset.h +SOURCES += fileset/fileset.cpp + +## Job log +HEADERS += joblog/joblog.h +SOURCES += joblog/joblog.cpp + +## Jobs +HEADERS += jobs/jobs.h +SOURCES += jobs/jobs.cpp + +## RestoreTree +HEADERS += restore/restoretree.h +SOURCES += restore/restoretree.cpp + +## Job Step Graphs +qwt { + HEADERS += jobgraphs/jobplot.h + SOURCES += jobgraphs/jobplot.cpp +} + +# Help dialog +HEADERS += help/help.h +SOURCES += help/help.cpp + +## Status Dir +HEADERS += status/dirstat.h +SOURCES += status/dirstat.cpp + +## Status Client +HEADERS += status/clientstat.h +SOURCES += status/clientstat.cpp + +## Status Client +HEADERS += status/storstat.h +SOURCES += status/storstat.cpp + +# Utility sources +HEADERS += util/fmtwidgetitem.h util/comboutil.h +SOURCES += util/fmtwidgetitem.cpp util/comboutil.cpp + +INSTALLS += bins +INSTALLS += confs + +QMAKE_EXTRA_TARGETS += depend + +TRANSLATIONS += ts/bat_fr.ts ts/bat_de.ts Added: trunk/bacula/src/qt-console/win32-x-g++/qmake.conf =================================================================== --- trunk/bacula/src/qt-console/win32-x-g++/qmake.conf (rev 0) +++ trunk/bacula/src/qt-console/win32-x-g++/qmake.conf 2008-07-09 16:18:53 UTC (rev 7351) @@ -0,0 +1,97 @@ +# +# qmake configuration for win32-g++ +# +# Written for MinGW +# + +MAKEFILE_GENERATOR = MINGW +TEMPLATE = app +CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header +QT += core gui +DEFINES += UNICODE QT_LARGEFILE_SUPPORT +QMAKE_COMPILER_DEFINES += __GNUC__ WIN32 + +QMAKE_EXT_OBJ = .o +QMAKE_EXT_RES = _res.o + +QMAKE_CC = ../../../cross-tools/mingw32/bin/mingw32-gcc +QMAKE_LEX = flex +QMAKE_LEXFLAGS = +QMAKE_YACC = byacc +QMAKE_YACCFLAGS = -d +QMAKE_CFLAGS = -DHAVE_MINGW -DHAVE_WIN32 +QMAKE_CFLAGS_DEPS = -M +QMAKE_CFLAGS_WARN_ON = -Wall +QMAKE_CFLAGS_WARN_OFF = -w +QMAKE_CFLAGS_RELEASE = -O2 +QMAKE_CFLAGS_DEBUG = -g +QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses + +QMAKE_CXX = ../../../cross-tools/mingw32/bin/mingw32-g++ +QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DHAVE_MINGW -DHAVE_WIN32 -DHAVE_ZLIB_H -DHAVE_LIBZ -DHAVE_CRYPTO -DHAVE_OPENSSL -DHAVE_TLS +QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON +QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG +QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC +QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD +QMAKE_CXXFLAGS_RTTI_ON = -frtti +QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti +QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads +QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions + +QMAKE_INCDIR = ../../../depkgs-mingw32/include/pthreads ../../../depkgs-mingw32/include/ ../win32/compat +QMAKE_INCDIR_QT = ../../../depkgs-mingw32/include/qt +QMAKE_LIBDIR_QT = ../../../depkgs-mingw32/lib/qt + +QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src +QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< +QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src +QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +QMAKE_LINK = ../../../cross-tools/mingw32/bin/mingw32-g++ +QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -mno-cygwin -m32 -fno-strict-aliasing -Wl,-enable-runtime-pseudo-reloc -mwindows + +QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl +QMAKE_LFLAGS_EXCEPTIONS_OFF = +QMAKE_LFLAGS_RELEASE = -Wl,-s +QMAKE_LFLAGS_DEBUG = +QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console +QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows +QMAKE_LFLAGS_DLL = -shared +QMAKE_LINK_OBJECT_MAX = 10 +QMAKE_LINK_OBJECT_SCRIPT= object_script + + +QMAKE_LIBS = +QMAKE_LIBS_CORE = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 +QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 +QMAKE_LIBS_NETWORK = -lws2_32 +QMAKE_LIBS_OPENGL = -lopengl32 -lglu32 -lgdi32 -luser32 +QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32 +QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain + +#!isEmpty(QMAKE_SH) { + MINGW_IN_SHELL = 1 + QMAKE_DIR_SEP = / + QMAKE_COPY = cp + QMAKE_COPY_DIR = cp -r + QMAKE_MOVE = mv + QMAKE_DEL_FILE = rm -f + QMAKE_MKDIR = mkdir -p + QMAKE_DEL_DIR = rm -rf + QMAKE_CHK_DIR_EXISTS = test -d + +QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc +QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic +QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc + +QMAKE_IDL = midl +QMAKE_LIB = ../../../cross-tools/mingw32/bin/mingw32-ar -ru +QMAKE_RC = ../../../cross-tools/mingw32/bin/mingw32-windres +QMAKE_ZIP = zip -r -9 + +QMAKE_STRIP = ../../../cross-tools/mingw32/bin/mingw32-strip +QMAKE_STRIPFLAGS_LIB += --strip-unneeded +load(qt_config) Added: trunk/bacula/src/qt-console/win32-x-g++/qplatformdefs.h =================================================================== --- trunk/bacula/src/qt-console/win32-x-g++/qplatformdefs.h (rev 0) +++ trunk/bacula/src/qt-console/win32-x-g++/qplatformdefs.h 2008-07-09 16:18:53 UTC (rev 7351) @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/ +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sa...@tr.... +** +** In addition, as a special exception, Trolltech gives you certain +** additional rights. These rights are described in the Trolltech GPL +** Exception version 1.0, which can be found at +** http://www.trolltech.com/products/qt/gplexception/ and in the file +** GPL_EXCEPTION.txt in this package. +** +** In addition, as a special exception, Trolltech, as the sole copyright +** holder for Qt Designer, grants users of the Qt/Eclipse Integration +** plug-in the right for the Qt/Eclipse Integration to link to +** functionality provided by Qt Designer and its related libraries. +** +** Trolltech reserves all rights not expressly granted herein. +** +** Trolltech ASA (c) 2007 +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef QPLATFORMDEFS_H +#define QPLATFORMDEFS_H + +#ifdef UNICODE +#ifndef _UNICODE +#define _UNICODE +#endif +#endif + +// Get Qt defines/settings + +#include "qglobal.h" + +#include <tchar.h> +#include <io.h> +#include <direct.h> +#include <stdio.h> +#include <fcntl.h> +#include <errno.h> +#include <sys/stat.h> +#include <stdlib.h> +#include <windows.h> +#include <limits.h> + +#if !defined(_WIN32_WINNT) || (_WIN32_WINNT-0 < 0x0500) +typedef enum { + NameUnknown = 0, + NameFullyQualifiedDN = 1, + NameSamCompatible = 2, + NameDisplay = 3, + NameUniqueId = 6, + NameCanonical = 7, + NameUserPrincipal = 8, + NameCanonicalEx = 9, + NameServicePrincipal = 10, + NameDnsDomain = 12 +} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT; +#endif + +#define Q_FS_FAT +#ifdef QT_LARGEFILE_SUPPORT +#define QT_STATBUF struct _stati64 // non-ANSI defs +#define QT_STATBUF4TSTAT struct _stati64 // non-ANSI defs +#define QT_STAT ::_stati64 +#define QT_FSTAT ::_fstati64 +#else +#define QT_STATBUF struct _stat // non-ANSI defs +#define QT_STATBUF4TSTAT struct _stat // non-ANSI defs +#define QT_STAT ::_stat +#define QT_FSTAT ::_fstat +#endif +#define QT_STAT_REG _S_IFREG +#define QT_STAT_DIR _S_IFDIR +#define QT_STAT_MASK _S_IFMT +#if defined(_S_IFLNK) +# define QT_STAT_LNK _S_IFLNK +#endif +#define QT_FILENO _fileno +#define QT_OPEN ::_open +#define QT_CLOSE ::_close +#ifdef QT_LARGEFILE_SUPPORT +#define QT_LSEEK ::_lseeki64 +#ifndef UNICODE +#define QT_TSTAT ::_stati64 +#else +#define QT_TSTAT ::_wstati64 +#endif +#else +#define QT_LSEEK ::_lseek +#ifndef UNICODE +#define QT_TSTAT ::_stat +#else +#define QT_TSTAT ::_wstat +#endif +#endif +#define QT_READ ::_read +#define QT_WRITE ::_write +#define QT_ACCESS ::_access +#define QT_GETCWD ::_getcwd +#define QT_CHDIR ::_chdir +#define QT_MKDIR ::_mkdir +#define QT_RMDIR ::_rmdir +#define QT_OPEN_LARGEFILE 0 +#define QT_OPEN_RDONLY _O_RDONLY +#define QT_OPEN_WRONLY _O_WRONLY +#define QT_OPEN_RDWR _O_RDWR +#define QT_OPEN_CREAT _O_CREAT +#define QT_OPEN_TRUNC _O_TRUNC +#define QT_OPEN_APPEND _O_APPEND +#if defined(O_TEXT) +# define QT_OPEN_TEXT _O_TEXT +# define QT_OPEN_BINARY _O_BINARY +#endif + +#define QT_FOPEN ::fopen +#ifdef QT_LARGEFILE_SUPPORT +#define QT_FSEEK ::fseeko64 +#define QT_FTELL ::ftello64 +#else +#define QT_FSEEK ::fseek +#define QT_FTELL ::ftell +#endif +#define QT_FGETPOS ::fgetpos +#define QT_FSETPOS ::fsetpos +#define QT_FPOS_T fpos_t +#ifdef QT_LARGEFILE_SUPPORT +#define QT_OFF_T off64_t +#else +#define QT_OFF_T long +#endif + +#define QT_SIGNAL_ARGS int + +#define QT_VSNPRINTF ::_vsnprintf +#define QT_SNPRINTF ::_snprintf + +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 + + +#endif // QPLATFORMDEFS_H This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |