Reviewed new files
[situare] / src / ui / tabbedpanel.cpp
index e14edcf..a35d9aa 100644 (file)
 
 #include <QButtonGroup>
 #include <QDebug>
-#include <QPainter>
-#include <QRegion>
-
-#include "tabbedpanel.h"
+#include <QPropertyAnimation>
+#include <QSignalTransition>
+#include <QStackedWidget>
+#include <QStateMachine>
 
 #include "panelbar.h"
-#include "panelbase.h"
 #include "panelcontent.h"
 #include "paneltab.h"
 #include "userinfo.h"
 
-enum Tab {USER_INFO, FRIEND_LIST, ROUTING};
+#include "tabbedpanel.h"
 
 TabbedPanel::TabbedPanel(QWidget *parent)
     : QWidget(parent),
       m_isOpen(false),
-      m_activeTab(-1)
+      m_activeTab(-1) ///< @todo magic
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    ///< @todo Do not use this, REMOVE ALL OCCURENCES!
     this->resize(PANEL_BAR_TABBED_WIDTH + PANEL_WIDTH, PANEL_HEIGHT);
     this->move(PANEL_CLOSED_X, PANEL_TOP_PADDING);
 
@@ -62,25 +62,26 @@ TabbedPanel::TabbedPanel(QWidget *parent)
     m_panelContent->setContentWidget(m_panelWidgetStack);
     m_panelContent->move(PANEL_TAB_WIDTH + PANEL_BAR_WIDTH, 0);
 
-    // --- STATE MACHINE ---
+    // --- PANEL ANIMATION ---
     m_panelStateMachine = new QStateMachine(this);
+
     m_panelStateClosed = new QState(m_panelStateMachine);
     m_panelStateOpened = new QState(m_panelStateMachine);
 
+    m_panelAnimation = new QPropertyAnimation(this, "pos", this);
+
     m_panelStateMachine->setInitialState(m_panelStateClosed);
 
     m_panelTransitionOpen = m_panelStateClosed->addTransition(this, SIGNAL(toggleState()),
                                                               m_panelStateOpened);
-    m_panelTransitionOpen->addAnimation(new QPropertyAnimation(this, "pos", this));
+    m_panelTransitionOpen->addAnimation(m_panelAnimation);
 
     m_panelTransitionClose = m_panelStateOpened->addTransition(this, SIGNAL(toggleState()),
                                                                m_panelStateClosed);
-    m_panelTransitionClose->addAnimation(new QPropertyAnimation(this, "pos", this));
+    m_panelTransitionClose->addAnimation(m_panelAnimation);
 
-    connect(m_panelStateClosed, SIGNAL(entered()),
-            this, SLOT(stateChangedToClosed()));
-    connect(m_panelStateOpened, SIGNAL(entered()),
-            this, SLOT(stateChangedToOpen()));
+    connect(m_panelAnimation, SIGNAL(finished()),
+            this, SLOT(stateChanged()));
 
     m_panelStateClosed->assignProperty(this, "pos",
                                        QPoint(PANEL_CLOSED_X, PANEL_TOP_PADDING));
@@ -94,6 +95,7 @@ int TabbedPanel::addTab(QWidget *widget, const QIcon& icon)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    ///< @todo magic
     return insertTab(-1, widget, icon);
 }
 
@@ -101,16 +103,18 @@ int TabbedPanel::insertTab(int index, QWidget *widget, const QIcon& icon)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    ///< @todo callers responsibility to call with right parameters
     if(!widget)
         return -1;
 
+    ///< @todo magic
     int verticalStartPoint = 8;
 
     index = m_panelWidgetStack->insertWidget(index, widget);
     m_tabButtonGroup->addButton(new PanelTab(this), index);
     m_tabButtonGroup->button(index)->setIcon(icon);
 
-    // [BEGIN]: Purkkaa (to be removed ASAP!!!)
+    ///< @todo [BEGIN]: Purkkaa (to be removed ASAP!!!)
     if(index > 0)
         verticalStartPoint += 65 * index;
 
@@ -133,6 +137,7 @@ void TabbedPanel::removeTab(int index)
     }
 }
 
+///< @todo sort alphabetically (other methods too)
 void TabbedPanel::closePanel()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -149,23 +154,6 @@ void TabbedPanel::openPanel()
         emit toggleState();
 }
 
-void TabbedPanel::setActiveTab(int index)
-{
-    qDebug() << __PRETTY_FUNCTION__;
-
-    if(m_activeTab == -1) {
-        m_activeTab = index;
-        m_panelWidgetStack->setCurrentIndex(index);
-        emit toggleState();
-    } else if(m_activeTab == index) {
-        m_activeTab = -1;
-        emit toggleState();
-    } else {
-        m_activeTab = index;
-        m_panelWidgetStack->setCurrentIndex(index);
-    }
-}
-
 void TabbedPanel::resizePanel(const QSize &size)
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -173,16 +161,19 @@ void TabbedPanel::resizePanel(const QSize &size)
     this->resize(PANEL_BAR_TABBED_WIDTH + PANEL_WIDTH,
                  size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING);
 
-    if(!m_isOpen)
+    if(!m_isOpen) {
         this->move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
-    else
+    }
+    else {
         this->move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
                    PANEL_TOP_PADDING);
+    }
 
     m_panelBar->resizeBar(size);
 
     m_panelContent->resizePanelContent(size);
 
+    ///< @todo alignment
     m_panelStateClosed->assignProperty(this, "pos",
                         QPoint(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING));
     m_panelStateOpened->assignProperty(this, "pos",
@@ -190,18 +181,41 @@ void TabbedPanel::resizePanel(const QSize &size)
                                PANEL_TOP_PADDING));
 }
 
-void TabbedPanel::stateChangedToClosed()
+void TabbedPanel::setActiveTab(int index)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_isOpen = false;
-    emit panelClosed();
+    ///< @todo magic
+    ///< @todo short comments?
+    if(m_activeTab == -1) {
+        m_activeTab = index;
+        m_panelWidgetStack->setCurrentIndex(index);
+        emit tabChanged();
+        emit toggleState();
+    } else if(m_activeTab == index) {
+        m_activeTab = -1;
+        emit toggleState();
+    } else {
+        m_activeTab = index;
+        m_panelWidgetStack->setCurrentIndex(index);
+        emit tabChanged();
+    }
 }
 
-void TabbedPanel::stateChangedToOpen()
+void TabbedPanel::stateChanged()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_isOpen = true;
-    emit panelOpened();
+    if(!m_isOpen) {
+        m_isOpen = true;
+        emit panelOpened();
+    } else {
+        m_isOpen = false;
+
+        m_tabButtonGroup->setExclusive(false);
+        m_tabButtonGroup->button(m_tabButtonGroup->checkedId())->setChecked(false);
+        m_tabButtonGroup->setExclusive(true);
+
+        emit panelClosed();
+    }
 }