#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);;CSV files (*.csv)", nullptr, QFileDialog::DontUseNativeDialog); if (!filename.isEmpty()) { std::vector traces; QString prefix = QString(); if(filename.endsWith(".csv")) { auto csv = CSV::fromFile(filename); traces = Trace::createFromCSV(csv); } else { // must be a touchstone file auto t = Touchstone::fromFile(filename.toStdString()); traces = Trace::createFromTouchstone(t); } // contruct prefix from filename prefix = filename; // remove any directory names (keep only the filename itself) int lastSlash = qMax(prefix.lastIndexOf('/'), prefix.lastIndexOf('\\')); if(lastSlash != -1) { prefix.remove(0, lastSlash + 1); } // remove file type prefix.truncate(prefix.indexOf('.')); prefix.append("_"); auto i = new TraceImportDialog(model, traces, prefix); i->show(); } }