source: src/gui/tabcontainer.cpp @ 6df32f2

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

Update GPL blurb in source files.

  • Property mode set to 100644
File size: 4.6 KB
RevLine 
[ca90cb1]1/*
2 * Copyright (C) 2010 Ixonos Plc.
3 *
[6df32f2]4 * This file is part of ConfClerk.
[ca90cb1]5 *
[6df32f2]6 * ConfClerk is free software: you can redistribute it and/or modify it
[ca90cb1]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 *
[6df32f2]11 * ConfClerk is distributed in the hope that it will be useful, but
[ca90cb1]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
[6df32f2]17 * ConfClerk.  If not, see <http://www.gnu.org/licenses/>.
[ca90cb1]18 */
[05afe5f]19#include "tabcontainer.h"
20
21#include <QFile>
22#include <QMessageBox>
23#include <QTimer>
24
25#include <treeview.h>
26#include <delegate.h>
27
28#include "eventdialog.h"
29#include "mapwindow.h"
[58eb7cc]30#include "room.h"
31#include "errormessage.h"
[05afe5f]32
[ea638ef]33#include "conflictsdialog.h"
34
[05afe5f]35TabContainer::TabContainer(QWidget *aParent)
36    : QWidget(aParent)
37{
38    setupUi(this);
39
40    treeView->setHeaderHidden(true);
41    treeView->setRootIsDecorated(false);
42    treeView->setIndentation(0);
43    treeView->setAnimated(true);
44    treeView->setModel(new EventModel());
45    treeView->setItemDelegate(new Delegate(treeView));
46
47    connect(dayNavigator, SIGNAL(dateChanged(const QDate &)), SLOT(updateTreeView(const QDate &)));
48
[872aeaa]49    connect(treeView, SIGNAL(eventHasChanged(int,bool)), SIGNAL(eventHasChanged(int,bool)));
[05afe5f]50    connect(treeView, SIGNAL(clicked(const QModelIndex &)), SLOT(itemClicked(const QModelIndex &)));
51    connect(treeView, SIGNAL(requestForMap(const QModelIndex &)), SLOT(displayMap(const QModelIndex &)));
[ea638ef]52    connect(treeView, SIGNAL(requestForConflicts(const QModelIndex &)), SLOT(displayConflicts(const QModelIndex &)));
[05afe5f]53
[bb6f7d6]54    // day navigator is hidden by default
55    dayNavigator->hide();
[05afe5f]56}
57
58void TabContainer::updateTreeView(const QDate &aDate)
59{
[04acaf9]60    int active_id = Conference::activeConference();
[05afe5f]61    dayNavigator->show();
[04acaf9]62    if (active_id > 0) {
63        loadEvents(aDate, active_id);
64    } else {
65        static_cast<EventModel*>(treeView->model())->clearModel();
66    }
[05afe5f]67}
68
69void TabContainer::itemClicked(const QModelIndex &aIndex)
70{
71    // have to handle only events, not time-groups
72    if(!aIndex.parent().isValid()) // time-group
73        return;
74
75    EventDialog dialog(static_cast<Event*>(aIndex.internalPointer())->id(),this);
[5d22816]76#ifdef N810
77    dialog.setFixedWidth(static_cast<QWidget*>(parent())->width());
78#endif
[872aeaa]79    connect(&dialog, SIGNAL(eventHasChanged(int,bool)), this, SIGNAL(eventHasChanged(int,bool)));
[05afe5f]80    dialog.exec();
[872aeaa]81    disconnect(&dialog, SIGNAL(eventHasChanged(int,bool)), this, SIGNAL(eventHasChanged(int,bool)));
[05afe5f]82}
83
84void TabContainer::displayMap(const QModelIndex &aIndex)
85{
86    Event *event = static_cast<Event*>(aIndex.internalPointer());
87
[0d995ed]88    QVariant mapPathV = event->room()->map();
[58eb7cc]89    QString mapPath;
90    if (!mapPathV.isValid()) {
91        error_message("No map for this room");
92        return;
93    } else {
94        mapPath = mapPathV.toString();
95        if (!QFile::exists(mapPath)) {
96            error_message("Map for this room not found: " + mapPath);
97            return;
98        }
99    }
[05afe5f]100
101    QPixmap map(mapPath);
[0d995ed]102    MapWindow window(map, event->room()->name(),this);
[05afe5f]103    window.exec();
104}
105
[ea638ef]106void TabContainer::displayConflicts(const QModelIndex &aIndex)
[05afe5f]107{
[d49254d]108    ConflictsDialog dialog(static_cast<Event*>(aIndex.internalPointer())->id(),this);
[5d22816]109#ifdef N810
110    dialog.setFixedWidth(static_cast<QWidget*>(parent())->width());
111#endif
[872aeaa]112    connect(&dialog, SIGNAL(eventHasChanged(int,bool)), this, SIGNAL(eventHasChanged(int,bool)));
[ea638ef]113    dialog.exec();
[872aeaa]114    disconnect(&dialog, SIGNAL(eventHasChanged(int,bool)), this, SIGNAL(eventHasChanged(int,bool)));
[05afe5f]115}
116
[872aeaa]117void TabContainer::updateTreeViewModel(int aEventId, bool aReloadModel)
[05afe5f]118{
[872aeaa]119    if(aReloadModel)
120    {
121        // requires special handling
122        // eg. in case of favourities - some favourities may have changed
123        // and so we need to reload them
124        int confId = Conference::activeConference();
125        QDate startDate = Conference::getById(confId).start();
126        QDate endDate = Conference::getById(confId).end();
127        dayNavigator->setDates(startDate, endDate);
128        updateTreeView( Conference::getById(confId).start() );
129    }
130    else
131    {
132        // just update event in the question
133        static_cast<EventModel*>(treeView->model())->updateModel(aEventId);
134    }
[05afe5f]135}
136
137void TabContainer::setDates(const QDate &aStart, const QDate &aEnd)
138{
139    dayNavigator->setDates(aStart, aEnd);
140}
141
[04acaf9]142void TabContainer::clearModel()
143{
144    static_cast<EventModel*>(treeView->model())->clearModel();
145}
146
Note: See TracBrowser for help on using the repository browser.