From 4c12d2f5956436fda5756945931fa4f5dbd9c751 Mon Sep 17 00:00:00 2001 From: James Hogan Date: Sun, 22 Feb 2009 13:50:35 +0000 Subject: [PATCH] Writing of basic layout info to zionworx files --- kworship/css/KwCssStandardise.h | 24 +++-- kworship/css/KwCssStyleStates.h | 4 +- kworship/filters/zionworx/KwZionworxFilter.cpp | 125 ++++++++++++++++++++++++- 3 files changed, 136 insertions(+), 17 deletions(-) diff --git a/kworship/css/KwCssStandardise.h b/kworship/css/KwCssStandardise.h index 3aeb4bf..10c4f76 100644 --- a/kworship/css/KwCssStandardise.h +++ b/kworship/css/KwCssStandardise.h @@ -29,9 +29,11 @@ #include "KwCssScope.h" #include "KwCssSchema.h" +#include + /// Simple class for accessing a style. template -class KwCssStyleAccessor +class KDE_EXPORT KwCssStyleAccessor { public: virtual ~KwCssStyleAccessor() @@ -42,15 +44,15 @@ class KwCssStyleAccessor */ T operator () (const KwCssScope* scope) const { - return scope->getStyles().getStyle(getName()); + return scope->getStyles().getStyle(m_name); } void registerToSchema(KwCssSchema* schema) const { - schema->registerProperty(getName()); + schema->registerProperty(m_name); } protected: - virtual QString getName() const = 0; + QString m_name; }; #define KWCSS_SCHEMA \ @@ -88,21 +90,17 @@ class KwCssStyleAccessor /// Define a property in a css namespace. #define KWCSS_DEFINE_PROPERTY(TYPE, LNAME) \ - KWCSS_EXTERN class Acc_##LNAME : public KwCssStyleAccessor< TYPE > \ + class KDE_EXPORT Acc_##LNAME : public KwCssStyleAccessor< TYPE > \ { \ public: \ Acc_##LNAME() \ { \ + m_name = _scopeName(); \ + m_name.append("." #LNAME); \ registerToSchema(schema()); \ } \ - protected: \ - virtual QString getName() const \ - { \ - QString name = _scopeName(); \ - name.append("." #LNAME); \ - return name; \ - } \ - } LNAME; + }; \ + KDE_EXPORT KWCSS_EXTERN Acc_##LNAME LNAME; #define KWCSS_EXTERN extern diff --git a/kworship/css/KwCssStyleStates.h b/kworship/css/KwCssStyleStates.h index 3616ada..88403cf 100644 --- a/kworship/css/KwCssStyleStates.h +++ b/kworship/css/KwCssStyleStates.h @@ -28,6 +28,8 @@ #include "KwCssStyle.h" +#include + #include #include @@ -35,7 +37,7 @@ class KwCssAbstractStyleState; /// Set of cascading style properties. -class KwCssStyleStates +class KDE_EXPORT KwCssStyleStates { public: diff --git a/kworship/filters/zionworx/KwZionworxFilter.cpp b/kworship/filters/zionworx/KwZionworxFilter.cpp index 9dac094..e8f5975 100644 --- a/kworship/filters/zionworx/KwZionworxFilter.cpp +++ b/kworship/filters/zionworx/KwZionworxFilter.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -445,15 +446,131 @@ class KwZionworxFilter::ExportToDom { public: + /// Write a colour to a string. + static QString writeColour(const QColor& colour, bool wierd) + { + /// @todo Use symbolic colours when possible + if (wierd) + { + return QString::number((int32_t)((colour.red() << 16) | (colour.green() << 8) | colour.blue() | 0xFF000000)); + } + else + { + return QString::number((int32_t)(colour.red() | (colour.green() << 8) | (colour.blue() << 16))); + } + } static QDomElement createPlaylistNode(QDomDocument& document, QDomElement& element) { QDomElement node = document.createElement("TPlayListNode"); element.appendChild(node); return node; } - static QDomElement createOverlayStyle(QDomDocument& document, QDomElement& element) + static QDomElement createOverlayStyle(QDomDocument& document, QDomElement& element, const KwPlaylistItem* item) { QDomElement style = document.createElement("OverlayStyle"); + + style.appendChild(document.createTextNode("(TOverlayStyle)")); + + QDomElement fontEl = document.createElement("Font"); + { + fontEl.appendChild(document.createTextNode("(TFont)")); + + QFont font = KwDisplayStyles::text::character::font(item); + QStringList textStyles; + if (font.italic()) + { + textStyles += "fsItalic"; + } + if (font.bold()) + { + textStyles += "fsBold"; + } + + /// @todo find out what this element does, restore from saved + QDomElement charsetEl = document.createElement("Charset"); + charsetEl.appendChild(document.createTextNode("ANSI_CHARSET")); + fontEl.appendChild(charsetEl); + + QDomElement colorEl = document.createElement("Color"); + colorEl.appendChild(document.createTextNode(writeColour(KwDisplayStyles::text::character::brush(item).color(), false))); + fontEl.appendChild(colorEl); + + /// @todo Handle if font is specified in pixels + QDomElement heightEl = document.createElement("Height"); + heightEl.appendChild(document.createTextNode(QString::number(-font.pointSize()))); + fontEl.appendChild(heightEl); + + /// @todo Get a sensible font name here + QDomElement nameEl = document.createElement("Name"); + nameEl.appendChild(document.createTextNode("Tahoma")); + fontEl.appendChild(nameEl); + + QDomElement StyleEl = document.createElement("Style"); + StyleEl.appendChild(document.createTextNode(QString("[%1]").arg(textStyles.join(",")))); + fontEl.appendChild(StyleEl); + } + style.appendChild(fontEl); + + bool outline = KwDisplayStyles::text::character::outline::enabled(item); + bool shadow = KwDisplayStyles::text::character::shadow::enabled(item); + QDomElement textStyleEl = document.createElement("TextStyle"); + textStyleEl.appendChild(document.createTextNode(outline ? "tsOutline" : shadow ? "tsShadow" : "tsPlain")); + style.appendChild(textStyleEl); + + /// @todo Implement text alignment saving + QDomElement textAlignmentEl = document.createElement("TextAlignment"); + textAlignmentEl.appendChild(document.createTextNode("taLeft")); + style.appendChild(textAlignmentEl); + + QDomElement shadowWidthEl = document.createElement("ShadowWidth"); + shadowWidthEl.appendChild(document.createTextNode(QString::number(KwDisplayStyles::text::character::shadow::offset(item)))); + style.appendChild(shadowWidthEl); + + QDomElement shadowColorEl = document.createElement("ShadowColor"); + shadowColorEl.appendChild(document.createTextNode(writeColour(KwDisplayStyles::text::character::shadow::brush(item).color(), true))); + style.appendChild(shadowColorEl); + + QDomElement outlineWidthEl = document.createElement("OutlineWidth"); + outlineWidthEl.appendChild(document.createTextNode(QString::number(KwDisplayStyles::text::character::outline::pen(item).width()))); + style.appendChild(outlineWidthEl); + + QDomElement outlineColorEl = document.createElement("OutlineColor"); + outlineColorEl.appendChild(document.createTextNode(writeColour(KwDisplayStyles::text::character::outline::pen(item).color(), true))); + style.appendChild(outlineColorEl); + + QDomElement fillColorEl = document.createElement("FillColor"); + fillColorEl.appendChild(document.createTextNode(writeColour(KwDisplayStyles::background::brush(item).color(), false))); + style.appendChild(fillColorEl); + + /// @todo Implement image filename saving + if (0) + { + QDomElement imageFilenameEl = document.createElement("ImageFilename"); + imageFilenameEl.appendChild(document.createTextNode("")); + style.appendChild(imageFilenameEl); + } + + /// @todo Implement image alignment saving + QDomElement imageAlignmentEl = document.createElement("ImageAlignment"); + imageAlignmentEl.appendChild(document.createTextNode("iaStretch")); + style.appendChild(imageAlignmentEl); + + QDomElement marginRightEl = document.createElement("MarginRight"); + marginRightEl.appendChild(document.createTextNode(QString::number(KwDisplayStyles::text::layout::margins::right(item)))); + style.appendChild(marginRightEl); + + QDomElement marginLeftEl = document.createElement("MarginLeft"); + marginLeftEl.appendChild(document.createTextNode(QString::number(KwDisplayStyles::text::layout::margins::left(item)))); + style.appendChild(marginLeftEl); + + QDomElement marginTopEl = document.createElement("MarginTop"); + marginTopEl.appendChild(document.createTextNode(QString::number(KwDisplayStyles::text::layout::margins::top(item)))); + style.appendChild(marginTopEl); + + QDomElement marginBottomEl = document.createElement("MarginBottom"); + marginBottomEl.appendChild(document.createTextNode(QString::number(KwDisplayStyles::text::layout::margins::bottom(item)))); + style.appendChild(marginBottomEl); + element.appendChild(style); return style; } @@ -490,17 +607,19 @@ class KwZionworxFilter::ExportToDom static int song(const KwPlaylistSong* self, QDomDocument& document, QDomElement& element) { QDomElement node = createPlaylistNode(document, element); + QDomElement style = createOverlayStyle(document, node, self); return 0; } static int note(const KwPlaylistText* self, QDomDocument& document, QDomElement& element) { QDomElement node = createPlaylistNode(document, element); + QDomElement style = createOverlayStyle(document, node, self); return 0; } static int bible(const KwBiblePlaylistItem* self, QDomDocument& document, QDomElement& element) { QDomElement node = createPlaylistNode(document, element); - QDomElement style = createOverlayStyle(document, node); + QDomElement style = createOverlayStyle(document, node, self); const KwBiblePassage& passage = self->passage(); QDomElement item = createPlaylistItem(document, node, "siBible", passage.textualKey(), @@ -709,7 +828,7 @@ QColor KwZionworxFilter::readColour(const QDomElement& el, bool* ok) const if (isOk) { // 0xff in msb apparently changes byte order - if ((colourNum >> 24) & 0xFF == 0xFF) + if (((colourNum >> 24) & 0xFF) == 0xFF) { // least significant byte is blue, followed by green and red result.setRgb((colourNum >> 16) & 0xFF, -- 2.11.4.GIT