#include "gtl_gui_octv_widget.h" #include "ui_gtl_gui_octv_widget.h" #include "gui/gtl_gui_chart_widget.h" namespace gtl { namespace gui { octv_widget::octv_widget(QWidget *parent, gtl::data_model* model) : QWidget(parent) , ui(new Ui::octv_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 = new gtl::gui::octv_chart(this); gtl::gui::chart_widget *chart_widget = new gtl::gui::chart_widget(_chart, this); ui->splitter->insertWidget(0, chart_widget); connect(_selection_data_model, >l::selection_data_model::selected, _chart, >l::gui::chart::add_ad); connect(_selection_data_model, >l::selection_data_model::deselected, _chart, >l::gui::chart::remove_ad); ui->minimum->disconnect(); ui->minimum->setMinimum(0.1); ui->minimum->setMaximum(100000); ui->minimum->setValue(_chart->minimum()); connect(ui->minimum, &QDoubleSpinBox::valueChanged,_chart, >l::gui::octv_chart::set_minimum); ui->maximum->disconnect(); ui->maximum->setMinimum(1); ui->maximum->setMaximum(100000); ui->maximum->setValue(_chart->maximum()); connect(ui->maximum, &QDoubleSpinBox::valueChanged,_chart, >l::gui::octv_chart::set_maximum); QMetaEnum meta_enum = QMetaEnum::fromType(); ui->ratio->disconnect(); ui->ratio->clear(); for(int i = 0; i < meta_enum.keyCount(); i++) { ui->ratio->addItem(meta_enum.valueToKey(i)); } ui->ratio->setCurrentIndex(_chart->ratio()); connect(ui->ratio, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_ratio); meta_enum = QMetaEnum::fromType(); ui->look->disconnect(); ui->look->clear(); for(int i = 0; i < meta_enum.keyCount(); i++) { ui->look->addItem(meta_enum.valueToKey(i)); } ui->look->setCurrentIndex(_chart->look()); connect(ui->look, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_look); meta_enum = QMetaEnum::fromType(); ui->fraction->disconnect(); ui->fraction->clear(); for(int i = 0; i < meta_enum.keyCount(); i++) { ui->fraction->addItem(meta_enum.valueToKey(i)); } ui->fraction->setCurrentIndex(_chart->fraction()); connect(ui->fraction, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_fraction); ui->unit->disconnect(); ui->unit->clear(); ui->unit->addItem("unit"); ui->unit->addItem("db"); ui->unit->setCurrentIndex(_chart->unit()); connect(ui->unit, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_unit); } octv_widget::~octv_widget() { delete ui; } void octv_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); _chart->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 octv_widget::load(const QDomElement &root_element) { QDomElement options_element = root_element.firstChildElement("options"); _chart->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 octv_widget::update_parameters() { ui->minimum->disconnect(); ui->maximum->disconnect(); ui->ratio->disconnect(); ui->look->disconnect(); ui->fraction->disconnect(); ui->unit->disconnect(); if( ui->minimum->value() != _chart->minimum() ) ui->minimum->setValue(_chart->minimum()); if( ui->maximum->value() != _chart->maximum() ) ui->maximum->setValue(_chart->maximum()); if( ui->ratio->currentIndex() != (int) _chart->ratio() ) ui->ratio->setCurrentIndex(_chart->ratio()); if( ui->look->currentIndex() != (int) _chart->look() ) ui->look->setCurrentIndex(_chart->look()); if( ui->fraction->currentIndex() != (int) _chart->fraction() ) ui->fraction->setCurrentIndex(_chart->fraction()); if( ui->unit->currentIndex() != _chart->unit() ) ui->unit->setCurrentIndex(_chart->unit()); connect(ui->minimum, &QDoubleSpinBox::valueChanged, _chart, >l::gui::octv_chart::set_minimum); connect(ui->maximum, &QDoubleSpinBox::valueChanged, _chart, >l::gui::octv_chart::set_maximum); connect(ui->ratio, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_ratio); connect(ui->look, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_look); connect(ui->fraction, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_fraction); connect(ui->unit, &QComboBox::currentIndexChanged, _chart, >l::gui::octv_chart::set_unit); } } }