source: src/mvc/treeview.cpp @ 68b2df2

qt5
Last change on this file since 68b2df2 was 68b2df2, checked in by gregor herrmann <gregoa@…>, 10 years ago

Add copyright to source.

  • Property mode set to 100644
File size: 5.9 KB
RevLine 
[ca90cb1]1/*
2 * Copyright (C) 2010 Ixonos Plc.
[68b2df2]3 * Copyright (C) 2011 Philipp Spitzer, gregor herrmann
[ca90cb1]4 *
[6df32f2]5 * This file is part of ConfClerk.
[ca90cb1]6 *
[6df32f2]7 * ConfClerk is free software: you can redistribute it and/or modify it
[ca90cb1]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)
10 * any later version.
11 *
[6df32f2]12 * ConfClerk is distributed in the hope that it will be useful, but
[ca90cb1]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
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
[6df32f2]18 * ConfClerk.  If not, see <http://www.gnu.org/licenses/>.
[ca90cb1]19 */
[66327a0]20#include <QMouseEvent>
21
22#include "treeview.h"
23#include "delegate.h"
[680a4da]24#include "event.h"
[438699c]25#include "conference.h"
[67c59a7]26#include "eventmodel.h"
[66327a0]27
[6bd729b]28#ifdef MAEMO
29#include <alarm.h>
30#endif
31
[66327a0]32#include <QDebug>
33
34TreeView::TreeView(QWidget *aParent)
35    : QTreeView(aParent)
36{
[8fe9bd2]37    connect(this, SIGNAL(clicked(QModelIndex)), SLOT(handleItemClicked(QModelIndex)));
[66327a0]38}
39
40void TreeView::mouseReleaseEvent(QMouseEvent *aEvent)
41{
42    QModelIndex index = currentIndex();
43    QPoint point = aEvent->pos();
44
[c53a3f4]45    // test whether we have handled the mouse event
46    if(!testForControlClicked(index,point))
47    {
48        // pass the event to the Base class, so item clicks/events are handled correctly
49        QTreeView::mouseReleaseEvent(aEvent);
50    }
[66327a0]51}
52
[c53a3f4]53// returns bool if some Control was clicked
[6831c6a]54bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aPoint)
[66327a0]55{
[c53a3f4]56    bool handled = false;
57
[66327a0]58    if(!aIndex.isValid())
[c53a3f4]59        return handled;
[66327a0]60
[1fb7a33]61    int confId = Conference::activeConference();
[66327a0]62    QRect rect = visualRect(aIndex); // visual QRect of selected/clicked item in the list
63    Delegate *delegate = static_cast<Delegate*>(itemDelegate(aIndex));
64    switch(delegate->whichControlClicked(aIndex,aPoint))
65    {
[680a4da]66        case Delegate::FavouriteControlOn:
67        case Delegate::FavouriteControlOff:
[66327a0]68            {
69                // handle Favourite Control clicked
[1fb7a33]70                Event event = Event::getById(aIndex.data().toInt(),confId);
[438699c]71
72                QList<Event> conflicts = Event::conflictEvents(event.id(),Conference::activeConference());
[680a4da]73                if(event.isFavourite())
[c718a77]74                    event.setFavourite(false);
[680a4da]75                else
76                    event.setFavourite(true);
77                event.update("favourite");
[438699c]78
[c718a77]79                qDebug() << " FAVOURITE [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.isFavourite();
[412cef6]80
[438699c]81                if(event.isFavourite())
82                {
83                    // event has became 'favourite' and so 'conflicts' list may have changed
84                    conflicts = Event::conflictEvents(event.id(),Conference::activeConference());
85                }
86
87                // have to emit 'eventHasChanged' signal on all events in conflict
88                for(int i=0; i<conflicts.count(); i++)
89                    emit(eventHasChanged(conflicts[i].id()));
[6831c6a]90
[872aeaa]91                // since the Favourite icon has changed, update TreeViews accordingly
92                // all TreeViews have to listen on this signal
93                emit(eventHasChanged(event.id(),true));
[438699c]94
[c53a3f4]95                handled = true;
[66327a0]96            }
97            break;
[680a4da]98        case Delegate::AlarmControlOn:
99        case Delegate::AlarmControlOff:
[66327a0]100            {
101                // handle Alarm Control clicked
[1fb7a33]102                Event event = Event::getById(aIndex.data().toInt(),confId);
[b6cd05c]103                if(event.hasAlarm())
104                {
105                    event.setHasAlarm(false); // update DB
[6bd729b]106#ifdef MAEMO
107                    // remove alarm from the 'alarmd' alrms list
108                    Alarm alarm;
109                    alarm.deleteAlarm(event.id());
110                    // TODO: test if removing was successfull
111#endif /* MAEMO */
[b6cd05c]112                }
113                else
114                {
115                    event.setHasAlarm(true);
[6bd729b]116#ifdef MAEMO
117                    // add alarm to the 'alarmd'
118                    Alarm alarm;
[ba48d2f]119                    //int cookie = alarm.addAlarm(event.id(),QDateTime::currentDateTime().addSecs(10)); // testing
120                    int cookie = alarm.addAlarm(event.id(),event.start().addSecs(-15*60)); // 15 minutes before real start
[6bd729b]121                    qDebug() << "cookie: " << cookie;
122#endif /* MAEMO */
[b6cd05c]123                }
124                event.update("alarm");
[c718a77]125                qDebug() << " ALARM [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.hasAlarm();
[b6cd05c]126                // since the Alarm icon has changed, update TreeView accordingly
[c718a77]127                // all TreeViews have to listen on this signal
128                emit(eventHasChanged(event.id()));
[c53a3f4]129                handled = true;
[66327a0]130            }
131            break;
[03ff157]132        case Delegate::MapControl:
133            {
134                // handle Alarm Control clicked
135                qDebug() << "MAP CLICKED: " << qVariantValue<QString>(aIndex.data());
[59c6cfe]136                emit(requestForMap(aIndex));
[c53a3f4]137                handled = true;
[03ff157]138            }
139        break;
[336fa33]140        case Delegate::WarningControl:
[a5c1179]141        {
[3f3e22d]142
143            qDebug() << "WARNING CLICKED: " << qVariantValue<QString>(aIndex.data());
[ea638ef]144            emit(requestForConflicts(aIndex));
[a5c1179]145            handled = true;
146        }
147        break;
[66327a0]148        case Delegate::ControlNone:
149        default:
150            {
151                // item was clicked, but not a control
[c53a3f4]152                handled = false;
[66327a0]153            }
154    };
[c53a3f4]155
156    return handled;
[66327a0]157}
158
[8fe9bd2]159void TreeView::handleItemClicked(const QModelIndex &index)
160{
161    if(!index.parent().isValid()) // time-group
162    {
[6831c6a]163        if(isExpanded(index))
[8fe9bd2]164            setExpanded(index, false);
165        else
166            setExpanded(index, true);
167    }
168}
169
[b8a3ad1]170void TreeView::setAllExpanded(bool aExpanded)
171{
172    for(int i=0; i<model()->rowCount(QModelIndex()); i++)
173    {
174        setExpanded(model()->index(i,0,QModelIndex()),aExpanded);
175    }
176}
177
Note: See TracBrowser for help on using the repository browser.