6 #include "conference.h"
7 #include "eventmodel.h"
15 TreeView::TreeView(QWidget *aParent)
18 connect(this, SIGNAL(clicked(QModelIndex)), SLOT(handleItemClicked(QModelIndex)));
21 void TreeView::mouseReleaseEvent(QMouseEvent *aEvent)
23 QModelIndex index = currentIndex();
24 QPoint point = aEvent->pos();
26 // test whether we have handled the mouse event
27 if(!testForControlClicked(index,point))
29 // pass the event to the Base class, so item clicks/events are handled correctly
30 QTreeView::mouseReleaseEvent(aEvent);
34 // returns bool if some Control was clicked
35 bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aPoint)
42 int confId = Conference::activeConference();
43 QRect rect = visualRect(aIndex); // visual QRect of selected/clicked item in the list
44 Delegate *delegate = static_cast<Delegate*>(itemDelegate(aIndex));
45 switch(delegate->whichControlClicked(aIndex,aPoint))
47 case Delegate::FavouriteControlOn:
48 case Delegate::FavouriteControlOff:
50 // handle Favourite Control clicked
51 Event event = Event::getById(aIndex.data().toInt(),confId);
53 QList<Event> conflicts = Event::conflictEvents(event.id(),Conference::activeConference());
54 if(event.isFavourite())
55 event.setFavourite(false);
57 event.setFavourite(true);
58 event.update("favourite");
60 qDebug() << " FAVOURITE [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.isFavourite();
62 if(event.isFavourite())
64 // event has became 'favourite' and so 'conflicts' list may have changed
65 conflicts = Event::conflictEvents(event.id(),Conference::activeConference());
68 // have to emit 'eventHasChanged' signal on all events in conflict
69 for(int i=0; i<conflicts.count(); i++)
70 emit(eventHasChanged(conflicts[i].id()));
72 // since the Favourite icon has changed, update TreeViews accordingly
73 // all TreeViews have to listen on this signal
74 emit(eventHasChanged(event.id(),true));
79 case Delegate::AlarmControlOn:
80 case Delegate::AlarmControlOff:
82 // handle Alarm Control clicked
83 Event event = Event::getById(aIndex.data().toInt(),confId);
86 event.setHasAlarm(false); // update DB
88 // remove alarm from the 'alarmd' alrms list
90 alarm.deleteAlarm(event.id());
91 // TODO: test if removing was successfull
96 event.setHasAlarm(true);
98 // add alarm to the 'alarmd'
100 //int cookie = alarm.addAlarm(event.id(),QDateTime::currentDateTime().addSecs(10)); // testing
101 int cookie = alarm.addAlarm(event.id(),event.start().addSecs(-15*60)); // 15 minutes before real start
102 qDebug() << "cookie: " << cookie;
105 event.update("alarm");
106 qDebug() << " ALARM [" << qVariantValue<QString>(aIndex.data()) << "] -> " << event.hasAlarm();
107 // since the Alarm icon has changed, update TreeView accordingly
108 // all TreeViews have to listen on this signal
109 emit(eventHasChanged(event.id()));
113 case Delegate::MapControl:
115 // handle Alarm Control clicked
116 qDebug() << "MAP CLICKED: " << qVariantValue<QString>(aIndex.data());
117 emit(requestForMap(aIndex));
121 case Delegate::WarningControl:
124 qDebug() << "WARNING CLICKED: " << qVariantValue<QString>(aIndex.data());
125 emit(requestForConflicts(aIndex));
129 case Delegate::ControlNone:
132 // item was clicked, but not a control
140 void TreeView::handleItemClicked(const QModelIndex &index)
142 if(!index.parent().isValid()) // time-group
144 if(isExpanded(index))
145 setExpanded(index, false);
147 setExpanded(index, true);
151 void TreeView::setAllExpanded(bool aExpanded)
153 for(int i=0; i<model()->rowCount(QModelIndex()); i++)
155 setExpanded(model()->index(i,0,QModelIndex()),aExpanded);