[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra] /: read & write <style:column> (also use for rendering/layouting) and <style:column-gap>
From: Friedrich W. H. Kossebau <kossebau () kde ! org>
Date: 2012-07-29 7:49:17
Message-ID: 20120729074917.CCEC1A6094 () git ! kde ! org
[Download RAW message or body]
Git commit 5458f54e209c4912107110b542d4d05ee94eaff0 by Friedrich W. H. Kossebau.
Committed on 29/07/2012 at 09:47.
Pushed by kossebau into branch 'master'.
read & write <style:column> (also use for rendering/layouting) and <style:column-gap>
also tune KoColumns API a little
REVIEW: 105736
thanks boemann for review
M +215 -5 libs/kotext/styles/KoSectionStyle.cpp
M +33 -9 libs/kotext/styles/KoSectionStyle.h
M +1 -0 libs/odf/CMakeLists.txt
A +281 -0 libs/odf/KoColumns.cpp [License: LGPL (v2+)]
M +102 -9 libs/odf/KoColumns.h
M +25 -7 libs/widgets/KoPagePreviewWidget.cpp
M +1 -2 words/part/KWDocument.cpp
M +4 -25 words/part/KWPageStyle.cpp
M +1 -1 words/part/KWRootAreaProvider.cpp
M +10 -5 words/part/dialogs/KWDocumentColumns.cpp
M +56 -25 words/part/frames/KWFrameLayout.cpp
M +3 -3 words/part/tests/TestFrameLayout.cpp
M +8 -7 words/part/tests/TestPageCommands.cpp
http://commits.kde.org/calligra/5458f54e209c4912107110b542d4d05ee94eaff0
diff --git a/libs/kotext/styles/KoSectionStyle.cpp \
b/libs/kotext/styles/KoSectionStyle.cpp index 294a85a..d59b931 100644
--- a/libs/kotext/styles/KoSectionStyle.cpp
+++ b/libs/kotext/styles/KoSectionStyle.cpp
@@ -4,6 +4,7 @@
* Copyright (C) 2008 Roopesh Chander <roop@forwardbias.in>
* Copyright (C) 2008 Girish Ramakrishnan <girish@forwardbias.in>
* Copyright (C) 2009 KO GmbH <cbo@kogmbh.com>
+ * Copyright 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -34,6 +35,7 @@
#include <QTextCursor>
#include <QBuffer>
+#include <KoColumns.h>
#include <KoUnit.h>
#include <KoStyleStack.h>
#include <KoOdfLoadingContext.h>
@@ -41,6 +43,8 @@
#include <KoXmlWriter.h>
#include <KoBorder.h>
+Q_DECLARE_METATYPE(QList<KoColumns::ColumnDatum>)
+
class KoSectionStyle::Private
{
public:
@@ -76,6 +80,12 @@ public:
return QColor();
return variant.value<QColor>();
}
+ QList<KoColumns::ColumnDatum> propertyColumnData() const{
+ QVariant variant = stylesPrivate.value(ColumnData);
+ if (variant.isNull())
+ return QList<KoColumns::ColumnDatum>();
+ return variant.value<QList<KoColumns::ColumnDatum> >();
+ }
QString name;
KoSectionStyle *parentStyle;
@@ -189,6 +199,87 @@ qreal KoSectionStyle::rightMargin() const
return d->propertyDouble(QTextFormat::BlockRightMargin);
}
+void KoSectionStyle::setColumnCount(int columnCount)
+{
+ setProperty(ColumnCount, columnCount);
+}
+
+int KoSectionStyle::columnCount() const
+{
+ return d->propertyInt(ColumnCount);
+}
+
+void KoSectionStyle::setColumnGapWidth(qreal columnGapWidth)
+{
+ setProperty(ColumnGapWidth, columnGapWidth);
+}
+
+qreal KoSectionStyle::columnGapWidth() const
+{
+ return d->propertyDouble(ColumnGapWidth);
+}
+
+void KoSectionStyle::setColumnData(const QList<KoColumns::ColumnDatum> &columnData)
+{
+ setProperty(ColumnData, QVariant::fromValue<QList<KoColumns::ColumnDatum> \
>(columnData)); +}
+
+QList<KoColumns::ColumnDatum> KoSectionStyle::columnData() const
+{
+ return d->propertyColumnData();
+}
+
+void KoSectionStyle::setSeparatorStyle(KoColumns::SeparatorStyle separatorStyle)
+{
+ setProperty(SeparatorStyle, separatorStyle);
+}
+
+KoColumns::SeparatorStyle KoSectionStyle::separatorStyle() const
+{
+ return static_cast<KoColumns::SeparatorStyle>(d->propertyInt(SeparatorStyle));
+}
+
+void KoSectionStyle::setSeparatorColor(const QColor &separatorColor)
+{
+ setProperty(SeparatorColor, separatorColor);
+}
+
+QColor KoSectionStyle::separatorColor() const
+{
+ return d->propertyColor(SeparatorColor);
+}
+
+void KoSectionStyle::setSeparatorWidth(qreal separatorWidth)
+{
+ setProperty(SeparatorWidth, separatorWidth);
+}
+
+qreal KoSectionStyle::separatorWidth() const
+{
+ return d->propertyDouble(SeparatorWidth);
+}
+
+void KoSectionStyle::setSeparatorHeight( int separatorHeight)
+{
+ setProperty(SeparatorHeight, separatorHeight);
+}
+
+int KoSectionStyle::separatorHeight() const
+{
+ return d->propertyInt(SeparatorHeight);
+}
+
+void KoSectionStyle::setSeparatorVerticalAlignment(KoColumns::SeparatorVerticalAlignment \
separatorVerticalAlignment) +{
+ setProperty(SeparatorVerticalAlignment, separatorVerticalAlignment);
+}
+
+KoColumns::SeparatorVerticalAlignment KoSectionStyle::separatorVerticalAlignment() \
const +{
+ return static_cast<KoColumns::SeparatorVerticalAlignment>(d->propertyInt(SeparatorVerticalAlignment));
+}
+
+
KoSectionStyle *KoSectionStyle::parentStyle() const
{
return d->parentStyle;
@@ -296,6 +387,60 @@ void KoSectionStyle::loadOdf(const KoXmlElement *element, \
KoOdfLoadingContext &c setBackground(brush);
}
+ if (styleStack.hasChildNode(KoXmlNS::style, "columns")) {
+ KoXmlElement columns = styleStack.childNode(KoXmlNS::style, "columns");
+ int columnCount = columns.attributeNS(KoXmlNS::fo, "column-count").toInt();
+ if (columnCount < 1)
+ columnCount = 1;
+ setColumnCount(columnCount);
+
+ if (styleStack.hasProperty(KoXmlNS::fo, "column-gap")) {
+ setColumnGapWidth(KoUnit::parseValue(columns.attributeNS(KoXmlNS::fo, \
"column-gap"))); + } else {
+ QList <KoColumns::ColumnDatum> columnData;
+
+ KoXmlElement columnElement;
+ forEachElement(columnElement, columns) {
+ if(columnElement.localName() != QLatin1String("column") ||
+ columnElement.namespaceURI() != KoXmlNS::style)
+ continue;
+
+ KoColumns::ColumnDatum datum;
+ datum.leftMargin = \
KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, "start-indent"), 0.0); + \
datum.rightMargin = KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, \
"end-indent"), 0.0); + datum.topMargin = \
KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, "space-before"), 0.0); + \
datum.bottomMargin = KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, \
"space-after"), 0.0); + datum.relativeWidth = \
KoColumns::parseRelativeWidth(columnElement.attributeNS(KoXmlNS::style, \
"rel-width")); + // on a bad relativeWidth just drop all data
+ if (datum.relativeWidth <= 0) {
+ columnData.clear();
+ break;
+ }
+
+ columnData.append(datum);
+ }
+
+ if (! columnData.isEmpty()) {
+ setColumnData(columnData);
+ }
+ }
+
+ KoXmlElement columnSep = KoXml::namedItemNS(columns, KoXmlNS::style, \
"column-sep"); + if (! columnSep.isNull()) {
+ if (columnSep.hasAttributeNS(KoXmlNS::style, "style"))
+ setSeparatorStyle(KoColumns::parseSeparatorStyle(columnSep.attributeNS(KoXmlNS::style, \
"style"))); + if (columnSep.hasAttributeNS(KoXmlNS::style, "width"))
+ setSeparatorWidth(KoUnit::parseValue(columnSep.attributeNS(KoXmlNS::style, \
"width"))); + if (columnSep.hasAttributeNS(KoXmlNS::style, "height"))
+ setSeparatorHeight(KoColumns::parseSeparatorHeight(columnSep.attributeNS(KoXmlNS::style, \
"height"))); + if (columnSep.hasAttributeNS(KoXmlNS::style, "color"))
+ setSeparatorColor(KoColumns::parseSeparatorColor(columnSep.attributeNS(KoXmlNS::style, \
"color"))); + if (columnSep.hasAttributeNS(KoXmlNS::style, \
"vertical-align")) + setSeparatorVerticalAlignment(
+ \
KoColumns::parseSeparatorVerticalAlignment(columnSep.attributeNS(KoXmlNS::style, \
"vertical-align"))); + }
+ }
+
styleStack.restore();
}
@@ -324,6 +469,7 @@ void KoSectionStyle::removeDuplicates(const KoSectionStyle \
&other) d->stylesPrivate.removeDuplicates(other.d->stylesPrivate);
}
+
void KoSectionStyle::saveOdf(KoGenStyle &style)
{
// only custom style have a displayname. automatic styles don't have a name set.
@@ -331,9 +477,12 @@ void KoSectionStyle::saveOdf(KoGenStyle &style)
style.addAttribute("style:display-name", d->name);
}
+ QList<int> columnsKeys;
+
QList<int> keys = d->stylesPrivate.keys();
foreach(int key, keys) {
- if (key == KoSectionStyle::TextProgressionDirection) {
+ switch (key) {
+ case KoSectionStyle::TextProgressionDirection: {
int directionValue = 0;
bool ok = false;
directionValue = d->stylesPrivate.value(key).toInt(&ok);
@@ -350,17 +499,78 @@ void KoSectionStyle::saveOdf(KoGenStyle &style)
if (!direction.isEmpty())
style.addProperty("style:writing-mode", direction, \
KoGenStyle::DefaultType); }
- } else if (key == QTextFormat::BackgroundBrush) {
+ break;
+ }
+ case QTextFormat::BackgroundBrush: {
QBrush backBrush = background();
if (backBrush.style() != Qt::NoBrush)
style.addProperty("fo:background-color", backBrush.color().name(), \
KoGenStyle::ParagraphType); else
style.addProperty("fo:background-color", "transparent", \
KoGenStyle::DefaultType);
- } else if (key == QTextFormat::BlockLeftMargin) {
+ break;
+ }
+ case QTextFormat::BlockLeftMargin:
style.addPropertyPt("fo:margin-left", leftMargin(), \
KoGenStyle::DefaultType);
- } else if (key == QTextFormat::BlockRightMargin) {
+ break;
+ case QTextFormat::BlockRightMargin:
style.addPropertyPt("fo:margin-right", rightMargin(), \
KoGenStyle::DefaultType);
- }
+ break;
+ case ColumnCount:
+ case ColumnGapWidth:
+ case SeparatorStyle:
+ case SeparatorColor:
+ case SeparatorVerticalAlignment:
+ case SeparatorWidth:
+ case SeparatorHeight:
+ columnsKeys.append(key);
+ break;
+ }
+ }
+
+ if (!columnsKeys.isEmpty()) {
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+ KoXmlWriter elementWriter(&buffer); // TODO pass indentation level
+
+ elementWriter.startElement("style:columns");
+ // seems these two are mandatory
+ elementWriter.addAttribute("fo:column-count", columnCount());
+ elementWriter.addAttributePt("fo:column-gap", columnGapWidth());
+ columnsKeys.removeOne(ColumnCount);
+ columnsKeys.removeOne(ColumnGapWidth);
+
+ if (!columnsKeys.isEmpty()) {
+ elementWriter.startElement("style:column-sep");
+ foreach(int key, columnsKeys) {
+ switch (key) {
+ case SeparatorStyle:
+ elementWriter.addAttribute("style:style",
+ \
KoColumns::separatorStyleString(separatorStyle())); + break;
+ case SeparatorColor:
+ elementWriter.addAttribute("style:color",
+ separatorColor().name());
+ break;
+ case SeparatorVerticalAlignment:
+ elementWriter.addAttribute("style:vertical-align",
+ \
KoColumns::separatorVerticalAlignmentString(separatorVerticalAlignment())); + \
break; + case SeparatorWidth:
+ elementWriter.addAttributePt("style:width",
+ separatorWidth());
+ break;
+ case SeparatorHeight:
+ elementWriter.addAttribute("style:height",
+ \
QString::fromLatin1("%1%").arg(separatorHeight())); + break;
+ }
+ }
+ elementWriter.endElement(); // style:column-sep
+ }
+
+ elementWriter.endElement(); // style:columns
+ const QString elementContents = QString::fromUtf8(buffer.buffer(), \
buffer.buffer().size()); + style.addChildElement("style:columns", \
elementContents); }
}
diff --git a/libs/kotext/styles/KoSectionStyle.h \
b/libs/kotext/styles/KoSectionStyle.h index 7d06a9e..455499a 100644
--- a/libs/kotext/styles/KoSectionStyle.h
+++ b/libs/kotext/styles/KoSectionStyle.h
@@ -54,7 +54,15 @@ class KOTEXT_EXPORT KoSectionStyle : public QObject
public:
enum Property {
StyleId = QTextFormat::UserProperty + 1,
- TextProgressionDirection
+ TextProgressionDirection,
+ ColumnCount,
+ ColumnData,
+ ColumnGapWidth,
+ SeparatorStyle,
+ SeparatorColor,
+ SeparatorVerticalAlignment,
+ SeparatorWidth,
+ SeparatorHeight
};
/// Constructor
@@ -67,14 +75,6 @@ public:
/// creates a clone of this style with the specified parent
KoSectionStyle *clone(QObject *parent = 0) const;
- /**
- * Return the current columns settings.
- */
- KoColumns columns() const;
- /**
- * Set the new columns settings
- */
- void setColumns(const KoColumns &columns);
/// duplicated property from QTextBlockFormat
void setLeftMargin(qreal margin);
@@ -104,6 +104,30 @@ public:
int indent() const;
#endif
+ void setColumnCount(int columnCount);
+ int columnCount() const;
+
+ void setColumnGapWidth(qreal columnGapWidth);
+ qreal columnGapWidth() const;
+
+ void setColumnData(const QList<KoColumns::ColumnDatum> &columnData);
+ QList<KoColumns::ColumnDatum> columnData() const;
+
+ void setSeparatorStyle(KoColumns::SeparatorStyle separatorStyle);
+ KoColumns::SeparatorStyle separatorStyle() const;
+
+ void setSeparatorColor(const QColor &separatorColor);
+ QColor separatorColor() const;
+
+ void setSeparatorVerticalAlignment(KoColumns::SeparatorVerticalAlignment \
separatorVerticalAlignment); + KoColumns::SeparatorVerticalAlignment \
separatorVerticalAlignment() const; +
+ void setSeparatorWidth(qreal separatorWidth);
+ qreal separatorWidth() const;
+
+ void setSeparatorHeight(int separatorHeight);
+ int separatorHeight() const;
+
/// set the parent style this one inherits its unset properties from.
void setParentStyle(KoSectionStyle *parent);
diff --git a/libs/odf/CMakeLists.txt b/libs/odf/CMakeLists.txt
index ce45ade..b47441f 100644
--- a/libs/odf/CMakeLists.txt
+++ b/libs/odf/CMakeLists.txt
@@ -35,6 +35,7 @@ set(koodf_LIB_SRCS
KoShadowStyle.cpp
KoPageLayout.cpp
KoPageFormat.cpp
+ KoColumns.cpp
KoStore.cpp
KoTarStore.cpp
KoDirectoryStore.cpp
diff --git a/libs/odf/KoColumns.cpp b/libs/odf/KoColumns.cpp
new file mode 100644
index 0000000..ae66ec6
--- /dev/null
+++ b/libs/odf/KoColumns.cpp
@@ -0,0 +1,281 @@
+/* This file is part of the KDE project
+ Copyright 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "KoColumns.h"
+
+#include "KoXmlWriter.h"
+#include "KoGenStyle.h"
+#include "KoXmlReader.h"
+#include "KoXmlNS.h"
+#include "KoUnit.h"
+// KDE
+#include <KDebug>
+
+static const int defaultColumnCount = 1;
+static const KoColumns::SeparatorStyle defaultSeparatorStyle = KoColumns::None;
+static const int defaultSeparatorHeight = 100;
+static const Qt::GlobalColor defaultSeparatorColor = Qt::black;
+static const KoColumns::SeparatorVerticalAlignment defaultSeparatorVerticalAlignment \
= KoColumns::AlignTop; +static const int defaultColumnGapWidth = 17; // in pt, ~ 6mm
+
+
+
+const char * KoColumns::separatorStyleString(KoColumns::SeparatorStyle \
separatorStyle) +{
+ const char * result;
+
+ // skip KoColumns::None, is default
+ if (separatorStyle == Solid) {
+ result = "solid";
+ } else if (separatorStyle == Dotted) {
+ result = "dotted";
+ } else if (separatorStyle == Dashed) {
+ result = "dashed";
+ } else if (separatorStyle == DotDashed) {
+ result = "dot-dashed";
+ } else {
+ result = "none";
+ }
+
+ return result;
+}
+
+const char * KoColumns::separatorVerticalAlignmentString(KoColumns::SeparatorVerticalAlignment \
separatorVerticalAlignment) +{
+ const char * result;
+
+ // skip KoColumns::AlignTop, is default
+ if (separatorVerticalAlignment == AlignVCenter) {
+ result = "middle";
+ } else if (separatorVerticalAlignment == AlignBottom) {
+ result = "bottom";
+ } else {
+ result = "top";
+ }
+
+ return result;
+}
+
+KoColumns::SeparatorVerticalAlignment \
KoColumns::parseSeparatorVerticalAlignment(const QString &value) +{
+ // default to AlignTop
+ SeparatorVerticalAlignment result = defaultSeparatorVerticalAlignment;
+
+ if (! value.isEmpty()) {
+ // skip "top", is default
+ if (value == QLatin1String("middle")) {
+ result = AlignVCenter;
+ } else if (value == QLatin1String("bottom")) {
+ result = AlignBottom;
+ }
+ }
+
+ return result;
+}
+
+QColor KoColumns::parseSeparatorColor(const QString &value)
+{
+ QColor result(value);
+
+ if (! result.isValid())
+ // default is black, cmp. ODF 1.2 §19.467
+ result = QColor(defaultSeparatorColor);
+
+ return result;
+}
+
+// TODO: see if there is another parse method somewhere which can be used here
+int KoColumns::parseSeparatorHeight(const QString &value)
+{
+ int result = defaultSeparatorHeight;
+
+ // only try to convert if it ends with a %, so is also not empty
+ if (value.endsWith(QLatin1Char('%'))) {
+ bool ok = false;
+ // try to convert
+ result = value.left(value.length()-1).toInt(&ok);
+ // reset to 100% if conversion failed (which sets result to 0)
+ if (! ok) {
+ result = defaultSeparatorHeight;
+ }
+ }
+
+ return result;
+}
+
+KoColumns::SeparatorStyle KoColumns::parseSeparatorStyle(const QString &value)
+{
+ SeparatorStyle result = None;
+ if (! value.isEmpty()) {
+ // skip "none", is default
+ if (value == QLatin1String("solid")) {
+ result = Solid;
+ } else if (value == QLatin1String("dotted")) {
+ result = Dotted;
+ } else if (value == QLatin1String("dashed")) {
+ result = Dashed;
+ } else if (value == QLatin1String("dot-dashed")) {
+ result = DotDashed;
+ }
+ }
+
+ return result;
+}
+
+int KoColumns::parseRelativeWidth(const QString &value)
+{
+ int result = 0;
+
+ // only try to convert if it ends with a *, so is also not empty
+ if (value.endsWith(QLatin1Char('*'))) {
+ bool ok = false;
+ // try to convert
+ result = value.left(value.length()-1).toInt(&ok);
+ if (! ok) {
+ result = 0;
+ }
+ }
+
+ return result;
+}
+
+KoColumns::KoColumns()
+ : count(defaultColumnCount)
+ , gapWidth(defaultColumnGapWidth)
+ , separatorStyle(defaultSeparatorStyle)
+ , separatorColor(defaultSeparatorColor)
+ , separatorVerticalAlignment(defaultSeparatorVerticalAlignment)
+ , separatorHeight(defaultSeparatorHeight)
+{
+}
+
+void KoColumns::reset()
+{
+ count = defaultColumnCount;
+ gapWidth = defaultColumnGapWidth;
+ separatorStyle = defaultSeparatorStyle;
+ separatorColor = QColor(defaultSeparatorColor);
+ separatorVerticalAlignment = defaultSeparatorVerticalAlignment;
+ separatorHeight = defaultSeparatorHeight;
+}
+
+bool KoColumns::operator==(const KoColumns& rhs) const {
+ return
+ count == rhs.count &&
+ (columnData.isEmpty() && rhs.columnData.isEmpty() ?
+ (qAbs(gapWidth - rhs.gapWidth) <= 1E-10) :
+ (columnData == rhs.columnData));
+}
+
+bool KoColumns::operator!=(const KoColumns& rhs) const {
+ return
+ count != rhs.count ||
+ (columnData.isEmpty() && rhs.columnData.isEmpty() ?
+ qAbs(gapWidth - rhs.gapWidth) > 1E-10 :
+ ! (columnData == rhs.columnData));
+}
+
+void KoColumns::loadOdf(const KoXmlElement &style)
+{
+ KoXmlElement columnsElement = KoXml::namedItemNS(style, KoXmlNS::style, \
"columns"); + if (!columnsElement.isNull()) {
+ count = columnsElement.attributeNS(KoXmlNS::fo, "column-count").toInt();
+ if (count < 1)
+ count = 1;
+ gapWidth = KoUnit::parseValue(columnsElement.attributeNS(KoXmlNS::fo, \
"column-gap")); +
+ KoXmlElement columnSep = KoXml::namedItemNS(columnsElement, KoXmlNS::style, \
"column-sep"); + if (! columnSep.isNull()) {
+ separatorStyle = \
parseSeparatorStyle(columnSep.attributeNS(KoXmlNS::style, "style")); + \
separatorWidth = KoUnit::parseValue(columnSep.attributeNS(KoXmlNS::style, "width")); \
+ separatorHeight = \
parseSeparatorHeight(columnSep.attributeNS(KoXmlNS::style, "height")); + \
separatorColor = parseSeparatorColor(columnSep.attributeNS(KoXmlNS::style, "color")); \
+ separatorVerticalAlignment = + \
parseSeparatorVerticalAlignment(columnSep.attributeNS(KoXmlNS::style, \
"vertical-align")); + }
+
+ KoXmlElement columnElement;
+ forEachElement(columnElement, columnsElement) {
+ if(columnElement.localName() != QLatin1String("column") ||
+ columnElement.namespaceURI() != KoXmlNS::style)
+ continue;
+
+ ColumnDatum datum;
+ datum.leftMargin = \
KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, "start-indent"), 0.0); + \
datum.rightMargin = KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, \
"end-indent"), 0.0); + datum.topMargin = \
KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, "space-before"), 0.0); + \
datum.bottomMargin = KoUnit::parseValue(columnElement.attributeNS(KoXmlNS::fo, \
"space-after"), 0.0); + datum.relativeWidth = \
parseRelativeWidth(columnElement.attributeNS(KoXmlNS::style, "rel-width")); + \
// on a bad relativeWidth just drop all data + if (datum.relativeWidth <= \
0) { + columnData.clear();
+ break;
+ }
+
+ columnData.append(datum);
+ }
+
+ if (! columnData.isEmpty() && count != columnData.count()) {
+ kWarning() << "Found not as many <style:column> elements as attribut \
fo:column-count has set:"<< count; + columnData.clear();
+ }
+ } else {
+ reset();
+ }
+}
+
+void KoColumns::saveOdf(KoGenStyle &style) const
+{
+ if (count > 1) {
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+ KoXmlWriter writer(&buffer);
+
+ writer.startElement("style:columns");
+ writer.addAttribute("fo:column-count", count);
+ if (columnData.isEmpty()) {
+ writer.addAttributePt("fo:column-gap", gapWidth);
+ }
+
+ if (separatorStyle != KoColumns::None) {
+ writer.startElement("style:column-sep");
+ writer.addAttribute("style:style", \
separatorStyleString(separatorStyle)); + \
writer.addAttributePt("style:width", separatorWidth); + \
writer.addAttribute("style:height", \
QString::number(separatorHeight)+QLatin1Char('%')); + \
writer.addAttribute("style:color", separatorColor.name()); + \
writer.addAttribute("style:vertical-align", \
separatorVerticalAlignmentString(separatorVerticalAlignment)); + \
writer.endElement(); // style:column-sep + }
+
+ foreach(const ColumnDatum &cd, columnData) {
+ writer.startElement("style:column");
+ writer.addAttributePt("fo:start-indent", cd.leftMargin);
+ writer.addAttributePt("fo:end-indent", cd.rightMargin);
+ writer.addAttributePt("fo:space-before", cd.topMargin);
+ writer.addAttributePt("fo:space-after", cd.bottomMargin);
+ writer.addAttribute("style:rel-width", \
QString::number(cd.relativeWidth)+QLatin1Char('*')); + \
writer.endElement(); // style:column + }
+
+ writer.endElement(); // style:columns
+
+ QString contentElement = QString::fromUtf8(buffer.buffer(), \
buffer.buffer().size()); + style.addChildElement("style:columns", \
contentElement); + }
+}
diff --git a/libs/odf/KoColumns.h b/libs/odf/KoColumns.h
index 6bd7267..ceb6f45 100644
--- a/libs/odf/KoColumns.h
+++ b/libs/odf/KoColumns.h
@@ -3,6 +3,7 @@
Copyright 2002, 2003 David Faure <faure@kde.org>
Copyright 2003 Nicolas GOUTTE <goutte@kde.org>
Copyright 2007 Thomas Zander <zander@kde.org>
+ Copyright 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -23,21 +24,113 @@
#ifndef KOCOLUMNS_H
#define KOCOLUMNS_H
+#include "koodf_export.h"
#include <QtGlobal>
+#include <QColor>
+
+class KoGenStyle;
+class KoXmlElement;
+
/** structure for columns */
struct KoColumns {
- int columns;
- qreal columnSpacing;
- bool operator==(const KoColumns& rhs) const {
- return columns == rhs.columns &&
- qAbs(columnSpacing - rhs.columnSpacing) <= 1E-10;
- }
- bool operator!=(const KoColumns& rhs) const {
- return columns != rhs.columns ||
- qAbs(columnSpacing - rhs.columnSpacing) > 1E-10;
+ enum SeparatorVerticalAlignment {
+ AlignTop = Qt::AlignTop,
+ AlignVCenter = Qt::AlignVCenter,
+ AlignBottom = Qt::AlignBottom
+ };
+
+ enum SeparatorStyle {
+ None = Qt::NoPen,
+ Solid = Qt::SolidLine,
+ Dashed = Qt::DashLine,
+ Dotted = Qt::DotLine,
+ DotDashed = Qt::DashDotLine
+ };
+
+ struct ColumnDatum
+ {
+ /** Left indent in points */
+ qreal leftMargin;
+ /** Right indent in points */
+ qreal rightMargin;
+ /** Top indent in points */
+ qreal topMargin;
+ /** Bottom indent in points */
+ qreal bottomMargin;
+
+ /** The relative width */
+ int relativeWidth;
+
+ ColumnDatum() {}
+ ColumnDatum(qreal lm, qreal rm, qreal tm, qreal bm, int rw)
+ : leftMargin(lm), rightMargin(rm), topMargin(tm), bottomMargin(bm), \
relativeWidth(rw) {} +
+ bool operator==(const KoColumns::ColumnDatum &rhs) const
+ {
+ return
+ (leftMargin == rhs.leftMargin) &&
+ (rightMargin == rhs.rightMargin) &&
+ (topMargin == rhs.topMargin) &&
+ (bottomMargin == rhs.bottomMargin) &&
+ (relativeWidth == rhs.relativeWidth);
+ }
+ };
+
+ /** Number of columns */
+ int count;
+
+ /** Spacing between columns in points */
+ qreal gapWidth;
+
+ SeparatorStyle separatorStyle;
+ QColor separatorColor;
+ SeparatorVerticalAlignment separatorVerticalAlignment;
+ /** Width in pt */
+ qreal separatorWidth;
+ /** Height in percent. Default is 100% */
+ unsigned int separatorHeight;
+
+ /** data about the individual columns if there */
+ QList<ColumnDatum> columnData;
+
+ /**
+ * Construct a columns with the default column count 1,
+ * default margins (2 cm), and portrait orientation.
+ */
+ KOODF_EXPORT KoColumns();
+
+ KOODF_EXPORT void reset();
+ KOODF_EXPORT bool operator==(const KoColumns &l) const;
+ KOODF_EXPORT bool operator!=(const KoColumns &l) const;
+
+ /**
+ * Save this columns to ODF.
+ */
+ KOODF_EXPORT void saveOdf(KoGenStyle &style) const;
+
+ /**
+ * Load this columns from ODF
+ */
+ KOODF_EXPORT void loadOdf(const KoXmlElement &style);
+
+ qreal totalRelativeWidth() const
+ {
+ qreal result = 0.0;
+ foreach(const ColumnDatum &c, columnData) {
+ result += c.relativeWidth;
+ }
+ return result;
}
+
+ KOODF_EXPORT static const char * separatorStyleString(KoColumns::SeparatorStyle \
separatorStyle); + KOODF_EXPORT static const char * \
separatorVerticalAlignmentString(KoColumns::SeparatorVerticalAlignment \
separatorVerticalAlignment); + KOODF_EXPORT static \
KoColumns::SeparatorVerticalAlignment parseSeparatorVerticalAlignment(const QString \
&value); + KOODF_EXPORT static QColor parseSeparatorColor(const QString &value);
+ KOODF_EXPORT static int parseSeparatorHeight(const QString &value);
+ KOODF_EXPORT static KoColumns::SeparatorStyle parseSeparatorStyle(const QString \
&value); + KOODF_EXPORT static int parseRelativeWidth(const QString &value);
};
#endif /* KOCOLUMNS_H */
diff --git a/libs/widgets/KoPagePreviewWidget.cpp \
b/libs/widgets/KoPagePreviewWidget.cpp index 8fe2c68..6626927 100644
--- a/libs/widgets/KoPagePreviewWidget.cpp
+++ b/libs/widgets/KoPagePreviewWidget.cpp
@@ -38,8 +38,6 @@ KoPagePreviewWidget::KoPagePreviewWidget(QWidget *parent)
: QWidget(parent)
, d(new Private)
{
- d->columns.columns = 1;
- d->columns.columnSpacing = 0;
setMinimumSize( 100, 100 );
}
@@ -123,11 +121,31 @@ void KoPagePreviewWidget::drawPage(QPainter &painter, qreal \
zoom, const QRect &d
painter.setBrush( QBrush( palette().color(QPalette::ButtonText), Qt::HorPattern \
) ); painter.setPen( palette().color(QPalette::Dark) );
- qreal columnWidth = (textArea.width() + (d->columns.columnSpacing * zoom)) / \
d->columns.columns;
- int width = qRound(columnWidth - d->columns.columnSpacing * zoom);
- for ( int i = 0; i < d->columns.columns; ++i )
- painter.drawRect( qRound(textArea.x() + i * columnWidth), textArea.y(), \
width, textArea.height());
-
+ // uniform columns?
+ if (d->columns.columnData.isEmpty()) {
+ qreal columnWidth = (textArea.width() + (d->columns.gapWidth * zoom)) / \
d->columns.count; + int width = qRound(columnWidth - d->columns.gapWidth * \
zoom); + for ( int i = 0; i < d->columns.count; ++i )
+ painter.drawRect( qRound(textArea.x() + i * columnWidth), textArea.y(), \
width, textArea.height()); + } else {
+ qreal totalRelativeWidth = 0.0;
+ foreach(const KoColumns::ColumnDatum &cd, d->columns.columnData) {
+ totalRelativeWidth += cd.relativeWidth;
+ }
+ int relativeColumnXOffset = 0;
+ for (int i = 0; i < d->columns.count; i++) {
+ const KoColumns::ColumnDatum &columnDatum = d->columns.columnData.at(i);
+ const qreal columnWidth = textArea.width() * columnDatum.relativeWidth / \
totalRelativeWidth; + const qreal columnXOffset = textArea.width() * \
relativeColumnXOffset / totalRelativeWidth; +
+ painter.drawRect( qRound(textArea.x() + columnXOffset + \
columnDatum.leftMargin * zoom), + qRound(textArea.y() + \
columnDatum.topMargin * zoom), + qRound(columnWidth - \
(columnDatum.leftMargin + columnDatum.rightMargin) * zoom), + \
qRound(textArea.height() - (columnDatum.topMargin + columnDatum.bottomMargin) * \
zoom)); +
+ relativeColumnXOffset += columnDatum.relativeWidth;
+ }
+ }
}
void KoPagePreviewWidget::setPageLayout(const KoPageLayout &layout)
diff --git a/words/part/KWDocument.cpp b/words/part/KWDocument.cpp
index 014e106..94a00c1 100644
--- a/words/part/KWDocument.cpp
+++ b/words/part/KWDocument.cpp
@@ -829,8 +829,7 @@ void KWDocument::removeFrameFromViews(KWFrame *frame)
QList<KoDocument::CustomDocumentWidgetItem> \
KWDocument::createCustomDocumentWidgets(QWidget *parent) {
KoColumns columns;
- columns.columns = 1;
- columns.columnSpacing = m_config.defaultColumnSpacing();
+ columns.gapWidth = m_config.defaultColumnSpacing();
QList<KoDocument::CustomDocumentWidgetItem> widgetList;
KoDocument::CustomDocumentWidgetItem item;
diff --git a/words/part/KWPageStyle.cpp b/words/part/KWPageStyle.cpp
index ebc9103..0faab80 100644
--- a/words/part/KWPageStyle.cpp
+++ b/words/part/KWPageStyle.cpp
@@ -51,8 +51,7 @@ void KWPageStylePrivate::clear()
headers = Words::HFTypeNone;
footers = Words::HFTypeNone;
pageUsage = KWPageStyle::AllPages;
- columns.columns = 1;
- columns.columnSpacing = 17; // ~ 6mm
+ columns.reset();
direction = KoText::AutoDirection;
headerDynamicSpacing = false;
footerDynamicSpacing = false;
@@ -246,19 +245,8 @@ KoGenStyle KWPageStyle::saveOdf() const
pageLayout.setAutoStyleInStylesDotXml(true);
pageLayout.addAttribute("style:page-usage", "all");
- if (d->columns.columns > 1) {
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
- KoXmlWriter writer(&buffer);
-
- writer.startElement("style:columns");
- writer.addAttribute("fo:column-count", d->columns.columns);
- writer.addAttributePt("fo:column-gap", d->columns.columnSpacing);
- writer.endElement();
-
- QString contentElement = QString::fromUtf8(buffer.buffer(), \
buffer.buffer().size());
- pageLayout.addChildElement("columnsEnzo", contentElement);
- }
+ // save column data
+ d->columns.saveOdf(pageLayout);
//<style:footnote-sep style:adjustment="left" style:width="0.5pt" \
style:rel-width="20%" style:line-style="solid"/> \
//writer.startElement("style:footnote-sep"); @@ -333,16 +321,7 @@ void \
KWPageStyle::loadOdf(KoOdfLoadingContext &context, const KoXmlElement &mast \
d->pageUsage = AllPages; }
- KoXmlElement columns = KoXml::namedItemNS(props, KoXmlNS::style, "columns");
- if (!columns.isNull()) {
- d->columns.columns = columns.attributeNS(KoXmlNS::fo, "column-count", \
"15").toInt();
- if (d->columns.columns < 1)
- d->columns.columns = 1;
- d->columns.columnSpacing = \
KoUnit::parseValue(columns.attributeNS(KoXmlNS::fo, "column-gap"));
- } else {
- d->columns.columns = 1;
- d->columns.columnSpacing = 17; // ~ 6mm
- }
+ d->columns.loadOdf(props);
KoXmlElement header = KoXml::namedItemNS(style, KoXmlNS::style, "header-style");
if (! header.isNull()) {
diff --git a/words/part/KWRootAreaProvider.cpp b/words/part/KWRootAreaProvider.cpp
index d4a0a9b..9e28045 100644
--- a/words/part/KWRootAreaProvider.cpp
+++ b/words/part/KWRootAreaProvider.cpp
@@ -154,7 +154,7 @@ KoTextLayoutRootArea* \
KWRootAreaProvider::provideNext(KoTextDocumentLayout *docu
if (rootAreaPage && m_textFrameSet->textFrameSetType() == \
Words::MainTextFrameSet) { Q_ASSERT(rootAreaPage->page.isValid());
Q_ASSERT(rootAreaPage->page.pageStyle().isValid());
- requiredRootAreaCount = rootAreaPage->page.pageStyle().columns().columns;
+ requiredRootAreaCount = rootAreaPage->page.pageStyle().columns().count;
}
if (rootAreaPage && rootAreaPage->rootAreas.count() < requiredRootAreaCount) {
pageNumber = m_pages.count(); // the root-area is still on the same page
diff --git a/words/part/dialogs/KWDocumentColumns.cpp \
b/words/part/dialogs/KWDocumentColumns.cpp index f0ab3cf..9e0572b 100644
--- a/words/part/dialogs/KWDocumentColumns.cpp
+++ b/words/part/dialogs/KWDocumentColumns.cpp
@@ -35,6 +35,7 @@ KWDocumentColumns::KWDocumentColumns(QWidget *parent, const \
KoColumns &columns) widget.previewPane->setLayout(layout);
m_preview = new KoPagePreviewWidget(this);
layout->addWidget(m_preview);
+ m_preview->setColumns(columns);
connect(widget.columns, SIGNAL(valueChanged(int)), this, \
SLOT(optionsChanged()));
connect(widget.spacing, SIGNAL(valueChangedPt(qreal)), this, \
SLOT(optionsChanged())); @@ -44,8 +45,8 @@ \
KWDocumentColumns::KWDocumentColumns(QWidget *parent, const KoColumns &columns) void \
KWDocumentColumns::setColumns(const KoColumns &columns) {
m_columns = columns;
- widget.columns->setValue(columns.columns);
- widget.spacing->changeValue(columns.columnSpacing);
+ widget.columns->setValue(columns.count);
+ widget.spacing->changeValue(columns.gapWidth);
}
void KWDocumentColumns::setTextAreaAvailable(bool available)
@@ -55,7 +56,7 @@ void KWDocumentColumns::setTextAreaAvailable(bool available)
if (available)
optionsChanged();
else {
- m_columns.columns = 1;
+ m_columns.count = 1;
emit columnsChanged(m_columns);
}
}
@@ -67,8 +68,12 @@ void KWDocumentColumns::setUnit(const KoUnit &unit)
void KWDocumentColumns::optionsChanged()
{
- m_columns.columns = widget.columns->value();
- m_columns.columnSpacing = widget.spacing->value();
+ m_columns.count = widget.columns->value();
+ m_columns.gapWidth = widget.spacing->value();
+ // Workaround for currently incomplete support of column data:
+ // once some editing is done, drop any individual column data
+ // TODO: complete UI to set individual column data
+ m_columns.columnData.clear();
emit columnsChanged(m_columns);
}
diff --git a/words/part/frames/KWFrameLayout.cpp \
b/words/part/frames/KWFrameLayout.cpp index a99cfb8..d9675b0 100644
--- a/words/part/frames/KWFrameLayout.cpp
+++ b/words/part/frames/KWFrameLayout.cpp
@@ -4,6 +4,7 @@
* Copyright (C) 2005-2006, 2009 Thomas Zander <zander@kde.org>
* Copyright (C) 2008 Pierre Ducroquet <pinaraf@pinaraf.info>
* Copyright (C) 2010 by Nokia, Matus Hanzes
+ * Copyright 2012 Friedrich W. H. Kossebau <kossebau@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -158,7 +159,7 @@ void KWFrameLayout::createNewFramesForPage(int pageNumber)
}
// create main text frame. All columns of them.
- int columns = page.pageStyle().columns().columns;
+ int columns = page.pageStyle().columns().count;
Q_ASSERT(columns >= 1);
KWTextFrameSet *fs = getOrCreate(Words::MainTextFrameSet, page);
QRectF rect(QPointF(0, page.offsetInDocument()), QSizeF(page.width(), \
page.height())); @@ -230,19 +231,18 @@ void KWFrameLayout::layoutFramesOnPage(int \
pageNumber)
- layout.leftPadding - layout.rightPadding;
KWPageStyle pageStyle = page.pageStyle();
- const int columns = pageStyle.columns().columns;
- int columnsCount = columns;
+ KoColumns columns = pageStyle.columns();
int columnIndex = 0;
KWFrame **main;
KWFrame *footer = 0, *header = 0;
KWFrame *pageBackground = 0;
- main = new KWFrame*[columnsCount];
- if (columns > 0)
+ main = new KWFrame*[columns.count];
+ if (columns.count > 0)
main[0] = 0;
QRectF pageRect(left, page.offsetInDocument(), width, page.height());
QList<KWFrame *> frames = framesInPage(pageRect);
- kDebug(32001) << "pageNumber=" << pageNumber << "columns=" << \
pageStyle.columns().columns << "frameCount=" << frames.count(); + kDebug(32001) << \
"pageNumber=" << pageNumber << "columns=" << columns.count << "frameCount=" << \
frames.count(); foreach (KWFrame *frame, frames) {
KWTextFrameSet *textFrameSet = 0;
switch (frame->frameSet()->type()) {
@@ -298,8 +298,8 @@ void KWFrameLayout::layoutFramesOnPage(int pageNumber)
break;
}
case Words::MainTextFrameSet: {
- if (columnIndex == columnsCount) {
- kWarning(32001) << "Too many columns present on page, ignoring 1, \
columnsCount=" << columnsCount; + if (columnIndex == columns.count) {
+ kWarning(32001) << "Too many columns present on page, ignoring 1, \
columns.count=" << columns.count; break;
}
main[columnIndex] = frame;
@@ -320,9 +320,9 @@ void KWFrameLayout::layoutFramesOnPage(int pageNumber)
pageBackground = frameOn(m_backgroundFrameSet, pageNumber);
--minZIndex;
- for (int i = 0; i < columns; ++i) {
- Q_ASSERT_X(main[i], __FUNCTION__, QString("No KWFrame for column=%1 \
columnCount=%2").arg(i).arg(columns).toLocal8Bit());
- Q_ASSERT_X(main[i]->shape(), __FUNCTION__, QString("No TextShape in KWFrame \
for column=%1 columnCount=%2").arg(i).arg(columns).toLocal8Bit()); + for (int i = \
0; i < columns.count; ++i) { + Q_ASSERT_X(main[i], __FUNCTION__, QString("No \
KWFrame for column=%1 columnCount=%2").arg(i).arg(columns.count).toLocal8Bit()); + \
Q_ASSERT_X(main[i]->shape(), __FUNCTION__, QString("No TextShape in KWFrame for \
column=%1 columnCount=%2").arg(i).arg(columns.count).toLocal8Bit()); if (main[i] && \
main[i]->shape()) main[i]->shape()->setZIndex(minZIndex);
}
@@ -374,31 +374,62 @@ void KWFrameLayout::layoutFramesOnPage(int pageNumber)
}
// actually move / size the frames.
- if (columns > 0 && main[0]) {
- const qreal columnWidth = (textWidth
- - page.pageStyle().columns().columnSpacing * (columns- 1 ))/ \
columns;
- const qreal columnStep = columnWidth + \
page.pageStyle().columns().columnSpacing;
- QPointF *points = new QPointF[columns];
- for (int i = 0; i < columns; i++)
- points[i] = QPointF(left + layout.leftMargin + layout.leftPadding \
+columnStep * i, resultingPositions[3]);
- for (int i = 0; i < columns; i++) {
- for (int f = 0; f < columns; f++) {
+ if (columns.count > 0 && main[0]) {
+ const qreal fullColumnHeight = resultingPositions[4] - \
resultingPositions[3]; + const qreal columnsXOffset = left + layout.leftMargin \
+ layout.leftPadding; +
+ QRectF *columnRects = new QRectF[columns.count];
+ // uniform columns?
+ if (columns.columnData.isEmpty()) {
+ const qreal columnWidth = (textWidth - columns.gapWidth * (columns.count \
- 1)) / columns.count; + const qreal columnStep = columnWidth + \
columns.gapWidth; +
+ for (int i = 0; i < columns.count; i++) {
+ columnRects[i] = QRectF(
+ columnsXOffset + columnStep * i,
+ resultingPositions[3],
+ columnWidth,
+ fullColumnHeight);
+ }
+ } else {
+ qreal totalRelativeWidth = 0.0;
+ foreach(const KoColumns::ColumnDatum &cd, columns.columnData) {
+ totalRelativeWidth += cd.relativeWidth;
+ }
+ int relativeColumnXOffset = 0;
+ for (int i = 0; i < columns.count; i++) {
+ const KoColumns::ColumnDatum &columnDatum = \
columns.columnData.at(i); + const qreal columnWidth = textWidth * \
columnDatum.relativeWidth / totalRelativeWidth; + const qreal \
columnXOffset = textWidth * relativeColumnXOffset / totalRelativeWidth; +
+ columnRects[i] = QRectF(
+ columnsXOffset + columnXOffset + columnDatum.leftMargin,
+ resultingPositions[3] + columnDatum.topMargin,
+ columnWidth - columnDatum.leftMargin - columnDatum.rightMargin,
+ fullColumnHeight - columnDatum.topMargin - \
columnDatum.bottomMargin); +
+ relativeColumnXOffset += columnDatum.relativeWidth;
+ }
+ }
+ // what is this doing? Friedrich
+ for (int i = 0; i < columns.count; i++) {
+ for (int f = 0; f < columns.count; f++) {
if (f == i) continue;
- if (qAbs(main[f]->shape()->position().x() - points[i].x()) < 10.0) {
+ if (qAbs(main[f]->shape()->position().x() - columnRects[i].x()) < \
10.0) { qSwap(main[f], main[i]);
break;
}
}
}
- for (int i = columns - 1; i >= 0; i--) {
+ for (int i = columns.count - 1; i >= 0; i--) {
main[i]->setFrameBehavior(Words::AutoCreateNewFrameBehavior);
main[i]->setNewFrameBehavior(Words::ReconnectNewFrame);
KoShape *shape = main[i]->shape();
- shape->setPosition(points[i]);
- shape->setSize(QSizeF(columnWidth, resultingPositions[4] - \
resultingPositions[3])); + shape->setPosition(columnRects[i].topLeft());
+ shape->setSize(columnRects[i].size());
}
- delete[] points;
+ delete[] columnRects;
// We need to store the content rect so layout can place it's anchored \
shapes // correctly
diff --git a/words/part/tests/TestFrameLayout.cpp \
b/words/part/tests/TestFrameLayout.cpp index 312e6ce..ae4d6db 100644
--- a/words/part/tests/TestFrameLayout.cpp
+++ b/words/part/tests/TestFrameLayout.cpp
@@ -267,7 +267,7 @@ void TestFrameLayout::testFrameCreation()
QVERIFY(frameSets.evenFooters == 0);
KoColumns columns = style.columns();
- columns.columns = 2;
+ columns.count = 2;
style.setColumns(columns);
removeAllFrames();
@@ -368,8 +368,8 @@ void TestFrameLayout::testCreateNewFrameForPage()
style4.setHasMainTextFrame(true);
style4.setFooterPolicy(Words::HFTypeEvenOdd);
KoColumns columns;
- columns.columns = 2;
- columns.columnSpacing = 4;
+ columns.count = 2;
+ columns.gapWidth = 4;
style4.setColumns(columns);
styles.insert(style4.name(), style4);
diff --git a/words/part/tests/TestPageCommands.cpp \
b/words/part/tests/TestPageCommands.cpp index 4f1f46f..a1983a4 100644
--- a/words/part/tests/TestPageCommands.cpp
+++ b/words/part/tests/TestPageCommands.cpp
@@ -450,8 +450,8 @@ void TestPageCommands::testPageStylePropertiesCommand() // basic \
properties chan style.setPageLayout(oldLayout);
KoColumns oldColumns;
- oldColumns.columns = 4;
- oldColumns.columnSpacing = 21;
+ oldColumns.count = 4;
+ oldColumns.gapWidth = 21;
style.setColumns(oldColumns);
KWPage page1 = manager->appendPage(style);
page1.setDirectionHint(KoText::LeftRightTopBottom);
@@ -462,7 +462,7 @@ void TestPageCommands::testPageStylePropertiesCommand() // basic \
properties chan QCOMPARE(page1.leftMargin(), 13.); // its a right-sided page
QCOMPARE(page1.pageEdgeMargin(), 7.);
QCOMPARE(page1.directionHint(), KoText::LeftRightTopBottom);
- QCOMPARE(page1.pageStyle().columns().columns, 4);
+ QCOMPARE(page1.pageStyle().columns().count, 4);
QCOMPARE(page1.pageSide(), KWPage::Right);
// new ;)
@@ -476,8 +476,9 @@ void TestPageCommands::testPageStylePropertiesCommand() // basic \
properties chan newLayout.bindingSide = -1;
style2.setPageLayout(newLayout);
KoColumns newColumns;
- newColumns.columns = 2;
- newColumns.columnSpacing = 12;
+ newColumns.count = 2;
+ newColumns.columnData.append(ColumnDatum(1.0, 2.0, 1.0, 1.0, 25));
+ newColumns.columnData.append(ColumnDatum(1.0, 1.0, 1.0, 1.0, 50));
style2.setColumns(newColumns);
style2.setDirection(KoText::RightLeftTopBottom);
@@ -502,7 +503,7 @@ void TestPageCommands::testPageStylePropertiesCommand() // basic \
properties chan
page1.setDirectionHint(KoText::InheritDirection); // reset to what the style \
says QCOMPARE(page1.directionHint(), KoText::RightLeftTopBottom);
QCOMPARE(style.pageLayout().width, 401.); // style changed
- QCOMPARE(page1.pageStyle().columns().columns, 2);
+ QCOMPARE(page1.pageStyle().columns().count, 2);
QCOMPARE(page1.pageNumber(), 1);
QCOMPARE(page1.pageSide(), KWPage::Right);
@@ -526,7 +527,7 @@ void TestPageCommands::testPageStylePropertiesCommand() // basic \
properties chan QCOMPARE(page1.leftMargin(), 13.);
QCOMPARE(page1.directionHint(), KoText::AutoDirection);
QCOMPARE(style.pageLayout().width, 101.);
- QCOMPARE(page1.pageStyle().columns().columns, 4);
+ QCOMPARE(page1.pageStyle().columns().count, 4);
QCOMPARE(page1.pageNumber(), 1);
QCOMPARE(page1.pageSide(), KWPage::Right);
QCOMPARE(manager->pageCount(), 2);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic