74 lines
2.1 KiB
C++
74 lines
2.1 KiB
C++
#include "multichartview.h"
|
|
#include "ui_multichartview.h"
|
|
|
|
MultiChartView::MultiChartView(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::MultiChartView)
|
|
{
|
|
ui->setupUi(this);
|
|
xRangeMax = 0.0;
|
|
xRangeMin = 0.0;
|
|
}
|
|
|
|
MultiChartView::~MultiChartView()
|
|
{
|
|
std::map<std::string, Chart*>::iterator cit;
|
|
for (cit = chartMap.begin(); cit != chartMap.end(); cit++) {
|
|
delete cit->second;
|
|
}
|
|
std::map<std::string, ChartView*>::iterator vit;
|
|
for (vit = viewMap.begin(); vit != viewMap.end(); vit++) {
|
|
delete vit->second;
|
|
}
|
|
|
|
delete ui;
|
|
}
|
|
|
|
|
|
void MultiChartView::addArray(const nix::DataArray &array) {
|
|
this->arrayMap.insert(std::pair<std::string, nix::DataArray>(array.id(), array));
|
|
ArrayInfo ai(array);
|
|
this->infoMap.insert(std::pair<std::string, ArrayInfo*>(array.id(), &ai));
|
|
Chart* chart = createChart(ai);
|
|
ChartView *view = createChartView(chart, ai);
|
|
|
|
double absMin = 0.0, absMax = 0.0;
|
|
std::map<std::string, ArrayInfo*>::iterator it;
|
|
for (it = infoMap.begin(); it != infoMap.end(); it++) {
|
|
if (it->second->xoffset < absMin)
|
|
absMin = it->second->xoffset;
|
|
if (it->second->xmax > absMax)
|
|
absMax = it->second->xmax;
|
|
}
|
|
|
|
ui->scrollBar->setMinimum(0);
|
|
ui->scrollBar->setMaximum(100000);
|
|
ui->scrollBar->setPageStep(100);
|
|
ui->vBox->addWidget(view);
|
|
}
|
|
|
|
Chart* MultiChartView::createChart(const ArrayInfo &info) {
|
|
Chart *chart = new Chart();
|
|
chart->setTitle(QString::fromStdString(arrayMap.at(info.arrayid).name()));
|
|
chart->legend()->hide();
|
|
chart->createDefaultAxes();
|
|
|
|
this->chartMap.insert(std::pair<std::string, Chart*>(info.arrayid, chart));
|
|
return chart;
|
|
}
|
|
|
|
ChartView* MultiChartView::createChartView(Chart *chart, const ArrayInfo &info) {
|
|
ChartView *view = new ChartView(chart);
|
|
view->setLineWidth(1);
|
|
view->setRenderHint(QPainter::Antialiasing);
|
|
/*
|
|
QMargins margins = voltageChart->margins();
|
|
int marg1 = margins.left();
|
|
margins.setLeft(marg1 * 4);
|
|
eodChart->setMargins(margins);
|
|
*/
|
|
|
|
this->viewMap.insert(std::pair<std::string, ChartView*>(info.arrayid, view));
|
|
return view;
|
|
}
|