Added panel bar width to mask calculation.
[situare] / src / ui / tabbedpanel.cpp
index 49dd1b6..50f0344 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <QDebug>
 #include <QPropertyAnimation>
+#include <QRegion>
 #include <QSignalTransition>
 #include <QStackedWidget>
 #include <QStateMachine>
@@ -35,6 +36,7 @@
 #include "tabbedpanel.h"
 
 const int PANEL_CONTEXT_BUTTON_BAR_LEFT_X = 1;
+const int PANEL_TAB_BAR_TOP_SPACING = 8;
 
 TabbedPanel::TabbedPanel(QWidget *parent)
     : QWidget(parent),
@@ -45,7 +47,6 @@ TabbedPanel::TabbedPanel(QWidget *parent)
 
     const int PANEL_LEFT_X = 0;
     const int PANEL_TOP_Y = 0;
-    const int PANEL_TAB_BAR_TOP_SPACING = 8;
 
     resize(PANEL_BAR_TABBED_WIDTH + PANEL_WIDTH, PANEL_HEIGHT);
     move(PANEL_CLOSED_X, PANEL_TOP_PADDING);
@@ -57,6 +58,9 @@ TabbedPanel::TabbedPanel(QWidget *parent)
     connect(m_panelTabBar, SIGNAL(currentChanged(int)),
             this, SLOT(setCurrentIndex(int)));
 
+    connect(m_panelTabBar, SIGNAL(sizeChangeRequested()),
+            this, SLOT(calculateMask()));
+
     connect(m_panelTabBar, SIGNAL(tabCloseRequested(int)),
              this, SLOT(closePanel()));
 
@@ -65,7 +69,7 @@ TabbedPanel::TabbedPanel(QWidget *parent)
 
     // --- BAR ---
     m_panelBar = new PanelBar(this);
-    m_panelBar->move(PANEL_TAB_WIDTH, PANEL_TOP_Y);
+    m_panelBar->move(PANEL_TAB_BAR_WIDTH, PANEL_TOP_Y);
 
     // --- CONTEXT BUTTON BAR ---
     m_panelContextButtonBar = new PanelContextButtonBar(this);
@@ -79,7 +83,7 @@ TabbedPanel::TabbedPanel(QWidget *parent)
 
     // --- PANEL CONTENT ---
     m_panelContentStack = new PanelContentStack(this);
-    m_panelContentStack->move(PANEL_TAB_WIDTH + PANEL_BAR_WIDTH, PANEL_TOP_Y);
+    m_panelContentStack->move(PANEL_TAB_BAR_WIDTH + PANEL_BAR_WIDTH, PANEL_TOP_Y);
 
     // --- PANEL ANIMATION ---
     QStateMachine *panelStateMachine = new QStateMachine(this);
@@ -122,6 +126,29 @@ int TabbedPanel::addTab(QWidget *widget, const QIcon& icon)
     return insertTab(APPEND_INDEX, widget, icon);
 }
 
+void TabbedPanel::calculateMask()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QRect panelTabBarRect = m_panelTabBar->rect();
+    QRect panelContextButtonBarRect = m_panelContextButtonBar->rect();
+    int panelContextButtonBarY = height() - panelContextButtonBarRect.height();
+
+    if (!m_open)
+        panelContextButtonBarY = height();
+
+    QRegion panelTabBarRegion(0, PANEL_TAB_BAR_TOP_SPACING,
+                         panelTabBarRect.width(), panelTabBarRect.height());
+    QRegion panelContextButtonBarRegion(0, panelContextButtonBarY,
+                                      panelContextButtonBarRect.width(),
+                                      panelContextButtonBarRect.height());
+    QRegion panelContentRegion(panelTabBarRect.right() + 1, 0,
+                               PANEL_WIDTH + PANEL_BAR_WIDTH, height());
+    QRegion panelRegion = panelTabBarRegion + panelContentRegion + panelContextButtonBarRegion;
+
+    setMask(panelRegion);
+}
+
 void TabbedPanel::closePanel()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -180,6 +207,8 @@ void TabbedPanel::repositionContextButtonBar()
     qDebug() << __PRETTY_FUNCTION__;
 
     m_panelContextButtonBar->move(PANEL_CONTEXT_BUTTON_BAR_LEFT_X, height());
+    
+    calculateMask();
 }
 
 void TabbedPanel::resizePanel(const QSize &size)
@@ -190,9 +219,9 @@ void TabbedPanel::resizePanel(const QSize &size)
            size.height() - PANEL_TOP_PADDING - PANEL_BOTTOM_PADDING);
 
     if (!m_open)
-        move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
+        move(size.width() - PANEL_TAB_BAR_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
     else
-        move(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH, PANEL_TOP_PADDING);
+        move(size.width() - PANEL_TAB_BAR_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH, PANEL_TOP_PADDING);
 
     m_panelBar->resizeBar(size);
 
@@ -200,12 +229,14 @@ void TabbedPanel::resizePanel(const QSize &size)
 
     m_panelContentStack->resizeContentStack(size);
 
-    QPoint closedPosition(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
+    QPoint closedPosition(size.width() - PANEL_TAB_BAR_WIDTH - PANEL_BAR_WIDTH, PANEL_TOP_PADDING);
     m_stateClosed->assignProperty(this, "pos", closedPosition);
 
-    QPoint openedPosition(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
+    QPoint openedPosition(size.width() - PANEL_TAB_BAR_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
                           PANEL_TOP_PADDING);
     m_stateOpened->assignProperty(this, "pos", openedPosition);
+
+    calculateMask();
 }
 
 void TabbedPanel::setCurrentIndex(int index)
@@ -229,6 +260,8 @@ void TabbedPanel::stateChanged()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    calculateMask();
+
     if (m_open) {
         m_panelContextButtonBar->showContextButtonBar();
         emit panelOpened();