summaryrefslogtreecommitdiff
path: root/src/field-styles
diff options
context:
space:
mode:
Diffstat (limited to 'src/field-styles')
-rw-r--r--src/field-styles/FieldStyle.cpp38
-rw-r--r--src/field-styles/FieldStyle.h28
-rw-r--r--src/field-styles/FieldStyleFactory.cpp145
-rw-r--r--src/field-styles/FieldStyleFactory.h49
4 files changed, 260 insertions, 0 deletions
diff --git a/src/field-styles/FieldStyle.cpp b/src/field-styles/FieldStyle.cpp
new file mode 100644
index 0000000..4e710f8
--- /dev/null
+++ b/src/field-styles/FieldStyle.cpp
@@ -0,0 +1,38 @@
+#include "FieldStyle.h"
+
+FieldStyle::FieldStyle():
+ FieldStyle("", 0) {}
+
+FieldStyle::FieldStyle(const QString& family, int size,
+ bool bold, bool italic, const QString& colorName,
+ const QString& prefix, const QString& suffix,
+ bool hasKeyword, const QString& keywordColorName):
+ color(Qt::black),
+ prefix(prefix), suffix(suffix),
+ hasKeyword(hasKeyword),
+ keywordBold(false),
+ keywordItalic(false)
+{
+ font.setFamily("Times New Roman");
+ font.setPointSize(18);
+ if(!family.isEmpty())
+ font.setFamily(family);
+ if(size > 0)
+ font.setPointSize(size);
+ font.setBold(bold);
+ font.setItalic(italic);
+ if(!colorName.isEmpty())
+ color.setNamedColor(colorName);
+ keywordColor.setNamedColor(keywordColorName);
+}
+
+FieldStyle FieldStyle::getKeywordStyle() const
+{
+ if(!hasKeyword)
+ return *this;
+ FieldStyle keywordStyle = *this;
+ keywordStyle.font.setBold(keywordBold);
+ keywordStyle.font.setItalic(keywordItalic);
+ keywordStyle.color = keywordColor;
+ return keywordStyle;
+}
diff --git a/src/field-styles/FieldStyle.h b/src/field-styles/FieldStyle.h
new file mode 100644
index 0000000..20da858
--- /dev/null
+++ b/src/field-styles/FieldStyle.h
@@ -0,0 +1,28 @@
+#ifndef FIELDSTYLE_H
+#define FIELDSTYLE_H
+
+#include <QFont>
+#include <QColor>
+
+class FieldStyle
+{
+public:
+ FieldStyle();
+ FieldStyle(const QString& family, int size,
+ bool bold = true, bool italic = false, const QString& colorName = "",
+ const QString& prefix = "", const QString& suffix = "",
+ bool hasKeyword = false, const QString& keywordColorName = "#000000");
+ FieldStyle getKeywordStyle() const;
+
+public:
+ QFont font;
+ QColor color;
+ QString prefix;
+ QString suffix;
+ bool hasKeyword;
+ bool keywordBold;
+ bool keywordItalic;
+ QColor keywordColor;
+};
+
+#endif
diff --git a/src/field-styles/FieldStyleFactory.cpp b/src/field-styles/FieldStyleFactory.cpp
new file mode 100644
index 0000000..ab789e3
--- /dev/null
+++ b/src/field-styles/FieldStyleFactory.cpp
@@ -0,0 +1,145 @@
+#include "FieldStyleFactory.h"
+
+const QString FieldStyleFactory::DefaultStyle = "Normal";
+
+FieldStyleFactory::FieldStyleFactory()
+ {
+ cardBgColor.setNamedColor("white");
+ initStyles();
+ }
+
+void FieldStyleFactory::initStyles()
+{
+ setStyle(DefaultStyle, FieldStyle());
+ setStyle("Example", {"", 14, false, false, "", "", "", true, "blue"});
+ setStyle("Transcription", {"Arial", 0, false, false, "", "/", "/"});
+ setStyle("Big", {"Arial", 26});
+ setStyle("Color1", {"", 0, true, false, "red"});
+ setStyle("Color2", {"", 0, true, false, "blue"});
+}
+
+FieldStyleFactory* FieldStyleFactory::inst()
+ {
+ static FieldStyleFactory factory;
+ return &factory;
+ }
+
+void FieldStyleFactory::setStyle(const QString& aStyleName, FieldStyle aStyle )
+ {
+ styles[aStyleName] = aStyle;
+ if(!stylesNames.contains( aStyleName ))
+ stylesNames << aStyleName;
+ }
+
+void FieldStyleFactory::load()
+{
+ QSettings settings;
+ settings.beginGroup("Styles");
+ cardBgColor.setNamedColor(
+ settings.value("bg-color", cardBgColor.name()).toString());
+ foreach(QString styleName,
+ settings.value("list", getStyleNames()).toStringList())
+ loadStyle(settings, styleName);
+ settings.endGroup();
+}
+
+void FieldStyleFactory::loadStyle(QSettings& settings, const QString& styleName)
+{
+ FieldStyle curStyle;
+ settings.beginGroup(styleName);
+ FieldStyle defaultStyle = getStyle(styleName);
+ loadStyleMainProperties(settings, curStyle, defaultStyle);
+ loadKeywordStyle(settings, curStyle, defaultStyle);
+ settings.endGroup();
+ setStyle(styleName, curStyle);
+}
+
+void FieldStyleFactory::loadStyleMainProperties(const QSettings& settings,
+ FieldStyle& curStyle, const FieldStyle& defaultStyle)
+{
+ curStyle.font.setFamily(
+ settings.value("font-family", defaultStyle.font.family()).toString());
+ curStyle.font.setPointSize(
+ settings.value("font-size", defaultStyle.font.pointSize()).toInt());
+ curStyle.font.setBold(
+ settings.value("font-bold", defaultStyle.font.bold()).toBool());
+ curStyle.font.setItalic(
+ settings.value("font-italic", defaultStyle.font.italic()).toBool());
+ curStyle.color.setNamedColor(
+ settings.value("color", defaultStyle.color.name()).toString());
+ curStyle.prefix = settings.value("prefix", defaultStyle.prefix).toString();
+ curStyle.suffix = settings.value("suffix", defaultStyle.suffix).toString();
+ curStyle.hasKeyword = settings.value("keyword", defaultStyle.hasKeyword).toBool();
+}
+
+void FieldStyleFactory::loadKeywordStyle(const QSettings& settings, FieldStyle& curStyle,
+ const FieldStyle& defaultStyle)
+{
+ if(!curStyle.hasKeyword)
+ return;
+ curStyle.keywordBold =
+ settings.value("keyword/font-bold", defaultStyle.keywordBold).toBool();
+ curStyle.keywordItalic =
+ settings.value("keyword/font-italic", defaultStyle.keywordItalic).toBool();
+ curStyle.keywordColor.setNamedColor(
+ settings.value("keyword/color", defaultStyle.keywordColor.name()).toString());
+}
+
+void FieldStyleFactory::save()
+ {
+ QSettings settings;
+ settings.beginGroup("Styles");
+ settings.remove(""); // Remove old user settings
+ if(cardBgColor != FieldStyleFactory().cardBgColor)
+ settings.setValue("bg-color", cardBgColor.name());
+ foreach(QString styleName, getStyleNames())
+ saveStyle(settings, styleName);
+ settings.endGroup();
+ }
+
+void FieldStyleFactory::saveStyle(QSettings& settings, const QString& styleName)
+{
+ const FieldStyle curStyle = getStyle(styleName);
+ const FieldStyle defaultStyle = FieldStyleFactory().getStyle(styleName);
+ settings.beginGroup( styleName );
+ saveStyleMainProperties(settings, curStyle, defaultStyle);
+ saveKeywordStyle(settings, curStyle, defaultStyle);
+ settings.endGroup();
+}
+
+void FieldStyleFactory::saveStyleMainProperties(QSettings& settings, const FieldStyle& curStyle,
+ const FieldStyle& defaultStyle)
+{
+ if(curStyle.font.family() != defaultStyle.font.family())
+ settings.setValue("font-family", curStyle.font.family());
+ if(curStyle.font.pointSize() != defaultStyle.font.pointSize())
+ settings.setValue("font-size", curStyle.font.pointSize());
+ if(curStyle.font.bold() != defaultStyle.font.bold())
+ settings.setValue("font-bold", curStyle.font.bold());
+ if(curStyle.font.italic() != defaultStyle.font.italic())
+ settings.setValue("font-italic", curStyle.font.italic());
+ if(curStyle.color != defaultStyle.color)
+ settings.setValue("color", curStyle.color.name());
+ if(curStyle.prefix != defaultStyle.prefix)
+ settings.setValue("prefix", curStyle.prefix);
+ if(curStyle.suffix != defaultStyle.suffix)
+ settings.setValue("suffix", curStyle.suffix);
+ if(curStyle.hasKeyword != defaultStyle.hasKeyword)
+ settings.setValue("keyword", curStyle.hasKeyword);
+}
+
+void FieldStyleFactory::saveKeywordStyle(QSettings& settings, const FieldStyle& curStyle,
+ const FieldStyle& defaultStyle)
+{
+ if(!curStyle.hasKeyword)
+ return;
+ if(!defaultStyle.hasKeyword ||
+ curStyle.keywordBold != defaultStyle.keywordBold)
+ settings.setValue("keyword/font-bold", curStyle.keywordBold);
+ if(!defaultStyle.hasKeyword ||
+ curStyle.keywordItalic != defaultStyle.keywordItalic)
+ settings.setValue("keyword/font-italic", curStyle.keywordItalic);
+ if(!defaultStyle.hasKeyword ||
+ curStyle.keywordColor != defaultStyle.keywordColor)
+ settings.setValue("keyword/color", curStyle.keywordColor.name());
+}
diff --git a/src/field-styles/FieldStyleFactory.h b/src/field-styles/FieldStyleFactory.h
new file mode 100644
index 0000000..072bdd5
--- /dev/null
+++ b/src/field-styles/FieldStyleFactory.h
@@ -0,0 +1,49 @@
+#ifndef FIELDSTYLEFACTORY_H
+#define FIELDSTYLEFACTORY_H
+
+#include "FieldStyle.h"
+
+#include <QtCore>
+
+class FieldStyleFactory
+{
+public:
+ static FieldStyleFactory* inst();
+
+public:
+ FieldStyleFactory();
+ const QStringList getStyleNames() const
+ { return stylesNames; }
+ const FieldStyle getStyle(const QString& aStyleName) const
+ { return styles[aStyleName]; }
+ FieldStyle* getStylePtr( const QString& aStyleName )
+ { return &( styles[aStyleName] ); }
+ void setStyle(const QString& aStyleName, FieldStyle aStyle );
+ void load();
+ void save();
+
+private:
+ void initStyles();
+ void loadStyle(QSettings& settings, const QString& styleName);
+ void loadStyleMainProperties(const QSettings& settings, FieldStyle& curStyle,
+ const FieldStyle& defaultStyle);
+ void loadKeywordStyle(const QSettings& settings, FieldStyle& curStyle,
+ const FieldStyle& defaultStyle);
+ void saveStyle(QSettings& settings, const QString& styleName);
+ void saveStyleMainProperties(QSettings& settings, const FieldStyle& curStyle,
+ const FieldStyle& defaultStyle);
+ void saveKeywordStyle(QSettings& settings, const FieldStyle& curStyle,
+ const FieldStyle& defaultStyle);
+
+public:
+ static const QString DefaultStyle;
+
+public:
+ QColor cardBgColor;
+
+private:
+ QHash<QString, FieldStyle> styles;
+ QStringList stylesNames; // Keeps order of styles
+};
+
+#endif