OpenLCP/example/sACN Explorer/universewindow.cpp

116 lines
3.3 KiB
C++
Raw Normal View History

#include "universewindow.h"
#include "ui_universewindow.h"
2022-11-16 09:28:08 -05:00
#include "universemodel.h"
2022-12-06 00:16:00 -05:00
#include "statusindicatorwidget.h"
2021-09-06 12:54:28 -04:00
2023-04-16 10:51:30 -04:00
#include <QActionGroup>
2021-09-06 12:54:28 -04:00
#include <QComboBox>
#include <QLabel>
#include <QMetaEnum>
/**
* @brief UniverseWindow::UniverseWindow
2021-09-06 12:54:28 -04:00
* @param parent
*/
2022-12-03 21:21:08 -05:00
UniverseWindow::UniverseWindow(QWidget *parent, QSacnUniverse *universe)
2021-09-06 12:54:28 -04:00
: QMainWindow(parent)
2022-12-03 21:21:08 -05:00
, ui(new Ui::UniverseWindow())
, mUniverse(universe)
2021-09-06 12:54:28 -04:00
{
ui->setupUi(this);
auto model = new UniverseModel(this, universe);
2021-09-06 12:54:28 -04:00
ui->tableView->setModel(model);
// update the status bar whenever the universe refreshes
2023-04-16 10:51:30 -04:00
connect(model, &UniverseModel::dataChanged, this, [this]() {
update_status_();
});
2021-09-06 12:54:28 -04:00
// add data format combobox to toolbar
2023-04-16 10:51:30 -04:00
auto formatLabel = new QLabel(ui->toolBarDMX);
ui->toolBarDMX->addWidget(formatLabel);
2021-09-06 12:54:28 -04:00
formatLabel->setText(tr("Data Format") + ": ");
2023-04-16 10:51:30 -04:00
auto dataModes = new QComboBox(ui->toolBarDMX);
ui->toolBarDMX->addWidget(dataModes);
2021-09-06 12:54:28 -04:00
const QMetaEnum types = QMetaEnum::fromType<UniverseModel::data_modes>();
for (int i=0; i < types.keyCount(); ++i)
dataModes->addItem(types.key(i));
2023-04-16 10:51:30 -04:00
auto formatGroup = new QActionGroup(ui->centralwidget);
formatGroup->addAction(ui->actionViewDecimal);
formatGroup->addAction(ui->actionViewHex);
formatGroup->addAction(ui->actionViewPercent);
2021-09-06 12:54:28 -04:00
connect(dataModes, &QComboBox::currentTextChanged,
2023-04-16 10:51:30 -04:00
this, [this, model, types, formatGroup](QString mode) {
auto data_mode = static_cast<UniverseModel::data_modes>(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);
});
2021-09-06 12:54:28 -04:00
2022-12-06 00:16:00 -05:00
// status indicator
auto indicator = new StatusIndicatorWidget(this, mUniverse);
ui->statusbar->addPermanentWidget(indicator);
2022-12-03 21:12:31 -05:00
update_status_();
2021-09-06 12:54:28 -04:00
}
/**
* @brief UniverseWindow::~UniverseWindow
2021-09-06 12:54:28 -04:00
*/
2022-12-03 21:21:08 -05:00
UniverseWindow::~UniverseWindow()
2021-09-06 12:54:28 -04:00
{
delete ui;
}
/**
* @brief UniverseWindow::updateStatusBar
2021-09-06 12:54:28 -04:00
*/
2022-12-03 21:21:08 -05:00
void UniverseWindow::update_status_()
2021-09-06 12:54:28 -04:00
{
// window title
this->setWindowTitle(QString("%1 '%2' : "+tr("Universe")+" %3").arg(
2022-12-03 21:12:31 -05:00
mUniverse->isEditable() ? tr("Editing") : tr("Viewing"),
mUniverse->sourceName(),
QString::number(mUniverse->number())));
2021-09-06 12:54:28 -04:00
2022-12-03 21:12:31 -05:00
if (!mUniverse->isEditable())
2021-09-06 12:54:28 -04:00
{
// status bar
ui->statusbar->clearMessage();
QString message = QString("%1 " + tr("Hz")).arg(
2022-12-03 21:12:31 -05:00
QString::number(mUniverse->rxRate()));
2021-09-06 12:54:28 -04:00
ui->statusbar->showMessage(message, 2500);
}
}