USA.
*/
-#include <QButtonGroup>
#include <QDebug>
#include <QPropertyAnimation>
#include <QSignalTransition>
#include <QStateMachine>
#include "panelbar.h"
-#include "panelcontent.h"
-#include "paneltab.h"
-#include "userinfo.h"
+#include "panelcontentstack.h"
+#include "paneltabbar.h"
#include "tabbedpanel.h"
TabbedPanel::TabbedPanel(QWidget *parent)
: QWidget(parent),
- m_isOpen(false),
- m_activeTab(-1) ///< @todo magic
+ m_isOpen(false)
{
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);
+ resize(PANEL_BAR_TABBED_WIDTH + PANEL_WIDTH, PANEL_HEIGHT);
+ move(PANEL_CLOSED_X, PANEL_TOP_PADDING);
// --- TABS ---
- m_panelWidgetStack = new QStackedWidget(this);
+ m_panelTabBar = new PanelTabBar(this);
- m_tabButtonGroup = new QButtonGroup(this);
+ connect(m_panelTabBar, SIGNAL(currentChanged(int)),
+ this, SLOT(setCurrentIndex(int)));
- connect(m_tabButtonGroup, SIGNAL(buttonPressed(int)),
- this, SLOT(setActiveTab(int)));
+ connect(m_panelTabBar, SIGNAL(tabCloseRequested(int)),
+ this, SLOT(closePanel()));
+
+ connect(this, SIGNAL(panelClosed()),
+ m_panelTabBar, SLOT(deselectTabs()));
// --- BAR ---
m_panelBar = new PanelBar(this);
m_panelBar->move(PANEL_TAB_WIDTH, 0);
// --- PANEL CONTENT ---
- m_panelContent = new PanelContent(this);
- m_panelContent->setContentWidget(m_panelWidgetStack);
- m_panelContent->move(PANEL_TAB_WIDTH + PANEL_BAR_WIDTH, 0);
+ m_panelContentStack = new PanelContentStack(this);
+ m_panelContentStack->move(PANEL_TAB_WIDTH + PANEL_BAR_WIDTH, 0);
// --- PANEL ANIMATION ---
m_panelStateMachine = new QStateMachine(this);
{
qDebug() << __PRETTY_FUNCTION__;
- ///< @todo magic
- return insertTab(-1, widget, icon);
+ const int APPEND_INDEX = -1;
+
+ return insertTab(APPEND_INDEX, widget, icon);
}
-int TabbedPanel::insertTab(int index, QWidget *widget, const QIcon& icon)
+void TabbedPanel::closePanel()
{
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);
+ if (m_isOpen)
+ emit toggleState();
+}
- ///< @todo [BEGIN]: Purkkaa (to be removed ASAP!!!)
- if(index > 0)
- verticalStartPoint += 65 * index;
+int TabbedPanel::insertTab(int index, QWidget *widget, const QIcon& icon)
+{
+ qDebug() << __PRETTY_FUNCTION__;
- m_tabButtonGroup->button(index)->move(0, verticalStartPoint);
- // [END]: Purkkaa
+ index = m_panelContentStack->insertWidget(index, widget);
+ m_panelTabBar->insertTab(index, icon);
return index;
}
{
qDebug() << __PRETTY_FUNCTION__;
- if(QWidget *widget = m_panelWidgetStack->widget(index)) {
- m_panelWidgetStack->removeWidget(widget);
-
- QAbstractButton *tab = m_tabButtonGroup->button(index);
- m_tabButtonGroup->removeButton(tab);
- delete tab;
+ if (QWidget *widget = m_panelContentStack->widget(index)) {
+ m_panelContentStack->removeWidget(widget);
+ m_panelTabBar->removeTab(index);
}
}
-///< @todo sort alphabetically (other methods too)
-void TabbedPanel::closePanel()
+void TabbedPanel::resizePanel(const QSize &size)
{
qDebug() << __PRETTY_FUNCTION__;
- if(m_isOpen)
- emit toggleState();
-}
-
-void TabbedPanel::openPanel()
-{
- qDebug() << __PRETTY_FUNCTION__;
+ resize(PANEL_BAR_TABBED_WIDTH + PANEL_WIDTH,
+ size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING);
- if(!m_isOpen)
- emit toggleState();
-}
+ if (!m_isOpen)
+ move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
+ else
+ move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH, PANEL_TOP_PADDING);
-void TabbedPanel::resizePanel(const QSize &size)
-{
- qDebug() << __PRETTY_FUNCTION__;
+ m_panelBar->resizeBar(size);
- this->resize(PANEL_BAR_TABBED_WIDTH + PANEL_WIDTH,
- size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING);
+ m_panelContentStack->resizePanelContentStack(size);
- if(!m_isOpen) {
- this->move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
- }
- else {
- this->move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
- PANEL_TOP_PADDING);
- }
+ QPoint closedPosition(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
+ m_panelStateClosed->assignProperty(this, "pos", closedPosition);
- m_panelBar->resizeBar(size);
+ QPoint openedPosition(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
+ PANEL_TOP_PADDING);
+ m_panelStateOpened->assignProperty(this, "pos", openedPosition);
+}
- m_panelContent->resizePanelContent(size);
+void TabbedPanel::showPanel(QWidget *widget)
+{
+ qDebug() << __PRETTY_FUNCTION__;
- ///< @todo alignment
- m_panelStateClosed->assignProperty(this, "pos",
- QPoint(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING));
- m_panelStateOpened->assignProperty(this, "pos",
- QPoint(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
- PANEL_TOP_PADDING));
+ m_panelTabBar->selectTab(m_panelContentStack->indexOf(widget));
}
-void TabbedPanel::setActiveTab(int index)
+void TabbedPanel::setCurrentIndex(int index)
{
qDebug() << __PRETTY_FUNCTION__;
- ///< @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();
+ if ((index < m_panelContentStack->count()) && (index >= 0)) {
+ m_panelContentStack->setCurrentIndex(index);
+
+ if (!m_isOpen)
+ emit toggleState();
+
+ emit currentChanged(index);
}
}
{
qDebug() << __PRETTY_FUNCTION__;
- if(!m_isOpen) {
+ 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();
}
}