4 #include <QItemDelegate>
8 class Delegate : public QItemDelegate
28 Control(ControlId aControlId, const QString &aImageName)
30 , mImage(new QImage(aImageName))
31 , mDrawPoint(QPoint(0,0))
33 inline QImage *image() const { return mImage; }
34 inline void setDrawPoint(const QPoint &aPoint) { mDrawPoint = aPoint; }
35 inline QPoint drawPoint(const QRect &aRect = QRect()) const // for painter to draw Control
37 if(aRect == QRect()) // null rectangle
38 return mDrawPoint; // returns relative drawing point
40 return QPoint(aRect.x()+aRect.width(),aRect.y()) + mDrawPoint; // returns absolute drawing point
42 inline QRect drawRect(const QRect &aRect) const // helper for determining if Control was clicked
44 return QRect(drawPoint(aRect), drawPoint(aRect)+QPoint(mImage->size().width(),mImage->size().height()));
50 QPoint mDrawPoint; // relative 'start-drawing' position (may hold negative values)
53 Delegate(QTreeView *aParent); // the delegate 'owner' has to be specified in the constructor - it's used to obtain visualRect of selected item/index
56 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
57 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
59 Delegate::ControlId whichControlClicked(const QModelIndex &aIndex, const QPoint &aPoint) const;
60 bool isPointFromRect(const QPoint &aPoint, const QRect &aRect) const;
63 bool hasParent( const QModelIndex &index ) const;
64 bool isLast( const QModelIndex &index ) const;
65 bool isExpanded( const QModelIndex &index ) const;
66 void defineControls();
67 // TODO: the better place for these methods would be 'eventmodel'
68 // they are used in 'paint' method and so it's better to obtain number of
69 // favourities/alarms once when the data has changed and not to call
70 // these methods which iterate over all Events in corresponding group
71 // every time it requires them
72 int numberOfFavourities(const QModelIndex &index) const;
73 int numberOfAlarms(const QModelIndex &index) const;
74 bool hasTimeConflict(const QModelIndex &index, const QModelIndex &parent) const;
77 QPointer<QTreeView> mViewPtr;
78 QMap<ControlId,Control*> mControls;
81 #endif /* DELEGATE_H */