1
1
/* This file is part of the KDE project
2
* Copyright (C) 2006-2007 Thomas Zander <zander@kde.org>
3
* Copyright (C) 2008 Thorsten Zachmann <zachmann@kde.org>
2
* Copyright (C) 2006-2010 Thomas Zander <zander@kde.org>
3
* Copyright (C) 2008-2010 Thorsten Zachmann <zachmann@kde.org>
4
4
* Copyright (C) 2008 Pierre Stirnweiss \pierre.stirnweiss_koffice@gadz.org>
6
6
* This library is free software; you can redistribute it and/or
19
19
* Boston, MA 02110-1301, USA.
21
21
#include "TextShape.h"
22
#include <KoTextSharedLoadingData.h>
23
24
#define synchronized(T) QMutex T; \
24
25
for(Finalizer finalizer(T); finalizer.loop(); finalizer.inc())
133
135
KoTextDocumentLayout *lay = qobject_cast<KoTextDocumentLayout*>(doc->documentLayout());
135
//lay->state()->setImageCollection(m_imageCollection);
137
137
if (m_textShapeData->endPosition() < 0) { // not layouted yet.
139
139
kWarning(32500) << "Painting shape that doesn't have a kotext doc-layout, which can't work";
152
152
KoTextPage *page = m_pageProvider->page(this);
154
154
// this is used to not trigger repaints if layout during the painting is done
155
// this enbales to use the same shapes on different pages showing different page numbers
155
// this enables to use the same shapes on different pages showing different page numbers
156
156
m_paintRegion = painter.clipRegion();
157
157
if (!m_textShapeData->page() || page->pageNumber() != m_textShapeData->page()->pageNumber()) {
158
158
m_textShapeData->setPage(page);
194
194
QPointF TextShape::convertScreenPos(const QPointF &point)
196
QPointF p = matrix().inverted().map(point);
196
QPointF p = absoluteTransformation(0).inverted().map(point);
197
197
return p + QPointF(0.0, m_textShapeData->documentOffset());
326
326
const bool saveMyText = index == 0 && !m_demoText; // only save the text once.
328
m_textShapeData->saveOdf(context, 0, saveMyText ? -1 : 0);
328
m_textShapeData->saveOdf(context, 0, 0, saveMyText ? -1 : 0);
329
329
writer.endElement(); // draw:text-box
330
330
saveOdfCommonChildElements(context);
331
331
writer.endElement(); // draw:frame
334
QString TextShape::saveStyle(KoGenStyle &style, KoShapeSavingContext &context) const
336
Qt::Alignment vAlign(m_textShapeData->verticalAlignment());
337
QString verticalAlign = "top";
338
if (vAlign == Qt::AlignBottom) {
339
verticalAlign = "bottom";
341
else if ( vAlign == Qt::AlignVCenter ) {
342
verticalAlign = "middle";
344
style.addProperty("draw:textarea-vertical-align", verticalAlign);
346
return KoShape::saveStyle(style, context);
349
void TextShape::loadStyle(const KoXmlElement &element, KoShapeLoadingContext &context)
351
KoShape::loadStyle(element, context);
352
KoStyleStack &styleStack = context.odfLoadingContext().styleStack();
353
styleStack.setTypeProperties("graphic");
354
QString verticalAlign(styleStack.property(KoXmlNS::draw, "textarea-vertical-align"));
355
Qt::Alignment alignment(Qt::AlignTop);
356
if (verticalAlign == "bottom") {
357
alignment = Qt::AlignBottom;
359
else if (verticalAlign == "justify") {
361
alignment = Qt::AlignVCenter;
363
else if (verticalAlign == "middle") {
364
alignment = Qt::AlignVCenter;
367
m_textShapeData->setVerticalAlignment(alignment);
334
370
bool TextShape::loadOdf(const KoXmlElement &element, KoShapeLoadingContext &context)
336
372
m_textShapeData->document()->setUndoRedoEnabled(false);
359
395
KoParagraphStyle paragraphStyle;
360
paragraphStyle.loadOdf(style, context.odfLoadingContext());
396
paragraphStyle.loadOdf(style, context);
362
398
QTextDocument *document = m_textShapeData->document();
363
399
QTextCursor cursor(document);
364
400
QTextBlock block = cursor.block();
365
401
paragraphStyle.applyStyle(block, false);
368
405
bool answer = loadOdfFrame(element, context);
410
bool TextShape::loadOdfFrame(const KoXmlElement &element, KoShapeLoadingContext &context)
412
// if the loadOdfFrame from the base class for draw:text-box failes check for table:table
413
if (!KoFrameShape::loadOdfFrame(element, context)) {
414
const KoXmlElement & frameElement(KoXml::namedItemNS(element, KoXmlNS::table, "table"));
415
if (frameElement.isNull()) {
419
return loadOdfFrameElement(frameElement, context);
373
425
bool TextShape::loadOdfFrameElement(const KoXmlElement &element, KoShapeLoadingContext &context)
375
return m_textShapeData->loadOdf(element, context);
427
return m_textShapeData->loadOdf(element, context, 0, this);
378
430
QTextDocument *TextShape::footnoteDocument()
410
462
void TextShape::waitUntilReady(const KoViewConverter &, bool asynchronous) const
464
KoTextDocumentLayout *lay = qobject_cast<KoTextDocumentLayout*>(m_textShapeData->document()->documentLayout());
466
if (!lay->hasLayouter()) {
467
lay->setLayout(new Layout(lay));
412
470
if (asynchronous) {
413
471
synchronized(m_mutex) {
414
472
if (m_textShapeData->isDirty()) {