-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqtcreator-sphinx-plugin-projectsettings.cpp
126 lines (108 loc) · 4.26 KB
/
qtcreator-sphinx-plugin-projectsettings.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "qtcreator-sphinx-plugin-projectsettings.h"
#include <projectexplorer/session.h>
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
namespace qtc::plugin::sphinx {
namespace Internal {
static const char SETTINGS_KEY_MAIN[] = "Sphinx";
static const char SETTINGS_PREFIX[] = "Sphinx.";
static const char SETTINGS_KEY_LINKED_PREVIEW[] = "Sphinx.LinkedPreviews";
static const char SETTINGS_KEY_LINKED_PREVIEW_FILEPATH[] = "Sphinx.LinkedPreview.FilePath";
static const char SETTINGS_KEY_LINKED_PREVIEW_URL[] = "Sphinx.LinkedPreview.Url";
ProjectSettings::ProjectSettings(ProjectExplorer::Project *project)
: m_project(project)
{
load();
connect(project, &ProjectExplorer::Project::settingsLoaded, this, &ProjectSettings::load);
connect(project, &ProjectExplorer::Project::aboutToSaveSettings, this, &ProjectSettings::store);
}
ProjectSettings::~ProjectSettings()
{
store();
}
void ProjectSettings::addLinkedPreview(const LinkedPreview &linkedPreview)
{
mLinkedPreviews[linkedPreview.filePath] = linkedPreview.previewUrl;
emit linkedPreviewsChanged();
}
void ProjectSettings::removeLinkedPreview(const LinkedPreview &linkedPreview)
{
if (mLinkedPreviews.contains(linkedPreview.filePath)) {
mLinkedPreviews.remove(linkedPreview.filePath);
emit linkedPreviewsChanged();
}
}
void ProjectSettings::removeAllLinkedPreviews()
{
mLinkedPreviews.clear();
emit linkedPreviewsChanged();
}
void ProjectSettings::load()
{
// Load map
QVariantMap map = m_project->namedSettings(SETTINGS_KEY_MAIN).toMap();
const QVariantMap linkedPreviews = map.value(SETTINGS_KEY_LINKED_PREVIEW).toMap();
for (auto iter = linkedPreviews.begin(); iter != linkedPreviews.end(); ++iter) {
const QString fp = iter.key();
if (fp.isEmpty())
continue;
const QString url = iter.value().toString();
if (url.isEmpty())
continue;
Utils::FilePath fullPath = Utils::FilePath::fromString(fp);
if (fullPath.toFileInfo().isRelative())
fullPath = m_project->projectDirectory().pathAppended(fp);
if (!fullPath.exists())
continue;
if (url.isEmpty())
continue;
mLinkedPreviews[Utils::FilePath::fromString(fp)] = url;
}
emit linkedPreviewsChanged();
}
void ProjectSettings::store()
{
QVariantMap map;
QVariantMap linkedPreviewMap;
for (auto iter = mLinkedPreviews.begin(); iter != mLinkedPreviews.end(); ++iter) {
linkedPreviewMap.insert(iter.key().toString(), iter.value());
}
map.insert(SETTINGS_KEY_LINKED_PREVIEW, linkedPreviewMap);
m_project->setNamedSettings(SETTINGS_KEY_MAIN, map);
}
ProjectSettings::ProjectSettingsPtr ProjectSettings::getSettings(ProjectExplorer::Project *project)
{
const QString key = "ProjectSettings";
QVariant v = project->extraData(key);
if (v.isNull()) {
v = QVariant::fromValue(ProjectSettingsPtr{new ProjectSettings(project)});
project->setExtraData(key, v);
}
return v.value<QSharedPointer<ProjectSettings>>();
}
} // namespace Internal
} // namespace qtc::plugin::sphinx