Fri, 13 Jan 2023 12:00:58 +0100
Added a button to automatic recreate the yeast starter steps. Some code cleanup
/** * MainWindow.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 "MainWindow.h" #include "AboutDialog.h" #include "RecipesTree.h" #include "InventorySuppliers.h" #include "InventoryFermentables.h" #include "InventoryHops.h" #include "InventoryYeasts.h" #include "InventoryMiscs.h" #include "InventoryWaters.h" #include "InventoryEquipments.h" #include "ProdInprod.h" #include "ProdOnName.h" #include "ProdOnCode.h" #include "ProdOnDate.h" #include "ProdOnTree.h" #include "ProfileWaters.h" #include "ProfileMashs.h" #include "ProfileStyles.h" #include "ProfileFerments.h" #include "MonNodes.h" #include "MonFermenters.h" #include "MonCO2meters.h" #include "MoniSpindels.h" #include "ImportXML.h" #include "ImportBrew.h" #include "Setup.h" #include "PrinterDialog.h" #include "../ui/ui_MainWindow.h" #include "database/database.h" #include "config.h" #include "global.h" #include <QApplication> #include <QCloseEvent> #include <QDebug> #include <QStandardItem> #include <QWidget> #include <QtWidgets/QTableWidget> #include <QtWidgets/QGroupBox> #include <QtWidgets/QPushButton> #include <QUrl> MainWindow::MainWindow(bool useDevelopOption, bool startConfigOption, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { qDebug() << Q_FUNC_INFO << useDevelopOption << startConfigOption; ui->setupUi(this); setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); readsettings(); db = new DataBase(); db->openDataBase(useDevelopOption); loadSetup(); maintDataBase(); openWS(useDevelopOption); /* * AcidSG are the values at 100% strength. */ Acid a; a.name_en = "Lactic"; a.name_nl = "Melkzuur"; a.pK1 = 3.86; a.pK2 = 20.0; a.pK3 = 20.0; a.MolWt = 90.08; a.AcidSG = 1238.0; a.AcidPrc = 80.0; my_acids.append(a); a.name_en = "Hydrochloric"; a.name_nl = "Zoutzuur"; a.pK1 = -7.0; a.pK2 = 20.0; a.pK3 = 20.0; a.MolWt = 36.46; a.AcidSG = 1497.0; a.AcidPrc = 28.0; my_acids.append(a); a.name_en = "Phosphoric"; a.name_nl = "Fosforzuur"; a.pK1 = 2.12; a.pK2 = 7.20; a.pK3 = 12.44; a.MolWt = 98.00; a.AcidSG = 1773.0; a.AcidPrc = 75.0; my_acids.append(a); a.name_en = "Sulfuric"; a.name_nl = "Zwavelzuur"; a.pK1 = -1.0; a.pK2 = 1.92; a.pK3 = 20.0; a.MolWt = 98.07; a.AcidSG = 1884.0; a.AcidPrc = 93.0; my_acids.append(a); } MainWindow::~MainWindow() { writesettings(); webSocket->close(QWebSocketProtocol::CloseCodeNormal, ""); db->closeDataBase(); delete ui; } void MainWindow::loadSetup() { /* * Load dedaults from the setup. */ QSqlQuery query("SELECT * FROM profile_setup WHERE record='1'"); query.first(); my_brewery_name = query.value("brewery_name").toString(); my_logoByteArray = query.value("brewery_logo").toByteArray(); my_factor_mashhop = query.value("factor_mashhop").toInt(); my_factor_fwh = query.value("factor_fwh").toInt(); my_ut_pellet = query.value("ut_pellet").toDouble(); my_ut_plug = query.value("ut_plug").toDouble(); my_ut_leaf = query.value("ut_leaf").toDouble(); my_ut_wethop = query.value("ut_wethop").toDouble(); my_ut_t45 = query.value("ut_t45").toDouble(); my_ut_co2extract = query.value("ut_co2extract").toDouble(); my_ha_pellet = query.value("ha_pellet").toDouble(); my_ha_plug = query.value("ha_plug").toDouble(); my_ha_leaf = query.value("ha_leaf").toDouble(); my_ha_wethop = query.value("ha_wethop").toDouble(); my_ha_t45 = query.value("ha_t45").toDouble(); my_ibu_method = query.value("ibu_method").toInt(); my_color_method = query.value("color_method").toInt(); my_brix_correction = query.value("brix_correction").toDouble(); my_grain_absorption = query.value("grain_absorption").toDouble(); my_default_water = query.value("default_water").toInt(); my_yeastlab = query.value("my_yeastlab").toString(); my_height = query.value("brewery_height").toInt(); qInfo() << "loadSetup" << my_brewery_name; } /* * On the server where bmsd runs, there is a crontask.php that does these checks * too. Here we do some of the same commands so that we have the results sooner. * Currently this takes 6 to 9 mSecs. */ void MainWindow::maintDataBase() { QSqlQuery query; /* * Upgrade package values. */ query.exec("UPDATE products SET package_volume = bottle_amount + keg_amount WHERE package_volume='0'"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to new package_volume value"; query.exec("UPDATE products SET bottle_priming_water = bottle_amount * bottle_priming_amount / 500 WHERE bottle_priming_water = 0"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to new bottle_priming_water"; query.exec("UPDATE products SET keg_priming_water = keg_amount * keg_priming_amount / 500 WHERE keg_priming_water = 0"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to new keg_priming_water"; /* * Upgrade inventory_reduced value from old boolean to tiny integer value. */ query.exec("UPDATE products SET inventory_reduced=stage WHERE inventory_reduced = 1"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to new inventory_reduced value"; /* * Update stages after packaging depending on the age. */ query.exec("UPDATE products SET stage=7 WHERE stage = 6 AND DATEDIFF(CURDATE(), package_date) > 0"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to stage 7 (Carbonation)"; query.exec("UPDATE products SET stage=8 WHERE stage = 7 AND DATEDIFF(CURDATE(), package_date) > 13"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to stage 8 (Mature)"; query.exec("UPDATE products SET stage=9 WHERE stage = 8 AND DATEDIFF(CURDATE(), package_date) > 41"); if (query.numRowsAffected()) qInfo() << "Updated" << query.numRowsAffected() << "products to stage 9 (Taste)"; } bool MainWindow::openWS(bool develop) { QString server; if (develop) server = wsDev.host; else server = wsProd.host; QUrl url(QString("ws://%1/ws").arg(server)); qInfo() << "Open websocket:" << url; webSocket = new QWebSocket; QObject::connect(webSocket, &QWebSocket::connected, this, &MainWindow::wsConnected); QObject::connect(webSocket, &QWebSocket::disconnected, this, &MainWindow::wsClosed); webSocket->open(QUrl(url)); return true; } void MainWindow::wsConnected() { qDebug() << Q_FUNC_INFO; connect(webSocket, &QWebSocket::textMessageReceived, this, &MainWindow::wsTextMessageReceived); } void MainWindow::wsClosed() { qWarning() << Q_FUNC_INFO << webSocket->closeReason(); // Should triger a periodic timer to try to reconnect. } void MainWindow::wsTextMessageReceived(QString message) { //qDebug() << "WS received:" << message; QJsonParseError parseError; QJsonDocument jsonMessage = QJsonDocument::fromJson(message.toUtf8(), &parseError); if (parseError.error != QJsonParseError::NoError) { qWarning() << "wsTextMessageReceived error:" << parseError.errorString() << "at" << parseError.offset ; return; } /* * Two maingroups, nodes and devices. * Node message are detected by the group_id object. * Device messages are detected by the device object. * * Signals can be connected from child widgets so we can emit messages to them. */ QString device = jsonMessage.object()["device"].toString(); QString group_id = jsonMessage.object()["group_id"].toString(); if (device != "") { if (device == "fermenters") { //qDebug() << "found fermenter" << jsonMessage.object()["node"].toString()+"/"+jsonMessage.object()["unit"].toString(); emit updateFermenters(jsonMessage.object()["node"].toString()+"/"+jsonMessage.object()["unit"].toString()); } else if (device == "co2meters") { //qDebug() << "found co2meter" << jsonMessage.object()["node"].toString()+"/"+jsonMessage.object()["unit"].toString(); emit updateCO2meters(jsonMessage.object()["node"].toString()+"/"+jsonMessage.object()["unit"].toString()); } else if (device == "ispindels") { //qDebug() << "found iSpindel" << jsonMessage.object()["node"].toString()+"/"+jsonMessage.object()["unit"].toString(); emit updateiSpindels(jsonMessage.object()["node"].toString()+"/"+jsonMessage.object()["unit"].toString()); } else { qDebug() << "unknown device" << device; } } else if (group_id != "") { emit updateNodes(jsonMessage.object()["node"].toString()); } else if (jsonMessage.object()["ping"].toInt() ) { /* * Reply to ping message. Note that the bmsd ignore's * our reply, but we send it anyway. */ webSocket->sendTextMessage(QString("{\"pong\":1}")); } else { qDebug() << "unknown WS message" << message << jsonMessage; } } void MainWindow::readsettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "mbse", "bmsapp"); settings.beginGroup("dbprod"); dbProd.host = settings.value("host").toString(); if (dbProd.host.isEmpty()) { dbProd.host = "localhost"; dbProd.port = "3306"; dbProd.name = "bms_prod"; dbProd.user = "nobody"; dbProd.pass = "secret"; dbProd.charset = "utf8"; settings.setValue("host", dbProd.host); settings.setValue("port", dbProd.port); settings.setValue("name", dbProd.name); settings.setValue("user", dbProd.user); settings.setValue("pass", dbProd.pass); settings.setValue("charset", dbProd.charset); } else { dbProd.port = settings.value("port").toString(); dbProd.name = settings.value("name").toString(); dbProd.user = settings.value("user").toString(); dbProd.pass = settings.value("pass").toString(); dbProd.charset = settings.value("charset").toString(); } settings.endGroup(); qDebug() << "MySQL prod" << dbProd.host << dbProd.port << dbProd.name << dbProd.pass; settings.beginGroup("dbdev"); dbDev.host = settings.value("host").toString(); if (dbDev.host.isEmpty()) { dbDev.host = "localhost"; dbDev.port = "3306"; dbDev.name = "bms_dev"; dbDev.user = "nobody"; dbDev.pass = "secret"; dbDev.charset = "utf8"; settings.setValue("host", dbDev.host); settings.setValue("port", dbDev.port); settings.setValue("name", dbDev.name); settings.setValue("user", dbDev.user); settings.setValue("pass", dbDev.pass); settings.setValue("charset", dbDev.charset); } else { dbDev.port = settings.value("port").toString(); dbDev.name = settings.value("name").toString(); dbDev.user = settings.value("user").toString(); dbDev.pass = settings.value("pass").toString(); dbDev.charset = settings.value("charset").toString(); } settings.endGroup(); qDebug() << "MySQL dev" << dbDev.host << dbDev.port << dbDev.name << dbDev.pass; settings.beginGroup("wsprod"); wsProd.host = settings.value("host").toString(); if (wsProd.host.isEmpty()) { wsProd.host = "localhost"; settings.setValue("host", wsProd.host); } settings.endGroup(); qDebug() << "WS prod" << wsProd.host; settings.beginGroup("wsdev"); wsDev.host = settings.value("host").toString(); if (wsDev.host.isEmpty()) { wsDev.host = "localhost"; settings.setValue("host", wsDev.host); } settings.endGroup(); qDebug() << "WS dev" << wsDev.host; } void MainWindow::writesettings() { QSettings settings(QSettings::IniFormat, QSettings::UserScope, "mbse", "bmsapp"); settings.beginGroup("dbprod"); settings.setValue("host", dbProd.host); settings.setValue("port", dbProd.port); settings.setValue("name", dbProd.name); settings.setValue("user", dbProd.user); settings.setValue("pass", dbProd.pass); settings.setValue("charset", dbProd.charset); settings.endGroup(); settings.beginGroup("dbdev"); settings.setValue("host", dbDev.host); settings.setValue("port", dbDev.port); settings.setValue("name", dbDev.name); settings.setValue("user", dbDev.user); settings.setValue("pass", dbDev.pass); settings.setValue("charset", dbDev.charset); settings.endGroup(); settings.beginGroup("wsprod"); settings.setValue("host", wsProd.host); settings.endGroup(); settings.beginGroup("wsdev"); settings.setValue("host", wsDev.host); settings.endGroup(); qDebug() << "writesettings() done."; } void MainWindow::on_actionExit_triggered() { this->close(); } void MainWindow::fromImportXML() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ImportXMLWindow); delete ImportXMLWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionImport_XML_triggered() { ImportXMLWindow = new ImportXML(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ImportXMLWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Import XML").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromImportBrew() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ImportBrewWindow); delete ImportBrewWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionImport_Brew_triggered() { ImportBrewWindow = new ImportBrew(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ImportBrewWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Import Brewlog").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromMonNodes() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(MonNodesWindow); delete MonNodesWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionMon_Nodes_triggered() { MonNodesWindow = new MonNodes(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(MonNodesWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Monitor Nodes").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromMonFermenters() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(MonFermentersWindow); delete MonFermentersWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionMon_Fermenters_triggered() { MonFermentersWindow = new MonFermenters(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(MonFermentersWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Monitor Fermenters").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromMonCO2meters() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(MonCO2metersWindow); delete MonCO2metersWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionMon_CO2meters_triggered() { MonCO2metersWindow = new MonCO2meters(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(MonCO2metersWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Monitor CO2meters").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromMoniSpindels() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(MoniSpindelsWindow); delete MoniSpindelsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionMon_iSpindels_triggered() { MoniSpindelsWindow = new MoniSpindels(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(MoniSpindelsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Monitor iSpindels").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromRecipesTree() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(RecipesTreeWindow); delete RecipesTreeWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionRecipes_triggered() { RecipesTreeWindow = new RecipesTree(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(RecipesTreeWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Recipes").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventorySuppliers() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventorySuppliersWindow); delete InventorySuppliersWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); } void MainWindow::on_actionSuppliers_triggered() { InventorySuppliersWindow = new InventorySuppliers(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventorySuppliersWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle( QString("BMSapp - %1 - Inventory Suppliers").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventoryFermentables() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventoryFermentablesWindow); delete InventoryFermentablesWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionFermentables_triggered() { InventoryFermentablesWindow = new InventoryFermentables(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventoryFermentablesWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Inventory Fermentables").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventoryHops() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventoryHopsWindow); delete InventoryHopsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionHops_triggered() { InventoryHopsWindow = new InventoryHops(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventoryHopsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Inventory Hops").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventoryYeasts() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventoryYeastsWindow); delete InventoryYeastsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionYeasts_triggered() { InventoryYeastsWindow = new InventoryYeasts(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventoryYeastsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Inventory Yeasts").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventoryMiscs() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventoryMiscsWindow); delete InventoryMiscsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionMiscs_triggered() { InventoryMiscsWindow = new InventoryMiscs(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventoryMiscsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Inventory Miscs").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventoryWaters() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventoryWatersWindow); delete InventoryWatersWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionWaters_triggered() { InventoryWatersWindow = new InventoryWaters(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventoryWatersWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Inventory Waters").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromInventoryEquipments() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(InventoryEquipmentsWindow); delete InventoryEquipmentsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionEquipments_triggered() { InventoryEquipmentsWindow = new InventoryEquipments(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(InventoryEquipmentsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Inventory Equipments").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::on_actionSupplies_list_triggered() { PrinterDialog(PR_SUPPLIES, -1, this); } void MainWindow::on_actionYeast_bank_triggered() { PrinterDialog(PR_YEASTBANK, -1, this); } void MainWindow::fromProdInprod() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProdInprodWindow); delete ProdInprodWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionProd_inprod_triggered() { ProdInprodWindow = new ProdInprod(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProdInprodWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Products in production").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProdOnName() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProdOnNameWindow); delete ProdOnNameWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionOn_Name_triggered() { ProdOnNameWindow = new ProdOnName(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProdOnNameWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Products archive on name").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProdOnCode() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProdOnCodeWindow); delete ProdOnCodeWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionOn_Code_triggered() { ProdOnCodeWindow = new ProdOnCode(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProdOnCodeWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Products archive on code").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProdOnDate() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProdOnDateWindow); delete ProdOnDateWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionOn_Date_triggered() { ProdOnDateWindow = new ProdOnDate(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProdOnDateWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Products archive on date").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProdOnTree() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProdOnTreeWindow); delete ProdOnTreeWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionOn_Tree_triggered() { ProdOnTreeWindow = new ProdOnTree(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProdOnTreeWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Products archive on beerstyle").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::on_actionRep_Production_triggered() { PrinterDialog(PR_REP_TOTAL, -1, this); } void MainWindow::on_actionRep_Efficiency_triggered() { PrinterDialog(PR_REP_EFF, -1, this); } void MainWindow::on_actionRep_Fermentation_triggered() { PrinterDialog(PR_REP_SVG, -1, this); } void MainWindow::fromProfileWaters() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProfileWatersWindow); delete ProfileWatersWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionWater_profiles_triggered() { ProfileWatersWindow = new ProfileWaters(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProfileWatersWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Water Profiles").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProfileMashs() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProfileMashsWindow); delete ProfileMashsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionMash_profiles_triggered() { ProfileMashsWindow = new ProfileMashs(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProfileMashsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Mash Profiles").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProfileStyles() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProfileStylesWindow); delete ProfileStylesWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionStyles_profiles_triggered() { ProfileStylesWindow = new ProfileStyles(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProfileStylesWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Styles Profiles").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromProfileFerments() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(ProfileFermentsWindow); delete ProfileFermentsWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); statusBar()->clearMessage(); } void MainWindow::on_actionFerments_profiles_triggered() { ProfileFermentsWindow = new ProfileFerments(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(ProfileFermentsWindow); ui->mainStack->setCurrentIndex(index); setWindowTitle(QString("BMSapp - %1 - Fermentation Profiles").arg(VERSIONSTRING)); ui->menuBar->setVisible(false); } void MainWindow::fromSetup() { ui->mainStack->setCurrentIndex(-1); ui->mainStack->removeWidget(SetupWindow); delete SetupWindow; setWindowTitle( QString("BMSapp - %1").arg(VERSIONSTRING) ); ui->menuBar->setVisible(true); loadSetup(); } void MainWindow::on_actionSetup_triggered() { SetupWindow = new Setup(this); int index = ui->mainStack->count(); ui->mainStack->addWidget(SetupWindow); ui->mainStack->setCurrentIndex(index); ui->menuBar->setVisible(false); } void MainWindow::on_actionAbout_triggered() { AboutDialog dialog(this); dialog.setModal(true); dialog.exec(); } void MainWindow::windowTitle(QString msg) { setWindowTitle(QString("BMSapp - %1 - %2").arg(VERSIONSTRING).arg(msg)); } void MainWindow::statusMsg(QString msg) { statusBar()->showMessage(msg); }