2
* \file formatconfig.cpp
3
* Format configuration.
16
#include <qsettings.h>
19
#include "generalconfig.h"
22
#include "standardtags.h"
23
#include "formatconfig.h"
28
FormatConfig::FormatConfig(const QString &grp) : GeneralConfig(grp)
30
caseConversion = AllFirstLettersUppercase;
31
strRepEnabled = false;
32
filenameFormatter = false;
39
FormatConfig::~FormatConfig() {}
42
* Set specific properties for a filename format.
43
* This will set default string conversions and not touch the file
44
* extension when formatting.
46
void FormatConfig::setAsFilenameFormatter()
48
filenameFormatter = true;
55
strRepMap["�"] = "ae";
56
strRepMap["�"] = "oe";
57
strRepMap["�"] = "ue";
58
strRepMap["�"] = "Ae";
59
strRepMap["�"] = "Oe";
60
strRepMap["�"] = "Ue";
61
strRepMap["�"] = "ss";
65
* Format a string using this configuration.
67
* @param str string to format
69
void FormatConfig::formatString(QString& str) const
73
if (filenameFormatter) {
74
/* Do not format the extension if it is a filename */
75
dotPos = str.findRev('.');
77
ext = str.right(str.length() - dotPos);
78
str = str.left(dotPos);
82
QMap<QString, QString>::ConstIterator it;
83
for (it = strRepMap.begin(); it != strRepMap.end(); ++it) {
85
str.replace(it.key(), it.data());
87
QString key(it.key()), data(it.data());
88
int pos = 0, keylen = key.length();
89
int datalen = data.length();
90
while (pos < (int)str.length()) {
93
str.replace(pos, keylen, data);
99
if (caseConversion != NoChanges) {
100
switch (caseConversion) {
107
case FirstLetterUppercase:
108
str = str.at(0).upper() + str.right(str.length() - 1);
110
case AllFirstLettersUppercase: {
112
bool wordstart = true;
113
for (uint i = 0; i < str.length(); ++i) {
114
QChar ch = str.at(i);
115
if (!ch.isLetterOrNumber() &&
116
ch != '\'' && ch != '`') {
119
} else if (wordstart) {
121
newstr.append(ch.upper());
123
newstr.append(ch.lower());
133
/* append extension if it was removed */
140
* Format title, artist and album using this configuration.
142
* @param st standard tags
144
void FormatConfig::formatStandardTags(StandardTags& st) const
146
formatString(st.title);
147
formatString(st.artist);
148
formatString(st.album);
152
* Persist configuration.
154
* @param config KDE configuration
156
void FormatConfig::writeToConfig(
157
#ifdef CONFIG_USE_KDE
164
#ifdef CONFIG_USE_KDE
165
config->setGroup(group);
166
config->writeEntry("CaseConversion", caseConversion);
167
config->writeEntry("StrRepEnabled", strRepEnabled);
168
config->writeEntry("StrRepMapKeys", strRepMap.keys());
169
config->writeEntry("StrRepMapValues", strRepMap.values());
171
config->beginGroup("/" + group);
172
config->writeEntry("/CaseConversion", caseConversion);
173
config->writeEntry("/StrRepEnabled", strRepEnabled);
174
#if QT_VERSION >= 300
175
config->writeEntry("/StrRepMapKeys", strRepMap.keys());
176
config->writeEntry("/StrRepMapValues", strRepMap.values());
178
config->writeEntry("/StrRepMap", strRepMap);
185
* Read persisted configuration.
187
* @param config KDE configuration
189
void FormatConfig::readFromConfig(
190
#ifdef CONFIG_USE_KDE
197
#ifdef CONFIG_USE_KDE
198
config->setGroup(group);
199
caseConversion = (CaseConversion)config->readNumEntry("CaseConversion",
200
(int)caseConversion);
201
strRepEnabled = config->readBoolEntry("StrRepEnabled", strRepEnabled);
202
QStringList keys = config->readListEntry("StrRepMapKeys");
203
QStringList values = config->readListEntry("StrRepMapValues");
204
if (!keys.empty() && !values.empty()) {
205
QStringList::Iterator itk, itv;
207
for (itk = keys.begin(), itv = values.begin();
208
itk != keys.end() && itv != values.end();
210
strRepMap[*itk] = *itv;
214
config->beginGroup("/" + group);
215
caseConversion = (CaseConversion)config->readNumEntry("/CaseConversion",
216
(int)caseConversion);
217
strRepEnabled = config->readBoolEntry("/StrRepEnabled", strRepEnabled);
218
#if QT_VERSION >= 300
219
QStringList keys = config->readListEntry("/StrRepMapKeys");
220
QStringList values = config->readListEntry("/StrRepMapValues");
221
if (!keys.empty() && !values.empty()) {
222
QStringList::Iterator itk, itv;
224
for (itk = keys.begin(), itv = values.begin();
225
itk != keys.end() && itv != values.end();
227
strRepMap[*itk] = *itv;
231
strRepMap = config->readMapEntry("/StrRepMap", strRepMap);