#include <qxtitemdelegate_p.h>
Public Types | |
typedef QPointer< QWidget > | QWidgetPointer |
Public Member Functions | |
QxtItemDelegatePrivate () | |
void | paintButton (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, const QTreeView *view) const |
void | paintMenu (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, const QTreeView *view) const |
void | paintProgress (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const |
void | setCurrentEditor (QWidget *editor, const QModelIndex &index) const |
Public Attributes | |
bool | textVisible |
QString | progressFormat |
Qt::TextElideMode | elide |
Qxt::DecorationStyle | style |
QWidgetPointer | currentEditor |
QPersistentModelIndex | currentEdited |
QMultiHash< QWidget *, QPersistentModelIndex > | updatedItems |
QBasicTimer | updateTimer |
Protected Member Functions | |
void | timerEvent (QTimerEvent *event) |
Friends | |
class | QxtItemDelegate |
Definition at line 38 of file qxtitemdelegate_p.h.
typedef QPointer<QWidget> QxtItemDelegatePrivate::QWidgetPointer |
Definition at line 55 of file qxtitemdelegate_p.h.
QxtItemDelegatePrivate::QxtItemDelegatePrivate | ( | ) |
Definition at line 34 of file qxtitemdelegate.cpp.
: textVisible(true), progressFormat("%1%"), elide(Qt::ElideMiddle), style(Qxt::NoDecoration) { }
void QxtItemDelegatePrivate::paintButton | ( | QPainter * | painter, |
const QStyleOptionViewItem & | option, | ||
const QModelIndex & | index, | ||
const QTreeView * | view | ||
) | const |
Definition at line 42 of file qxtitemdelegate.cpp.
References elide.
{ // draw the button QStyleOptionButton buttonOption; buttonOption.state = option.state; #ifdef Q_WS_MAC buttonOption.state |= QStyle::State_Raised; #endif buttonOption.state &= ~QStyle::State_HasFocus; if (view->isExpanded(index)) buttonOption.state |= QStyle::State_Sunken; buttonOption.rect = option.rect; buttonOption.palette = option.palette; buttonOption.features = QStyleOptionButton::None; view->style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter, view); // draw the branch indicator static const int i = 9; const QRect& r = option.rect; if (index.model()->hasChildren(index)) { QStyleOption branchOption; branchOption.initFrom(view); if (branchOption.direction == Qt::LeftToRight) branchOption.rect = QRect(r.left() + i / 2, r.top() + (r.height() - i) / 2, i, i); else branchOption.rect = QRect(r.right() - i / 2 - i, r.top() + (r.height() - i) / 2, i, i); branchOption.palette = option.palette; branchOption.state = QStyle::State_Children; if (view->isExpanded(index)) branchOption.state |= QStyle::State_Open; view->style()->drawPrimitive(QStyle::PE_IndicatorBranch, &branchOption, painter, view); } // draw the text QRect textrect = QRect(r.left() + i * 2, r.top(), r.width() - ((5 * i) / 2), r.height()); #if QT_VERSION < 0x040200 QString text = QItemDelegate::elidedText(option.fontMetrics, textrect.width(), elide, index.data().toString()); #else // QT_VERSION >= 0x040200 QString text = option.fontMetrics.elidedText(index.data().toString(), elide, textrect.width()); #endif // QT_VERSION view->style()->drawItemText(painter, textrect, Qt::AlignCenter, option.palette, view->isEnabled(), text); }
void QxtItemDelegatePrivate::paintMenu | ( | QPainter * | painter, |
const QStyleOptionViewItem & | option, | ||
const QModelIndex & | index, | ||
const QTreeView * | view | ||
) | const |
Definition at line 86 of file qxtitemdelegate.cpp.
{ // draw the menu bar item QStyleOptionMenuItem menuOption; menuOption.palette = view->palette(); menuOption.fontMetrics = view->fontMetrics(); menuOption.state = QStyle::State_None; // QModelIndex::flags() was introduced in 4.2 // => therefore "index.model()->flags(index)" if (view->isEnabled() && index.model()->flags(index) & Qt::ItemIsEnabled) menuOption.state |= QStyle::State_Enabled; else menuOption.palette.setCurrentColorGroup(QPalette::Disabled); menuOption.state |= QStyle::State_Selected; menuOption.state |= QStyle::State_Sunken; menuOption.state |= QStyle::State_HasFocus; menuOption.rect = option.rect; menuOption.text = index.data().toString(); menuOption.icon = QIcon(index.data(Qt::DecorationRole).value<QPixmap>()); view->style()->drawControl(QStyle::CE_MenuBarItem, &menuOption, painter, view); // draw the an arrow as a branch indicator if (index.model()->hasChildren(index)) { QStyle::PrimitiveElement arrow; if (view->isExpanded(index)) arrow = QStyle::PE_IndicatorArrowUp; else arrow = QStyle::PE_IndicatorArrowDown; static const int i = 9; const QRect& r = option.rect; menuOption.rect = QRect(r.left() + i / 2, r.top() + (r.height() - i) / 2, i, i); view->style()->drawPrimitive(arrow, &menuOption, painter, view); } }
void QxtItemDelegatePrivate::paintProgress | ( | QPainter * | painter, |
const QStyleOptionViewItem & | option, | ||
const QModelIndex & | index | ||
) | const |
Definition at line 122 of file qxtitemdelegate.cpp.
References QuadProgPP::max(), min, progressFormat, QxtItemDelegate::ProgressMaximumRole, QxtItemDelegate::ProgressMinimumRole, QxtItemDelegate::ProgressValueRole, style, textVisible, updatedItems, and updateTimer.
{ QVariant min = index.data(QxtItemDelegate::ProgressMinimumRole); QVariant max = index.data(QxtItemDelegate::ProgressMaximumRole); QStyleOptionProgressBar opt; opt.minimum = (min.isValid() && min.canConvert(QVariant::Int)) ? min.toInt() : 0; opt.maximum = (max.isValid() && max.canConvert(QVariant::Int)) ? max.toInt() : 100; opt.progress = index.data(QxtItemDelegate::ProgressValueRole).toInt(); opt.rect = option.rect; opt.textVisible = textVisible; opt.text = progressFormat.arg(opt.progress); QApplication::style()->drawControl(QStyle::CE_ProgressBar, &opt, painter, 0); QWidget* viewport = dynamic_cast<QWidget*>(painter->device()); if (viewport) { if (opt.minimum == 0 && opt.maximum == 0) { if (!updatedItems.contains(viewport)) connect(viewport, SIGNAL(destroyed()), this, SLOT(viewDestroyed())); updatedItems.replace(viewport, index); } else { updatedItems.remove(viewport, index); if (!updatedItems.contains(viewport)) disconnect(viewport, SIGNAL(destroyed()), this, SLOT(viewDestroyed())); } } if (updatedItems.isEmpty()) { if (updateTimer.isActive()) updateTimer.stop(); } else { if (!updateTimer.isActive()) updateTimer.start(1000 / 25, const_cast<QxtItemDelegatePrivate*>(this)); } }
void QxtItemDelegatePrivate::setCurrentEditor | ( | QWidget * | editor, |
const QModelIndex & | index | ||
) | const |
Definition at line 165 of file qxtitemdelegate.cpp.
References currentEdited, and currentEditor.
{ currentEditor = editor; currentEdited = index; }
void QxtItemDelegatePrivate::timerEvent | ( | QTimerEvent * | event ) | [protected] |
Definition at line 171 of file qxtitemdelegate.cpp.
References updatedItems, and updateTimer.
{ if (event->timerId() == updateTimer.timerId()) { QMutableHashIterator<QWidget*, QPersistentModelIndex> it(updatedItems); while (it.hasNext()) { it.next(); if (!it.key()) { it.remove(); continue; } // try to update the specific view item instead of the whole view if possible if (QAbstractItemView* view = qobject_cast<QAbstractItemView*>(it.key()->parentWidget())) view->update(it.value()); else it.key()->update(); } } }
friend class QxtItemDelegate [friend] |
Definition at line 43 of file qxtitemdelegate_p.h.
QPersistentModelIndex QxtItemDelegatePrivate::currentEdited [mutable] |
Definition at line 57 of file qxtitemdelegate_p.h.
Referenced by setCurrentEditor().
Definition at line 56 of file qxtitemdelegate_p.h.
Referenced by setCurrentEditor().
Qt::TextElideMode QxtItemDelegatePrivate::elide |
Definition at line 53 of file qxtitemdelegate_p.h.
Referenced by paintButton().
Definition at line 52 of file qxtitemdelegate_p.h.
Referenced by paintProgress().
Definition at line 54 of file qxtitemdelegate_p.h.
Referenced by paintProgress().
Definition at line 51 of file qxtitemdelegate_p.h.
Referenced by paintProgress().
QMultiHash<QWidget*, QPersistentModelIndex> QxtItemDelegatePrivate::updatedItems [mutable] |
Definition at line 58 of file qxtitemdelegate_p.h.
Referenced by paintProgress(), and timerEvent().
QBasicTimer QxtItemDelegatePrivate::updateTimer [mutable] |
Definition at line 59 of file qxtitemdelegate_p.h.
Referenced by paintProgress(), and timerEvent().