Example #1
0
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());
}
Example #2
0
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();
}