diff --git a/ui/pageitemdelegate.cpp b/ui/pageitemdelegate.cpp index 17c0e0d02..a82938f21 100644 --- a/ui/pageitemdelegate.cpp +++ b/ui/pageitemdelegate.cpp @@ -10,7 +10,9 @@ // qt/kde includes #include #include +#include #include +#include // local includes #include "pageitemdelegate.h" @@ -18,25 +20,40 @@ #define PAGEITEMDELEGATE_INTERNALMARGIN 3 +class PageItemDelegate::Private +{ + public: + Private() + {} + + QModelIndex index; +}; + PageItemDelegate::PageItemDelegate( QObject * parent ) - : QItemDelegate( parent ) + : QItemDelegate( parent ), d( new Private ) +{ +} + +PageItemDelegate::~PageItemDelegate() { + delete d; +} + +void PageItemDelegate::paint( QPainter *painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const +{ + d->index = index; + QItemDelegate::paint( painter, option, index ); } void PageItemDelegate::drawDisplay( QPainter *painter, const QStyleOptionViewItem & option, const QRect & rect, const QString & text ) const { - if ( text.indexOf( PAGEITEMDELEGATE_SEPARATOR ) == -1 ) + QVariant pageVariant = d->index.data( PageRole ); + if ( !pageVariant.canConvert( QVariant::String ) || !Okular::Settings::tocPageColumn() ) { QItemDelegate::drawDisplay( painter, option, rect, text ); return; } - QString realText = text.section( PAGEITEMDELEGATE_SEPARATOR, 1 ); - if ( !Okular::Settings::tocPageColumn() ) - { - QItemDelegate::drawDisplay( painter, option, rect, realText ); - return; - } - QString page = text.section( PAGEITEMDELEGATE_SEPARATOR, 0, 0 ); + QString page = pageVariant.toString(); QTextDocument document; document.setPlainText( page ); document.setDefaultFont( option.font ); @@ -50,7 +67,7 @@ void PageItemDelegate::drawDisplay( QPainter *painter, const QStyleOptionViewIte newRect.translate( pageRectWidth + PAGEITEMDELEGATE_INTERNALMARGIN, 0 ); else pageRect.translate( newRect.width() + PAGEITEMDELEGATE_INTERNALMARGIN - 2 * margindelta, 0 ); - QItemDelegate::drawDisplay( painter, option, newRect, realText ); + QItemDelegate::drawDisplay( painter, option, newRect, text ); QStyleOptionViewItemV2 newoption( option ); newoption.displayAlignment = ( option.displayAlignment & ~Qt::AlignHorizontal_Mask ) | Qt::AlignRight; QItemDelegate::drawDisplay( painter, newoption, pageRect, page ); diff --git a/ui/pageitemdelegate.h b/ui/pageitemdelegate.h index 30a64ce7a..9930982fc 100644 --- a/ui/pageitemdelegate.h +++ b/ui/pageitemdelegate.h @@ -12,17 +12,24 @@ #include -#define PAGEITEMDELEGATE_SEPARATOR "@@@@@@@@@@" - class PageItemDelegate : public QItemDelegate { Q_OBJECT public: PageItemDelegate( QObject * parent = 0 ); + virtual ~PageItemDelegate(); + + static const int PageRole = 0x000f0001; + + virtual void paint( QPainter *painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const; protected: virtual void drawDisplay( QPainter *painter, const QStyleOptionViewItem & option, const QRect & rect, const QString & text ) const; + + private: + class Private; + Private * const d; }; #endif diff --git a/ui/toc.cpp b/ui/toc.cpp index 2603a1549..255356f86 100644 --- a/ui/toc.cpp +++ b/ui/toc.cpp @@ -56,10 +56,9 @@ class TOCItem : public QTreeWidgetItem m_viewport = Okular::DocumentViewport( viewport ); } - QString text = e.tagName(); if ( m_viewport.isValid() ) - text.prepend( QString::number( m_viewport.pageNumber + 1 ) + PAGEITEMDELEGATE_SEPARATOR ); - setText( 0, text ); + setData( 0, PageItemDelegate::PageRole, QString::number( m_viewport.pageNumber + 1 ) ); + setText( 0, e.tagName() ); } const QDomElement & element() const