forked from KDE/kdiff3
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOptions.cpp
More file actions
157 lines (119 loc) · 5.52 KB
/
Options.cpp
File metadata and controls
157 lines (119 loc) · 5.52 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
* KDiff3 - Text Diff And Merge Tool
*
* SPDX-FileCopyrightText: 2019-2020 Michael Reeves reeves.87@gmail.com
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "options.h"
#include "combiners.h"
#include "ConfigValueMap.h"
#include "diff.h"
#include "OptionItems.h"
#include <boost/signals2.hpp>
#include <memory>
#include <KSharedConfig>
#define KDIFF3_CONFIG_GROUP "KDiff3 Options"
boost::signals2::signal<void ()> Options::apply;
boost::signals2::signal<void ()> Options::resetToDefaults;
boost::signals2::signal<void ()> Options::setToCurrent;
boost::signals2::signal<void (ValueMap*)> Options::read;
boost::signals2::signal<void (ValueMap*)> Options::write;
boost::signals2::signal<void ()> Options::preserve;
boost::signals2::signal<void ()> Options::unpreserve;
boost::signals2::signal<bool (const QString&, const QString&), find> Options::accept;
OptionItemBase::OptionItemBase(const QString& saveName)
{
m_saveName = saveName;
m_bPreserved = false;
connections.push_back(Options::apply.connect(boost::bind(&OptionItemBase::apply, this)));
connections.push_back(Options::setToCurrent.connect(boost::bind(&OptionItemBase::setToCurrent, this)));
connections.push_back(Options::resetToDefaults.connect(boost::bind(&OptionItemBase::setToDefault, this)));
connections.push_back(Options::read.connect(boost::bind(&OptionItemBase::read, this, boost::placeholders::_1)));
connections.push_back(Options::write.connect(boost::bind(&OptionItemBase::write, this, boost::placeholders::_1)));
connections.push_back(Options::preserve.connect(boost::bind(&OptionItemBase::preserve, this)));
connections.push_back(Options::unpreserve.connect(boost::bind(&OptionItemBase::unpreserve, this)));
connections.push_back(Options::accept.connect(boost::bind(&OptionItemBase::accept, this, boost::placeholders::_1, boost::placeholders::_2)));
}
bool OptionItemBase::accept(const QString& key, const QString& val)
{
if(getSaveName() != key)
return false;
preserve();
ValueMap config;
config.writeEntry(key, val); // Write the value as a string and
read(&config); // use the internal conversion from string to the needed value.
return true;
}
void Options::init()
{
//Settings not in Options dialog
addOptionItem(std::make_shared<OptionSize>(QSize(600, 400), "Geometry", &m_geometry));
addOptionItem(std::make_shared<OptionPoint>(QPoint(0, 22), "Position", &m_position));
addOptionItem(std::make_shared<OptionToggleAction>(false, "WindowStateFullScreen", &m_bFullScreen));
addOptionItem(std::make_shared<OptionToggleAction>(false, "WindowStateMaximised", &m_bMaximised));
addOptionItem(std::make_shared<OptionToggleAction>(true, "Show Toolbar", &m_bShowToolBar));
addOptionItem(std::make_shared<OptionToggleAction>(true, "Show Statusbar", &m_bShowStatusBar));
//Options in Options dialog.
addOptionItem(std::make_shared<OptionToggleAction>(false, "AutoAdvance", &m_bAutoAdvance));
addOptionItem(std::make_shared<OptionToggleAction>(true, "ShowWhiteSpaceCharacters", &m_bShowWhiteSpaceCharacters));
addOptionItem(std::make_shared<OptionToggleAction>(true, "ShowWhiteSpace", &m_bShowWhiteSpace));
addOptionItem(std::make_shared<OptionToggleAction>(false, "ShowLineNumbers", &m_bShowLineNumbers));
addOptionItem(std::make_shared<OptionToggleAction>(true, "HorizDiffWindowSplitting", &m_bHorizDiffWindowSplitting));
addOptionItem(std::make_shared<OptionToggleAction>(false, "WordWrap", &m_bWordWrap));
addOptionItem(std::make_shared<OptionToggleAction>(true, "ShowIdenticalFiles", &m_bDmShowIdenticalFiles));
addOptionItem(std::make_shared<OptionStringList>(&m_recentAFiles, "RecentAFiles"));
addOptionItem(std::make_shared<OptionStringList>(&m_recentBFiles, "RecentBFiles"));
addOptionItem(std::make_shared<OptionStringList>(&m_recentCFiles, "RecentCFiles"));
addOptionItem(std::make_shared<OptionStringList>(&m_recentOutputFiles, "RecentOutputFiles"));
addOptionItem(std::make_shared<OptionStringList>(&m_recentEncodings, "RecentEncodings"));
}
void Options::saveOptions(const KSharedConfigPtr config)
{
// No i18n()-Translations here!
ConfigValueMap cvm(config->group(KDIFF3_CONFIG_GROUP));
unpreserve();
write(&cvm);
}
void Options::readOptions(const KSharedConfigPtr config)
{
// No i18n()-Translations here!
ConfigValueMap cvm(config->group(KDIFF3_CONFIG_GROUP));
read(&cvm);
if(m_whiteSpace2FileMergeDefault <= (int)e_SrcSelector::Min)
m_whiteSpace2FileMergeDefault = (int)e_SrcSelector::None;
if(m_whiteSpace2FileMergeDefault > (int)e_SrcSelector::Max)
m_whiteSpace2FileMergeDefault = (int)e_SrcSelector::C;
}
const QString Options::parseOptions(const QStringList& optionList)
{
QString result;
for(const QString& optionString: optionList)
{
int pos = optionString.indexOf('=');
if(pos > 0) // seems not to have a tag
{
const QString key = optionString.left(pos);
const QString val = optionString.mid(pos + 1);
bool bFound = accept(key, val);
if(!bFound)
{
result += "No config item named \"" + key + "\"\n";
}
}
else
{
result += "No '=' found in \"" + optionString + "\"\n";
}
}
return result;
}
QString Options::calcOptionHelp()
{
ValueMap config;
write(&config);
return config.getAsString();
}
void Options::addOptionItem(std::shared_ptr<OptionItemBase> inItem)
{
mOptionItemList.push_back(inItem);
}