source: src/gui/tabcontainer.cpp @ 05afe5f

qt5
Last change on this file since 05afe5f was 05afe5f, checked in by pavelpa <pavelpa@…>, 12 years ago

implemented 'tab container' widget, which groups daynavigator with treeview

  • moved functionality from mainwindow to tabcontainer
  • TODO: 'search' tab not done yet
  • Property mode set to 100644
File size: 5.4 KB
Line 
1#include "tabcontainer.h"
2
3#include <QFile>
4#include <QMessageBox>
5#include <QTimer>
6
7#include <appsettings.h>
8
9#include <conference.h>
10
11#include <treeview.h>
12#include <eventmodel.h>
13#include <delegate.h>
14
15#include "eventdialog.h"
16#include "mapwindow.h"
17
18TabContainer::TabContainer(QWidget *aParent)
19    : QWidget(aParent)
20    , mType(EContainerTypeNone)
21{
22    setupUi(this);
23
24    searchAgainButton->hide();
25
26    treeView->setHeaderHidden(true);
27    treeView->setRootIsDecorated(false);
28    treeView->setIndentation(0);
29    treeView->setAnimated(true);
30    treeView->setModel(new EventModel());
31    treeView->setItemDelegate(new Delegate(treeView));
32
33    connect(dayNavigator, SIGNAL(dateChanged(const QDate &)), SLOT(updateTreeView(const QDate &)));
34
35    connect(treeView, SIGNAL(eventHasChanged(int)), SIGNAL(eventHasChanged(int)));
36    connect(treeView, SIGNAL(clicked(const QModelIndex &)), SLOT(itemClicked(const QModelIndex &)));
37    connect(treeView, SIGNAL(requestForMap(const QModelIndex &)), SLOT(displayMap(const QModelIndex &)));
38    connect(treeView, SIGNAL(requestForWarning(const QModelIndex &)), SLOT(displayWarning(const QModelIndex &)));
39
40    if(!Conference::getAll().count()) // no conference(s) in the DB
41    {
42        dayNavigator->hide(); // hide DayNavigatorWidget
43    }
44    else
45    {
46        QDate aStartDate = Conference::getById(AppSettings::confId()).start();
47        QDate aEndDate = Conference::getById(AppSettings::confId()).end();
48        dayNavigator->setDates(aStartDate, aEndDate);
49    }
50}
51
52void TabContainer::setType(TabContainer::Type aType)
53{
54    mType = aType;
55    if(aType == EContainerTypeNow)
56    {
57        QTimer *timer = new QTimer( this );
58        connect( timer, SIGNAL(timeout()), SLOT(timerUpdateTreeView()) );
59        timer->start( 30000); // 30 seconds timer
60    }
61}
62
63void TabContainer::updateTreeView(const QDate &aDate)
64{
65    switch(mType)
66    {
67        case EContainerTypeDay:
68            {
69                static_cast<EventModel*>(treeView->model())->loadEvents(aDate,AppSettings::confId());
70            }
71            break;
72        case EContainerTypeFavs:
73            {
74                static_cast<EventModel*>(treeView->model())->loadFavEvents(aDate,AppSettings::confId());
75            }
76            break;
77        case EContainerTypeTracks:
78            {
79                static_cast<EventModel*>(treeView->model())->loadEventsByTrack(aDate, AppSettings::confId());
80            }
81            break;
82        case EContainerTypeRooms:
83            {
84                static_cast<EventModel*>(treeView->model())->loadEventsByRoom(aDate, AppSettings::confId());
85            }
86            break;
87        case EContainerTypeNow:
88            {
89                static_cast<EventModel*>(treeView->model())->loadNowEvents(AppSettings::confId());
90                treeView->setAllExpanded(true);
91            }
92            break;
93        case EContainerTypeNone:
94        default:
95            {
96                qDebug() << "Container type not specified";
97            }
98    }
99    treeView->reset();
100    dayNavigator->show();
101}
102
103void TabContainer::itemClicked(const QModelIndex &aIndex)
104{
105    // have to handle only events, not time-groups
106    if(!aIndex.parent().isValid()) // time-group
107        return;
108
109    EventDialog dialog(static_cast<Event*>(aIndex.internalPointer())->id(),this);
110    dialog.exec();
111}
112
113void TabContainer::displayMap(const QModelIndex &aIndex)
114{
115    Event *event = static_cast<Event*>(aIndex.internalPointer());
116
117    // room names are stored in lower-case format
118    // room names are stored without dots in the name, eg. "aw.1124.png" -> "aw1124.png"
119    QString mapPath = QString(":/maps/rooms/%1.png").arg(event->room().toLower().remove("."));
120    if(!QFile::exists(mapPath))
121        mapPath = QString(":/maps/rooms/not-available.png");
122
123    QString roomName;
124    if(mapPath.contains("not-available", Qt::CaseInsensitive))
125        roomName = QString("Map is not available: %1").arg(event->room());
126    else
127        roomName = event->room();
128
129    QPixmap map(mapPath);
130    MapWindow window(map,roomName,this);
131    window.exec();
132}
133
134void TabContainer::displayWarning(const QModelIndex &aIndex)
135{
136    Q_UNUSED(aIndex);
137
138    QMessageBox::warning(
139        this,
140        tr("Time Conflict Warning"),
141        tr("This event happens at the same time than another one of your favourites.") );
142}
143
144void TabContainer::updateTreeViewModel(int aEventId)
145{
146    switch(mType)
147    {
148        case EContainerTypeFavs:
149            {
150                // requires special handling
151                // we need to reload favourites, because some favourite could be deleted
152                //static_cast<EventModel*>(favTreeView->model())->updateModel(aEventId);
153                QDate aStartDate = Conference::getById(AppSettings::confId()).start();
154                QDate aEndDate = Conference::getById(AppSettings::confId()).end();
155                dayNavigator->setDates(aStartDate, aEndDate);
156                updateTreeView( Conference::getById(AppSettings::confId()).start() );
157            }
158            break;
159        case EContainerTypeDay:
160        case EContainerTypeNone:
161        default:
162            {
163                static_cast<EventModel*>(treeView->model())->updateModel(aEventId);
164            }
165    }
166}
167
168void TabContainer::setDates(const QDate &aStart, const QDate &aEnd)
169{
170    dayNavigator->setDates(aStart, aEnd);
171}
172
173void TabContainer::timerUpdateTreeView()
174{
175    if(mType == EContainerTypeNow)
176    {
177        updateTreeView(QDate());
178    }
179}
180
Note: See TracBrowser for help on using the repository browser.