source: src/mvc/delegate.h @ b431d47

qt5
Last change on this file since b431d47 was ca90cb1, checked in by uzakmat <uzakmat@…>, 12 years ago

A header with the proper copyright/lincence statement was added into each source/header file.

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/*
2 * Copyright (C) 2010 Ixonos Plc.
3 *
4 * This file is part of fosdem-schedule.
5 *
6 * fosdem-schedule is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation, either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 * fosdem-schedule is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14 * more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * fosdem-schedule.  If not, see <http://www.gnu.org/licenses/>.
18 */
19#ifndef DELEGATE_H
20#define DELEGATE_H
21
22#include <QItemDelegate>
23#include <QTreeView>
24#include <QPointer>
25
26class Delegate : public QItemDelegate
27{
28    Q_OBJECT
29
30    public:
31
32        enum ControlId
33        {
34            ControlNone = 0,
35            FavouriteControlOn,
36            FavouriteControlOff,
37            AlarmControlOn,
38            AlarmControlOff,
39            MapControl,
40            WarningControl
41        };
42
43        class Control
44        {
45            public:
46                Control(ControlId aControlId, const QString &aImageName)
47                    : mId(aControlId)
48                    , mImage(new QImage(aImageName))
49                    , mDrawPoint(QPoint(0,0))
50                { }
51                inline QImage *image() const { return mImage; }
52                inline void setDrawPoint(const QPoint &aPoint) { mDrawPoint = aPoint; }
53                inline QPoint drawPoint(const QRect &aRect = QRect()) const // for painter to draw Control
54                {
55                    if(aRect == QRect()) // null rectangle
56                        return mDrawPoint; // returns relative drawing point
57                    else
58                        return QPoint(aRect.x()+aRect.width(),aRect.y()) + mDrawPoint; // returns absolute drawing point
59                }
60                inline QRect drawRect(const QRect &aRect) const // helper for determining if Control was clicked
61                {
62                    return QRect(drawPoint(aRect), drawPoint(aRect)+QPoint(mImage->size().width(),mImage->size().height()));
63                }
64            private:
65                ControlId mId;
66                QImage *mImage;
67                QPoint mDrawPoint; // relative 'start-drawing' position (may hold negative values)
68        };
69
70        Delegate(QTreeView *aParent); // the delegate 'owner' has to be specified in the constructor - it's used to obtain visualRect of selected item/index
71        ~Delegate();
72
73        void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
74        QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
75        //
76        Delegate::ControlId whichControlClicked(const QModelIndex &aIndex, const QPoint &aPoint) const;
77        bool isPointFromRect(const QPoint &aPoint, const QRect &aRect) const;
78
79    private:
80        bool hasParent( const QModelIndex &index ) const;
81        bool isLast( const QModelIndex &index ) const;
82        bool isExpanded( const QModelIndex &index ) const;
83        void defineControls();
84        // TODO: the better place for these methods would be 'eventmodel'
85        // they are used in 'paint' method and so it's better to obtain number of
86        // favourities/alarms once when the data has changed and not to call
87        // these methods which iterate over all Events in corresponding group
88        // every time it requires them
89        int numberOfFavourities(const QModelIndex &index) const;
90        int numberOfAlarms(const QModelIndex &index) const;
91
92    private:
93        QPointer<QTreeView> mViewPtr;
94        QMap<ControlId,Control*> mControls;
95};
96
97#endif /* DELEGATE_H */
98
Note: See TracBrowser for help on using the repository browser.