162 lines
6.5 KiB
C++
162 lines
6.5 KiB
C++
|
#include "gtl_gui_orbit_widget.h"
|
||
|
#include "gtl_gui_chart_widget.h"
|
||
|
#include "gui/ui_gtl_gui_orbit_widget.h"
|
||
|
#include <QMessageBox>
|
||
|
|
||
|
namespace gtl {
|
||
|
namespace gui {
|
||
|
namespace orbit {
|
||
|
|
||
|
widget::widget(QWidget *parent, gtl::data_model* model)
|
||
|
: QWidget(parent),
|
||
|
ui(new Ui::orbit_widget)
|
||
|
{
|
||
|
ui->setupUi(this);
|
||
|
|
||
|
_selection_data_model = new gtl::selection_data_model(this);
|
||
|
_selection_data_model->setSourceModel(model);
|
||
|
|
||
|
ui->signals_->setModel(_selection_data_model);
|
||
|
ui->signals_->expandAll();
|
||
|
|
||
|
::chart::axis_horz* axis_x = new ::chart::axis_horz();
|
||
|
::chart::axis_vert* axis_y = new ::chart::axis_vert(::chart::axis_vert::down_to_up, false);
|
||
|
_series = new series(parent, axis_x, axis_y);
|
||
|
_chart = new chart(this, axis_x, axis_y);
|
||
|
_chart->add(_series);
|
||
|
ui->splitter->insertWidget(0, _chart);
|
||
|
|
||
|
connect(ui->sig_x, &QComboBox::currentIndexChanged, [=]{
|
||
|
std::vector<analog_data*> ads;
|
||
|
_selection_data_model->get_selections(std::back_insert_iterator<std::vector<analog_data*>>(ads));
|
||
|
int idx = ui->sig_x->currentIndex();
|
||
|
if(idx >= 0 && idx < ads.size())
|
||
|
_series->set_x(ads.at(idx));
|
||
|
else
|
||
|
_series->set_x(nullptr);
|
||
|
});
|
||
|
ui->sig_x->setModel(_selection_data_model->selection());
|
||
|
|
||
|
connect(ui->sig_y, &QComboBox::currentIndexChanged, [=]{
|
||
|
std::vector<analog_data*> ads;
|
||
|
_selection_data_model->get_selections(std::back_insert_iterator<std::vector<analog_data*>>(ads));
|
||
|
int idx = ui->sig_y->currentIndex();
|
||
|
if(idx >= 0 && idx < ads.size())
|
||
|
_series->set_y(ads.at(idx));
|
||
|
else
|
||
|
_series->set_y(nullptr);
|
||
|
});
|
||
|
ui->sig_y->setModel(_selection_data_model->selection());
|
||
|
|
||
|
ui->time->setMinimum(0);
|
||
|
ui->time->setMaximum(10000);
|
||
|
ui->time->setSingleStep(0.1);
|
||
|
ui->time->setValue(_series->time());
|
||
|
connect(ui->time, &QDoubleSpinBox::valueChanged, _series, &series::set_time);
|
||
|
connect(_series, &series::time_changed, this, &widget::update_parameters);
|
||
|
|
||
|
ui->start->setMinimum(0);
|
||
|
ui->start->setMaximum(10000);
|
||
|
ui->start->setSingleStep(0.1);
|
||
|
ui->start->setValue(_series->start());
|
||
|
connect(ui->start, &QDoubleSpinBox::valueChanged, _series, &series::set_start);
|
||
|
connect(_series, &series::start_changed, this, &widget::update_parameters);
|
||
|
|
||
|
ui->stop->setMinimum(0);
|
||
|
ui->stop->setMaximum(10000);
|
||
|
ui->stop->setSingleStep(0.1);
|
||
|
ui->stop->setValue(_series->stop());
|
||
|
connect(ui->stop, &QDoubleSpinBox::valueChanged, _series, &series::set_stop);
|
||
|
connect(_series, &series::stop_changed, this, &widget::update_parameters);
|
||
|
|
||
|
ui->turns->setMinimum(0);
|
||
|
ui->turns->setMaximum(10000);
|
||
|
ui->turns->setSingleStep(0.1);
|
||
|
ui->turns->setValue(_series->turns());
|
||
|
connect(ui->turns, &QDoubleSpinBox::valueChanged, _series, &series::set_turns);
|
||
|
connect(_series, &series::turns_changed, this, &widget::update_parameters);
|
||
|
|
||
|
connect(_series, &series::freq_changed, [=]{
|
||
|
ui->freq->setText(QString::number(_series->freq()));
|
||
|
});
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
widget::~widget()
|
||
|
{
|
||
|
delete _chart;
|
||
|
delete ui;
|
||
|
}
|
||
|
|
||
|
void widget::save(QDomElement &root_element)
|
||
|
{
|
||
|
QDomElement selection_element = root_element.ownerDocument().createElement("selection");
|
||
|
root_element.appendChild(selection_element);
|
||
|
_selection_data_model->save(selection_element);
|
||
|
|
||
|
QDomElement options_element = root_element.ownerDocument().createElement("options");
|
||
|
root_element.appendChild(options_element);
|
||
|
_series->save(options_element);
|
||
|
|
||
|
QDomElement splitter_element = root_element.ownerDocument().createElement("splitter");
|
||
|
root_element.appendChild(splitter_element);
|
||
|
splitter_element.setAttribute("state", QString(ui->splitter->saveState().toBase64()));
|
||
|
}
|
||
|
|
||
|
void widget::load(const QDomElement &root_element)
|
||
|
{
|
||
|
QDomElement options_element = root_element.firstChildElement("options");
|
||
|
_series->load(options_element);
|
||
|
|
||
|
update_parameters();
|
||
|
|
||
|
QDomElement selection_element = root_element.firstChildElement("selection");
|
||
|
_selection_data_model->load(selection_element);
|
||
|
|
||
|
|
||
|
|
||
|
QDomElement splitter_element = root_element.firstChildElement("splitter");
|
||
|
ui->splitter->restoreState(QByteArray::fromBase64(splitter_element.attribute("state", "").toUtf8()));
|
||
|
}
|
||
|
|
||
|
void widget::update_parameters()
|
||
|
{
|
||
|
blockSignals(true);
|
||
|
_series->blockSignals(true);
|
||
|
ui->time->blockSignals(true);
|
||
|
ui->start->blockSignals(true);
|
||
|
ui->stop->blockSignals(true);
|
||
|
ui->turns->blockSignals(true);
|
||
|
|
||
|
qreal value;
|
||
|
|
||
|
value = _series->time();
|
||
|
if(value != ui->time->value())
|
||
|
ui->time->setValue(value);
|
||
|
|
||
|
value = _series->start();
|
||
|
if(value != ui->start->value())
|
||
|
ui->start->setValue(value);
|
||
|
|
||
|
value = _series->stop();
|
||
|
if(value != ui->stop->value())
|
||
|
ui->stop->setValue(value);
|
||
|
|
||
|
value = _series->turns();
|
||
|
if(value != ui->turns->value())
|
||
|
ui->turns->setValue(value);
|
||
|
|
||
|
blockSignals(false);
|
||
|
_series->blockSignals(false);
|
||
|
ui->time->blockSignals(false);
|
||
|
ui->start->blockSignals(false);
|
||
|
ui->stop->blockSignals(false);
|
||
|
ui->turns->blockSignals(false);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
} // namespace gui
|
||
|
} // namespace gtl
|
||
|
|