diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index 3f9d8ade..7361e90e 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -1061,9 +1061,9 @@ void PTextEdit::fileOpen() tr( "msr-Files (*.msr);;msr-Files (*.msr *.mlog);;All Files (*)" )); QStringList::Iterator it = flns.begin(); - QFileInfo finfo1, finfo2; - QString tabFln; + QFileInfo finfo1; bool alreadyOpen = false; + int idx; // if flns are present, keep the corresponding directory if (flns.size() > 0) { @@ -1071,23 +1071,17 @@ void PTextEdit::fileOpen() fLastDirInUse = finfo1.absoluteFilePath(); } - while( it != flns.end() ) { + while( it != flns.end() ) { // check if the file is not already open finfo1.setFile(*it); - for (int i=0; icount(); i++) { - tabFln = *fFilenames.find( dynamic_cast(fTabWidget->widget(i))); - finfo2.setFile(tabFln); - if (finfo1.absoluteFilePath() == finfo2.absoluteFilePath()) { - alreadyOpen = true; - fTabWidget->setCurrentIndex(i); - break; - } - } + alreadyOpen = fileAlreadyOpen(finfo1, idx); - if (!alreadyOpen) + if (!alreadyOpen) { load(*it); - else + } else { + fTabWidget->setCurrentIndex(idx); fileReload(); + } ++it; } @@ -1368,8 +1362,13 @@ void PTextEdit::filePrint() */ void PTextEdit::fileClose(const bool check) { + // first check if there is any tab present + if (fTabWidget->count()==0) // no tabs present + return; + // check if the has modification int idx = fTabWidget->currentIndex(); + if ((fTabWidget->tabText(idx).indexOf("*")>0) && check) { int result = QMessageBox::warning(this, "**WARNING**", "Do you really want to close this file.\nChanges will be lost", @@ -2053,7 +2052,6 @@ void PTextEdit::musrMsr2Data() } if (dlg->exec() == QDialog::Accepted) { - QString first, last; QString runList; QString runListFileName; QFileInfo fi; @@ -2246,6 +2244,9 @@ void PTextEdit::musrMsr2Data() QString fln; QFile *file; QTextStream *stream; + QFileInfo finfo; + bool alreadOpen=false; + int idx=0; if (!fMsr2DataParam->global) { // standard fits switch(dlg->getRunTag()) { @@ -2264,7 +2265,14 @@ void PTextEdit::musrMsr2Data() if (fTabWidget->count() != 0) { workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); } - load(workDir + "/" + fln); + finfo.setFile(workDir + "/" + fln); + alreadOpen = fileAlreadyOpen(finfo, idx); + if (!alreadOpen) { + load(workDir + "/" + fln); + } else { + fTabWidget->setCurrentIndex(idx); + fileReload(); + } } break; case 1: // run list file @@ -2290,7 +2298,14 @@ void PTextEdit::musrMsr2Data() if (fTabWidget->count() != 0) { workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); } - load(workDir + "/" + fln); + finfo.setFile(workDir + "/" + fln); + alreadOpen = fileAlreadyOpen(finfo, idx); + if (!alreadOpen) { + load(workDir + "/" + fln); + } else { + fTabWidget->setCurrentIndex(idx); + fileReload(); + } } } @@ -3196,6 +3211,32 @@ QStringList PTextEdit::getRunList(QString runListStr, bool &ok) return result; } +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::fileAlreadyOpen + * @param finfo + * @param idx + * @return + */ +bool PTextEdit::fileAlreadyOpen(QFileInfo &finfo, int &idx) +{ + bool result = false; + QFileInfo finfo2; + QString tabFln; + + for (int i=0; icount(); i++) { + tabFln = *fFilenames.find( dynamic_cast(fTabWidget->widget(i))); + finfo2.setFile(tabFln); + if (finfo.absoluteFilePath() == finfo2.absoluteFilePath()) { + result = true; + idx = i; + break; + } + } + + return result; +} + //---------------------------------------------------------------------------------------------------- // END //---------------------------------------------------------------------------------------------------- diff --git a/src/musredit_qt5/musredit/PTextEdit.h b/src/musredit_qt5/musredit/PTextEdit.h index 6f0c9615..3fc8e21a 100644 --- a/src/musredit_qt5/musredit/PTextEdit.h +++ b/src/musredit_qt5/musredit/PTextEdit.h @@ -38,6 +38,7 @@ #include #include #include +#include #include @@ -186,6 +187,7 @@ private: void getTheme(); void fillRecentFiles(); QStringList getRunList(QString runListStr, bool &ok); + bool fileAlreadyOpen(QFileInfo &finfo, int &idx); };