musredit 1.0.0
Loading...
Searching...
No Matches
PGetMusrFTOptionsDialog.cpp
Go to the documentation of this file.
1/****************************************************************************
2
3 PGetMusrFTOptionsDialog.cpp
4
5 Author: Andreas Suter
6 e-mail: andreas.suter@psi.ch
7
8*****************************************************************************/
9
10/***************************************************************************
11 * Copyright (C) 2009-2026 by Andreas Suter *
12 * andreas.suter@psi.ch *
13 * *
14 * This program is free software; you can redistribute it and/or modify *
15 * it under the terms of the GNU General Public License as published by *
16 * the Free Software Foundation; either version 2 of the License, or *
17 * (at your option) any later version. *
18 * *
19 * This program is distributed in the hope that it will be useful, *
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
22 * GNU General Public License for more details. *
23 * *
24 * You should have received a copy of the GNU General Public License *
25 * along with this program; if not, write to the *
26 * Free Software Foundation, Inc., *
27 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
28 ***************************************************************************/
29
43
44#include <QLineEdit>
45#include <QValidator>
46#include <QComboBox>
47#include <QMessageBox>
48#include <QDesktopServices>
49#include <QUrl>
50#include <QFileDialog>
51
53
59#define MUSRFT_OPT_UNDEF 0
60#define MUSRFT_OPT_REAL 1
61#define MUSRFT_OPT_IMAG 2
62#define MUSRFT_OPT_REAL_AND_IMAG 3
63#define MUSRFT_OPT_POWER 4
64#define MUSRFT_OPT_PHASE 5
66
72#define MUSRFT_APOD_UNDEF 0
73#define MUSRFT_APOD_WEAK 1
74#define MUSRFT_APOD_MEDIUM 2
75#define MUSRFT_APOD_STRONG 3
77
83#define MUSRFT_UNIT_UNDEF 0
84#define MUSRFT_UNIT_GAUSS 1
85#define MUSRFT_UNIT_TESLA 2
86#define MUSRFT_UNIT_FREQ 3
87#define MUSRFT_UNIT_CYCLE 4
89
90//----------------------------------------------------------------------------------------------------
112PGetMusrFTOptionsDialog::PGetMusrFTOptionsDialog(QString currentMsrFile, QStringList &prevCmd, const QString helpUrl) :
113 fCurrentMsrFileName(currentMsrFile), fHelpUrl(helpUrl)
114{
115 setupUi(this);
116 setModal(true);
117
118 fBkgRangeStartBin_lineEdit->setValidator( new QIntValidator(fBkgRangeStartBin_lineEdit) );
119 fBkgRangeEndBin_lineEdit->setValidator( new QIntValidator(fBkgRangeEndBin_lineEdit) );
120 fPacking_lineEdit->setValidator( new QIntValidator(fPacking_lineEdit) );
121 fTimeRangeStart_lineEdit->setValidator( new QDoubleValidator(fTimeRangeStart_lineEdit) );
122 fTimeRangeEnd_lineEdit->setValidator( new QDoubleValidator(fTimeRangeEnd_lineEdit) );
123 fFourierPower_lineEdit->setValidator( new QIntValidator(fFourierPower_lineEdit) );
124 fLifetimeCorrection_lineEdit->setValidator( new QDoubleValidator(fLifetimeCorrection_lineEdit) );
125 fFourierRangeStart_lineEdit->setValidator( new QDoubleValidator(fFourierRangeStart_lineEdit) );
126 fFourierRangeEnd_lineEdit->setValidator( new QDoubleValidator(fFourierRangeEnd_lineEdit) );
127 fPacking_lineEdit->setText("1");
128
129 // populate dialog with the previous cmd call
130 bool msrTag = true;
131 QString str, str1, line;
132 int idx;
133 for (int i=0; i<prevCmd.size(); i++) {
134 // collect msr-file-names
135 if (msrTag) {
136 line = "";
137 while (prevCmd[i].contains(".msr") && (i<prevCmd.size())) {
138 // split msr-file path-name into path and name
139 str = prevCmd[i];
140 idx = str.lastIndexOf("/");
141 str1 = str;
142 str.remove(idx, str.length()-idx);
143 fMsrFilePaths << str;
144 str1.remove(0, idx+1);
145 fMsrFileNames << str1;
146 line += str1 + " ";
147 i++;
148 }
149 line.remove(line.length()-1, 1);
150 fMsrFileSelector_lineEdit->setText(line);
151 msrTag = false;
152 }
153 // collect data-file-names
154 if (prevCmd[i] == "-df") {
155 i++;
156 line = "";
157 while (!prevCmd[i].startsWith("-") && (i<prevCmd.size())) {
158 // split msr-file path-name into path and name
159 str = prevCmd[i];
160 idx = str.lastIndexOf("/");
161 str1 = str;
162 str.remove(idx, str.length()-idx);
163 fDataFilePaths << str;
164 str1.remove(0, idx+1);
165 fDataFileNames << str1;
166 line += str1 + " ";
167 i++;
168 }
169 line.remove(line.length()-1, 1);
170 fDataFileSelector_lineEdit->setText(line);
171 }
172 // background-range
173 if (prevCmd[i] == "-br") {
174 fBkgRangeStartBin_lineEdit->setText(prevCmd[++i]);
175 fBkgRangeEndBin_lineEdit->setText(prevCmd[++i]);
176 }
177 // fourier-option
178 if (prevCmd[i] == "-fo") {
179 if (prevCmd[i+1] == "real")
180 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_REAL);
181 else if (prevCmd[i+1] == "imag")
182 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_IMAG);
183 else if (prevCmd[i+1] == "real+imag")
184 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_REAL_AND_IMAG);
185 else if (prevCmd[i+1] == "power")
186 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_POWER);
187 else if (prevCmd[i+1] == "phase")
188 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_PHASE);
189 else
190 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_UNDEF);
191 i++;
192 }
193 // apodization
194 if (prevCmd[i] == "-ap") {
195 if (prevCmd[i+1] == "weak")
196 fApodization_comboBox->setCurrentIndex(MUSRFT_APOD_WEAK);
197 else if (prevCmd[i+1] == "medium")
198 fApodization_comboBox->setCurrentIndex(MUSRFT_APOD_MEDIUM);
199 else if (prevCmd[i+1] == "strong")
200 fApodization_comboBox->setCurrentIndex(MUSRFT_APOD_STRONG);
201 else
202 fApodization_comboBox->setCurrentIndex(MUSRFT_APOD_UNDEF);
203 i++;
204 }
205 // fourier-power
206 if (prevCmd[i] == "-fp") {
207 fFourierPower_lineEdit->setText(prevCmd[++i]);
208 }
209 // units
210 if (prevCmd[i] == "-u") {
211 if (prevCmd[i+1] == "Gauss")
212 fFourierUnits_comboBox->setCurrentIndex(MUSRFT_UNIT_GAUSS);
213 else if (prevCmd[i+1] == "Tesla")
214 fFourierUnits_comboBox->setCurrentIndex(MUSRFT_UNIT_TESLA);
215 else if (prevCmd[i+1] == "MHz")
216 fFourierUnits_comboBox->setCurrentIndex(MUSRFT_UNIT_FREQ);
217 else if (prevCmd[i+1] == "Mc/s")
218 fFourierUnits_comboBox->setCurrentIndex(MUSRFT_UNIT_CYCLE);
219 else
220 fFourierUnits_comboBox->setCurrentIndex(MUSRFT_UNIT_UNDEF);
221 i++;
222 }
223 // phase
224 if (prevCmd[i] == "-ph") {
225 // NOT YET IMPLEMENTED
226 }
227 // fourier-range
228 if (prevCmd[i] == "-fr") {
229 fFourierRangeStart_lineEdit->setText(prevCmd[++i]);
230 fFourierRangeEnd_lineEdit->setText(prevCmd[++i]);
231 }
232 // time-range
233 if (prevCmd[i] == "-tr") {
234 fTimeRangeStart_lineEdit->setText(prevCmd[++i]);
235 fTimeRangeEnd_lineEdit->setText(prevCmd[++i]);
236 }
237 // histo list
238 if (prevCmd[i] == "--histo") {
239 i++;
240 line = "";
241 while (!prevCmd[i].startsWith("-") && (i<prevCmd.size())) {
242 line += prevCmd[i++] + " ";
243 }
244 line.remove(line.length()-1, 1);
245 fHistoList_lineEdit->setText(line);
246 }
247 // average ALL tag
248 if (prevCmd[i] == "-a") {
249 fAveragedView_checkBox->setCheckState(Qt::Checked);
250 }
251 // average per data set tag
252 if (prevCmd[i] == "-ad") {
253 fAveragePerDataSet_checkBox->setCheckState(Qt::Checked);
254 }
255 // t0 list
256 if (prevCmd[i] == "--t0") {
257 i++;
258 line = "";
259 while (!prevCmd[i].startsWith("-") && (i<prevCmd.size())) {
260 line += prevCmd[i++] + " ";
261 }
262 line.remove(line.length()-1, 1);
263 fT0_lineEdit->setText(line);
264 }
265 // packing
266 if (prevCmd[i] == "-pa") {
267 fPacking_lineEdit->setText(prevCmd[++i]);
268 }
269 // title
270 if (prevCmd[i] == "--title") {
271 fFourierTitle_lineEdit->setText(prevCmd[i+1]);
272 }
273 // create msr-file tag
274 if (prevCmd[i] == "--create-msr-file") {
275 fCreateMsrFileName = prevCmd[++i];
276 fCreateMsrFile_checkBox->setCheckState(Qt::Checked);
277 }
278 // lifetime correction
279 if (prevCmd[i] == "-lc") {
280 fLifetimeCorrection_lineEdit->setText(prevCmd[++i]);
281 }
282 }
283
284 // connect all necessary single and slots
285 connect(fCurrentMsrFile_checkBox, SIGNAL( stateChanged(int) ), this, SLOT( currentMsrFileTagChanged(int) ) );
286 connect(fAllMsrFiles_checkBox, SIGNAL( stateChanged(int) ), this, SLOT( allMsrFileTagChanged(int) ) );
287 connect(fMsrFileSelector_pushButton, SIGNAL( clicked() ), this, SLOT( selectMsrFileNames() ) );
288 connect(fDataFileSelector_pushButton, SIGNAL( clicked() ), this, SLOT( selectDataFileNames() ) );
289 connect(fCreateMsrFile_checkBox, SIGNAL( stateChanged(int) ), this, SLOT( createMsrFileChanged(int) ) );
290 connect(fMsrFileNameClear_pushButton, SIGNAL (clicked() ), this, SLOT( clearMsrFileNames() ) );
291 connect(fDataFileNameClear_pushButton, SIGNAL (clicked() ), this, SLOT( clearDataFileNames() ) );
292 connect(fResetAll_pushButton, SIGNAL( clicked() ), this, SLOT( resetAll() ) );
293 connect(fAveragedView_checkBox, SIGNAL ( stateChanged(int) ), this, SLOT( averagedAll(int) ) );
294 connect(fAveragePerDataSet_checkBox, SIGNAL ( stateChanged(int) ), this, SLOT( averagedPerDataSet(int) ) );
295}
296
297//----------------------------------------------------------------------------------------------------
329{
330 QStringList cmd;
331 QString str("");
332 QStringList strList;
333
334 // check if currently active msr-file shall be used
335 if (fCurrentMsrFile_checkBox->checkState() == Qt::Checked) {
336 cmd << fCurrentMsrFileName;
337 } else {
338 // msr-files
339 for (int i=0; i<fMsrFilePaths.size(); i++) {
340 str = fMsrFilePaths[i]+"/"+fMsrFileNames[i];
341 cmd << str;
342 }
343
344 // data-files
345 if (fDataFilePaths.size() > 0) {
346 cmd << "-df";
347 for (int i=0; i<fDataFilePaths.size(); i++) {
348 str = fDataFilePaths[i]+"/"+fDataFileNames[i];
349 cmd << str;
350 }
351 }
352 }
353
354 // background range
355 if ((fBkgRangeStartBin_lineEdit->text().length() > 0) && (fBkgRangeEndBin_lineEdit->text().length() > 0)) {
356 cmd << "-br";
357 cmd << fBkgRangeStartBin_lineEdit->text();
358 cmd << fBkgRangeEndBin_lineEdit->text();
359 }
360
361 // background values
362 if (fBkgList_lineEdit->text().length() > 0) {
363
364 }
365
366 // fourier-option
367 if (fFourierOption_comboBox->currentText() != "UnDef") {
368 cmd << "-fo";
369 cmd << fFourierOption_comboBox->currentText();
370 }
371
372 // apodization
373 cmd << "-ap";
374 cmd << fApodization_comboBox->currentText();
375
376 // fourier-power
377 if (fFourierPower_lineEdit->text().length() > 0) {
378 cmd << "-fp";
379 cmd << fFourierPower_lineEdit->text();
380 }
381
382 // units
383 if (fFourierUnits_comboBox->currentText() != "UnDef") {
384 cmd << "-u";
385 cmd << fFourierUnits_comboBox->currentText();
386 }
387
388 // phase
389
390 // fourier-range
391 if ((fFourierRangeStart_lineEdit->text().length() > 0) && (fFourierRangeEnd_lineEdit->text().length() > 0)) {
392 cmd << "-fr";
393 cmd << fFourierRangeStart_lineEdit->text();
394 cmd << fFourierRangeEnd_lineEdit->text();
395 }
396
397 // time-range
398 if ((fTimeRangeStart_lineEdit->text().length() > 0) && (fTimeRangeEnd_lineEdit->text().length() > 0)) {
399 cmd << "-tr";
400 cmd << fTimeRangeStart_lineEdit->text();
401 cmd << fTimeRangeEnd_lineEdit->text();
402 }
403
404 // histo list
405 if (fHistoList_lineEdit->text().length() > 0) {
406 cmd << "--histo";
407 strList = fHistoList_lineEdit->text().split(" ", Qt::SkipEmptyParts);
408 for (int i=0; i<strList.size(); i++)
409 cmd << strList[i];
410 }
411
412 // averaged view ALL
413 if (fAveragedView_checkBox->checkState() == Qt::Checked)
414 cmd << "-a";
415
416 // averaged view per data set
417 if (fAveragePerDataSet_checkBox->checkState() == Qt::Checked)
418 cmd << "-ad";
419
420 // t0 list
421 if (fT0_lineEdit->text().length() > 0) {
422 cmd << "--t0";
423 strList = fT0_lineEdit->text().split(" ", Qt::SkipEmptyParts);
424 for (int i=0; i<strList.size(); i++)
425 cmd << strList[i];
426 }
427
428 // packing
429 if (fPacking_lineEdit->text().length() > 0) {
430 cmd << "-pa";
431 cmd << fPacking_lineEdit->text();
432 }
433
434 // title
435 if (fFourierTitle_lineEdit->text().length() > 0) {
436 cmd << "--title";
437 cmd << fFourierTitle_lineEdit->text();
438 }
439
440 // create-msr-file
441 if (fCreateMsrFile_checkBox->checkState() == Qt::Checked) {
442 cmd << "--create-msr-file";
443 cmd << fCreateMsrFileName;
444 }
445
446 // lifetimecorrection
447 if (fLifetimeCorrection_lineEdit->text().length() > 0) {
448 cmd << "-lc";
449 cmd << fLifetimeCorrection_lineEdit->text();
450 }
451
452 return cmd;
453}
454
455//----------------------------------------------------------------------------------------------------
467{
468 if (state == Qt::Checked) {
469 fAllMsrFiles_checkBox->setCheckState(Qt::Unchecked);
470
471 // remove all msr-data-file-names and data-path-file-names
472 fMsrFilePaths.clear();
473 fMsrFileNames.clear();
474 fMsrFileSelector_lineEdit->setText("");
475 fDataFilePaths.clear();
476 fDataFileNames.clear();
477 fDataFileSelector_lineEdit->setText("");
478 }
479}
480
481//----------------------------------------------------------------------------------------------------
491{
492 if (state == Qt::Checked) {
493 fCurrentMsrFile_checkBox->setCheckState(Qt::Unchecked);
494 }
495}
496
497//----------------------------------------------------------------------------------------------------
507{
508 QStringList flns = QFileDialog::getOpenFileNames( this, tr("Open msr-File(s)"), tr( "./" ),
509 tr( "msr-Files (*.msr);;All Files (*)" ));
510
511 QString str(""), str1("");
512 int idx;
513 if (flns.size() > 0) {
514 // delete already present elements
515 fMsrFilePaths.clear();
516 fMsrFileNames.clear();
517
518 // split path-name into path and name
519 for (int i=0; i<flns.size(); i++) {
520 str = flns[i];
521 idx = str.lastIndexOf("/");
522 str1 = str;
523 str.remove(idx, str.length()-idx);
524 fMsrFilePaths << str;
525 str1.remove(0, idx+1);
526 fMsrFileNames << str1;
527 }
528
529 // populate fMsrFileSelector_lineEdit
530 str = QString("");
531 for (int i=0; i<fMsrFileNames.size()-1; i++) {
532 str += fMsrFileNames[i] + " ";
533 }
534 str += fMsrFileNames[fMsrFileNames.size()-1];
535
536 fMsrFileSelector_lineEdit->setText(str);
537 }
538}
539
540//----------------------------------------------------------------------------------------------------
548{
549 fMsrFileSelector_lineEdit->setText("");
550 fMsrFilePaths.clear();
551 fMsrFileNames.clear();
552}
553
554//----------------------------------------------------------------------------------------------------
564{
565 QStringList flns = QFileDialog::getOpenFileNames( this, tr("Open msr-File(s)"), tr( "./" ),
566 tr( "data-Files (*.root *.bin *.msr *.nxs *.mdu);;All Files (*)" ));
567
568 QString str(""), str1("");
569 int idx;
570 if (flns.size() > 0) {
571 // delete already present elements
572 fDataFilePaths.clear();
573 fDataFileNames.clear();
574
575 // split path-name into path and name
576 for (int i=0; i<flns.size(); i++) {
577 str = flns[i];
578 idx = str.lastIndexOf("/");
579 str1 = str;
580 str.remove(idx, str.length()-idx);
581 fDataFilePaths << str;
582 str1.remove(0, idx+1);
583 fDataFileNames << str1;
584 }
585
586 // populate fMsrFileSelector_lineEdit
587 str = QString("");
588 for (int i=0; i<fDataFileNames.size()-1; i++) {
589 str += fDataFileNames[i] + " ";
590 }
591 str += fDataFileNames[fDataFileNames.size()-1];
592
593 fDataFileSelector_lineEdit->setText(str);
594 }
595}
596
597//----------------------------------------------------------------------------------------------------
605{
606 fDataFileSelector_lineEdit->setText("");
607 fDataFilePaths.clear();
608 fDataFileNames.clear();
609}
610
611//----------------------------------------------------------------------------------------------------
622{
623 if (state == Qt::Checked) {
624 fCreateMsrFileName = QFileDialog::getSaveFileName(this, tr("Create msr-file"), "./", tr("msr-Files (*.msr);;All Files (*)"));
625 if (fCreateMsrFileName.length() == 0)
626 fCreateMsrFile_checkBox->setCheckState(Qt::Unchecked);
627 } else {
629 }
630}
631
632//----------------------------------------------------------------------------------------------------
641{
642 fCurrentMsrFile_checkBox->setCheckState(Qt::Unchecked);
643 fAllMsrFiles_checkBox->setCheckState(Qt::Unchecked);
644 fMsrFilePaths.clear();
645 fMsrFileNames.clear();
646 fMsrFileSelector_lineEdit->setText("");
647 fDataFilePaths.clear();
648 fDataFileNames.clear();
649 fDataFileSelector_lineEdit->setText("");
650 fBkgRangeStartBin_lineEdit->setText("");
651 fBkgRangeEndBin_lineEdit->setText("");
652 fBkgList_lineEdit->setText("");
653 fApodization_comboBox->setCurrentIndex(MUSRFT_APOD_UNDEF);
654 fPacking_lineEdit->setText("");
655 fTimeRangeStart_lineEdit->setText("");
656 fTimeRangeEnd_lineEdit->setText("");
657 fHistoList_lineEdit->setText("");
658 fT0_lineEdit->setText("");
659 fFourierOption_comboBox->setCurrentIndex(MUSRFT_OPT_UNDEF);
660 fFourierUnits_comboBox->setCurrentIndex(MUSRFT_UNIT_UNDEF);
661 fFourierPower_lineEdit->setText("");
662 fLifetimeCorrection_lineEdit->setText("");
663 fFourierRangeStart_lineEdit->setText("");
664 fFourierRangeEnd_lineEdit->setText("");
665 fAveragedView_checkBox->setCheckState(Qt::Unchecked);
666 fAveragePerDataSet_checkBox->setCheckState(Qt::Unchecked);
667 fCreateMsrFile_checkBox->setCheckState(Qt::Unchecked);
668 fFourierTitle_lineEdit->setText("");
669}
670
671//----------------------------------------------------------------------------------------------------
682{
683 if ((state == Qt::Checked) && fAveragePerDataSet_checkBox->isChecked())
684 fAveragePerDataSet_checkBox->setCheckState(Qt::Unchecked);
685}
686
687//----------------------------------------------------------------------------------------------------
698{
699 if ((state == Qt::Checked) && fAveragedView_checkBox->isChecked())
700 fAveragedView_checkBox->setCheckState(Qt::Unchecked);
701}
702
703//----------------------------------------------------------------------------------------------------
712{
713 if (fHelpUrl.isEmpty()) {
714 QMessageBox::information(this, "INFO", "Will eventually show a help window");
715 } else {
716 bool ok = QDesktopServices::openUrl(QUrl(fHelpUrl, QUrl::TolerantMode));
717 if (!ok) {
718 QString msg = QString("<p>Sorry: Couldn't open default web-browser for the help.<br>Please try: <a href=\"%1\">musrfit docu</a> in your web-browser.").arg(fHelpUrl);
719 QMessageBox::critical( nullptr, tr("FATAL ERROR"), msg, QMessageBox::Close );
720 }
721 }
722}
#define MUSRFT_OPT_UNDEF
Undefined/default option.
#define MUSRFT_UNIT_TESLA
Tesla (magnetic field units)
#define MUSRFT_OPT_PHASE
Phase spectrum.
#define MUSRFT_APOD_MEDIUM
Medium apodization.
#define MUSRFT_APOD_UNDEF
Undefined/no apodization.
#define MUSRFT_OPT_REAL_AND_IMAG
Both real and imaginary parts.
#define MUSRFT_UNIT_CYCLE
Mc/s (megacycles per second)
#define MUSRFT_APOD_WEAK
Weak apodization.
#define MUSRFT_OPT_IMAG
Imaginary part of Fourier transform.
#define MUSRFT_UNIT_UNDEF
Undefined/default units.
#define MUSRFT_APOD_STRONG
Strong apodization.
#define MUSRFT_OPT_POWER
Power spectrum.
#define MUSRFT_UNIT_FREQ
MHz (frequency units)
#define MUSRFT_OPT_REAL
Real part of Fourier transform.
#define MUSRFT_UNIT_GAUSS
Gauss (magnetic field units)
Dialog for configuring musrFT command-line options.
void clearMsrFileNames()
Clears the msr-file selection.
QString fCurrentMsrFileName
Full path-name of the currently active msr-file in musredit.
QString fCreateMsrFileName
Full path-name for msr-file creation output.
QString fHelpUrl
URL to the online documentation for musrFT.
void resetAll()
Resets all dialog options to their default values.
void clearDataFileNames()
Clears the data file selection.
void selectDataFileNames()
Opens file dialog to select data files.
QStringList fDataFileNames
File names (without path) for selected data files.
QStringList fMsrFilePaths
Directory paths for selected msr-files.
QStringList fDataFilePaths
Directory paths for selected data files.
QStringList fMsrFileNames
File names (without path) for selected msr-files.
void averagedPerDataSet(int state)
Handles average-per-dataset checkbox (mutually exclusive with all).
void helpContent()
Opens the online help for musrFT.
PGetMusrFTOptionsDialog(QString currentMsrFile, QStringList &prevCmd, const QString helpUrl)
Constructs the musrFT options dialog.
void averagedAll(int state)
Handles average-all checkbox (mutually exclusive with per-dataset).
void createMsrFileChanged(int state)
Handles create msr-file checkbox state change.
void allMsrFileTagChanged(int state)
Handles all msr-files checkbox state change.
void currentMsrFileTagChanged(int state)
Handles current msr-file checkbox state change.
QStringList getMusrFTOptions()
Builds and returns the musrFT command-line options.
void selectMsrFileNames()
Opens file dialog to select msr-files.