#include "universewindow.h" #include "ui_universewindow.h" #include "universemodel.h" #include "statusindicatorwidget.h" #include #include #include #include /** * @brief UniverseWindow::UniverseWindow * @param parent */ UniverseWindow::UniverseWindow(QWidget *parent, QSacnUniverse *universe) : QMainWindow(parent) , ui(new Ui::UniverseWindow()) , mUniverse(universe) { ui->setupUi(this); auto model = new UniverseModel(this, universe->get()); ui->tableView->setModel(model); // update the status bar whenever the universe refreshes connect(model, &UniverseModel::dataChanged, this, [this]() { update_status_(); }); // add data format combobox to toolbar auto formatLabel = new QLabel(ui->toolBarDMX); ui->toolBarDMX->addWidget(formatLabel); formatLabel->setText(tr("Data Format") + ": "); auto dataModes = new QComboBox(ui->toolBarDMX); ui->toolBarDMX->addWidget(dataModes); const QMetaEnum types = QMetaEnum::fromType(); for (int i=0; i < types.keyCount(); ++i) dataModes->addItem(types.key(i)); auto formatGroup = new QActionGroup(ui->centralwidget); formatGroup->addAction(ui->actionViewDecimal); formatGroup->addAction(ui->actionViewHex); formatGroup->addAction(ui->actionViewPercent); connect(dataModes, &QComboBox::currentTextChanged, this, [this, model, types, formatGroup](QString mode) { auto data_mode = static_cast(types.keyToValue(mode.toLocal8Bit())); model->setDataMode(data_mode); formatGroup->blockSignals(true); switch (data_mode) { case UniverseModel::Decimal: ui->actionViewDecimal->setChecked(true); break; case UniverseModel::Hex: ui->actionViewHex->setChecked(true); break; case UniverseModel::Percent: ui->actionViewPercent->setChecked(true); break; default: break; } formatGroup->blockSignals(false); }); connect(ui->actionViewDecimal, &QAction::toggled, this, [dataModes](bool state) { if (state) dataModes->setCurrentIndex((int)UniverseModel::Decimal); }); connect(ui->actionViewHex, &QAction::toggled, this, [dataModes](bool state) { if (state) dataModes->setCurrentIndex((int)UniverseModel::Hex); }); connect(ui->actionViewPercent, &QAction::toggled, this, [dataModes](bool state) { if (state) dataModes->setCurrentIndex((int)UniverseModel::Percent); }); // status indicator auto indicator = new StatusIndicatorWidget(this, mUniverse->get()); ui->statusbar->addPermanentWidget(indicator); update_status_(); } /** * @brief UniverseWindow::~UniverseWindow */ UniverseWindow::~UniverseWindow() { delete ui; } /** * @brief UniverseWindow::updateStatusBar */ void UniverseWindow::update_status_() { // window title this->setWindowTitle(QString("%1 '%2' : "+tr("Universe")+" %3").arg( mUniverse->isEditable() ? tr("Editing") : tr("Viewing"), mUniverse->sourceName(), QString::number(mUniverse->number()))); if (!mUniverse->isEditable()) { // status bar ui->statusbar->clearMessage(); QString message = QString("%1 " + tr("Hz")).arg( QString::number(mUniverse->rxRate())); ui->statusbar->showMessage(message, 2500); } }