diff --git a/common.pri b/common.pri index d87d912..88c75a3 100644 --- a/common.pri +++ b/common.pri @@ -75,7 +75,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc LIMEREPORT_VERSION_MAJOR = 1 LIMEREPORT_VERSION_MINOR = 4 -LIMEREPORT_VERSION_RELEASE = 52 +LIMEREPORT_VERSION_RELEASE = 54 LIMEREPORT_VERSION = '$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}' DEFINES *= LIMEREPORT_VERSION_STR=\\\"$${LIMEREPORT_VERSION}\\\" diff --git a/limereport/items/lrtextitem.cpp b/limereport/items/lrtextitem.cpp index 5750988..9bd5b0e 100644 --- a/limereport/items/lrtextitem.cpp +++ b/limereport/items/lrtextitem.cpp @@ -803,46 +803,48 @@ bool TextItem::canBeSplitted(int height) const return height > m_firstLineSize; } -QString TextItem::getTextPart(int height, int skipHeight){ - int linesHeight = 0; +QString TextItem::extractText(QTextBlock& curBlock, int height){ int curLine = 0; - int textPos = 0; + int linesHeight = 0; + QString resultText; + for (;curBlock != curBlock.document()->end() || curLine<=curBlock.lineCount(); curBlock = curBlock.next(), curLine = 0, resultText += '\n' ){ + linesHeight+=curBlock.blockFormat().topMargin(); + for (;curLine < curBlock.layout()->lineCount(); curLine++){ + linesHeight += curBlock.layout()->lineAt(curLine).height() + lineSpacing(); + if (height > 0 && linesHeight > (height-borderLineSize() * 2)) {goto loop_exit;} + resultText += curBlock.text().mid(curBlock.layout()->lineAt(curLine).textStart(), + curBlock.layout()->lineAt(curLine).textLength()); + } + } + loop_exit: return resultText; +} + +QString TextItem::getTextPart(int height, int skipHeight){ - TextPtr text = textDocument(); - text->documentLayout(); - QTextBlock curBlock = text->begin(); QString resultText = ""; + TextPtr text = textDocument(); + text->size().height(); + QTextBlock curBlock = text->begin(); + QTextCursor cursor(text.data()); + cursor.movePosition(QTextCursor::Start); if (skipHeight > 0){ - for (;curBlock != text->end(); curBlock=curBlock.next()){ - for (curLine = 0; curLine < curBlock.layout()->lineCount(); curLine++){ - linesHeight += curBlock.layout()->lineAt(curLine).height() + lineSpacing(); - if (linesHeight > (skipHeight-(/*fakeMarginSize()*2+*/borderLineSize() * 2))) {goto loop_exit;} - } - } - loop_exit:; + resultText = extractText(curBlock, skipHeight); + cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, resultText.length()); } - linesHeight = 0; + resultText = extractText(curBlock, height); + cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, resultText.length()); - for (;curBlock != text->end() || curLinelineCount(); curLine++){ - if (resultText == "") textPos= curBlock.layout()->lineAt(curLine).textStart(); - linesHeight += curBlock.layout()->lineAt(curLine).height() + lineSpacing(); - if ( (height>0) && (linesHeight>(height-(/*fakeMarginSize()*2+*/borderLineSize()*2))) ) { - linesHeight-=curBlock.layout()->lineAt(curLine).height(); - goto loop_exit1; - } - resultText+=curBlock.text().mid(curBlock.layout()->lineAt(curLine).textStart(), - curBlock.layout()->lineAt(curLine).textLength()); - } + if (allowHTML()){ + resultText = cursor.selection().toHtml(); + resultText.remove(""); + resultText.remove(""); + } else { + resultText = cursor.selection().toPlainText(); } - loop_exit1:; - resultText.chop(1); - - QScopedPointer context(new HtmlContext(m_strText)); - return context->extendTextByTags(resultText,textPos); + return resultText; } void TextItem::restoreLinksEvent() diff --git a/limereport/items/lrtextitem.h b/limereport/items/lrtextitem.h index d8f3bd4..a892202 100644 --- a/limereport/items/lrtextitem.h +++ b/limereport/items/lrtextitem.h @@ -182,7 +182,7 @@ private: QString formatDateTime(const QDateTime &value); QString formatNumber(const double value); QString formatFieldValue(); - + QString extractText(QTextBlock& curBlock, int height); TextPtr textDocument() const; private: QString m_strText; @@ -209,6 +209,7 @@ private: TextItem* m_follower; qreal m_textIndent; Qt::LayoutDirection m_textLayoutDirection; + }; }