From 5002ed84ded97241a83c286ff18880d6a650fb82 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 24 Oct 2023 12:15:20 +0200 Subject: [PATCH] Raw -> Smart Pointers for musrWiz, qt5. --- src/musredit_qt5/musrWiz/PAdmin.cpp | 50 ++--- src/musredit_qt5/musrWiz/PMusrWiz.cpp | 258 ++++++++++++++------------ src/musredit_qt5/musrWiz/PMusrWiz.h | 60 +++--- src/musredit_qt5/musrWiz/musrWiz.cpp | 18 +- 4 files changed, 199 insertions(+), 187 deletions(-) diff --git a/src/musredit_qt5/musrWiz/PAdmin.cpp b/src/musredit_qt5/musrWiz/PAdmin.cpp index f145db6c..c0bc584a 100644 --- a/src/musredit_qt5/musrWiz/PAdmin.cpp +++ b/src/musredit_qt5/musrWiz/PAdmin.cpp @@ -95,7 +95,7 @@ bool PFuncXMLParser::parse(QIODevice *device) if (fXml.hasError()) { QString msg; msg = QString("%1 Line %2, column %3").arg(fXml.errorString()).arg(fXml.lineNumber()).arg(fXml.columnNumber()); - QMessageBox::critical(0, "**ERROR**", msg, QMessageBox::Ok, QMessageBox::NoButton); + QMessageBox::critical(nullptr, "**ERROR**", msg, QMessageBox::Ok, QMessageBox::NoButton); return false; } @@ -139,7 +139,7 @@ bool PFuncXMLParser::startElement() QXmlStreamAttributes qAttr = fXml.attributes(); if (qAttr.count() != 2) { errMsg = QString("theo_map should have 2 attributes, called 'no', and 'name', found %1").arg(qAttr.count()); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } PParam map; @@ -148,7 +148,7 @@ bool PFuncXMLParser::startElement() ival = str.toInt(&ok); if (!ok) { errMsg = QString("theo_map attribute 'no' is not a number (%1)").arg(str); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } map.setNumber(ival); @@ -159,7 +159,7 @@ bool PFuncXMLParser::startElement() // check that all necessary attributes where found if ((map.getName() == "UnDef") || (map.getNumber() == -1)) { errMsg = QString("found theo_map with missing attribute(s)"); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } fTheoTemplate.appendMap(map); @@ -167,7 +167,7 @@ bool PFuncXMLParser::startElement() QXmlStreamAttributes qAttr = fXml.attributes(); if ((qAttr.count() != 4) && (qAttr.count() != 6)) { errMsg = QString("template_param should have 4 or 6 attributes, called\n'no', 'name', 'value', 'step', ['boundLow', 'boundHigh'] found %1").arg(qAttr.count()); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } PParam param; @@ -176,7 +176,7 @@ bool PFuncXMLParser::startElement() ival = str.toInt(&ok); if (!ok) { errMsg = QString("template_param attribute 'no' is not a number (%1)").arg(str); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } param.setNumber(ival); @@ -188,7 +188,7 @@ bool PFuncXMLParser::startElement() dval = str.toDouble(&ok); if (!ok) { errMsg = QString("template_param attribute 'value' is not a number (%1)").arg(str); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } param.setValue(dval); @@ -197,7 +197,7 @@ bool PFuncXMLParser::startElement() dval = str.toDouble(&ok); if (!ok) { errMsg = QString("template_param attribute 'step' is not a number (%1)").arg(str); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } param.setStep(dval); @@ -377,7 +377,7 @@ bool PInstrumentDefXMLParser::parse(QIODevice *device) if (fXml.hasError()) { QString msg; msg = QString("%1 Line %2, column %3").arg(fXml.errorString()).arg(fXml.lineNumber()).arg(fXml.columnNumber()); - QMessageBox::critical(0, "**ERROR**", msg, QMessageBox::Ok, QMessageBox::NoButton); + QMessageBox::critical(nullptr, "**ERROR**", msg, QMessageBox::Ok, QMessageBox::NoButton); return false; } @@ -418,12 +418,12 @@ bool PInstrumentDefXMLParser::startElement() QXmlStreamAttributes qAttr = fXml.attributes(); if (qAttr.count() != 1) { errMsg = QString("instrument should have 1 attribute, called 'name', found %1").arg(qAttr.count()); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } if (fInstituteName == "") { errMsg = QString("found instrument without institute set."); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } // create an instrument object @@ -632,13 +632,13 @@ bool PInstrumentDefXMLParser::characters() case eNoOfDetectors: if (fSetup == 0) { errMsg = "setup object not found."; - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } ival = str.toInt(&ok); if (!ok) { errMsg = QString("Setup Error: No of Detectors = '%1', which is not an int.").arg(str); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } fSetup->setNoOfDetectors(ival); @@ -667,7 +667,7 @@ bool PInstrumentDefXMLParser::characters() #endif if (strList.size() != 2) { errMsg = QString("Found wrong Asymmetry background range: '%1'").arg(str); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return false; } start = strList[0].toInt(&ok); @@ -695,7 +695,7 @@ bool PInstrumentDefXMLParser::characters() bool PInstrumentDefXMLParser::endDocument() { if (fInstituteName == "") { - QMessageBox::critical(0, "FATAL ERROR", "Didn't find any institute name in the instrument definitions."); + QMessageBox::critical(nullptr, "FATAL ERROR", "Didn't find any institute name in the instrument definitions."); return false; } @@ -768,7 +768,7 @@ bool PMusrWizDefaultXMLParser::parse(QIODevice *device) if (fXml.hasError()) { QString msg; msg = QString("%1 Line %2, column %3").arg(fXml.errorString()).arg(fXml.lineNumber()).arg(fXml.columnNumber()); - QMessageBox::critical(0, "**ERROR**", msg, QMessageBox::Ok, QMessageBox::NoButton); + QMessageBox::critical(nullptr, "**ERROR**", msg, QMessageBox::Ok, QMessageBox::NoButton); return false; } @@ -879,7 +879,7 @@ PAdmin::PAdmin() : QObject() path = std::getenv("HOME"); pathFln = path + "/.musrfit/musrWiz/musrWiz.xml"; if (loadMusrWizDefault(pathFln)) { - QMessageBox::warning(0, "WARNING", "Couldn't find musrWiz.xml file."); + QMessageBox::warning(nullptr, "WARNING", "Couldn't find musrWiz.xml file."); } } @@ -892,7 +892,7 @@ PAdmin::PAdmin() : QObject() pathFln = path + "/.musrfit/musrWiz/musrfit_funcs.xml"; if (loadMusrfitFunc(pathFln)) { fValid = false; - QMessageBox::critical(0, "FATAL ERROR", "Couldn't find any musrfit function definitions."); + QMessageBox::critical(nullptr, "FATAL ERROR", "Couldn't find any musrfit function definitions."); return; } } @@ -921,7 +921,7 @@ PAdmin::PAdmin() : QObject() } if (count == 0) { - QMessageBox::critical(0, "FATAL ERROR", "Couldn't find any instrument definition."); + QMessageBox::critical(nullptr, "FATAL ERROR", "Couldn't find any instrument definition."); fValid = false; } } @@ -1218,7 +1218,7 @@ int PAdmin::loadMusrWizDefault(QString fln) cout << "**INFO** '" << pathName.toLatin1().data() << "' did not exist, hence it is created." << endl; } else { QString msg = QString("Couldn't create '%1'. Please check.").arg(pathName); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return 1; } } @@ -1227,7 +1227,7 @@ int PAdmin::loadMusrWizDefault(QString fln) PMusrWizDefaultXMLParser handler(fln, this); if (!handler.isValid()) { QString errMsg = QString("Error parsing %1 file.").arg(fln); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return 1; } return 0; @@ -1251,7 +1251,7 @@ int PAdmin::loadMusrfitFunc(QString fln) cout << "**INFO** '" << pathName.toLatin1().data() << "' did not exist, hence it is created." << endl; } else { QString msg = QString("Couldn't create '%1'. Please check.").arg(pathName); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return 1; } } @@ -1260,7 +1260,7 @@ int PAdmin::loadMusrfitFunc(QString fln) PFuncXMLParser handler(fln, this); if (!handler.isValid()) { QString errMsg = QString("Error parsing %1 musrfit func file.").arg(fln); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return 1; } return 0; @@ -1289,7 +1289,7 @@ int PAdmin::loadInstrumentDef(QString path, QString fln) cout << "**INFO** '" << pathName.toLatin1().data() << "' did not exist, hence it is created." << endl; } else { QString msg = QString("Couldn't create '%1'. Please check.").arg(pathName); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return 1; } } else { @@ -1300,7 +1300,7 @@ int PAdmin::loadInstrumentDef(QString path, QString fln) PInstrumentDefXMLParser handler(pathFln, this); if (!handler.isValid()) { QString errMsg = QString("Error parsing %1 instrument def file.").arg(pathFln); - QMessageBox::critical(0, "ERROR", errMsg); + QMessageBox::critical(nullptr, "ERROR", errMsg); return 1; } diff --git a/src/musredit_qt5/musrWiz/PMusrWiz.cpp b/src/musredit_qt5/musrWiz/PMusrWiz.cpp index a13a4920..1251ad1f 100644 --- a/src/musredit_qt5/musrWiz/PMusrWiz.cpp +++ b/src/musredit_qt5/musrWiz/PMusrWiz.cpp @@ -28,6 +28,7 @@ ***************************************************************************/ #include +#include #include #include @@ -423,26 +424,26 @@ PShowTheo::PShowTheo(QString theo, QString func, QWidget *parent, Qt::WindowFlag { setWindowTitle("used Theory"); - QLabel *label = new QLabel("

used Theory

"); - QPlainTextEdit *theoTextEdit = new QPlainTextEdit(theo); + std::unique_ptr label = std::make_unique("

used Theory

"); + std::unique_ptr theoTextEdit = std::make_unique(theo); theoTextEdit->setReadOnly(true); - QPlainTextEdit *funcTextEdit = 0; + std::unique_ptr funcTextEdit; if (!func.isEmpty()) { - funcTextEdit = new QPlainTextEdit(func); + funcTextEdit = std::make_unique(func); funcTextEdit->setReadOnly(true); } - QPushButton *cancel = new QPushButton("&Cancel"); + std::unique_ptr cancel = std::make_unique("&Cancel"); - QVBoxLayout *layout = new QVBoxLayout; - layout->addWidget(label); - layout->addWidget(theoTextEdit); + std::unique_ptr layout = std::unique_ptr(); + layout->addWidget(label.get()); + layout->addWidget(theoTextEdit.get()); if (funcTextEdit) - layout->addWidget(funcTextEdit); - layout->addWidget(cancel); + layout->addWidget(funcTextEdit.get()); + layout->addWidget(cancel.get()); - setLayout(layout); + setLayout(layout.get()); - connect(cancel, SIGNAL(pressed()), this, SLOT(accept())); + connect(cancel.get(), SIGNAL(pressed()), this, SLOT(accept())); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -459,23 +460,23 @@ PIntroPage::PIntroPage(PAdmin *admin, PMsrData *data, QWidget *parent) : setTitle("

Introduction

"); setSubTitle("This wizard will help you to create your msr-file."); - fMsrFileName = new QLineEdit(); + fMsrFileName = std::make_unique(); fMsrFileName->setToolTip("enter msr-file name or leave it empty."); fMsrFileName->setWhatsThis("If empty the file name will be generate,\nbased on the run number, the fit type\nand the type of measurement."); - fYear = new QLineEdit(); + fYear = std::unique_ptr(); fYear->setValidator(new QIntValidator()); QDate date = QDate::currentDate(); fYear->setText(QString("%1").arg(date.year())); fYear->setToolTip("year when the run took place."); fYear->setWhatsThis("The year is used to generate\nthe RUN header information where\nmusrfit will look for the data."); - fRunNumber = new QLineEdit(); + fRunNumber = std::unique_ptr(); fRunNumber->setValidator(new QIntValidator()); fRunNumber->setText(QString("%1").arg(fMsrData->getRunNumber())); fRunNumber->setToolTip("enter the run number here."); - fInstitute = new QComboBox(); + fInstitute = std::unique_ptr(); QStringList list = fAdmin->getInstituteList(); // get list form the instrument_def's list.prepend("UnDef"); fInstitute->addItems(list); @@ -483,7 +484,7 @@ PIntroPage::PIntroPage(PAdmin *admin, PMsrData *data, QWidget *parent) : if (idx != -1) fInstitute->setCurrentIndex(idx); - fInstrument = new QComboBox(); + fInstrument = std::unique_ptr(); list.clear(); list << fAdmin->getInstrumentList(fMsrData->getInstitute()); list.prepend("UnDef"); @@ -492,20 +493,20 @@ PIntroPage::PIntroPage(PAdmin *admin, PMsrData *data, QWidget *parent) : if (idx != -1) fInstrument->setCurrentIndex(idx); - fFitType = new QComboBox(); + fFitType = std::unique_ptr(); list.clear(); list << "UnDef" << "Single Histo" << "Single Histo RRF" << "Asymmetry" << "Asymmetry RRF" << "Mu Minus" << "None muSR"; fFitType->addItems(list); idx = fFitType->findText(fAdmin->getDefaultFitType()); fFitType->setCurrentIndex(idx); - fMeasurementType = new QComboBox(); + fMeasurementType = std::unique_ptr(); list.clear(); list << "UnDef" << "ZF" << "TF" << "LF"; fMeasurementType->addItems(list); fMeasurementType->setCurrentIndex(fMsrData->getTypeOfMeasurement()); - fT0 = new QComboBox(); + fT0 = std::unique_ptr(); list.clear(); list << "from data file" << "call musrT0" << "enter here"; fT0->addItems(list); @@ -514,23 +515,23 @@ PIntroPage::PIntroPage(PAdmin *admin, PMsrData *data, QWidget *parent) : QFormLayout *layout = new QFormLayout; - layout->addRow("Add msr-file name:", fMsrFileName); - layout->addRow("Year:", fYear); - layout->addRow("Run Number:", fRunNumber); - layout->addRow("Institute:", fInstitute); - layout->addRow("Instrument:", fInstrument); - layout->addRow("Fit Type:", fFitType); - layout->addRow("Type of Measurement:", fMeasurementType); - layout->addRow("T0's:", fT0); + layout->addRow("Add msr-file name:", fMsrFileName.get()); + layout->addRow("Year:", fYear.get()); + layout->addRow("Run Number:", fRunNumber.get()); + layout->addRow("Institute:", fInstitute.get()); + layout->addRow("Instrument:", fInstrument.get()); + layout->addRow("Fit Type:", fFitType.get()); + layout->addRow("Type of Measurement:", fMeasurementType.get()); + layout->addRow("T0's:", fT0.get()); setLayout(layout); - registerField("runNumber*", fRunNumber); + registerField("runNumber*", fRunNumber.get()); - QObject::connect(fInstitute, SIGNAL(activated(int)), this, SLOT(handleInstituteChanged(int))); - QObject::connect(fFitType, SIGNAL(activated(int)), this , SLOT(handleFitType(int))); - QObject::connect(fMeasurementType, SIGNAL(activated(int)), this, SLOT(checkSetup(int))); - QObject::connect(fT0, SIGNAL(activated(int)), this, SLOT(handleT0(int))); + QObject::connect(fInstitute.get(), SIGNAL(activated(int)), this, SLOT(handleInstituteChanged(int))); + QObject::connect(fFitType.get(), SIGNAL(activated(int)), this , SLOT(handleFitType(int))); + QObject::connect(fMeasurementType.get(), SIGNAL(activated(int)), this, SLOT(checkSetup(int))); + QObject::connect(fT0.get(), SIGNAL(activated(int)), this, SLOT(handleT0(int))); } //------------------------------------------------------------------------- @@ -553,7 +554,7 @@ void PIntroPage::handleFitType(int idx) { if ( (idx != FIT_TYPE_SINGLE_HISTO) && (idx != FIT_TYPE_ASYMMETRY) ){ - QMessageBox::warning(0, "WARNING", "Currently only fit type: single histo and asymmetry available."); + QMessageBox::warning(nullptr, "WARNING", "Currently only fit type: single histo and asymmetry available."); fFitType->setCurrentIndex(FIT_TYPE_SINGLE_HISTO); } } @@ -580,7 +581,7 @@ void PIntroPage::checkSetup(int idx) case MEASURE_LF: setup = instru->getLFSetups(); measure = "LF"; - QMessageBox::information(0, "INFO", "Not yet implemented."); + QMessageBox::information(nullptr, "INFO", "Not yet implemented."); break; case MEASURE_UNDEF: default: @@ -589,7 +590,7 @@ void PIntroPage::checkSetup(int idx) if (setup.size() == 0) { QString msg = QString("Didn't find any setup for:\nInstitute: %1\nInstrument: %2").arg(fInstitute->currentText()).arg(fInstrument->currentText()); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return; } else if (setup.size() == 1) { if (setup[0].getName() == "Default") { @@ -684,26 +685,26 @@ PTheoPage::PTheoPage(PAdmin *admin, PMsrData *data, QWidget *parent) : QString str = QString("Now you will need to enter your theory - fit type: %1").arg(fMsrData->getFitTypeString()); setSubTitle(str); - fTheo = new QPlainTextEdit(); + fTheo = std::make_unique(); fTheo->setWhatsThis("Enter the theory function here."); - fEditTemplate = new QCheckBox("Edit Template"); + fEditTemplate = std::make_unique("Edit Template"); fEditTemplate->setToolTip("if checked, it allows to edit the template"); fEditTemplate->hide(); - fClearAll = new QPushButton(); + fClearAll = std::make_unique(); fClearAll->setText("Clear All"); fClearAll->setToolTip("will clear the theory edit field."); fClearAll->setWhatsThis("will clear the theory edit field."); - fCheckTheo = new QPushButton(); + fCheckTheo = std::make_unique(); fCheckTheo->setText("Check"); fCheckTheo->setToolTip("check if the theory is valid."); fCheckTheo->setWhatsThis("Check is the theory string is valid."); QVector templ = fAdmin->getTheoTemplates(); QVector funcs = fAdmin->getMusrfitFunc(); - fTheoSelect = new QComboBox(); + fTheoSelect = std::make_unique(); QStringList list; // all the templates defined in musrfit_func.xml for (int i=0; iaddItems(list); fTheoSelect->setWhatsThis("select some predef. theory functions.\nFor all theory functions available check the help"); - fTheoAdd = new QPushButton("Add"); + fTheoAdd = std::make_unique("Add"); QHBoxLayout *hLayout = new QHBoxLayout(); - hLayout->addWidget(fTheoSelect); - hLayout->addWidget(fTheoAdd); + hLayout->addWidget(fTheoSelect.get()); + hLayout->addWidget(fTheoAdd.get()); QFormLayout *layout = new QFormLayout; - layout->addRow("Enter Theory:", fTheo); - layout->addRow(fEditTemplate); - layout->addRow("Clear Theory:", fClearAll); + layout->addRow("Enter Theory:", fTheo.get()); + layout->addRow(fEditTemplate.get()); + layout->addRow("Clear Theory:", fClearAll.get()); layout->addRow("Pre Def. Theory Select:", hLayout); - layout->addRow("Press for Validation:", fCheckTheo); + layout->addRow("Press for Validation:", fCheckTheo.get()); setLayout(layout); - QObject::connect(fEditTemplate, SIGNAL(stateChanged(int)), this, SLOT(templateState(int))); - QObject::connect(fClearAll, SIGNAL(clicked()), this, SLOT(clearAll())); - QObject::connect(fCheckTheo, SIGNAL(clicked()), this, SLOT(checkTheory())); - QObject::connect(fTheoAdd, SIGNAL(clicked()), this, SLOT(addTheory())); + QObject::connect(fEditTemplate.get(), SIGNAL(stateChanged(int)), this, SLOT(templateState(int))); + QObject::connect(fClearAll.get(), SIGNAL(clicked()), this, SLOT(clearAll())); + QObject::connect(fCheckTheo.get(), SIGNAL(clicked()), this, SLOT(checkTheory())); + QObject::connect(fTheoAdd.get(), SIGNAL(clicked()), this, SLOT(addTheory())); } //------------------------------------------------------------------------- @@ -907,7 +908,7 @@ void PTheoPage::checkTheory() ok = analyzeTokens(line[i], 0); if (!ok) { QString str = QString("**ERROR** in line %1.\n funX takes no parameter.").arg(i+1); - QMessageBox::critical(0, "Check Theory", str); + QMessageBox::critical(nullptr, "Check Theory", str); // eventually it would be nice to highlight the faulty line return; } @@ -915,7 +916,7 @@ void PTheoPage::checkTheory() ok = analyzeTokens(line[i], 0); if (!ok) { QString str = QString("**ERROR** in line %1.\n mapX takes no parameter.").arg(i+1); - QMessageBox::critical(0, "Check Theory", str); + QMessageBox::critical(nullptr, "Check Theory", str); // eventually it would be nice to highlight the faulty line return; } @@ -928,14 +929,14 @@ void PTheoPage::checkTheory() func = fAdmin->getMusrfitFunc(strList[0]); if (func.getName() == "UnDef") { // function not found QString str = QString("**ERROR** in line %1, '%2' is not a recognized musrfit function.").arg(i+1).arg(line[i]); - QMessageBox::critical(0, "Check Theory", str); + QMessageBox::critical(nullptr, "Check Theory", str); // eventually it would be nice to highlight the faulty line return; } ok = analyzeTokens(line[i], func.getNoOfParam()); if (!ok) { QString str = QString("**ERROR** in line %1.\n %2 takes %3 parameter.").arg(i+1).arg(func.getName()).arg(func.getNoOfParam()); - QMessageBox::critical(0, "Check Theory", str); + QMessageBox::critical(nullptr, "Check Theory", str); // eventually it would be nice to highlight the faulty line return; } @@ -955,8 +956,8 @@ void PTheoPage::checkTheory() fTheoValid = true; QObject *obj = sender(); - if (obj == fCheckTheo) - QMessageBox::information(0, "Check Theory", "Theory seems to be OK."); + if (obj == (QObject*)fCheckTheo.get()) + QMessageBox::information(nullptr, "Check Theory", "Theory seems to be OK."); } //------------------------------------------------------------------------- @@ -1021,7 +1022,7 @@ bool PTheoPage::analyzeTokens(QString str, int noOfTokens) dealWithMap(tok[0], stokNo, 0); } else { QString msg = QString("Found map of the form '%1'.\nThis is NOT a legal map!").arg(tok[0]); - QMessageBox::critical(0, "analyzeTokens", msg); + QMessageBox::critical(nullptr, "analyzeTokens", msg); return false; } } else if (tok[0].startsWith("fun")) { @@ -1032,7 +1033,7 @@ bool PTheoPage::analyzeTokens(QString str, int noOfTokens) dealWithFun(stokNo); } else { QString msg = QString("Found fun of the form '%1'.\nThis is NOT a legal function!").arg(tok[0]); - QMessageBox::critical(0, "analyzeTokens", msg); + QMessageBox::critical(nullptr, "analyzeTokens", msg); return false; } } @@ -1051,7 +1052,7 @@ bool PTheoPage::analyzeTokens(QString str, int noOfTokens) dealWithParam(tok[0], paramNo, i); } else if (!tok[i].startsWith("map") && !tok[i].startsWith("fun")) { QString msg = QString("Found parameter of the form '%1'.\nThis is NOT a legal parameter!").arg(tok[i]); - QMessageBox::critical(0, "analyzeTokens", msg); + QMessageBox::critical(nullptr, "analyzeTokens", msg); return false; } } @@ -1068,7 +1069,7 @@ bool PTheoPage::analyzeTokens(QString str, int noOfTokens) dealWithMap(tok[0], mapNo, i); } else { QString msg = QString("Found map of the form '%1'.\nThis is NOT a legal map!").arg(tok[i]); - QMessageBox::critical(0, "analyzeTokens", msg); + QMessageBox::critical(nullptr, "analyzeTokens", msg); return false; } } @@ -1086,7 +1087,7 @@ bool PTheoPage::analyzeTokens(QString str, int noOfTokens) dealWithFun(funNo); } else { QString msg = QString("Found function of the form '%1'.\nThis is NOT a legal function!").arg(tok[i]); - QMessageBox::critical(0, "analyzeTokens", msg); + QMessageBox::critical(nullptr, "analyzeTokens", msg); return false; } } @@ -1196,7 +1197,6 @@ PMapPage::PMapPage(PMsrData *data, QWidget *parent) : QWizardPage(parent), fMsrData(data) { - fMapPageLayout = 0; } //------------------------------------------------------------------------- @@ -1222,8 +1222,8 @@ void PMapPage::initializePage() // sort maps fMsrData->sort("map"); - fMapPageLayout = new QFormLayout; - setLayout(fMapPageLayout); + fMapPageLayout = std::make_unique(); + setLayout(fMapPageLayout.get()); // make sure that the map list is empty fMapGuiVec.clear(); @@ -1284,12 +1284,12 @@ void PMapPage::initializePage() fMapPageLayout->addRow(QString("map%1").arg(i+1), hLayout); } - fShowTheo = new QPushButton("Show &Theory"); - fMapPageLayout->addRow(fShowTheo); + fShowTheo = std::make_unique("Show &Theory"); + fMapPageLayout->addRow(fShowTheo.get()); update(); - connect(fShowTheo, SIGNAL(pressed()), this, SLOT(showTheo())); + connect(fShowTheo.get(), SIGNAL(pressed()), this, SLOT(showTheo())); } //------------------------------------------------------------------------- @@ -1354,18 +1354,18 @@ PFuncPage::PFuncPage(PMsrData *data, QWidget *parent) : QString str = QString("Now you will need to enter your functions. Fit type: %1").arg(fMsrData->getFitTypeString()); setSubTitle(str); - fFunc = new QPlainTextEdit(); + fFunc = std::make_unique(); fFunc->setWhatsThis("Enter the function(s) here."); - fShowTheo = new QPushButton("Show &Theory"); + fShowTheo = std::make_unique("Show &Theory"); QFormLayout *layout = new QFormLayout; - layout->addRow("Enter Function(s):", fFunc); - layout->addRow(fShowTheo); + layout->addRow("Enter Function(s):", fFunc.get()); + layout->addRow(fShowTheo.get()); setLayout(layout); - connect(fShowTheo, SIGNAL(pressed()), this, SLOT(showTheo())); + connect(fShowTheo.get(), SIGNAL(pressed()), this, SLOT(showTheo())); } //------------------------------------------------------------------------- @@ -1457,8 +1457,16 @@ bool PFuncPage::validatePage() while ((idx = str.indexOf("par", idx)) != -1) { tok = ""; idx += 3; + if (idx >= str.length()) { + std::cerr << ">> PFuncPage::validatePage(): **ERROR** with 'par' in '" << str.toLatin1().data() << "' (idx=" << idx << ")." << std::endl; + return false; + } while (str[idx].isDigit()) { - tok += str[idx++]; + tok += str[idx]; + if (idx++ >= str.length()) { + std::cerr << ">> PFuncPage::validatePage(): **ERROR** with 'par' in '" << str.toLatin1().data() << "' (idx=" << idx << ")." << std::endl; + return false; + } } parNo = tok.toInt(&ok); if (ok) { @@ -1468,6 +1476,9 @@ bool PFuncPage::validatePage() param.setValue(0.0); param.setStep(0.1); paramList.push_back(param); + } else { + std::cerr << ">> PFuncPage::validatePage(): **ERROR** with 'par' in '" << str.toLatin1().data() << "' (tok=" << tok.toLatin1().data() << " not a number)." << std::endl; + return false; } } fMsrData->appendParam(paramList); @@ -1479,8 +1490,16 @@ bool PFuncPage::validatePage() while ((idx = str.indexOf("map", idx)) != -1) { tok = ""; idx += 3; - while (str[idx].isDigit()) { - tok += str[idx++]; + if (idx >= str.length()) { + std::cerr << ">> PFuncPage::validatePage(): **ERROR** with 'map' in '" << str.toLatin1().data() << "' (idx=" << idx << ")." << std::endl; + return false; + } + while ((idx < str.length()) && str[idx].isDigit()) { + tok += str[idx]; + if (idx++ >= str.length()) { + std::cerr << ">> PFuncPage::validatePage(): **ERROR** with 'map' in '" << str.toLatin1().data() << "' (idx=" << idx << ")." << std::endl; + return false; + } } mapNo = tok.toInt(&ok); if (ok) { @@ -1488,6 +1507,9 @@ bool PFuncPage::validatePage() sstr = QString("map%1").arg(mapNo); map.setName(sstr); mapList.push_back(map); + } else { + std::cerr << ">> PFuncPage::validatePage(): **ERROR** with 'map' in '" << str.toLatin1().data() << "' (tok=" << tok.toLatin1().data() << " not a number)." << std::endl; + return false; } } fMsrData->appendMap(mapList); @@ -1545,7 +1567,6 @@ PParamPage::PParamPage(PMsrData *data, QWidget *parent) : QWizardPage(parent), fMsrData(data) { - fParameterPageLayout = 0; } //------------------------------------------------------------------------- @@ -1571,8 +1592,8 @@ void PParamPage::initializePage() QString str = QString("Here you can fine tune your parameters. Fit type: %1").arg(fMsrData->getFitTypeString()); setSubTitle(str); - fParameterPageLayout = new QFormLayout; - setLayout(fParameterPageLayout); + fParameterPageLayout = std::make_unique(); + setLayout(fParameterPageLayout.get()); // make sure that parameter list is empty fParamGuiVec.clear(); @@ -1631,12 +1652,12 @@ void PParamPage::initializePage() fParameterPageLayout->addRow(QString("%1").arg(i+1), hLayout); } - fShowTheo = new QPushButton("Show &Theory"); - fParameterPageLayout->addRow(fShowTheo); + fShowTheo = std::make_unique("Show &Theory"); + fParameterPageLayout->addRow(fShowTheo.get()); update(); - connect(fShowTheo, SIGNAL(pressed()), this, SLOT(showTheo())); + connect(fShowTheo.get(), SIGNAL(pressed()), this, SLOT(showTheo())); } //------------------------------------------------------------------------- @@ -1700,25 +1721,25 @@ PFitInfoPage::PFitInfoPage(PMsrData *data, QWidget *parent) : QString str = QString("Collect necessary fit information. Fit type: %1").arg(fMsrData->getFitTypeString()); setSubTitle(str); - fFitRangeStart = new QLineEdit("0.0"); + fFitRangeStart = std::make_unique("0.0"); fFitRangeStart->setValidator(new QDoubleValidator()); - fFitRangeEnd = new QLineEdit("9.0"); + fFitRangeEnd = std::make_unique("9.0"); fFitRangeEnd->setValidator(new QDoubleValidator()); QHBoxLayout *hLayout = new QHBoxLayout(); - hLayout->addWidget(fFitRangeStart); - hLayout->addWidget(fFitRangeEnd); + hLayout->addWidget(fFitRangeStart.get()); + hLayout->addWidget(fFitRangeEnd.get()); - fPacking = new QLineEdit("1"); + fPacking = std::make_unique("1"); fPacking->setValidator(new QIntValidator()); - fCommands = new QPlainTextEdit(); + fCommands = std::make_unique(); fCommands->setPlainText("#MAX_LIKELIHOOD\nPRINT_LEVEL 2\nMINIMIZE\nMINOS\nSAVE"); QFormLayout *layout = new QFormLayout; layout->addRow("Fit Range:", hLayout); - layout->addRow("Packing:", fPacking); - layout->addRow("Commands:", fCommands); + layout->addRow("Packing:", fPacking.get()); + layout->addRow("Commands:", fCommands.get()); setLayout(layout); } @@ -1784,22 +1805,22 @@ PConclusionPage::PConclusionPage(PAdmin *admin, PMsrData *data, QString *msrFile QVBoxLayout *vLayout = new QVBoxLayout; - fMsrPathFileLabel = new QLabel("Current msr-File Path:"); - fMsrFilePathLineEdit = new QLineEdit(ddir.absolutePath()); + fMsrPathFileLabel = std::make_unique("Current msr-File Path:"); + fMsrFilePathLineEdit = std::make_unique(ddir.absolutePath()); fMsrFilePathLineEdit->setReadOnly(true); - fSaveAsMsrFile = new QPushButton("Save As (msr-file path)"); - fSaveAsTemplate = new QPushButton("Save As (template)"); + fSaveAsMsrFile = std::make_unique("Save As (msr-file path)"); + fSaveAsTemplate = std::make_unique("Save As (template)"); - vLayout->addWidget(fMsrPathFileLabel); - vLayout->addWidget(fMsrFilePathLineEdit); - vLayout->addWidget(fSaveAsMsrFile); + vLayout->addWidget(fMsrPathFileLabel.get()); + vLayout->addWidget(fMsrFilePathLineEdit.get()); + vLayout->addWidget(fSaveAsMsrFile.get()); vLayout->addStretch(1); - vLayout->addWidget(fSaveAsTemplate); + vLayout->addWidget(fSaveAsTemplate.get()); setLayout(vLayout); - connect(fSaveAsMsrFile, SIGNAL(pressed()), this, SLOT(saveAsMsrFile())); - connect(fSaveAsTemplate, SIGNAL(pressed()), this, SLOT(saveAsTemplate())); + connect(fSaveAsMsrFile.get(), SIGNAL(pressed()), this, SLOT(saveAsMsrFile())); + connect(fSaveAsTemplate.get(), SIGNAL(pressed()), this, SLOT(saveAsTemplate())); } //------------------------------------------------------------------------- @@ -1995,15 +2016,6 @@ PMusrWiz::PMusrWiz(PAdmin *admin, PMsrData *msrData, QWidget *parent) : QObject::connect(this, SIGNAL(helpRequested()), this, SLOT(help())); } -//------------------------------------------------------------------------- -/** - * @brief PMusrWiz::~PMusrWiz - */ -PMusrWiz::~PMusrWiz() -{ - -} - //------------------------------------------------------------------------- /** * @brief PMusrWiz::writeMsrFile @@ -2023,7 +2035,7 @@ int PMusrWiz::writeMsrFile(int result) // no msr-file name given, hence generate it if (fMsrData->getMsrFileName() == QString("")) { if (fMsrData->getRunNumber() == -1) { - QMessageBox::critical(0, "ERROR", "No run number given! Won't do anything."); + QMessageBox::critical(nullptr, "ERROR", "No run number given! Won't do anything."); return -2; } fMsrData->setMsrFileName(QString("%1").arg(fMsrData->getRunNumber())); @@ -2070,7 +2082,7 @@ int PMusrWiz::writeMsrFileSingleHisto() QFile fln(pathFileName); if (!fln.open(QIODevice::WriteOnly | QIODevice::Text)) { - QMessageBox::critical(0, "ERROR", "Cannot open file for writting."); + QMessageBox::critical(nullptr, "ERROR", "Cannot open file for writting."); return -3; } @@ -2140,7 +2152,7 @@ int PMusrWiz::writeMsrFileSingleHisto() PInstrument *instru = fAdmin->getInstrument(fMsrData->getInstitute(), fMsrData->getInstrument()); if (instru == 0) { QString msg = QString("No setups found for %1: %2").arg(fMsrData->getInstitute(), fMsrData->getInstrument()); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return -4; } PSetup *setup = 0; @@ -2160,7 +2172,7 @@ int PMusrWiz::writeMsrFileSingleHisto() } if (setup == 0) { QString msg = QString("No setups found for %1: %2: %3").arg(fMsrData->getInstitute(), fMsrData->getInstrument()).arg(fMsrData->getSetup()); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return -5; } int noOfDetec = setup->getNoOfLogicalDetectors(); @@ -2474,7 +2486,7 @@ int PMusrWiz::writeMsrFileAsymmetry() QFile fln(pathFileName); if (!fln.open(QIODevice::WriteOnly | QIODevice::Text)) { - QMessageBox::critical(0, "ERROR", "Cannot open file for writting."); + QMessageBox::critical(nullptr, "ERROR", "Cannot open file for writting."); return -3; } @@ -2541,12 +2553,12 @@ int PMusrWiz::writeMsrFileAsymmetry() // get proper detector information from the instrument definition PInstrument *instru = fAdmin->getInstrument(fMsrData->getInstitute(), fMsrData->getInstrument()); - if (instru == 0) { + if (instru == nullptr) { QString msg = QString("No setups found for %1: %2").arg(fMsrData->getInstitute(), fMsrData->getInstrument()); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return -4; } - PSetup *setup = 0; + PSetup *setup = nullptr; switch (fMsrData->getTypeOfMeasurement()) { case MEASURE_ZF: setup = instru->getZFSetup(fMsrData->getSetup()); @@ -2561,14 +2573,14 @@ int PMusrWiz::writeMsrFileAsymmetry() default: break; } - if (setup == 0) { + if (setup == nullptr) { QString msg = QString("No setups found for %1: %2: %3").arg(fMsrData->getInstitute(), fMsrData->getInstrument()).arg(fMsrData->getSetup()); - QMessageBox::critical(0, "ERROR", msg); + QMessageBox::critical(nullptr, "ERROR", msg); return -5; } int noOfDetec = setup->getNoOfLogicalAsymDetectors(); - PDetector *detector = 0; + PDetector *detector = nullptr; QString detectorName(""); for (int i=0; igetAsymDetector(i); @@ -2892,6 +2904,8 @@ QString PMusrWiz::getRunName(PInstrument *instru) if (idx != -1) { do { count++; + if (idx+count >= runTemplate.length()) + break; } while (runTemplate[idx+count] == 'N'); } if (count >= 4) @@ -2932,5 +2946,5 @@ QString PMusrWiz::getRunName(PInstrument *instru) */ void PMusrWiz::help() { - QMessageBox::information(0, "Help", "Eventually there will be a help here."); + QMessageBox::information(nullptr, "Help", "Eventually there will be a help here."); } diff --git a/src/musredit_qt5/musrWiz/PMusrWiz.h b/src/musredit_qt5/musrWiz/PMusrWiz.h index f2504f56..9adb11a3 100644 --- a/src/musredit_qt5/musrWiz/PMusrWiz.h +++ b/src/musredit_qt5/musrWiz/PMusrWiz.h @@ -30,6 +30,8 @@ #ifndef _PMUSRWIZ_ #define _PMUSRWIZ_ +#include + #include #include #include @@ -204,14 +206,14 @@ class PIntroPage : public QWizardPage PAdmin *fAdmin; PMsrData *fMsrData; - QLineEdit *fMsrFileName; - QLineEdit *fYear; - QLineEdit *fRunNumber; - QComboBox *fInstitute; - QComboBox *fInstrument; - QComboBox *fFitType; - QComboBox *fMeasurementType; - QComboBox *fT0; + std::unique_ptr fMsrFileName; + std::unique_ptr fYear; + std::unique_ptr fRunNumber; + std::unique_ptr fInstitute; + std::unique_ptr fInstrument; + std::unique_ptr fFitType; + std::unique_ptr fMeasurementType; + std::unique_ptr fT0; }; //------------------------------------------------------------------- @@ -246,12 +248,12 @@ class PTheoPage : public QWizardPage QVector fMapList; QVector fFunList; - QPlainTextEdit *fTheo; - QCheckBox *fEditTemplate; - QPushButton *fClearAll; - QComboBox *fTheoSelect; - QPushButton *fTheoAdd; - QPushButton *fCheckTheo; + std::unique_ptr fTheo; + std::unique_ptr fEditTemplate; + std::unique_ptr fClearAll; + std::unique_ptr fTheoSelect; + std::unique_ptr fTheoAdd; + std::unique_ptr fCheckTheo; QString getTheoryFunction(int idx); bool analyzeTokens(QString str, int noOfTokens); @@ -279,9 +281,8 @@ class PFuncPage : public QWizardPage private: PMsrData *fMsrData; - QFormLayout *fMapPageLayout; - QPlainTextEdit *fFunc; - QPushButton *fShowTheo; + std::unique_ptr fFunc; + std::unique_ptr fShowTheo; int getFuncNo(const QString str); }; @@ -304,9 +305,9 @@ class PMapPage : public QWizardPage private: PMsrData *fMsrData; - QFormLayout *fMapPageLayout; + std::unique_ptr fMapPageLayout; QVector fMapGuiVec; - QPushButton *fShowTheo; + std::unique_ptr fShowTheo; }; //------------------------------------------------------------------- @@ -327,9 +328,9 @@ class PParamPage : public QWizardPage private: PMsrData *fMsrData; - QFormLayout *fParameterPageLayout; + std::unique_ptr fParameterPageLayout; QVector fParamGuiVec; - QPushButton *fShowTheo; + std::unique_ptr fShowTheo; }; //------------------------------------------------------------------- @@ -347,10 +348,10 @@ class PFitInfoPage : public QWizardPage private: PMsrData *fMsrData; - QLineEdit *fFitRangeStart; - QLineEdit *fFitRangeEnd; - QLineEdit *fPacking; - QPlainTextEdit *fCommands; + std::unique_ptr fFitRangeStart; + std::unique_ptr fFitRangeEnd; + std::unique_ptr fPacking; + std::unique_ptr fCommands; }; //------------------------------------------------------------------- @@ -370,10 +371,10 @@ class PConclusionPage : public QWizardPage PAdmin *fAdmin; PMsrData *fMsrData; - QLabel *fMsrPathFileLabel; - QLineEdit *fMsrFilePathLineEdit; - QPushButton *fSaveAsMsrFile; - QPushButton *fSaveAsTemplate; + std::unique_ptr fMsrPathFileLabel; + std::unique_ptr fMsrFilePathLineEdit; + std::unique_ptr fSaveAsMsrFile; + std::unique_ptr fSaveAsTemplate; }; //------------------------------------------------------------------- @@ -391,7 +392,6 @@ class PMusrWiz : public QWizard public: PMusrWiz(QWidget *parent=Q_NULLPTR); PMusrWiz(PAdmin *admin, PMsrData *msrData, QWidget *parent=Q_NULLPTR); - virtual ~PMusrWiz(); private slots: virtual int writeMsrFile(int result); diff --git a/src/musredit_qt5/musrWiz/musrWiz.cpp b/src/musredit_qt5/musrWiz/musrWiz.cpp index 09806381..fc58464a 100644 --- a/src/musredit_qt5/musrWiz/musrWiz.cpp +++ b/src/musredit_qt5/musrWiz/musrWiz.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -83,16 +84,18 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); - PAdmin *admin = new PAdmin(); + std::unique_ptr admin = std::make_unique(); + if (admin == nullptr) { + return 1; + } if (!admin->IsValid()) { - delete admin; return 1; } admin->dump(dump); - PMsrData *info = new PMsrData(); // this content will eventually be set by the xml-handler + std::unique_ptr info = std::make_unique(); // this content will eventually be set by the xml-handler - PMusrWiz wizard(admin, info); + PMusrWiz wizard(admin.get(), info.get()); wizard.show(); app.exec(); @@ -132,16 +135,11 @@ int main(int argc, char *argv[]) arguments << pathFln; QProcess::startDetached(musrt0, arguments, "./"); } else { - QMessageBox::warning(0, "WARNING", "Couldn't find musrt0 :-(.\n Only the msr-file has been generated."); + QMessageBox::warning(nullptr, "WARNING", "Couldn't find musrt0 :-(.\n Only the msr-file has been generated."); } } } } - if (info) - delete info; - if (admin) - delete admin; - return result; }