################## mseed # Already increased version number: # Tag = version-2.17.0 # Version = 2.5.1 ################## slink # Already increased version number: # Tag = version-2.5.4 # Version = 1.6.0 ################## QGpCoreTools [detail] src/AbstractParameters.cpp: version-2.5.0 modified out of comments [detail] --- src/AbstractParameters.cpp-version-2.5.0-stripped 2025-09-28 04:00:46.203412149 +0200 [detail] +++ src/AbstractParameters.cpp-HEAD-stripped 2025-09-28 04:00:46.207412167 +0200 [detail] @@ -4,12 +4,17 @@ [detail] #include "Message.h" [detail] #include "Trace.h" [detail] #include "File.h" [detail] +#include "StringFootprint.h" [detail] #include "CoreApplication.h" [detail] +#include "EnumAsString.h" [detail] [detail] namespace QGpCoreTools { [detail] [detail] void AbstractParameters::KeywordMap::add(const QString& key, AbstractParameters * param, int index) [detail] { [detail] + if(App::verbosity()>5 && contains(key)) { [detail] + App::log(tr("key '%1' overwritten\n").arg(key)); [detail] + } [detail] Keyword k; [detail] k.param=param; [detail] k.index=index; [detail] @@ -26,7 +31,7 @@ [detail] QMap::const_iterator it; [detail] it=QMap::find(cleanKey); [detail] if(it!=end()) { [detail] - if(it.value().param->setValue(it.value().index, value, unit, *this)) { [detail] + if(it->param->setValue(it->index, value, unit, *this)) { [detail] return true; [detail] } else { [detail] App::log(tr("Error setting value '%1' to keyword '%2'\n").arg(value).arg(cleanKey)); [detail] @@ -34,6 +39,7 @@ [detail] } [detail] } else { [detail] App::log(tr("Unknown keyword '%1'\n").arg(cleanKey)); [detail] + showSimilarKeys(key); [detail] return false; [detail] } [detail] } [detail] @@ -41,13 +47,38 @@ [detail] QString AbstractParameters::KeywordMap::key(const AbstractParameters * param, int index) const [detail] { [detail] for(const_iterator it=begin(); it!=end(); it++) { [detail] - if(it->param==param && it->index==index) { [detail] + if((!param || it->param==param) && it->index==index) { [detail] return it.key(); [detail] } [detail] } [detail] return QString(); [detail] } [detail] [detail] + void AbstractParameters::KeywordMap::showSimilarKeys(const QString& key) const [detail] + { [detail] + double threshold=0.6; [detail] + QMap bestCandidates; [detail] + StringFootprint ref(key); [detail] + for(const_iterator it=begin(); it!=end(); it++) { [detail] + StringFootprint item(it.key()); [detail] + double m=ref.misfit(item); [detail] + if(m>threshold) { [detail] + bestCandidates.insert(m, it.key()); [detail] + } [detail] + } [detail] + EnumAsString::showSimilarKeys(bestCandidates); [detail] + } [detail] + [detail] + void AbstractParameters::KeywordMap::dumpKeys() const [detail] + { [detail] + int i=0; [detail] + for(const_iterator it=begin(); it!=end(); it++) { [detail] + printf("%4i %60s %p %i\n", i++, it.key().toLatin1().data(), [detail] + it.value().param, [detail] + it.value().index); [detail] + } [detail] + } [detail] + [detail] inline AbstractParameters::ParameterValue::ParameterValue(const QString& key, const QString& value, const QString& unit) [detail] { [detail] _key=key; [detail] @@ -149,13 +180,18 @@ [detail] QFile f(fileName); [detail] if(f.open(QIODevice::ReadOnly)) { [detail] QTextStream s(&f); [detail] - return load(s, beginPatterns, endPatterns); [detail] + if(!load(s, beginPatterns, endPatterns)) { [detail] + Message::warning(MSG_ID, tr("Loading parameters"), [detail] + tr("Error reading parameter file, see general log for details."), Message::cancel()); [detail] + return false; [detail] + } [detail] } else { [detail] Message::warning(MSG_ID, tr("Loading parameters"), [detail] tr("Unable to open file '%1' for reading").arg(fileName), Message::cancel()); [detail] return false; [detail] } [detail] } [detail] + return true; [detail] } [detail] [detail] [detail] @@ -165,6 +201,7 @@ [detail] ASSERT(beginPatterns.count()==endPatterns.count()); [detail] _version=0; [detail] KeywordMap * keywords=createKeywordMap(); [detail] + GarbageCollector coll(keywords); [detail] int patternIndex=File::readUntilPatterns(s, beginPatterns); [detail] QString endPattern; [detail] if(patternIndex>=0) { [detail] @@ -175,7 +212,6 @@ [detail] line=s.readLine(); [detail] if(line.trimmed().left(1)=="#") { [detail] if(!endPattern.isEmpty() && line.contains(endPattern)) { [detail] - delete keywords; [detail] return true; [detail] } [detail] } else { [detail] @@ -186,7 +222,6 @@ [detail] if(subLine.left(1)=="#") { [detail] if(!endPattern.isEmpty() && line.contains(endPattern)) { [detail] App::log(tr("Truncated multi-line value\n")); [detail] - delete keywords; [detail] return false; [detail] } [detail] } else { [detail] @@ -198,17 +233,14 @@ [detail] } [detail] if(line.endsWith("\\")) { [detail] App::log(tr("Truncated multi-line value (end of file)\n")); [detail] - delete keywords; [detail] return false; [detail] } [detail] } [detail] if(!parse(line, keywords)) { [detail] - delete keywords; [detail] return false; [detail] } [detail] } [detail] } [detail] - delete keywords; [detail] return true; [detail] } [detail] [detail] @@ -220,8 +252,10 @@ [detail] const QChar * ptrEnd=ptrBegin+line.size(); [detail] const QChar * ptr=ptrBegin; [detail] KeywordMap * myOwnKeywords; [detail] + GarbageCollector coll; [detail] if(!keywords) { [detail] myOwnKeywords=createKeywordMap(); [detail] + coll.add(myOwnKeywords); [detail] keywords=myOwnKeywords; [detail] } else { [detail] myOwnKeywords=nullptr; [detail] @@ -240,10 +274,8 @@ [detail] _values->append(ParameterValue(keyword,value, unit)); [detail] [detail] if(keywords->setValue(keyword,value, unit)) { [detail] - delete myOwnKeywords; [detail] return true; [detail] } else { [detail] - delete myOwnKeywords; [detail] return false; [detail] } [detail] case '(': [detail] @@ -263,7 +295,6 @@ [detail] } [detail] Message::warning(MSG_ID,tr("Loading parameters"), [detail] tr("No keyword found in line '%1'").arg(line), Message::cancel(), true); [detail] - delete myOwnKeywords; [detail] return false; [detail] } [detail] [detail] @@ -314,7 +345,10 @@ [detail] if(keywords->count()!=total) { [detail] qWarning() << tr("Fix keywordCount: %1 instead of %2") [detail] .arg(keywords->count()) [detail] - .arg(total) << Qt::endl; [detail] + .arg(total); [detail] + if(App::verbosity()>=1) { [detail] + keywords->dumpKeys(); [detail] + } [detail] } [detail] return keywords; [detail] } [detail] @@ -325,15 +359,14 @@ [detail] TRACE; [detail] if(o._values) { [detail] KeywordMap * keywords=createKeywordMap(); [detail] + GarbageCollector coll(keywords); [detail] int n=o._values->count(); [detail] for(int i=0; iat(i); [detail] if(!v.set(*keywords)) { [detail] - delete keywords; [detail] return false; [detail] } [detail] } [detail] - delete keywords; [detail] } else { [detail] *this=o; [detail] } [detail] src/AbstractProgress.cpp: version-2.5.0 modified out of comments [detail] --- src/AbstractProgress.cpp-version-2.5.0-stripped 2025-09-28 04:00:46.223412245 +0200 [detail] +++ src/AbstractProgress.cpp-HEAD-stripped 2025-09-28 04:00:46.227412264 +0200 [detail] @@ -8,6 +8,8 @@ [detail] [detail] [detail] [detail] +const QString AbstractProgress::defaultCaption=QT_TR_NOOP("Progress"); [detail] + [detail] [detail] AbstractProgress::AbstractProgress() [detail] { [detail] @@ -16,6 +18,7 @@ [detail] _deltaValue=0; [detail] _maximum=-1; [detail] _lastTime=time(nullptr); [detail] + _caption=defaultCaption; [detail] } [detail] [detail] const QString& AbstractProgress::caption() const [detail] src/AbstractStream.cpp: version-2.5.0 not modified [detail] src/ApplicationClock.cpp: version-2.5.0 not modified [detail] src/ApplicationHelp.cpp: version-2.5.0 modified out of comments [detail] --- src/ApplicationHelp.cpp-version-2.5.0-stripped 2025-09-28 04:00:46.275412497 +0200 [detail] +++ src/ApplicationHelp.cpp-HEAD-stripped 2025-09-28 04:00:46.279412515 +0200 [detail] @@ -70,7 +70,7 @@ [detail] for(QList