Diffstat (limited to 'noncore/apps/opie-write/qrichtext_p.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-write/qrichtext_p.cpp | 303 |
1 files changed, 100 insertions, 203 deletions
diff --git a/noncore/apps/opie-write/qrichtext_p.cpp b/noncore/apps/opie-write/qrichtext_p.cpp index fb20730..6783e0b 100644 --- a/noncore/apps/opie-write/qrichtext_p.cpp +++ b/noncore/apps/opie-write/qrichtext_p.cpp @@ -57,28 +57,27 @@ int QTextCustomItem::minimumWidth() const { return 0; } QString QTextCustomItem::richText() const { return QString::null; } -bool QTextCustomItem::enter( QTextCursor *, QTextDocument *&doc, QTextParag *¶g, int &idx, int &ox, int &oy, bool atEnd ) +bool QTextCustomItem::enter( QTextCursor *, QTextDocument*&, QTextParagraph *&, int &, int &, int &, bool ) { - doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; Q_UNUSED( atEnd ) return TRUE; - + return TRUE; } -bool QTextCustomItem::enterAt( QTextCursor *, QTextDocument *&doc, QTextParag *¶g, int &idx, int &ox, int &oy, const QPoint & ) +bool QTextCustomItem::enterAt( QTextCursor *, QTextDocument *&, QTextParagraph *&, int &, int &, int &, const QPoint & ) { - doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE; + return TRUE; } -bool QTextCustomItem::next( QTextCursor *, QTextDocument *&doc, QTextParag *¶g, int &idx, int &ox, int &oy ) +bool QTextCustomItem::next( QTextCursor *, QTextDocument *&, QTextParagraph *&, int &, int &, int & ) { - doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE; + return TRUE; } -bool QTextCustomItem::prev( QTextCursor *, QTextDocument *&doc, QTextParag *¶g, int &idx, int &ox, int &oy ) +bool QTextCustomItem::prev( QTextCursor *, QTextDocument *&, QTextParagraph *&, int &, int &, int & ) { - doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE; + return TRUE; } -bool QTextCustomItem::down( QTextCursor *, QTextDocument *&doc, QTextParag *¶g, int &idx, int &ox, int &oy ) +bool QTextCustomItem::down( QTextCursor *, QTextDocument *&, QTextParagraph *&, int &, int &, int & ) { - doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE; + return TRUE; } -bool QTextCustomItem::up( QTextCursor *, QTextDocument *&doc, QTextParag *¶g, int &idx, int &ox, int &oy ) +bool QTextCustomItem::up( QTextCursor *, QTextDocument *&, QTextParagraph *&, int &, int &, int & ) { - doc = doc; parag = parag; idx = idx; ox = ox; oy = oy; return TRUE; + return TRUE; } @@ -90,6 +89,6 @@ void QTextTableCell::invalidate() { cached_width = -1; cached_sizehint = -1; } void QTextTable::invalidate() { cachewidth = -1; } -QTextParagData::~QTextParagData() {} -void QTextParagData::join( QTextParagData * ) {} +QTextParagraphData::~QTextParagraphData() {} +void QTextParagraphData::join( QTextParagraphData * ) {} QTextFormatter::~QTextFormatter() {} @@ -101,13 +100,14 @@ void QTextFormatter::setWrapAtColumn( int c ) { wrapColumn = c; } int QTextCursor::x() const { - QTextStringChar *c = string->at( idx ); + QTextStringChar *c = para->at( idx ); int curx = c->x; if ( !c->rightToLeft && c->c.isSpace() && idx > 0 && - ( string->alignment() & Qt3::AlignJustify ) == Qt3::AlignJustify ) - curx = string->at( idx - 1 )->x + string->string()->width( idx - 1 ); + !c->lineStart && + ( para->alignment() & Qt3::AlignJustify ) == Qt3::AlignJustify ) + curx = para->at( idx - 1 )->x + para->string()->width( idx - 1 ); if ( c->rightToLeft ) - curx += string->string()->width( idx ); + curx += para->string()->width( idx ); return curx; } @@ -116,6 +116,33 @@ int QTextCursor::y() const { int dummy, line; - string->lineStartOfChar( idx, &dummy, &line ); - return string->lineY( line ); + para->lineStartOfChar( idx, &dummy, &line ); + return para->lineY( line ); +} + +int QTextCursor::globalX() const { return totalOffsetX() + para->rect().x() + x(); } +int QTextCursor::globalY() const { return totalOffsetY() + para->rect().y() + y(); } + +QTextDocument *QTextCursor::document() const +{ + return para ? para->document() : 0; +} + +void QTextCursor::gotoPosition( QTextParagraph* p, int index ) +{ + if ( para && p != para ) { + while ( para->document() != p->document() && !indices.isEmpty() ) + pop(); + Q_ASSERT( indices.isEmpty() || para->document() == p->document() ); + } + para = p; + if ( index < 0 || index >= para->length() ) { +#if defined(QT_CHECK_RANGE) + qWarning( "QTextCursor::gotoParagraph Index: %d out of range", index ); +#endif + index = index < 0 ? 0 : para->length() - 1; + } + + tmpIndex = -1; + idx = index; } @@ -128,16 +155,16 @@ bool QTextDocument::hasSelection( int id, bool visible ) const } -void QTextDocument::setSelectionStart( int id, QTextCursor *cursor ) +void QTextDocument::setSelectionStart( int id, const QTextCursor &cursor ) { QTextDocumentSelection sel; - sel.startCursor = *cursor; - sel.endCursor = *cursor; + sel.startCursor = cursor; + sel.endCursor = cursor; sel.swapped = FALSE; selections[ id ] = sel; } -QTextParag *QTextDocument::paragAt( int i ) const +QTextParagraph *QTextDocument::paragAt( int i ) const { - QTextParag* p = curParag; + QTextParagraph* p = curParag; if ( !p || p->paragId() > i ) p = fParag; @@ -154,6 +181,5 @@ QTextFormat::~QTextFormat() QTextFormat::QTextFormat() - : fm( QFontMetrics( fn ) ), linkColor( TRUE ), logicalFontSize( 3 ), stdSize( qApp->font().pointSize() ), - different( NoFlags ) + : fm( QFontMetrics( fn ) ), linkColor( TRUE ), logicalFontSize( 3 ), stdSize( qApp->font().pointSize() ) { ref = 0; @@ -164,5 +190,5 @@ QTextFormat::QTextFormat() usePixelSizes = TRUE; } - + missp = FALSE; ha = AlignNormal; @@ -171,6 +197,5 @@ QTextFormat::QTextFormat() QTextFormat::QTextFormat( const QStyleSheetItem *style ) - : fm( QFontMetrics( fn ) ), linkColor( TRUE ), logicalFontSize( 3 ), stdSize( qApp->font().pointSize() ), - different( NoFlags ) + : fm( QFontMetrics( fn ) ), linkColor( TRUE ), logicalFontSize( 3 ), stdSize( qApp->font().pointSize() ) { ref = 0; @@ -182,5 +207,4 @@ QTextFormat::QTextFormat( const QStyleSheetItem *style ) } - this->style = style->name(); missp = FALSE; ha = AlignNormal; @@ -191,4 +215,5 @@ QTextFormat::QTextFormat( const QStyleSheetItem *style ) style->fontItalic() ); fn.setUnderline( style->fontUnderline() ); + fn.setStrikeOut( style->fontStrikeOut() ); col = style->color(); fm = QFontMetrics( fn ); @@ -203,10 +228,9 @@ QTextFormat::QTextFormat( const QStyleSheetItem *style ) generateKey(); addRef(); - updateStyleFlags(); } QTextFormat::QTextFormat( const QFont &f, const QColor &c, QTextFormatCollection *parent ) : fn( f ), col( c ), fm( QFontMetrics( f ) ), linkColor( TRUE ), - logicalFontSize( 3 ), stdSize( f.pointSize() ), different( NoFlags ) + logicalFontSize( 3 ), stdSize( f.pointSize() ) { ref = 0; @@ -227,5 +251,4 @@ QTextFormat::QTextFormat( const QFont &f, const QColor &c, QTextFormatCollection generateKey(); addRef(); - updateStyleFlags(); } @@ -250,6 +273,4 @@ QTextFormat::QTextFormat( const QTextFormat &f ) k = f.k; linkColor = f.linkColor; - style = f.style; - different = f.different; addRef(); } @@ -275,6 +296,4 @@ QTextFormat& QTextFormat::operator=( const QTextFormat &f ) k = f.k; linkColor = f.linkColor; - style = f.style; - different = f.different; addRef(); return *this; @@ -291,5 +310,4 @@ void QTextFormat::update() memset( widths, 0, 256 ); generateKey(); - updateStyleFlags(); } @@ -373,50 +391,4 @@ QString QTextFormat::getKey( const QFont &fn, const QColor &col, bool misspelled } -void QTextFormat::updateStyle() -{ - if ( !collection || !collection->styleSheet() ) - return; - QStyleSheetItem *item = collection->styleSheet()->item( style ); - if ( !item ) - return; - if ( !( different & Color ) && item->color().isValid() ) - col = item->color(); - if ( !( different & Size ) && item->fontSize() != -1 ) - fn.setPointSize( item->fontSize() ); - if ( !( different & Family ) && !item->fontFamily().isEmpty() ) - fn.setFamily( item->fontFamily() ); - if ( !( different & Bold ) && item->fontWeight() != -1 ) - fn.setWeight( item->fontWeight() ); - if ( !( different & Italic ) && item->definesFontItalic() ) - fn.setItalic( item->fontItalic() ); - if ( !( different & Underline ) && item->definesFontUnderline() ) - fn.setUnderline( item->fontUnderline() ); - generateKey(); - update(); - -} - -void QTextFormat::updateStyleFlags() -{ - different = NoFlags; - if ( !collection || !collection->styleSheet() ) - return; - QStyleSheetItem *item = collection->styleSheet()->item( style ); - if ( !item ) - return; - if ( item->color() != col ) - different |= Color; - if ( item->fontSize() != fn.pointSize() ) - different |= Size; - if ( item->fontFamily() != fn.family() ) - different |= Family; - if ( item->fontItalic() != fn.italic() ) - different |= Italic; - if ( item->fontUnderline() != fn.underline() ) - different |= Underline; - if ( item->fontWeight() != fn.weight() ) - different |= Bold; -} - QString QTextString::toString( const QMemArray<QTextStringChar> &data ) { @@ -444,7 +416,7 @@ QString QTextString::toString() const } -void QTextParag::setSelection( int id, int start, int end ) +void QTextParagraph::setSelection( int id, int start, int end ) { - QMap<int, QTextParagSelection>::ConstIterator it = selections().find( id ); + QMap<int, QTextParagraphSelection>::ConstIterator it = selections().find( id ); if ( it != mSelections->end() ) { if ( start == ( *it ).start && end == ( *it ).end ) @@ -452,5 +424,5 @@ void QTextParag::setSelection( int id, int start, int end ) } - QTextParagSelection sel; + QTextParagraphSelection sel; sel.start = start; sel.end = end; @@ -459,5 +431,5 @@ void QTextParag::setSelection( int id, int start, int end ) } -void QTextParag::removeSelection( int id ) +void QTextParagraph::removeSelection( int id ) { if ( !hasSelection( id ) ) @@ -468,9 +440,9 @@ void QTextParag::removeSelection( int id ) } -int QTextParag::selectionStart( int id ) const +int QTextParagraph::selectionStart( int id ) const { if ( !mSelections ) return -1; - QMap<int, QTextParagSelection>::ConstIterator it = mSelections->find( id ); + QMap<int, QTextParagraphSelection>::ConstIterator it = mSelections->find( id ); if ( it == mSelections->end() ) return -1; @@ -478,9 +450,9 @@ int QTextParag::selectionStart( int id ) const } -int QTextParag::selectionEnd( int id ) const +int QTextParagraph::selectionEnd( int id ) const { if ( !mSelections ) return -1; - QMap<int, QTextParagSelection>::ConstIterator it = mSelections->find( id ); + QMap<int, QTextParagraphSelection>::ConstIterator it = mSelections->find( id ); if ( it == mSelections->end() ) return -1; @@ -488,19 +460,14 @@ int QTextParag::selectionEnd( int id ) const } -bool QTextParag::hasSelection( int id ) const +bool QTextParagraph::hasSelection( int id ) const { - if ( !mSelections ) - return FALSE; - QMap<int, QTextParagSelection>::ConstIterator it = mSelections->find( id ); - if ( it == mSelections->end() ) - return FALSE; - return ( *it ).start != ( *it ).end || length() == 1; + return mSelections ? mSelections->contains( id ) : FALSE; } -bool QTextParag::fullSelected( int id ) const +bool QTextParagraph::fullSelected( int id ) const { if ( !mSelections ) return FALSE; - QMap<int, QTextParagSelection>::ConstIterator it = mSelections->find( id ); + QMap<int, QTextParagraphSelection>::ConstIterator it = mSelections->find( id ); if ( it == mSelections->end() ) return FALSE; @@ -508,15 +475,15 @@ bool QTextParag::fullSelected( int id ) const } -int QTextParag::lineY( int l ) const +int QTextParagraph::lineY( int l ) const { if ( l > (int)lineStarts.count() - 1 ) { - qWarning( "QTextParag::lineY: line %d out of range!", l ); + qWarning( "QTextParagraph::lineY: line %d out of range!", l ); return 0; } if ( !isValid() ) - ( (QTextParag*)this )->format(); + ( (QTextParagraph*)this )->format(); - QMap<int, QTextParagLineStart*>::ConstIterator it = lineStarts.begin(); + QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while ( l-- > 0 ) ++it; @@ -524,15 +491,15 @@ int QTextParag::lineY( int l ) const } -int QTextParag::lineBaseLine( int l ) const +int QTextParagraph::lineBaseLine( int l ) const { if ( l > (int)lineStarts.count() - 1 ) { - qWarning( "QTextParag::lineBaseLine: line %d out of range!", l ); + qWarning( "QTextParagraph::lineBaseLine: line %d out of range!", l ); return 10; } if ( !isValid() ) - ( (QTextParag*)this )->format(); + ( (QTextParagraph*)this )->format(); - QMap<int, QTextParagLineStart*>::ConstIterator it = lineStarts.begin(); + QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while ( l-- > 0 ) ++it; @@ -540,15 +507,15 @@ int QTextParag::lineBaseLine( int l ) const } -int QTextParag::lineHeight( int l ) const +int QTextParagraph::lineHeight( int l ) const { if ( l > (int)lineStarts.count() - 1 ) { - qWarning( "QTextParag::lineHeight: line %d out of range!", l ); + qWarning( "QTextParagraph::lineHeight: line %d out of range!", l ); return 15; } if ( !isValid() ) - ( (QTextParag*)this )->format(); + ( (QTextParagraph*)this )->format(); - QMap<int, QTextParagLineStart*>::ConstIterator it = lineStarts.begin(); + QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while ( l-- > 0 ) ++it; @@ -556,8 +523,8 @@ int QTextParag::lineHeight( int l ) const } -void QTextParag::lineInfo( int l, int &y, int &h, int &bl ) const +void QTextParagraph::lineInfo( int l, int &y, int &h, int &bl ) const { if ( l > (int)lineStarts.count() - 1 ) { - qWarning( "QTextParag::lineInfo: line %d out of range!", l ); + qWarning( "QTextParagraph::lineInfo: line %d out of range!", l ); qDebug( "%d %d", (int)lineStarts.count() - 1, l ); y = 0; @@ -568,7 +535,7 @@ void QTextParag::lineInfo( int l, int &y, int &h, int &bl ) const if ( !isValid() ) - ( (QTextParag*)this )->format(); + ( (QTextParagraph*)this )->format(); - QMap<int, QTextParagLineStart*>::ConstIterator it = lineStarts.begin(); + QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while ( l-- > 0 ) ++it; @@ -578,78 +545,14 @@ void QTextParag::lineInfo( int l, int &y, int &h, int &bl ) const } -int QTextParag::alignment() const -{ - if ( align != -1 ) - return align; - QStyleSheetItem *item = style(); - if ( !item ) - return Qt3::AlignAuto; - if ( mStyleSheetItemsVec ) { - for ( int i = 0; i < (int)mStyleSheetItemsVec->size(); ++i ) { - item = (*mStyleSheetItemsVec)[ i ]; - if ( item->alignment() != QStyleSheetItem::Undefined ) - return item->alignment(); - } - } - return Qt3::AlignAuto; -} -QPtrVector<QStyleSheetItem> QTextParag::styleSheetItems() const +void QTextParagraph::setAlignment( int a ) { - QPtrVector<QStyleSheetItem> vec; - if ( mStyleSheetItemsVec ) { - vec.resize( mStyleSheetItemsVec->size() ); - for ( int i = 0; i < (int)vec.size(); ++i ) - vec.insert( i, (*mStyleSheetItemsVec)[ i ] ); - } - return vec; -} - -QStyleSheetItem *QTextParag::style() const -{ - if ( !mStyleSheetItemsVec || mStyleSheetItemsVec->size() == 0 ) - return 0; - return (*mStyleSheetItemsVec)[ mStyleSheetItemsVec->size() - 1 ]; -} - -int QTextParag::numberOfSubParagraph() const -{ - if ( list_val != -1 ) - return list_val; - if ( numSubParag != -1 ) - return numSubParag; - int n = 0; - QTextParag *p = (QTextParag*)this; - while ( p && ( styleSheetItemsVec().size() >= p->styleSheetItemsVec().size() && - styleSheetItemsVec()[ (int)p->styleSheetItemsVec().size() - 1 ] == p->style() || - p->styleSheetItemsVec().size() >= styleSheetItemsVec().size() && - p->styleSheetItemsVec()[ (int)styleSheetItemsVec().size() - 1 ] == style() ) ) { - if ( p->style() == style() && listStyle() != p->listStyle() - && p->styleSheetItemsVec().size() == styleSheetItemsVec().size() ) - break; - if ( p->style()->displayMode() == QStyleSheetItem::DisplayListItem - && p->style() != style() || styleSheetItemsVec().size() == p->styleSheetItemsVec().size() ) - ++n; - p = p->prev(); - } - ( (QTextParag*)this )->numSubParag = n; - return n; -} - -void QTextParag::setFormat( QTextFormat *fm ) -{ - bool doUpdate = FALSE; - if (defFormat && (defFormat != formatCollection()->defaultFormat())) - doUpdate = TRUE; - defFormat = formatCollection()->format( fm ); - if ( !doUpdate ) + if ( a == (int)align ) return; - for ( int i = 0; i < length(); ++i ) { - if ( at( i )->format()->styleName() == defFormat->styleName() ) - at( i )->format()->updateStyle(); - } + align = a; + invalidate( 0 ); } -QTextFormatter *QTextParag::formatter() const +QTextFormatter *QTextParagraph::formatter() const { if ( hasdoc ) @@ -657,8 +560,8 @@ QTextFormatter *QTextParag::formatter() const if ( pseudoDocument()->pFormatter ) return pseudoDocument()->pFormatter; - return ( ( (QTextParag*)this )->pseudoDocument()->pFormatter = new QTextFormatterBreakWords ); + return ( ( (QTextParagraph*)this )->pseudoDocument()->pFormatter = new QTextFormatterBreakWords ); } -void QTextParag::setTabArray( int *a ) +void QTextParagraph::setTabArray( int *a ) { delete [] tArray; @@ -666,5 +569,5 @@ void QTextParag::setTabArray( int *a ) } -void QTextParag::setTabStops( int tw ) +void QTextParagraph::setTabStops( int tw ) { if ( hasdoc ) @@ -674,22 +577,16 @@ void QTextParag::setTabStops( int tw ) } -QMap<int, QTextParagSelection> &QTextParag::selections() const +QMap<int, QTextParagraphSelection> &QTextParagraph::selections() const { if ( !mSelections ) - ((QTextParag *)this)->mSelections = new QMap<int, QTextParagSelection>; + ((QTextParagraph *)this)->mSelections = new QMap<int, QTextParagraphSelection>; return *mSelections; } -QPtrVector<QStyleSheetItem> &QTextParag::styleSheetItemsVec() const -{ - if ( !mStyleSheetItemsVec ) - ((QTextParag *)this)->mStyleSheetItemsVec = new QPtrVector<QStyleSheetItem>; - return *mStyleSheetItemsVec; -} -QPtrList<QTextCustomItem> &QTextParag::floatingItems() const +QPtrList<QTextCustomItem> &QTextParagraph::floatingItems() const { if ( !mFloatingItems ) - ((QTextParag *)this)->mFloatingItems = new QPtrList<QTextCustomItem>; + ((QTextParagraph *)this)->mFloatingItems = new QPtrList<QTextCustomItem>; return *mFloatingItems; } @@ -703,4 +600,4 @@ QTextStringChar::~QTextStringChar() } -QTextParagPseudoDocument::QTextParagPseudoDocument():pFormatter(0),commandHistory(0), minw(0),wused(0){} -QTextParagPseudoDocument::~QTextParagPseudoDocument(){ delete pFormatter; delete commandHistory; } +QTextParagraphPseudoDocument::QTextParagraphPseudoDocument():pFormatter(0),commandHistory(0), minw(0),wused(0){} +QTextParagraphPseudoDocument::~QTextParagraphPseudoDocument(){ delete pFormatter; delete commandHistory; } |