OpenLCP/example/sACN Explorer/universewindow.cpp

77 lines
2.0 KiB
C++

#include "universewindow.h"
#include "ui_universewindow.h"
#include "universemodel.h"
#include "statusindicatorwidget.h"
#include <QComboBox>
#include <QLabel>
#include <QMetaEnum>
/**
* @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);
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->toolBar);
formatLabel->setText(tr("Data Format") + ": ");
ui->toolBar->addWidget(formatLabel);
auto dataModes = new QComboBox(ui->toolBar);
const QMetaEnum types = QMetaEnum::fromType<UniverseModel::data_modes>();
for (int i=0; i < types.keyCount(); ++i)
dataModes->addItem(types.key(i));
connect(dataModes, &QComboBox::currentTextChanged,
model, &UniverseModel::setDataMode);
ui->toolBar->addWidget(dataModes);
// status indicator
auto indicator = new StatusIndicatorWidget(this, mUniverse);
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);
}
}