99 lines
2.7 KiB
C++
99 lines
2.7 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);
|
|
|
|
ui->toolBar->addSeparator();
|
|
|
|
// add priority picker to the toolbar
|
|
auto priorityLabel = new QLabel(ui->toolBar);
|
|
priorityLabel->setText(tr("Priority") + ": ");
|
|
ui->toolBar->addWidget(priorityLabel);
|
|
prioritySpinBox = new QSpinBox(ui->toolBar);
|
|
prioritySpinBox->setMinimum(0);
|
|
prioritySpinBox->setValue(100);
|
|
prioritySpinBox->setMaximum(200);
|
|
prioritySpinBox->setEnabled(false);
|
|
ui->toolBar->addWidget(prioritySpinBox);
|
|
|
|
// status indicator
|
|
auto indicator = new StatusIndicatorWidget(this, mUniverse);
|
|
ui->statusbar->addPermanentWidget(indicator);
|
|
|
|
update_status_();
|
|
if (universe->isEditable())
|
|
{
|
|
prioritySpinBox->setValue(universe->priority());
|
|
prioritySpinBox->setEnabled(true);
|
|
connect(prioritySpinBox, &QSpinBox::valueChanged,
|
|
universe, &QSacnUniverse::setPriority);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @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);
|
|
// priority spinbox
|
|
prioritySpinBox->setValue(mUniverse->priority());
|
|
}
|
|
}
|