Added mask calculation to panel.
[situare] / src / ui / tabbedpanel.cpp
index 49dd1b6..d5deee7 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);
@@ -63,6 +64,9 @@ TabbedPanel::TabbedPanel(QWidget *parent)
     connect(this, SIGNAL(panelClosed()),
             m_panelTabBar, SLOT(deselectTabs()));
 
+    connect(m_panelTabBar, SIGNAL(sizeChangeRequested()),
+            this, SLOT(calculateMask()));
+
     // --- BAR ---
     m_panelBar = new PanelBar(this);
     m_panelBar->move(PANEL_TAB_WIDTH, PANEL_TOP_Y);
@@ -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, height());
+    QRegion panelRegion = panelTabBarRegion + panelContentRegion + panelContextButtonBarRegion;
+
+    setMask(panelRegion);
+}
+
 void TabbedPanel::closePanel()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -180,6 +207,7 @@ void TabbedPanel::repositionContextButtonBar()
     qDebug() << __PRETTY_FUNCTION__;
 
     m_panelContextButtonBar->move(PANEL_CONTEXT_BUTTON_BAR_LEFT_X, height());
+    calculateMask();
 }
 
 void TabbedPanel::resizePanel(const QSize &size)
@@ -206,6 +234,8 @@ void TabbedPanel::resizePanel(const QSize &size)
     QPoint openedPosition(size.width() - PANEL_TAB_WIDTH - PANEL_BAR_WIDTH - PANEL_WIDTH,
                           PANEL_TOP_PADDING);
     m_stateOpened->assignProperty(this, "pos", openedPosition);
+
+    calculateMask();
 }
 
 void TabbedPanel::setCurrentIndex(int index)
@@ -229,6 +259,8 @@ void TabbedPanel::stateChanged()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    calculateMask();
+
     if (m_open) {
         m_panelContextButtonBar->showContextButtonBar();
         emit panelOpened();