Skip to content

Commit 51a6f15

Browse files
committed
GUI: If DATADIR is not configured try to guess it. Try to use application path. Or look if there is a cppcheck path.
1 parent c6d2e0f commit 51a6f15

7 files changed

Lines changed: 31 additions & 25 deletions

File tree

gui/common.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,17 @@ QString toFilterString(const QMap<QString,QString>& filters, bool addAllSupporte
6666

6767
return entries.join(";;");
6868
}
69+
70+
QString getDataDir()
71+
{
72+
QSettings settings;
73+
const QString dataDir = settings.value("DATADIR", QString()).toString();
74+
if (!dataDir.isEmpty())
75+
return dataDir;
76+
const QString appPath = QFileInfo(QCoreApplication::applicationFilePath()).canonicalPath();
77+
if (QFileInfo(appPath + "/std.cfg").exists())
78+
return appPath;
79+
if (appPath.indexOf("/cppcheck/", 0, Qt::CaseInsensitive) > 0)
80+
return appPath.left(appPath.indexOf("/cppcheck/", 0, Qt::CaseInsensitive) + 9);
81+
return appPath;
82+
}

gui/common.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,5 +147,10 @@ void setPath(const QString &type, const QString &value);
147147
*/
148148
QString toFilterString(const QMap<QString,QString>& filters, bool addAllSupported=true, bool addAll=true);
149149

150+
/**
151+
* Get configured data dir. If not configured then it will try to determine that from exe path.
152+
*/
153+
QString getDataDir();
154+
150155
/// @}
151156
#endif

gui/helpdialog.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
#include "helpdialog.h"
22
#include "ui_helpdialog.h"
3+
#include "common.h"
34

45
#include <QFileInfo>
56
#include <QHelpEngine>
67
#include <QHelpContentWidget>
78
#include <QHelpIndexWidget>
89
#include <QMessageBox>
9-
#include <QSettings>
1010

1111
void HelpBrowser::setHelpEngine(QHelpEngine *helpEngine)
1212
{
@@ -26,8 +26,7 @@ QVariant HelpBrowser::loadResource(int type, const QUrl &name)
2626

2727
static QString getHelpFile()
2828
{
29-
QSettings settings;
30-
const QString datadir = settings.value("DATADIR", QString()).toString();
29+
const QString datadir = getDataDir();
3130

3231
QStringList paths;
3332
paths << (datadir + "/help")

gui/librarydialog.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
#include "ui_librarydialog.h"
2121
#include "libraryaddfunctiondialog.h"
2222
#include "libraryeditargdialog.h"
23+
#include "common.h"
2324
#include "path.h"
2425

2526
#include <QFile>
26-
#include <QSettings>
2727
#include <QFileDialog>
2828
#include <QTextStream>
2929
#include <QInputDialog>
@@ -75,8 +75,7 @@ CppcheckLibraryData::Function *LibraryDialog::currentFunction()
7575

7676
void LibraryDialog::openCfg()
7777
{
78-
const QSettings settings;
79-
const QString datadir = settings.value("DATADIR",QString()).toString();
78+
const QString datadir = getDataDir();
8079

8180
QString selectedFilter;
8281
const QString filter(tr("Library files (*.cfg)"));

gui/mainwindow.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,6 @@
5454
static const QString OnlineHelpURL("http://cppcheck.net/manual.html");
5555
static const QString compile_commands_json("compile_commands.json");
5656

57-
static QString getDataDir(const QSettings *settings)
58-
{
59-
const QString dataDir = settings->value("DATADIR", QString()).toString();
60-
const QString appPath = QFileInfo(QCoreApplication::applicationFilePath()).canonicalPath();
61-
return dataDir.isEmpty() ? appPath : dataDir;
62-
}
63-
6457
MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) :
6558
mSettings(settings),
6659
mApplications(new ApplicationList(this)),
@@ -76,7 +69,7 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) :
7669
{
7770
mUI.setupUi(this);
7871
mThread = new ThreadHandler(this);
79-
mThread->setDataDir(getDataDir(settings));
72+
mThread->setDataDir(getDataDir());
8073
mUI.mResults->initialize(mSettings, mApplications, mThread);
8174

8275
// Filter timer to delay filtering results slightly while typing
@@ -786,7 +779,7 @@ Library::Error MainWindow::loadLibrary(Library *library, const QString &filename
786779
#endif
787780

788781
// Try to load the library from the cfg subfolder..
789-
const QString datadir = mSettings->value("DATADIR", QString()).toString();
782+
const QString datadir = getDataDir();
790783
if (!datadir.isEmpty()) {
791784
ret = library->load(nullptr, (datadir+"/"+filename).toLatin1());
792785
if (ret.errorcode != Library::ErrorCode::FILE_NOT_FOUND)
@@ -943,7 +936,7 @@ Settings MainWindow::getCppcheckSettings()
943936
foreach (QString s, mProjectFile->getCheckUnknownFunctionReturn())
944937
result.checkUnknownFunctionReturn.insert(s.toStdString());
945938

946-
QString filesDir(getDataDir(mSettings));
939+
QString filesDir(getDataDir());
947940
const QString pythonCmd = mSettings->value(SETTINGS_PYTHON_PATH).toString();
948941
foreach (QString addon, mProjectFile->getAddons()) {
949942
QString addonFilePath = ProjectFile::getAddonFilePath(filesDir, addon);

gui/projectfiledialog.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ ProjectFileDialog::ProjectFileDialog(ProjectFile *projectFile, QWidget *parent)
9090
// Checkboxes for the libraries..
9191
const QString applicationFilePath = QCoreApplication::applicationFilePath();
9292
const QString appPath = QFileInfo(applicationFilePath).canonicalPath();
93-
QSettings settings;
94-
const QString datadir = settings.value("DATADIR",QString()).toString();
93+
const QString datadir = getDataDir();
9594
QStringList searchPaths;
9695
searchPaths << appPath << appPath + "/cfg" << inf.canonicalPath();
9796
#ifdef FILESDIR
@@ -332,7 +331,7 @@ void ProjectFileDialog::loadFromProjectFile(const ProjectFile *projectFile)
332331

333332
// Addons..
334333
QSettings settings;
335-
const QString dataDir = settings.value("DATADIR", QString()).toString();
334+
const QString dataDir = getDataDir();
336335
updateAddonCheckBox(mUI.mAddonThreadSafety, projectFile, dataDir, "threadsafety");
337336
updateAddonCheckBox(mUI.mAddonY2038, projectFile, dataDir, "y2038");
338337
updateAddonCheckBox(mUI.mAddonCert, projectFile, dataDir, "cert");
@@ -837,6 +836,6 @@ void ProjectFileDialog::browseMisraFile()
837836

838837
mUI.mAddonMisra->setText("MISRA C 2012");
839838
mUI.mAddonMisra->setEnabled(true);
840-
updateAddonCheckBox(mUI.mAddonMisra, nullptr, settings.value("DATADIR", QString()).toString(), "misra");
839+
updateAddonCheckBox(mUI.mAddonMisra, nullptr, getDataDir(), "misra");
841840
}
842841
}

gui/translationhandler.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
#include <QDebug>
2222
#include <QLocale>
2323
#include <QMessageBox>
24-
#include <QSettings>
2524
#include <QFileInfo>
2625
#include "translationhandler.h"
26+
#include "common.h"
2727

2828

2929
// Provide own translations for standard buttons. This (garbage) code is needed to enforce them to appear in .ts files even after "lupdate gui.pro"
@@ -111,10 +111,7 @@ bool TranslationHandler::setLanguage(const QString &code)
111111
//Load the new language
112112
const QString appPath = QFileInfo(QCoreApplication::applicationFilePath()).canonicalPath();
113113

114-
QSettings settings;
115-
QString datadir = settings.value("DATADIR").toString();
116-
if (datadir.isEmpty())
117-
datadir = appPath;
114+
QString datadir = getDataDir();
118115

119116
QString translationFile;
120117
if (QFile::exists(datadir + "/lang/" + mTranslations[index].mFilename + ".qm"))

0 commit comments

Comments
 (0)