Skip to content

Commit 60ed6f4

Browse files
committed
Improve script generation and execution
1 parent bb80c06 commit 60ed6f4

26 files changed

+157
-363
lines changed

doc/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ c:\Qt\5.15.2\msvc2019_64\bin>qhelpgenerator "path\to\ModbusTools\doc\output\Modb
4646
c:\Qt\5.15.2\msvc2019_64\bin>qhelpgenerator "path\to\ModbusTools\doc\output\ModbusServer.qhcp"
4747
```
4848

49+
To check correctness of help generation Qt assistant can be used:
50+
```console
51+
c:\Qt\5.15.2\msvc2019_64\bin>assistant -collectionFile ModbusClient.qhc
52+
c:\Qt\5.15.2\msvc2019_64\bin>assistant -collectionFile ModbusServer.qhc
53+
```
54+
4955
# File System with help
5056

5157
Assumed application dir view:

src/client/client.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ CONFIG += no_keywords
66

77
DESTDIR = ../../bin
88

9-
QT = core gui widgets xml
9+
QT = core gui widgets
1010

1111
unix:QMAKE_RPATHDIR += .
1212

src/core/core.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ CONFIG += no_keywords
66

77
DESTDIR = ../../bin
88

9-
QT = core gui widgets xml help
9+
QT = core gui widgets help
1010

1111
DEFINES += MB_EXPORTS
1212

src/core/core/core_filemanager.cpp

Lines changed: 36 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include <QFile>
44
#include <QDir>
5-
#include <QDomDocument>
65
#include <QUuid>
76
#include <QTextStream>
87

@@ -12,10 +11,9 @@ mbCoreFileManager::Strings::Strings() :
1211
dirname_mbtools (QStringLiteral(".mbtools")),
1312
dirname_project (QStringLiteral("project" )),
1413
dirname_temporary(QStringLiteral("tmp")),
15-
filename_projects(QStringLiteral("projects.xml")),
14+
filename_projects(QStringLiteral("projects.conf")),
1615
filename_files (QStringLiteral("files.xml")),
17-
dom_projects (QStringLiteral("projects")),
18-
dom_project (QStringLiteral("project"))
16+
id_path (QStringLiteral("path"))
1917
{
2018
}
2119

@@ -29,6 +27,7 @@ mbCoreFileManager::mbCoreFileManager(mbCore *core, QObject *parent) : QObject{pa
2927
m_core (core)
3028
{
3129
m_project = nullptr;
30+
m_settings = nullptr;
3231

3332
checkAndCreateHiddenFolder();
3433
connect(m_core, &mbCore::projectChanged, this, &mbCoreFileManager::setProject);
@@ -54,11 +53,11 @@ bool mbCoreFileManager::getOrCreateHiddenFile(const QString &fileName, QFile &fi
5453
{
5554
QString sFileName = m_currentProjectDir.filePath(fileName);
5655
file.setFileName(sFileName);
56+
if (m_project->isModified())
57+
return false;
5758
QFileInfo info(file);
58-
if (m_project->isModified() || !file.exists() || (info.lastModified() < m_project->fileModified()))
59-
{
59+
if (!file.exists() || (info.lastModified() < m_project->fileModified()))
6060
return file.open(QIODevice::WriteOnly);
61-
}
6261
return file.open(mode);
6362
}
6463

@@ -164,83 +163,37 @@ QList<mbCoreFileManager::ProjectInfo*> mbCoreFileManager::parseProjects()
164163
{
165164
const Strings &s = Strings::instance();
166165
QList<ProjectInfo*> projects;
167-
168-
QString filePath = m_hiddenProjectsDir.absoluteFilePath(s.filename_projects);
169-
QFile file(filePath);
170-
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
166+
QSettings *conf = getQSettings();
167+
Q_FOREACH (const QString &id, conf->childGroups())
171168
{
172-
//qWarning() << "Failed to open file:" << filePath;
173-
return projects;
174-
}
175-
176-
QDomDocument doc;
177-
if (!doc.setContent(&file))
178-
{
179-
//qWarning() << "Failed to parse XML file.";
180-
file.close();
181-
return projects;
182-
}
183-
file.close();
184-
185-
QDomElement root = doc.documentElement();
186-
if (root.tagName() != s.dom_projects)
187-
{
188-
//qWarning() << "Invalid root element in XML.";
189-
return projects;
190-
}
191-
192-
QDomNodeList projectNodes = root.elementsByTagName(s.dom_project);
193-
for (int i = 0; i < projectNodes.size(); ++i)
194-
{
195-
QDomElement projectElement = projectNodes.at(i).toElement();
196-
if (!projectElement.isNull())
169+
conf->beginGroup(id);
170+
QString absPath = conf->value(s.id_path).toString();
171+
conf->endGroup();
172+
if (!id.isEmpty() && !absPath.isEmpty())
197173
{
198-
QString id = projectElement.attribute("dir");
199-
QString absPath = projectElement.text();
200-
if (!id.isEmpty() && !absPath.isEmpty())
201-
{
202-
ProjectInfo *info = new ProjectInfo;
203-
info->id = id;
204-
info->absPath = absPath;
205-
projects.append(info);
206-
}
174+
ProjectInfo *info = new ProjectInfo;
175+
info->id = id;
176+
info->absPath = absPath;
177+
projects.append(info);
207178
}
208179
}
209-
210180
return projects;
211181
}
212182

213183
bool mbCoreFileManager::saveProjects(const QList<ProjectInfo*> &projects)
214184
{
215185
const Strings &s = Strings::instance();
216-
QString filePath = m_hiddenProjectsDir.absoluteFilePath(s.filename_projects);
217-
QDomDocument doc;
218-
219-
QDomElement root = doc.createElement(s.dom_projects);
220-
doc.appendChild(root);
221-
222-
Q_FOREACH (ProjectInfo *info, projects)
223-
{
224-
QDomElement projectElement = doc.createElement(s.dom_project);
225-
projectElement.setAttribute("dir", info->id);
226-
QDomText pathText = doc.createTextNode(info->absPath);
227-
projectElement.appendChild(pathText);
228-
root.appendChild(projectElement);
229-
}
230-
231-
QFile file(filePath);
232-
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
186+
QSettings *conf = getQSettings();
187+
conf->clear();
188+
Q_FOREACH (const ProjectInfo *info, projects)
233189
{
234-
//qWarning() << "Failed to open file for writing:" << filePath;
235-
return false;
190+
conf->beginGroup(info->id);
191+
conf->setValue(s.id_path, info->absPath);
192+
conf->endGroup();
236193
}
237194

238-
QTextStream stream(&file);
239-
stream.setCodec("UTF-8");
240-
doc.save(stream, 4);
241-
file.close();
242-
243-
return true;}
195+
return true;
196+
}
244197

245198
void mbCoreFileManager::cleanupProjects(QList<ProjectInfo*> &projects)
246199
{
@@ -269,3 +222,15 @@ void mbCoreFileManager::addProjectInfo(ProjectInfo *info)
269222
m_projects.append(info);
270223
m_hashProjects.insert(info->absPath, info);
271224
}
225+
226+
QSettings *mbCoreFileManager::getQSettings()
227+
{
228+
if (!m_settings)
229+
{
230+
const Strings &s = Strings::instance();
231+
QString filePath = m_hiddenProjectsDir.absoluteFilePath(s.filename_projects);
232+
m_settings = new QSettings(filePath, QSettings::IniFormat, this);
233+
m_settings->setIniCodec("UTF-8");
234+
}
235+
return m_settings;
236+
}

src/core/core/core_filemanager.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include <QFile>
66
#include <QDir>
77

8+
class QSettings;
9+
810
#include "core.h"
911

1012
class MB_EXPORT mbCoreFileManager : public QObject
@@ -27,13 +29,12 @@ class MB_EXPORT mbCoreFileManager : public QObject
2729
public:
2830
struct MB_EXPORT Strings
2931
{
30-
const QString dirname_mbtools ;
31-
const QString dirname_project ;
32-
const QString dirname_temporary ;
33-
const QString filename_projects ;
34-
const QString filename_files ;
35-
const QString dom_projects ;
36-
const QString dom_project ;
32+
const QString dirname_mbtools ;
33+
const QString dirname_project ;
34+
const QString dirname_temporary;
35+
const QString filename_projects;
36+
const QString filename_files ;
37+
const QString id_path ;
3738

3839
Strings();
3940
static const Strings &instance();
@@ -64,6 +65,8 @@ protected Q_SLOTS:
6465
protected:
6566
inline ProjectInfo* projectInfo(const QString absFilePath) const { return m_hashProjects.value(absFilePath); }
6667
void addProjectInfo(ProjectInfo* info);
68+
QSettings *getQSettings();
69+
6770

6871
protected:
6972
mbCore *m_core;
@@ -73,6 +76,7 @@ protected Q_SLOTS:
7376
QDir m_currentProjectDir;
7477
QList<ProjectInfo*> m_projects;
7578
QHash<QString, ProjectInfo*> m_hashProjects;
79+
QSettings *m_settings;
7680
};
7781

7882
#endif // CORE_FILEMANAGER_H

src/core/gui/help/core_helpui.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ mbCoreHelpUi::mbCoreHelpUi(const QString &relativeCollectionFile, QWidget *paren
6363
//#endif
6464

6565
if (!m_helpEngine->setupData())
66-
mbCore::LogError("HelpSystem", "HelpEngine is not setup");
66+
mbCore::LogError("HelpSystem", "HelpEngine is not setup. Error: " + m_helpEngine->error());
6767

6868
QTabWidget* tabWidget = new QTabWidget;
6969
tabWidget->addTab(m_helpEngine->contentWidget(), "Contents");

src/core/gui/icons/clear.png

1.48 KB
Loading

src/core/gui/logview/core_logview.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <QTableView>
2828
#include <QPlainTextEdit>
2929
#include <QToolBar>
30+
#include <QCoreApplication>
3031

3132
#include <core.h>
3233
#include <gui/core_ui.h>
@@ -57,11 +58,13 @@ mbCoreLogView::mbCoreLogView(QWidget *parent)
5758

5859
QAction *actionClear = new QAction(m_toolBar);
5960
actionClear->setIcon(QIcon(":/core/icons/clear.png"));
61+
actionClear->setText(QCoreApplication::translate("mbCoreLogView", "Clear", nullptr));
6062
connect(actionClear, &QAction::triggered, this, &mbCoreLogView::clear);
6163
m_toolBar->addAction(actionClear);
6264

6365
QAction *actionExportLog = new QAction(m_toolBar);
6466
actionExportLog->setIcon(QIcon(":/core/icons/logexport.png"));
67+
actionExportLog->setText(QCoreApplication::translate("mbCoreLogView", "Export", nullptr));
6568
connect(actionExportLog, &QAction::triggered, this, &mbCoreLogView::exportLog);
6669
m_toolBar->addAction(actionExportLog);
6770

src/server/core/server.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ mbServer::Strings::Strings() : mbCore::Strings(),
4141
GUID(QStringLiteral("bcde38bb-2402-4b3f-9ddb-3abfd0986852")), // generated by https://www.guidgenerator.com/online-guid-generator.aspx
4242
settings_application(QStringLiteral("Server")),
4343
default_server(settings_application),
44-
settings_scriptEnable (QStringLiteral("Script.Enable")),
45-
settings_scriptManual (QStringLiteral("Script.Manual")),
46-
settings_scriptDefault(QStringLiteral("Script.Default"))
44+
settings_scriptEnable (QStringLiteral("Script.Enable")),
45+
settings_scriptUseOptimization(QStringLiteral("Script.UseOptimization")),
46+
settings_scriptManual (QStringLiteral("Script.Manual")),
47+
settings_scriptDefault (QStringLiteral("Script.DefaultInterpreter"))
4748
{
4849
}
4950

@@ -134,6 +135,7 @@ mbServer::mbServer() :
134135
{
135136
//Strings s = Strings::instance();
136137
m_scriptEnable = true;
138+
m_scriptUseOptimization = true;
137139
m_autoDetectedExec = findPythonExecutables();
138140
}
139141

@@ -145,9 +147,10 @@ MBSETTINGS mbServer::cachedSettings() const
145147
{
146148
const Strings &s = Strings::instance();
147149
MBSETTINGS r = mbCore::cachedSettings();
148-
r[s.settings_scriptEnable ] = scriptEnable();
149-
r[s.settings_scriptManual ] = scriptManualExecutables();
150-
r[s.settings_scriptDefault] = scriptDefaultExecutable();
150+
r[s.settings_scriptEnable ] = scriptEnable();
151+
r[s.settings_scriptUseOptimization ] = scriptUseOptimization();
152+
r[s.settings_scriptManual ] = scriptManualExecutables();
153+
r[s.settings_scriptDefault ] = scriptDefaultExecutable();
151154
return r;
152155
}
153156

@@ -159,9 +162,10 @@ void mbServer::setCachedSettings(const MBSETTINGS &settings)
159162
MBSETTINGS::const_iterator it;
160163
MBSETTINGS::const_iterator end = settings.end();
161164

162-
it = settings.find(s.settings_scriptEnable ); if (it != end) setScriptEnable (it.value().toBool ());
163-
it = settings.find(s.settings_scriptManual ); if (it != end) scriptSetManualExecutables(it.value().toStringList());
164-
it = settings.find(s.settings_scriptDefault); if (it != end) scriptSetDefaultExecutable(it.value().toString ());
165+
it = settings.find(s.settings_scriptEnable ); if (it != end) setScriptEnable (it.value().toBool ());
166+
it = settings.find(s.settings_scriptUseOptimization ); if (it != end) setScriptUseOptimization (it.value().toBool ());
167+
it = settings.find(s.settings_scriptManual ); if (it != end) scriptSetManualExecutables(it.value().toStringList());
168+
it = settings.find(s.settings_scriptDefault ); if (it != end) scriptSetDefaultExecutable(it.value().toString ());
165169
}
166170

167171
QString mbServer::scriptDefaultExecutable() const

src/server/core/server.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,10 @@ class mbServer : public mbCore
4949
const QString settings_application;
5050
const QString default_server;
5151

52-
const QString settings_scriptEnable ;
53-
const QString settings_scriptManual ;
54-
const QString settings_scriptDefault;
52+
const QString settings_scriptEnable ;
53+
const QString settings_scriptUseOptimization;
54+
const QString settings_scriptManual ;
55+
const QString settings_scriptDefault ;
5556
Strings();
5657
static const Strings &instance();
5758
};
@@ -76,7 +77,9 @@ class mbServer : public mbCore
7677

7778
public:
7879
inline bool scriptEnable() const { return m_scriptEnable; }
79-
inline void setScriptEnable(bool use) { m_scriptEnable = use; }
80+
inline void setScriptEnable(bool enable) { m_scriptEnable = enable; }
81+
inline bool scriptUseOptimization() const { return m_scriptUseOptimization; }
82+
inline void setScriptUseOptimization(bool use) { m_scriptUseOptimization = use; }
8083
inline QStringList scriptAutoDetectedExecutables() const { return m_autoDetectedExec; }
8184
inline QStringList scriptManualExecutables() const { return m_manualExec; }
8285
inline void scriptSetManualExecutables(const QStringList &exec) { m_manualExec = exec; }
@@ -93,6 +96,7 @@ class mbServer : public mbCore
9396

9497
private:
9598
bool m_scriptEnable;
99+
bool m_scriptUseOptimization;
96100
QStringList m_autoDetectedExec;
97101
QStringList m_manualExec;
98102
mutable QString m_defaultExec;

0 commit comments

Comments
 (0)