proper implementation of PGetSingleHistoRunBlockDialog
This commit is contained in:
parent
aa99881488
commit
e3eb423cbe
@ -78,8 +78,12 @@ bool PAdminXMLParser::startElement( const QString&, const QString&,
|
||||
fKeyWord = eInstitute;
|
||||
} else if (qName == "file_format") {
|
||||
fKeyWord = eFileFormat;
|
||||
} else if (qName == "lifetime_correction") {
|
||||
fKeyWord = eLifetimeCorrection;
|
||||
} else if (qName == "msr_default_file_path") {
|
||||
fKeyWord = eMsrDefaultFilePath;
|
||||
} else if (qName == "help_main") {
|
||||
fKeyWord = eHelpMain;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -120,9 +124,19 @@ bool PAdminXMLParser::characters(const QString& str)
|
||||
case eFileFormat:
|
||||
fAdmin->setFileFormat(QString(str.ascii()).stripWhiteSpace());
|
||||
break;
|
||||
case eLifetimeCorrection:
|
||||
bool flag;
|
||||
if (str == "y")
|
||||
flag = true;
|
||||
else
|
||||
flag = false;
|
||||
fAdmin->setLifetimeCorrectionFlag(flag);
|
||||
case eMsrDefaultFilePath:
|
||||
fAdmin->setMsrDefaultFilePath(QString(str.ascii()).stripWhiteSpace());
|
||||
break;
|
||||
case eHelpMain:
|
||||
fAdmin->setHelpMain(str);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -47,7 +47,8 @@ class PAdminXMLParser : public QXmlDefaultHandler
|
||||
|
||||
private:
|
||||
enum EAdminKeyWords {eEmpty, eExecPath, eDefaultSavePath, eBeamline, eInstitute, eFileFormat,
|
||||
eMsrDefaultFilePath};
|
||||
eLifetimeCorrection, eMsrDefaultFilePath,
|
||||
eHelpMain};
|
||||
|
||||
bool startDocument();
|
||||
bool startElement( const QString&, const QString&, const QString& ,
|
||||
@ -73,7 +74,9 @@ class PAdmin
|
||||
QString getBeamline() { return fBeamline; }
|
||||
QString getInstitute() { return fInstitute; }
|
||||
QString getFileFormat() { return fFileFormat; }
|
||||
bool getLifetimeCorrectionFlag() { return fLifetimeCorrection; }
|
||||
QString getMsrDefaultFilePath() { return fMsrDefaultFilePath; }
|
||||
QString getHelpMain() { return fHelpMain; }
|
||||
|
||||
protected:
|
||||
void setExecPath(const QString str) { fExecPath = str; }
|
||||
@ -81,7 +84,9 @@ class PAdmin
|
||||
void setBeamline(const QString str) { fBeamline = str; }
|
||||
void setInstitute(const QString str) { fInstitute = str; }
|
||||
void setFileFormat(const QString str) { fFileFormat = str; }
|
||||
void setLifetimeCorrectionFlag(const bool flag) { fLifetimeCorrection = flag; }
|
||||
void setMsrDefaultFilePath(const QString str) { fMsrDefaultFilePath = str; }
|
||||
void setHelpMain(const QString str) { fHelpMain = str; }
|
||||
|
||||
private:
|
||||
friend class PAdminXMLParser;
|
||||
@ -92,8 +97,11 @@ class PAdmin
|
||||
QString fBeamline;
|
||||
QString fInstitute;
|
||||
QString fFileFormat;
|
||||
bool fLifetimeCorrection;
|
||||
|
||||
QString fMsrDefaultFilePath;
|
||||
|
||||
QString fHelpMain;
|
||||
};
|
||||
|
||||
#endif // _PADMIN_H_
|
||||
|
@ -68,14 +68,14 @@ PGetAsymmetryRunBlockDialog::PGetAsymmetryRunBlockDialog()
|
||||
*/
|
||||
QString PGetAsymmetryRunBlockDialog::GetRunHeaderInfo()
|
||||
{
|
||||
QString str;
|
||||
QString str;
|
||||
|
||||
str = "RUN " + fRunFileName_lineEdit->text() + " ";
|
||||
str += fBeamline_lineEdit->text().upper() + " ";
|
||||
str += fInstitute_comboBox->currentText() + " ";
|
||||
str += fFileFormat_comboBox->currentText() + " (name beamline institute data-file-format)\n";
|
||||
str = "RUN " + fRunFileName_lineEdit->text() + " ";
|
||||
str += fBeamline_lineEdit->text().upper() + " ";
|
||||
str += fInstitute_comboBox->currentText() + " ";
|
||||
str += fFileFormat_comboBox->currentText() + " (name beamline institute data-file-format)\n";
|
||||
|
||||
return str;
|
||||
return str;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
|
@ -40,29 +40,25 @@
|
||||
/**
|
||||
* <p>
|
||||
*/
|
||||
PGetSingleHistoRunBlockDialog::PGetSingleHistoRunBlockDialog()
|
||||
PGetSingleHistoRunBlockDialog::PGetSingleHistoRunBlockDialog(QWidget * parent, const char *name,
|
||||
bool modal, WFlags f,
|
||||
const bool lifetimeCorrection) :
|
||||
PGetSingleHistoRunBlockDialogBase(parent, name, modal, f)
|
||||
{
|
||||
fForward_lineEdit->setValidator( new QIntValidator(fForward_lineEdit) );
|
||||
fNorm_lineEdit->setValidator( new QIntValidator(fNorm_lineEdit) );
|
||||
/*
|
||||
fDataForwardStart_lineEdit->setValidator( new QIntValidator(fDataForwardStart_lineEdit) );
|
||||
fDataForwardEnd_lineEdit->setValidator( new QIntValidator(fDataForwardEnd_lineEdit) );
|
||||
fDataBackwardStart_lineEdit->setValidator( new QIntValidator(fDataBackwardStart_lineEdit) );
|
||||
fDataBackwardEnd_lineEdit->setValidator( new QIntValidator(fDataBackwardEnd_lineEdit) );
|
||||
fBackgroundForwardStart_lineEdit->setValidator( new QIntValidator(fBackgroundForwardStart_lineEdit) );
|
||||
fBackgroundForwardEnd_lineEdit->setValidator( new QIntValidator(fBackgroundForwardEnd_lineEdit) );
|
||||
fBackgroundBackwardStart_lineEdit->setValidator( new QIntValidator(fBackgroundBackwardStart_lineEdit) );
|
||||
fBackgroundBackwardEnd_lineEdit->setValidator( new QIntValidator(fBackgroundBackwardEnd_lineEdit) );
|
||||
fBackgroundForwardFix_lineEdit->setValidator( new QDoubleValidator(fBackgroundForwardFix_lineEdit) );
|
||||
fBackgroundBackwardFix_lineEdit->setValidator( new QDoubleValidator(fBackgroundBackwardFix_lineEdit) );
|
||||
fDataStart_lineEdit->setValidator( new QIntValidator(fDataStart_lineEdit) );
|
||||
fDataEnd_lineEdit->setValidator( new QIntValidator(fDataEnd_lineEdit) );
|
||||
fBackgroundFix_lineEdit->setValidator( new QDoubleValidator(fBackgroundFix_lineEdit) );
|
||||
fBackgroundFit_lineEdit->setValidator( new QIntValidator(fBackgroundFit_lineEdit) );
|
||||
fBackgroundStart_lineEdit->setValidator( new QIntValidator(fBackgroundStart_lineEdit) );
|
||||
fBackgroundEnd_lineEdit->setValidator( new QIntValidator(fBackgroundEnd_lineEdit) );
|
||||
fFitRangeStart_lineEdit->setValidator( new QDoubleValidator(fFitRangeStart_lineEdit) );
|
||||
fFitRangeEnd_lineEdit->setValidator( new QDoubleValidator(fFitRangeEnd_lineEdit) );
|
||||
fPacking_lineEdit->setValidator( new QIntValidator(fPacking_lineEdit) );
|
||||
fAlpha_lineEdit->setValidator( new QIntValidator(fAlpha_lineEdit) );
|
||||
fBeta_lineEdit->setValidator( new QIntValidator(fBeta_lineEdit) );
|
||||
fT0Forward_lineEdit->setValidator( new QIntValidator(fT0Forward_lineEdit) );
|
||||
fT0Backward_lineEdit->setValidator( new QIntValidator(fT0Backward_lineEdit) );
|
||||
*/
|
||||
fT0_lineEdit->setValidator( new QIntValidator(fT0_lineEdit) );
|
||||
fLifetime_lineEdit->setValidator( new QIntValidator(fLifetime_lineEdit) );
|
||||
fLifetimeCorrection_checkBox->setChecked(lifetimeCorrection);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
@ -73,6 +69,11 @@ QString PGetSingleHistoRunBlockDialog::GetRunHeaderInfo()
|
||||
{
|
||||
QString str="";
|
||||
|
||||
str = "RUN " + fRunFileName_lineEdit->text() + " ";
|
||||
str += fBeamline_lineEdit->text().upper() + " ";
|
||||
str += fInstitute_comboBox->currentText() + " ";
|
||||
str += fFileFormat_comboBox->currentText() + " (name beamline institute data-file-format)\n";
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -82,7 +83,17 @@ QString PGetSingleHistoRunBlockDialog::GetRunHeaderInfo()
|
||||
*/
|
||||
QString PGetSingleHistoRunBlockDialog::GetMap(bool &valid)
|
||||
{
|
||||
QString str="";
|
||||
QString str = fMap_lineEdit->text().stripWhiteSpace().remove(" ");
|
||||
|
||||
// check if potentially proper map line
|
||||
for (unsigned int i=0; i<str.length(); i++) {
|
||||
if (!str[i].isDigit()) {
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
str = "map " + fMap_lineEdit->text() + "\n";
|
||||
|
||||
return str;
|
||||
}
|
||||
@ -95,6 +106,15 @@ QString PGetSingleHistoRunBlockDialog::GetData(bool &valid)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
if (fDataStart_lineEdit->text().isEmpty() || fDataEnd_lineEdit->text().isEmpty()) {
|
||||
valid = false;
|
||||
} else {
|
||||
str = "data ";
|
||||
str += fDataStart_lineEdit->text() + " ";
|
||||
str += fDataEnd_lineEdit->text() + "\n";
|
||||
valid = true;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -106,6 +126,30 @@ QString PGetSingleHistoRunBlockDialog::GetBackground(bool &valid)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
valid = true;
|
||||
|
||||
// check that either backgr.fix or background is given, but not both
|
||||
if (fBackgroundStart_lineEdit->text().isEmpty() && fBackgroundEnd_lineEdit->text().isEmpty() &&
|
||||
fBackgroundFix_lineEdit->text().isEmpty() &&
|
||||
fBackgroundFit_lineEdit->text().isEmpty()) {
|
||||
valid = false;
|
||||
str = "background 0 10\n";
|
||||
} else {
|
||||
if (!fBackgroundStart_lineEdit->text().isEmpty()) { // assume the rest is given, not fool prove but ...
|
||||
str = "background ";
|
||||
str += fBackgroundStart_lineEdit->text() + " ";
|
||||
str += fBackgroundEnd_lineEdit->text() + "\n";
|
||||
}
|
||||
if (!fBackgroundFix_lineEdit->text().isEmpty()) {
|
||||
str = "backgr.fix ";
|
||||
str += fBackgroundFix_lineEdit->text() + "\n";
|
||||
}
|
||||
if (!fBackgroundFit_lineEdit->text().isEmpty()) {
|
||||
str = "backgr.fit ";
|
||||
str += fBackgroundFit_lineEdit->text() + "\n";
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -117,6 +161,16 @@ QString PGetSingleHistoRunBlockDialog::GetFitRange(bool &valid)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
if (fFitRangeStart_lineEdit->text().isEmpty() || fFitRangeEnd_lineEdit->text().isEmpty()) {
|
||||
str += "fit 0.0 10.0\n";
|
||||
valid = false;
|
||||
} else {
|
||||
str += "fit ";
|
||||
str += fFitRangeStart_lineEdit->text() + " ";
|
||||
str += fFitRangeEnd_lineEdit->text() + "\n";
|
||||
valid = true;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -128,6 +182,14 @@ QString PGetSingleHistoRunBlockDialog::GetPacking(bool &present)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
if (fPacking_lineEdit->text().isEmpty()) {
|
||||
present = false;
|
||||
str += "packing 1\n";
|
||||
} else {
|
||||
present = true;
|
||||
str += "packing " + fPacking_lineEdit->text() + "\n\n";
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -139,6 +201,14 @@ QString PGetSingleHistoRunBlockDialog::GetT0(bool &present)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
if (!fT0_lineEdit->text().isEmpty()) {
|
||||
str = "t0 ";
|
||||
str += fT0_lineEdit->text() + "\n";
|
||||
present = true;
|
||||
} else {
|
||||
present = false;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -150,6 +220,14 @@ QString PGetSingleHistoRunBlockDialog::GetMuonLifetimeParam(bool &present)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
if (!fLifetime_lineEdit->text().isEmpty()) {
|
||||
str = "lifetime ";
|
||||
str += fLifetime_lineEdit->text() + "\n";
|
||||
present = true;
|
||||
} else {
|
||||
present = false;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -161,6 +239,13 @@ QString PGetSingleHistoRunBlockDialog::GetLifetimeCorrection(bool &present)
|
||||
{
|
||||
QString str="";
|
||||
|
||||
if (fLifetimeCorrection_checkBox->isChecked()) {
|
||||
str = "lifetimecorrection\n";
|
||||
present = true;
|
||||
} else {
|
||||
present = false;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,8 @@
|
||||
class PGetSingleHistoRunBlockDialog : public PGetSingleHistoRunBlockDialogBase
|
||||
{
|
||||
public:
|
||||
PGetSingleHistoRunBlockDialog();
|
||||
PGetSingleHistoRunBlockDialog(QWidget * parent = 0, const char * name = 0, bool modal = FALSE,
|
||||
WFlags f = 0, const bool lifetimeCorrection = true);
|
||||
|
||||
QString GetRunHeaderInfo();
|
||||
QString GetMap(bool &valid);
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "forms/PGetTitleDialog.h"
|
||||
#include "PGetParameterDialog.h"
|
||||
#include "PGetAsymmetryRunBlockDialog.h"
|
||||
#include "PGetSingleHistoRunBlockDialog.h"
|
||||
#include "PGetFourierDialog.h"
|
||||
#include "PGetPlotDialog.h"
|
||||
|
||||
@ -47,7 +48,8 @@
|
||||
/**
|
||||
* <p>
|
||||
*/
|
||||
PSubTextEdit::PSubTextEdit(QWidget *parent, const char *name) : QTextEdit(parent, name)
|
||||
PSubTextEdit::PSubTextEdit(QWidget *parent, const char *name, const bool lifetimeCorrectionFlag) :
|
||||
QTextEdit(parent, name), fLifetimeCorrectionFlag(lifetimeCorrectionFlag)
|
||||
{
|
||||
}
|
||||
|
||||
@ -177,7 +179,7 @@ void PSubTextEdit::insertAsymRunBlock()
|
||||
str += workStr;
|
||||
}
|
||||
|
||||
// add alpha if present
|
||||
// add beta if present
|
||||
workStr = dlg->GetBetaParameter(present);
|
||||
if (present) {
|
||||
str += workStr;
|
||||
@ -205,7 +207,7 @@ void PSubTextEdit::insertAsymRunBlock()
|
||||
str += workStr;
|
||||
if (!valid) {
|
||||
QMessageBox::critical(this, "**ERROR**",
|
||||
"Either Background or Background.Fix is needed!\nWill set Background to 0..10, please correct!",
|
||||
"Either <b>background</b> or <b>backgr.fix</b> is needed!\nWill set <b>background</b> to 0..10, please correct!",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
}
|
||||
|
||||
@ -258,6 +260,98 @@ void PSubTextEdit::insertAsymRunBlock()
|
||||
*/
|
||||
void PSubTextEdit::insertSingleHistRunBlock()
|
||||
{
|
||||
PGetSingleHistoRunBlockDialog *dlg = new PGetSingleHistoRunBlockDialog();
|
||||
if (dlg->exec() == QDialog::Accepted) {
|
||||
QString str, workStr;
|
||||
bool valid = true, present = true;
|
||||
// check if there is already a run block present, necessary because of the '####' line
|
||||
// STILL MISSING
|
||||
|
||||
// add run line
|
||||
str += dlg->GetRunHeaderInfo();
|
||||
|
||||
// add fittype
|
||||
str += "fittype 0 (single histogram fit)\n";
|
||||
|
||||
// add map
|
||||
workStr = dlg->GetMap(valid);
|
||||
if (valid) {
|
||||
str += workStr;
|
||||
} else {
|
||||
QMessageBox::critical(this, "**ERROR**",
|
||||
"Given map not valid, will add a default map line",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
str += "map 0 0 0 0 0 0 0 0 0 0\n";
|
||||
}
|
||||
|
||||
// add forward
|
||||
str += dlg->GetForward();
|
||||
|
||||
// add norm
|
||||
str += dlg->GetNorm();
|
||||
|
||||
// add lifetime parameter
|
||||
workStr = dlg->GetMuonLifetimeParam(present);
|
||||
if (present) {
|
||||
str += workStr;
|
||||
}
|
||||
|
||||
// add lifetime correction flag if present
|
||||
workStr = dlg->GetLifetimeCorrection(present);
|
||||
if (present) {
|
||||
str += workStr;
|
||||
}
|
||||
|
||||
// add background, backgr.fix or backgr.fit
|
||||
workStr = dlg->GetBackground(valid);
|
||||
str += workStr;
|
||||
if (!valid) {
|
||||
QMessageBox::critical(this, "**ERROR**",
|
||||
"Either <b>background</b>, <b>backgr.fix</b>, or <b>backgr.fit</b> is needed!\nWill set <b>background</b> to 0..10, please correct!",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
}
|
||||
|
||||
// add t0 if present
|
||||
workStr = dlg->GetT0(present);
|
||||
if (present) {
|
||||
str += workStr;
|
||||
} else {
|
||||
QMessageBox::warning(this, "**ERROR**",
|
||||
"T0's not given, assume that they are present in the data file!",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
}
|
||||
|
||||
// add data
|
||||
workStr = dlg->GetData(valid);
|
||||
if (valid) {
|
||||
str += workStr;
|
||||
} else {
|
||||
QMessageBox::critical(this, "**ERROR**",
|
||||
"Not all Data entries are present.Fix is needed!\nWill not set anything!",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
}
|
||||
|
||||
// add fit range
|
||||
workStr = dlg->GetFitRange(valid);
|
||||
str += workStr;
|
||||
if (!valid) {
|
||||
QMessageBox::critical(this, "**ERROR**",
|
||||
"No valid fit range is given.Fix is needed!\nWill add a default one!",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
}
|
||||
|
||||
// add packing
|
||||
workStr = dlg->GetPacking(present);
|
||||
str += workStr;
|
||||
if (!present) {
|
||||
QMessageBox::critical(this, "**ERROR**",
|
||||
"No valid packing/binning is given.Fix is needed!\nWill add a default one!",
|
||||
QMessageBox::Ok, QMessageBox::NoButton);
|
||||
}
|
||||
|
||||
// insert Asymmetry Run Block at the current cursor position
|
||||
insert(str);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
|
@ -38,24 +38,28 @@ class PSubTextEdit : public QTextEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
PSubTextEdit( QWidget *parent = 0, const char *name = 0 );
|
||||
public:
|
||||
PSubTextEdit( QWidget *parent = 0, const char *name = 0 , const bool lifetimeCorrectionFlag = true);
|
||||
|
||||
protected:
|
||||
virtual QPopupMenu *createPopupMenu( const QPoint &pos);
|
||||
protected:
|
||||
virtual QPopupMenu *createPopupMenu( const QPoint &pos);
|
||||
|
||||
private slots:
|
||||
void insertTitle();
|
||||
void insertParameterBlock();
|
||||
void insertTheoryBlock();
|
||||
void insertFunctionBlock();
|
||||
void insertAsymRunBlock();
|
||||
void insertSingleHistRunBlock();
|
||||
void insertNonMusrRunBlock();
|
||||
void insertCommandBlock();
|
||||
void insertFourierBlock();
|
||||
void insertPlotBlock();
|
||||
void insertStatisticBlock();
|
||||
|
||||
private:
|
||||
bool fLifetimeCorrectionFlag;
|
||||
|
||||
private slots:
|
||||
void insertTitle();
|
||||
void insertParameterBlock();
|
||||
void insertTheoryBlock();
|
||||
void insertFunctionBlock();
|
||||
void insertAsymRunBlock();
|
||||
void insertSingleHistRunBlock();
|
||||
void insertNonMusrRunBlock();
|
||||
void insertCommandBlock();
|
||||
void insertFourierBlock();
|
||||
void insertPlotBlock();
|
||||
void insertStatisticBlock();
|
||||
};
|
||||
|
||||
#endif // _PSUBTEXTEDIT_H_
|
||||
|
@ -329,7 +329,7 @@ void PTextEdit::load( const QString &f )
|
||||
{
|
||||
if ( !QFile::exists( f ) )
|
||||
return;
|
||||
PSubTextEdit *edit = new PSubTextEdit( fTabWidget );
|
||||
PSubTextEdit *edit = new PSubTextEdit( fTabWidget, "PSubTextEdit", fAdmin->getLifetimeCorrectionFlag() );
|
||||
edit->setTextFormat( PlainText );
|
||||
edit->setFamily("Courier");
|
||||
edit->setPointSize(11); // 11pt
|
||||
@ -410,7 +410,7 @@ bool PTextEdit::validRunList(const QString runList)
|
||||
*/
|
||||
void PTextEdit::fileNew()
|
||||
{
|
||||
PSubTextEdit *edit = new PSubTextEdit( fTabWidget );
|
||||
PSubTextEdit *edit = new PSubTextEdit( fTabWidget, "PSubTextEdit", fAdmin->getLifetimeCorrectionFlag() );
|
||||
edit->setTextFormat( PlainText );
|
||||
edit->setFamily("Courier");
|
||||
edit->setPointSize(11); // 11pt
|
||||
|
@ -13,6 +13,12 @@
|
||||
<beamline>mue4</beamline>
|
||||
<institute>psi</institute>
|
||||
<file_format>root-npp</file_format>
|
||||
<lifetime_correction>y</lifetime_correction>
|
||||
</msr_file_defaults>
|
||||
<help_section>
|
||||
<help_main>
|
||||
For a detailed description of the aim and structure of a msr-file see http://wiki.intranet.psi.ch.
|
||||
</help_main>
|
||||
</help_section>
|
||||
</musrgui_startup>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user