Mon, 11 Jul 2022 15:57:06 +0200
Added nodes monitor detail screen.
CMakeLists.txt | file | annotate | diff | comparison | revisions | |
src/DetailNode.cpp | file | annotate | diff | comparison | revisions | |
src/DetailNode.h | file | annotate | diff | comparison | revisions | |
src/MonNodes.cpp | file | annotate | diff | comparison | revisions | |
src/MonNodes.h | file | annotate | diff | comparison | revisions | |
ui/DetailNode.ui | file | annotate | diff | comparison | revisions |
--- a/CMakeLists.txt Sat Jul 09 23:05:25 2022 +0200 +++ b/CMakeLists.txt Mon Jul 11 15:57:06 2022 +0200 @@ -221,6 +221,7 @@ ${SRCDIR}/MonFermenters.cpp ${SRCDIR}/MonCO2meters.cpp ${SRCDIR}/MoniSpindels.cpp + ${SRCDIR}/DetailNode.cpp ${SRCDIR}/DetailFermenter.cpp ${SRCDIR}/DetailCO2meter.cpp ${SRCDIR}/DetailiSpindel.cpp @@ -283,6 +284,7 @@ ${SRCDIR}/MonFermenters.h ${SRCDIR}/MonCO2meters.h ${SRCDIR}/MoniSpindels.h + ${SRCDIR}/DetailNode.h ${SRCDIR}/DetailFermenter.h ${SRCDIR}/DetailCO2meter.h ${SRCDIR}/DetailiSpindel.h @@ -325,6 +327,7 @@ ${UIDIR}/EditProfileFerment.ui ${UIDIR}/EditRecipe.ui ${UIDIR}/EditProduct.ui + ${UIDIR}/DetailNode.ui ${UIDIR}/DetailFermenter.ui ${UIDIR}/DetailCO2meter.ui ${UIDIR}/DetailiSpindel.ui
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DetailNode.cpp Mon Jul 11 15:57:06 2022 +0200 @@ -0,0 +1,212 @@ +/** + * DetailNode.cpp is part of bmsapp. + * + * bmsapp is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * bmsapp 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, see <http://www.gnu.org/licenses/>. + */ +#include "DetailNode.h" +#include "ChartCarbonate.h" +#include "../ui/ui_DetailNode.h" +#include "global.h" +#include "MainWindow.h" + + +/* + * Results are available via MySQL and websockets. Because we initialize using + * MySQL we only use that for the results and up to date status. + * Commands are send via websockets only. + */ + +DetailNode::DetailNode(int id, QWidget *parent) : QDialog(parent), ui(new Ui::DetailNode) +{ + QSqlQuery query; + + qDebug() << "DetailNode record:" << id; + ui->setupUi(this); + this->recno = id; + setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint); + setWindowTitle(tr("BMSapp - Details System")); + + connect(ui->rebootButton, SIGNAL(clicked()), this, SLOT(control_reboot())); + connect(ui->rebirthButton, SIGNAL(clicked()), this, SLOT(control_rebirth())); + connect(parent, SIGNAL(updateNode(QString)), this, SLOT(refreshNode(QString))); + emit refreshTable(); +} + + +void DetailNode::refreshTable() +{ + QSqlQuery query; + + qDebug() << "refreshTable node rec:" << this->recno; + + query.prepare("SELECT * FROM mon_nodes WHERE record = :recno"); + query.bindValue(":recno", this->recno); + query.exec(); + if (query.next()) { + + _node = query.value("node").toString(); + _group_id = query.value("group_id").toString(); + _uuid = query.value("uuid").toString(); + + ui->uuidEdit->setText(_uuid); + ui->systemEdit->setText(_node); + ui->typeEdit->setText(_group_id); + ui->firstEdit->setText(query.value("firstseen").toDateTime().toString("dd MMM yyyy HH:mm:ss")); + ui->lastEdit->setText(query.value("lastseen").toDateTime().toString("dd MMM yyyy HH:mm:ss")); + + if (query.value("online").toInt()) { + ui->statusEdit->setText(tr("Online")); + ui->makerEdit->show(); + ui->modelEdit->show(); + ui->osEdit->show(); + ui->fwEdit->show(); + ui->makerLabel->show(); + ui->modelLabel->show(); + ui->osLabel->show(); + ui->fwLabel->show(); + ui->intervalLabel->show(); + ui->intervalEdit->show(); + ui->makerEdit->setText(query.value("hardwaremake").toString()); + ui->modelEdit->setText(query.value("hardwaremodel").toString()); + ui->osEdit->setText(query.value("os").toString()+QString(tr(" version: "))+query.value("os_version").toString()); + ui->fwEdit->setText(query.value("firmware").toString()); + ui->intervalEdit->setValue(query.value("up_interval").toInt()); + + if (query.value("temperature").toDouble() > 0) { + ui->tempLabel->show(); + ui->tempEdit->show(); + ui->tempEdit->setValue(query.value("temperature").toDouble()); + } else { + ui->tempLabel->hide(); + ui->tempEdit->hide(); + } + if (query.value("humidity").toDouble() > 0) { + ui->humLabel->show(); + ui->humEdit->show(); + ui->humEdit->setValue(query.value("humidity").toDouble()); + } else { + ui->humLabel->hide(); + ui->humEdit->hide(); + } + if (query.value("barometer").toDouble() > 0) { + ui->baroLabel->show(); + ui->baroEdit->show(); + ui->baroEdit->setValue(query.value("barometer").toDouble()); + } else { + ui->baroLabel->hide(); + ui->baroEdit->hide(); + } + + ui->networkLabel->show(); + ui->networkEdit->show(); + ui->networkEdit->setText(query.value("net_ifname").toString()+" "+query.value("net_address").toString()); + + if (query.value("net_ssid").toString() != "") { + ui->ssidLabel->show(); + ui->ssidEdit->show(); + ui->ssidEdit->setText(query.value("net_ssid").toString()); + ui->rssiLabel->show(); + ui->rssiEdit->show(); + if (query.value("net_rssi").toInt() < 0) + ui->rssiEdit->setValue(query.value("net_rssi").toInt()); + } else { + ui->ssidLabel->hide(); + ui->ssidEdit->hide(); + ui->rssiLabel->hide(); + ui->rssiEdit->hide(); + } + + } else { + /* Offline */ + ui->statusEdit->setText(tr("Offline")); + + ui->makerEdit->hide(); + ui->modelEdit->hide(); + ui->osEdit->hide(); + ui->fwEdit->hide(); + ui->makerLabel->hide(); + ui->modelLabel->hide(); + ui->osLabel->hide(); + ui->fwLabel->hide(); + ui->intervalLabel->hide(); + ui->intervalEdit->hide(); + + ui->tempLabel->hide(); + ui->tempEdit->hide(); + ui->humLabel->hide(); + ui->humEdit->hide(); + ui->baroLabel->hide(); + ui->baroEdit->hide(); + + ui->networkLabel->hide(); + ui->networkEdit->hide(); + ui->ssidLabel->hide(); + ui->ssidEdit->hide(); + ui->rssiLabel->hide(); + ui->rssiEdit->hide(); + } + } + +} + + +DetailNode::~DetailNode() +{ + qDebug() << "DetailNode done"; + delete ui; + emit entry_changed(); +} + + +/* + * Receive signals destined for all co2meters. + * Check if the signal is for us. + */ +void DetailNode::refreshNode(QString data) +{ + if (_node == data) { + emit refreshTable(); + } +} + + +void DetailNode::on_quitButton_clicked() +{ + this->close(); + this->setResult(1); +} + + +void DetailNode::control_reboot() +{ + int rc = QMessageBox::warning(this, tr("Reboot application"), tr("Remote applicaation is running, really reboot?"), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + + if (rc == QMessageBox::No) + return; + + QString msg = QString("{\"node\":\""+_node+"\",\"group_id\":\""+_group_id+"\",\"control\":\"reboot\"}"); + qDebug() << msg; + webSocket->sendTextMessage(msg); +} + + +void DetailNode::control_rebirth() +{ + QString msg = QString("{\"node\":\""+_node+"\",\"group_id\":\""+_group_id+"\",\"control\":\"rebirth\"}"); + qDebug() << msg; + webSocket->sendTextMessage(msg); +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DetailNode.h Mon Jul 11 15:57:06 2022 +0200 @@ -0,0 +1,43 @@ +#ifndef _DETAILNODE_H +#define _DETAILNODE_H + +#include <QDialog> +#include <QDoubleSpinBox> +#include <QCheckBox> +#include <QComboBox> +#include <QRadioButton> +#include <QLineEdit> +#include <QDialogButtonBox> + + +namespace Ui { +class DetailNode; +} + +class DetailNode : public QDialog +{ + Q_OBJECT + +signals: + void entry_changed(); + +public: + explicit DetailNode(int id, QWidget *parent = 0); + ~DetailNode(); + +private slots: + void on_quitButton_clicked(); + void refreshTable(void); + void control_reboot(); + void control_rebirth(); + +public slots: + void refreshNode(QString); + +private: + Ui::DetailNode *ui; + QString _node, _group_id, _uuid; + int recno; +}; + +#endif
--- a/src/MonNodes.cpp Sat Jul 09 23:05:25 2022 +0200 +++ b/src/MonNodes.cpp Mon Jul 11 15:57:06 2022 +0200 @@ -15,7 +15,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "MonNodes.h" -#include "EditSupplier.h" +#include "DetailNode.h" #include "MainWindow.h" #include "config.h" @@ -140,16 +140,15 @@ { qDebug() << "refreshNodes" << node; emit refreshTable(); + emit updateNode(node); } void MonNodes::edit(int recno) { -// EditSupplier dialog(recno, this); - /* Signal from editor if a refresh is needed */ -// connect(&dialog, SIGNAL(entry_changed()), this, SLOT(refreshTable())); -// dialog.setModal(true); -// dialog.exec(); + DetailNode dialog(recno, this); + dialog.setModal(true); + dialog.exec(); }
--- a/src/MonNodes.h Sat Jul 09 23:05:25 2022 +0200 +++ b/src/MonNodes.h Mon Jul 11 15:57:06 2022 +0200 @@ -23,6 +23,7 @@ signals: void setStatus(QString); + void updateNode(QString); private slots: void on_editButton_clicked();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/DetailNode.ui Mon Jul 11 15:57:06 2022 +0200 @@ -0,0 +1,674 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>DetailNode</class> + <widget class="QDialog" name="DetailNode"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>1024</width> + <height>560</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QWidget" name="topWidget" native="true"> + <widget class="QGroupBox" name="controlBox"> + <property name="geometry"> + <rect> + <x>20</x> + <y>10</y> + <width>961</width> + <height>461</height> + </rect> + </property> + <widget class="QLabel" name="uuidLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>60</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Uuid:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="systemLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>90</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>System:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="typeLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>150</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Type:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="firstLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>180</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>First seen:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLineEdit" name="uuidEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>60</y> + <width>271</width> + <height>23</height> + </rect> + </property> + <property name="frame"> + <bool>true</bool> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="systemEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>90</y> + <width>181</width> + <height>23</height> + </rect> + </property> + <property name="frame"> + <bool>true</bool> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="statusEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>120</y> + <width>141</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="typeEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>150</y> + <width>141</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLabel" name="statusLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>120</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Current status:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLineEdit" name="firstEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>180</y> + <width>181</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLabel" name="lastLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>210</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Last seen:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLineEdit" name="lastEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>210</y> + <width>181</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLabel" name="boxLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>20</y> + <width>941</width> + <height>25</height> + </rect> + </property> + <property name="font"> + <font> + <pointsize>12</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>System overview</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + <widget class="QLabel" name="makerLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>240</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Hardware maker:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="modelLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>270</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Hardware model:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="osLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>300</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>OS:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="fwLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>330</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Firmware:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="tempLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>360</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Temperature:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="humLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>390</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Humidity:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="networkLabel"> + <property name="geometry"> + <rect> + <x>490</x> + <y>270</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Network:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="intervalLabel"> + <property name="geometry"> + <rect> + <x>490</x> + <y>240</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Update interval:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLineEdit" name="makerEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>240</y> + <width>271</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="modelEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>270</y> + <width>271</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="osEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>300</y> + <width>271</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="fwEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>330</y> + <width>181</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLabel" name="baroLabel"> + <property name="geometry"> + <rect> + <x>10</x> + <y>420</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>Barometer:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QDoubleSpinBox" name="tempEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>360</y> + <width>121</width> + <height>24</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::NoButtons</enum> + </property> + <property name="suffix"> + <string>°C</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>-30.000000000000000</double> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + </widget> + <widget class="QDoubleSpinBox" name="humEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>390</y> + <width>121</width> + <height>24</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::NoButtons</enum> + </property> + <property name="suffix"> + <string>%</string> + </property> + <property name="decimals"> + <number>1</number> + </property> + <property name="minimum"> + <double>0.000000000000000</double> + </property> + <property name="maximum"> + <double>100.000000000000000</double> + </property> + </widget> + <widget class="QDoubleSpinBox" name="baroEdit"> + <property name="geometry"> + <rect> + <x>160</x> + <y>420</y> + <width>121</width> + <height>24</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::NoButtons</enum> + </property> + <property name="suffix"> + <string>mbar</string> + </property> + <property name="decimals"> + <number>0</number> + </property> + <property name="minimum"> + <double>0.000000000000000</double> + </property> + <property name="maximum"> + <double>1200.000000000000000</double> + </property> + </widget> + <widget class="QLabel" name="ssidLabel"> + <property name="geometry"> + <rect> + <x>490</x> + <y>300</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>WiFi SSID:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLabel" name="rssiLabel"> + <property name="geometry"> + <rect> + <x>490</x> + <y>330</y> + <width>141</width> + <height>20</height> + </rect> + </property> + <property name="text"> + <string>WiFi signal:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + </widget> + <widget class="QLineEdit" name="networkEdit"> + <property name="geometry"> + <rect> + <x>640</x> + <y>270</y> + <width>271</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QLineEdit" name="ssidEdit"> + <property name="geometry"> + <rect> + <x>640</x> + <y>300</y> + <width>181</width> + <height>23</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + <widget class="QSpinBox" name="rssiEdit"> + <property name="geometry"> + <rect> + <x>640</x> + <y>330</y> + <width>121</width> + <height>24</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::NoButtons</enum> + </property> + <property name="minimum"> + <number>-1000</number> + </property> + <property name="maximum"> + <number>0</number> + </property> + </widget> + <widget class="QSpinBox" name="intervalEdit"> + <property name="geometry"> + <rect> + <x>640</x> + <y>240</y> + <width>121</width> + <height>24</height> + </rect> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="buttonSymbols"> + <enum>QAbstractSpinBox::NoButtons</enum> + </property> + <property name="minimum"> + <number>0</number> + </property> + <property name="maximum"> + <number>100000</number> + </property> + </widget> + <widget class="QPushButton" name="rebootButton"> + <property name="geometry"> + <rect> + <x>700</x> + <y>60</y> + <width>80</width> + <height>23</height> + </rect> + </property> + <property name="text"> + <string>Reboot</string> + </property> + </widget> + <widget class="QPushButton" name="rebirthButton"> + <property name="geometry"> + <rect> + <x>830</x> + <y>60</y> + <width>80</width> + <height>23</height> + </rect> + </property> + <property name="text"> + <string>Refresh</string> + </property> + </widget> + </widget> + <widget class="QPushButton" name="quitButton"> + <property name="geometry"> + <rect> + <x>460</x> + <y>500</y> + <width>80</width> + <height>23</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Quit</string> + </property> + <property name="icon"> + <iconset> + <normaloff>:icons/silk/door_out.png</normaloff>:icons/silk/door_out.png</iconset> + </property> + </widget> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>quitButton</tabstop> + </tabstops> + <resources> + <include location="../../../../../../home/mbroek/MyProjects/bmsapp/resources/icons.qrc"/> + </resources> + <connections/> +</ui>