2 * Copyright (C) 2010 Ixonos Plc.
3 * Copyright (C) 2011-2017 Philipp Spitzer, gregor herrmann, Stefan Stahl
5 * This file is part of ConfClerk.
7 * ConfClerk is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 2 of the License, or (at your option)
12 * ConfClerk is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17 * You should have received a copy of the GNU General Public License along with
18 * ConfClerk. If not, see <http://www.gnu.org/licenses/>.
24 #if QT_VERSION >= 0x050000
30 class Delegate : public QItemDelegate
39 FavouriteControlStrong,
50 Control(ControlId aControlId, const QString &aImageName, const Control* prev_control);
52 inline QImage *image() const { return mImage; }
53 inline void setDrawPoint(const QPoint &aPoint) { mDrawPoint = aPoint; }
54 inline QRect drawRect(const QRect &aRect) const // helper for determining if Control was clicked
56 return QRect(drawPoint(aRect), drawPoint(aRect)+QPoint(mImage->size().width(),mImage->size().height()));
58 void paint(QPainter* painter, const QRect rect);
60 bool enabled() const { return mEnabled; }
61 void setEnabled(bool v) { mEnabled = v; }
63 inline QPoint drawPoint(const QRect &aRect = QRect()) const // for painter to draw Control
65 if(aRect == QRect()) // null rectangle
66 return mDrawPoint; // returns relative drawing point
68 return QPoint(aRect.x()+aRect.width(),aRect.y()) + mDrawPoint; // returns absolute drawing point
73 QPoint mDrawPoint; // relative 'start-drawing' position (may hold negative values)
77 Delegate(QTreeView *aParent); // the delegate 'owner' has to be specified in the constructor - it's used to obtain visualRect of selected item/index
80 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
81 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
83 Delegate::ControlId whichControlClicked(const QModelIndex &aIndex, const QPoint &aPoint) const;
84 bool isPointFromRect(const QPoint &aPoint, const QRect &aRect) const;
87 bool hasParent( const QModelIndex &index ) const;
88 bool isLast( const QModelIndex &index ) const;
89 bool isExpanded( const QModelIndex &index ) const;
90 void defineControls();
91 // TODO: the better place for these methods would be 'eventmodel'
92 // they are used in 'paint' method and so it's better to obtain number of
93 // favourities/alarms once when the data has changed and not to call
94 // these methods which iterate over all Events in corresponding group
95 // every time it requires them
96 int numberOfFavourities(const QModelIndex &index) const;
97 int numberOfAlarms(const QModelIndex &index) const;
100 QPointer<QTreeView> mViewPtr;
101 QMap<ControlId,Control*> mControls;
104 #endif /* DELEGATE_H */