void tst_QTextFormat::getSetTabs() { class Comparator { public: Comparator(const QList<QTextOption::Tab> &tabs, const QList<QTextOption::Tab> &tabs2) { QCOMPARE(tabs.count(), tabs2.count()); for(int i=0; i < tabs.count(); i++) { QTextOption::Tab t1 = tabs[i]; QTextOption::Tab t2 = tabs2[i]; QCOMPARE(t1.position, t2.position); QCOMPARE(t1.type, t2.type); QCOMPARE(t1.delimiter, t2.delimiter); } } }; QList<QTextOption::Tab> tabs; QTextBlockFormat format; format.setTabPositions(tabs); Comparator c1(tabs, format.tabPositions()); QTextOption::Tab tab1; tab1.position = 1234; tabs.append(tab1); format.setTabPositions(tabs); Comparator c2(tabs, format.tabPositions()); QTextOption::Tab tab2(3456, QTextOption::RightTab, QChar('x')); tabs.append(tab2); format.setTabPositions(tabs); Comparator c3(tabs, format.tabPositions()); }
void tst_QTextFormat::testTabsUsed() { QTextDocument doc; QTextCursor cursor(&doc); QList<QTextOption::Tab> tabs; QTextBlockFormat format; QTextOption::Tab tab; tab.position = 100; tabs.append(tab); format.setTabPositions(tabs); cursor.mergeBlockFormat(format); cursor.insertText("foo\tbar"); //doc.setPageSize(QSizeF(200, 200)); doc.documentLayout()->pageCount(); // force layout; QTextBlock block = doc.begin(); QTextLayout *layout = block.layout(); QVERIFY(layout); QCOMPARE(layout->lineCount(), 1); QTextLine line = layout->lineAt(0); QCOMPARE(line.cursorToX(4), 100.); QTextOption option = layout->textOption(); QCOMPARE(option.tabs().count(), tabs.count()); }
void KDReports::TextDocumentData::updatePercentSizes( const QSizeF& size ) { QTextCursor c( m_document ); c.beginEditBlock(); // TODO only if we inserted resizable images do { c.movePosition( QTextCursor::NextCharacter ); QTextCharFormat format = c.charFormat(); if ( format.hasProperty( ResizableImageProperty ) ) { Q_ASSERT( format.isImageFormat() ); QTextImageFormat imageFormat = format.toImageFormat(); updatePercentSize( imageFormat, size ); //qDebug() << "updatePercentSizes: setting image to " << imageFormat.width() << "," << imageFormat.height(); c.movePosition( QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor ); c.setCharFormat( imageFormat ); c.movePosition( QTextCursor::NextCharacter ); } } while ( !c.atEnd() ); if (m_usesTabPositions) { QTextFrameFormat rootFrameFormat = m_document->rootFrame()->frameFormat(); const int rootFrameMargins = rootFrameFormat.leftMargin() + rootFrameFormat.rightMargin(); QTextBlock block = m_document->firstBlock(); do { QTextBlockFormat blockFormat = block.blockFormat(); QList<QTextOption::Tab> tabs = blockFormat.tabPositions(); //qDebug() << "Looking at block" << block.blockNumber() << "tabs:" << tabs.count(); if (!tabs.isEmpty()) { for (int i = 0; i < tabs.count(); ++i) { QTextOption::Tab& tab = tabs[i]; if ( tab.delimiter == QLatin1Char('P') /* means Page -- see rightAlignedTab*/) { if ( tab.type == QTextOption::RightTab ) { //qDebug() << "Adjusted RightTab from" << tab.position << "to" << size.width(); tab.position = size.width() - rootFrameMargins; } else if ( tab.type == QTextOption::CenterTab ) { tab.position = ( size.width() - rootFrameMargins ) / 2; } } } blockFormat.setTabPositions( tabs ); //qDebug() << "Adjusted tabs:" << tabs; c.setPosition( block.position() ); c.setBlockFormat( blockFormat ); } block = block.next(); } while ( block.isValid() ); } c.endEditBlock(); }