#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);
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));
{
qDebug() << __PRETTY_FUNCTION__;
+ ///< @todo magic
return insertTab(-1, widget, 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;
}
}
+///< @todo sort alphabetically (other methods too)
void TabbedPanel::closePanel()
{
qDebug() << __PRETTY_FUNCTION__;
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__;
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",
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();
+ }
}