possible to have multiple conferences in the DB
authorpavelpa <pavelpa@localhost>
Fri, 29 Jan 2010 10:06:55 +0000 (10:06 +0000)
committerpavelpa <pavelpa@localhost>
Fri, 29 Jan 2010 10:06:55 +0000 (10:06 +0000)
 - possible to switch among them
 - conference schedules have to follow FOSDEM conference xml structure
 - 'select Conference' bar is visible only if there are more than one conference available

src/gui/mainwindow.cpp
src/gui/mainwindow.h
src/gui/mainwindow.ui
src/mvc/treeview.cpp

index 8283787..8b650cc 100644 (file)
@@ -43,15 +43,35 @@ MainWindow::MainWindow(int aEventId, QWidget *aParent)
 
     connect(tabWidget, SIGNAL(infoIconClicked()), SLOT(aboutApp()));
 
-    if(Conference::getAll().count())
+    selectConference->setDuplicatesEnabled(false);
+    int confCount = Conference::getAll().count();
+    if(confCount)
     {
         initTabs();
         fillAndShowConferenceHeader();
         setWindowTitle(Conference::getById(confId).title());
+
+        if(confCount==1) // don't have to show 'selectConference' widget, if there is only one conference in the DB
+            selectConferenceWidget->hide();
+        else
+        {
+            // have to fill comboBox with available conferences
+            QList<Conference> confs = Conference::getAll();
+            QListIterator<Conference> i(confs);
+            while(i.hasNext())
+            {
+                Conference conf = i.next();
+                selectConference->addItem(conf.title(),conf.id());
+            }
+            int idx = selectConference->findText(Conference::getById(Conference::activeConference()).title());
+            selectConference->setCurrentIndex(idx);
+        }
+        connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int)));
     }
     else
     {
         conferenceHeader->hide();
+        selectConferenceWidget->hide();
         // go to the 'conferenceTab', so the user can import the schedule
         tabWidget->setCurrentIndex(6); // 6 - conference tab
     }
@@ -74,12 +94,23 @@ void MainWindow::scheduleImported(int aConfId)
 {
     Q_UNUSED(aConfId);
 
-    QList<Conference> confs = Conference::getAll();
-    if(confs.count())
+    Conference conf = Conference::getById(aConfId);
+    if( selectConference->findText(conf.title()) < 0 ) // item doesn't exist
     {
-        initTabs();
-        fillAndShowConferenceHeader();
-        setWindowTitle(Conference::getById(Conference::activeConference()).title());
+        disconnect(selectConference, SIGNAL(currentIndexChanged(int)), this, SLOT(conferenceChanged(int)));
+        selectConference->addItem(conf.title(),conf.id());
+        connect(selectConference, SIGNAL(currentIndexChanged(int)), SLOT(conferenceChanged(int)));
+    }
+    int confCount = Conference::getAll().count();
+    if(confCount)
+    {
+        int idx = selectConference->findText(conf.title());
+        selectConference->setCurrentIndex(idx);
+
+        if(confCount>1)
+            selectConferenceWidget->show();
+
+        conferenceChanged(idx);
     }
 }
 
@@ -143,3 +174,13 @@ void MainWindow::initTabs()
     nowTabContainer->updateTreeView(QDate::currentDate());
 }
 
+void MainWindow::conferenceChanged(int aIndex)
+{
+    Conference::getById(Conference::activeConference()).update("active",0);
+    Conference::getById(selectConference->itemData(aIndex).toInt()).update("active",1);
+
+    initTabs();
+    fillAndShowConferenceHeader();
+    setWindowTitle(Conference::getById(Conference::activeConference()).title());
+}
+
index a02a193..c2ed074 100644 (file)
@@ -18,6 +18,7 @@ private slots:
     void aboutApp();
     void conferenceMapClicked();
     void eventHasChanged(int aEventId, bool aReloadModel);
+    void conferenceChanged(int aIndex);
 private:
     void fillAndShowConferenceHeader();
     void initTabs();
index 2391f4a..94765da 100644 (file)
             </layout>
            </widget>
           </item>
+          <item>
+           <widget class="QWidget" native="1" name="selectConferenceWidget" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <layout class="QHBoxLayout" name="horizontalLayout" >
+             <item>
+              <widget class="QLabel" name="selectConferenceLabel" >
+               <property name="text" >
+                <string>Select conference: </string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <spacer name="horizontalSpacer" >
+               <property name="orientation" >
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0" >
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item>
+              <widget class="QComboBox" name="selectConference" >
+               <property name="sizePolicy" >
+                <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </item>
           <item>
            <widget class="ImportScheduleWidget" native="1" name="importScheduleWidget" >
             <property name="sizePolicy" >
index f907830..c855aef 100644 (file)
@@ -39,6 +39,7 @@ bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aP
     if(!aIndex.isValid())
         return handled;
 
+    int confId = Conference::activeConference();
     QRect rect = visualRect(aIndex); // visual QRect of selected/clicked item in the list
     Delegate *delegate = static_cast<Delegate*>(itemDelegate(aIndex));
     switch(delegate->whichControlClicked(aIndex,aPoint))
@@ -47,7 +48,7 @@ bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aP
         case Delegate::FavouriteControlOff:
             {
                 // handle Favourite Control clicked
-                Event event = Event::getById(aIndex.data().toInt(),1);
+                Event event = Event::getById(aIndex.data().toInt(),confId);
 
                 QList<Event> conflicts = Event::conflictEvents(event.id(),Conference::activeConference());
                 if(event.isFavourite())
@@ -79,7 +80,7 @@ bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aP
         case Delegate::AlarmControlOff:
             {
                 // handle Alarm Control clicked
-                Event event = Event::getById(aIndex.data().toInt(),1);
+                Event event = Event::getById(aIndex.data().toInt(),confId);
                 if(event.hasAlarm())
                 {
                     event.setHasAlarm(false); // update DB
@@ -96,7 +97,8 @@ bool TreeView::testForControlClicked(const QModelIndex &aIndex, const QPoint &aP
 #ifdef MAEMO
                     // add alarm to the 'alarmd'
                     Alarm alarm;
-                    int cookie = alarm.addAlarm(event.id(),QDateTime::currentDateTime().addSecs(10));
+                    //int cookie = alarm.addAlarm(event.id(),QDateTime::currentDateTime().addSecs(10)); // testing
+                    int cookie = alarm.addAlarm(event.id(),event.start().addSecs(-15*60)); // 15 minutes before real start
                     qDebug() << "cookie: " << cookie;
 #endif /* MAEMO */
                 }