Commit b9a24136 authored by Pino Toscano's avatar Pino Toscano

remove the evil hack of the separator by using a custom role for the page number

svn path=/trunk/playground/graphics/okular/; revision=616706
parent b7328d72
......@@ -10,7 +10,9 @@
// qt/kde includes
#include <qapplication.h>
#include <QItemDelegate>
#include <QModelIndex>
#include <QTextDocument>
#include <qvariant.h>
// 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 );
......
......@@ -12,17 +12,24 @@
#include <QItemDelegate>
#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
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment