#include "tracewidgetvna.h" #include #include "Traces/traceimportdialog.h" #include "Traces/tracetouchstoneexport.h" #include "Traces/tracecsvexport.h" #include "ui_tracewidget.h" #include TraceWidgetVNA::TraceWidgetVNA(TraceModel &model, QWidget *parent) : TraceWidget(model, parent) { auto exportMenu = new QMenu(); auto exportTouchstone = new QAction("Touchstone"); auto exportCSV = new QAction("CSV"); exportMenu->addAction(exportTouchstone); exportMenu->addAction(exportCSV); ui->bExport->setMenu(exportMenu); connect(exportTouchstone, &QAction::triggered, [&]() { auto e = new TraceTouchstoneExport(model); // Attempt to set default traces (this will result in correctly populated // 2 port export if the initial 4 traces have not been modified) e->setPortNum(2); auto traces = model.getTraces(); for(unsigned int i=0;i<4;i++) { if(i >= traces.size()) { break; } e->setTrace(i%2, i/2, traces[i]); } e->show(); }); connect(exportCSV, &QAction::triggered, [&]() { auto e = new TraceCSVExport(model); e->show(); }); } void TraceWidgetVNA::importDialog() { auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, QFileDialog::DontUseNativeDialog); if (filename.length() > 0) { auto t = Touchstone::fromFile(filename.toStdString()); std::vector traces; for(unsigned int i=0;ifillFromTouchstone(t, i, filename); unsigned int sink = i / t.ports() + 1; unsigned int source = i % t.ports() + 1; trace->setName("S"+QString::number(sink)+QString::number(source)); traces.push_back(trace); } // contruct prefix from filename // remove any directory names (keep only the filename itself) int lastSlash = qMax(filename.lastIndexOf('/'), filename.lastIndexOf('\\')); if(lastSlash != -1) { filename.remove(0, lastSlash + 1); } // remove file type filename.truncate(filename.indexOf('.')); auto i = new TraceImportDialog(model, traces, filename+"_"); i->show(); } }