QwtRichTextDocument( const QString &text, int flags, const QFont &font ) { setUndoRedoEnabled( false ); setDefaultFont( font ); setHtml( text ); // make sure we have a document layout ( void )documentLayout(); QTextOption option = defaultTextOption(); if ( flags & Qt::TextWordWrap ) option.setWrapMode( QTextOption::WordWrap ); else option.setWrapMode( QTextOption::NoWrap ); option.setAlignment( ( Qt::Alignment ) flags ); setDefaultTextOption( option ); QTextFrame *root = rootFrame(); QTextFrameFormat fm = root->frameFormat(); fm.setBorder( 0 ); fm.setMargin( 0 ); fm.setPadding( 0 ); fm.setBottomMargin( 0 ); fm.setLeftMargin( 0 ); root->setFrameFormat( fm ); adjustSize(); }
void TextDocument::drawBackground(QPainter* painter, const QRect& bounds) { if (d.highlights.isEmpty() && d.lowlight == -1) return; const int margin = qCeil(documentMargin()); const QAbstractTextDocumentLayout* layout = documentLayout(); static QPointer<TextLowlight> lowlightFrame = 0; if (!lowlightFrame) lowlightFrame = new TextLowlight(static_cast<QWidget*>(painter->device())); static QPointer<TextHighlight> highlightFrame = 0; if (!highlightFrame) highlightFrame = new TextHighlight(static_cast<QWidget*>(painter->device())); if (d.lowlight != -1) { const QAbstractTextDocumentLayout* layout = documentLayout(); const int margin = qCeil(documentMargin()); const QTextBlock to = findBlockByNumber(d.lowlight); if (to.isValid()) { QRect br = layout->blockBoundingRect(to).toAlignedRect(); br.setTop(0); if (bounds.intersects(br)) { br.adjust(-margin - 1, 0, margin + 1, 2); painter->translate(br.topLeft()); lowlightFrame->setGeometry(br); lowlightFrame->render(painter); painter->translate(-br.topLeft()); } } } foreach (int highlight, d.highlights) { QTextBlock block = findBlockByNumber(highlight); if (block.isValid()) { QRect br = layout->blockBoundingRect(block).toAlignedRect(); if (bounds.intersects(br)) { br.adjust(-margin - 1, 0, margin + 1, 2); painter->translate(br.topLeft()); highlightFrame->setGeometry(br); highlightFrame->render(painter); painter->translate(-br.topLeft()); } } } }
void TextDocument::updateBlock(int number) { if (d.visible) { QTextBlock block = findBlockByNumber(number); if (block.isValid()) QMetaObject::invokeMethod(documentLayout(), "updateBlock", Q_ARG(QTextBlock, block)); } }
QSize KDTextDocument::sizeForWidth(int w) { Q_UNUSED( w ); setPageSize(QSize(0, 100000)); return documentLayout()->documentSize().toSize(); }
QString TextDocument::tooltip(const QPoint& point) const { const int pos = documentLayout()->hitTest(point, Qt::FuzzyHit); const QTextBlock block = findBlock(pos); TextBlockMessageData* blockData = static_cast<TextBlockMessageData*>(block.userData()); if (blockData) return formatEvents(blockData->data.getEvents()); return QString(); }
void TextDocument::drawForeground(QPainter* painter, const QRect& bounds) { const int num = blockCount() - d.uc; if (num > 0) { const QPen oldPen = painter->pen(); const QBrush oldBrush = painter->brush(); painter->setBrush(Qt::NoBrush); painter->setPen(QPen(QPalette().color(QPalette::Mid), 1, Qt::DashLine)); QTextBlock block = findBlockByNumber(num); if (block.isValid()) { QRect br = documentLayout()->blockBoundingRect(block).toAlignedRect(); if (bounds.intersects(br)) { QLine line(br.topLeft(), br.topRight()); line.translate(0, -2); painter->drawLine(line); } } painter->setPen(oldPen); painter->setBrush(oldBrush); } }