Added check to SidePanel::setType to disallow multiple type sets
authorKaj Wallin <kaj.wallin@ixonos.com>
Fri, 21 May 2010 07:37:27 +0000 (10:37 +0300)
committerKaj Wallin <kaj.wallin@ixonos.com>
Fri, 21 May 2010 07:37:27 +0000 (10:37 +0300)
Reviewed by:

src/ui/sidepanel.cpp
src/ui/sidepanel.h
tests/ui/sidepanel/testsidepanel.cpp

index 84a7ac6..1c05902 100644 (file)
@@ -29,6 +29,7 @@ SidePanel::SidePanel(QWidget *parent) :
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    currentType = SidePanel::None;
     m_panelVBox = new QVBoxLayout(this);
     m_panelVBox->setMargin(0);
     m_panelVBox->setContentsMargins(SLIDINGBAR_WIDTH+1, 0, SIDEBAR_WIDTH, 0);
@@ -108,48 +109,53 @@ void SidePanel::screenResized(const QSize &size)
 void SidePanel::setType(SidePanel::PanelType type)
 {
     qDebug() << __PRETTY_FUNCTION__;
-    if(type == SidePanel::UserPanel) {
-        currentType = type;
-        m_panelBase->move(TOP_CORNER_X,PANEL_TOP_Y);
-        m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
-
-        PanelSliderBar *m_panelSlidingBar = new PanelSliderBar(this, LEFT);
-        m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDINGBAR_WIDTH, PANEL_TOP_Y);
-
-        connect(m_panelSlidingBar, SIGNAL(clicked()),
-                this, SIGNAL(toggleState()));
-
-        // set mask to allow clicking zoom button at their default position
-        setMask(QPixmap(":/res/images/userpanel_mask.png").mask());
-
-        m_panelStateClosed->assignProperty(this, "pos", QPoint(
-                USERPANEL_CLOSED_X, PANEL_TOP_Y));
-        m_panelStateOpened->assignProperty(this, "pos", QPoint(
-                USERPANEL_OPENED_X, PANEL_TOP_Y));
-        setObjectName("UserPanel");
-    }
-    else if (type == SidePanel::FriendPanel) {
-        currentType = type;
-        m_panelBase->move(TOP_CORNER_X + SLIDINGBAR_WIDTH,PANEL_TOP_Y);
-        m_panelBase->resize(FRIENDPANEL_WIDTH, FRIENDPANEL_HEIGHT);
-
-        m_panelSlidingBar = new PanelSliderBar(this, RIGHT);
-        m_panelSlidingBar->move(TOP_CORNER_X, PANEL_TOP_Y);
-
-        connect(m_panelSlidingBar, SIGNAL(clicked()),
-                this, SIGNAL(toggleState()));
-
-        m_panelStateClosed->assignProperty(this, "pos", QPoint(
-                FRIENDPANEL_CLOSED_X, PANEL_TOP_Y));
-        m_panelStateOpened->assignProperty(this, "pos", QPoint(
-                FRIENDPANEL_OPENED_X, PANEL_TOP_Y));
-        setObjectName("FriendPanel");
+    if(currentType == SidePanel::None) {
+        if(type == SidePanel::UserPanel) {
+            currentType = type;
+            m_panelBase->move(TOP_CORNER_X,PANEL_TOP_Y);
+            m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
+
+            PanelSliderBar *m_panelSlidingBar = new PanelSliderBar(this, LEFT);
+            m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDINGBAR_WIDTH, PANEL_TOP_Y);
+
+            connect(m_panelSlidingBar, SIGNAL(clicked()),
+                    this, SIGNAL(toggleState()));
+
+            // set mask to allow clicking zoom button at their default position
+            setMask(QPixmap(":/res/images/userpanel_mask.png").mask());
+
+            m_panelStateClosed->assignProperty(this, "pos", QPoint(
+                    USERPANEL_CLOSED_X, PANEL_TOP_Y));
+            m_panelStateOpened->assignProperty(this, "pos", QPoint(
+                    USERPANEL_OPENED_X, PANEL_TOP_Y));
+            setObjectName("UserPanel");
+        }
+        else if (type == SidePanel::FriendPanel) {
+            currentType = type;
+            m_panelBase->move(TOP_CORNER_X + SLIDINGBAR_WIDTH,PANEL_TOP_Y);
+            m_panelBase->resize(FRIENDPANEL_WIDTH, FRIENDPANEL_HEIGHT);
+
+            m_panelSlidingBar = new PanelSliderBar(this, RIGHT);
+            m_panelSlidingBar->move(TOP_CORNER_X, PANEL_TOP_Y);
+
+            connect(m_panelSlidingBar, SIGNAL(clicked()),
+                    this, SIGNAL(toggleState()));
+
+            m_panelStateClosed->assignProperty(this, "pos", QPoint(
+                    FRIENDPANEL_CLOSED_X, PANEL_TOP_Y));
+            m_panelStateOpened->assignProperty(this, "pos", QPoint(
+                    FRIENDPANEL_OPENED_X, PANEL_TOP_Y));
+            setObjectName("FriendPanel");
+        }
+        else {
+            qFatal("Illegal type set for SidePanel::setType");
+        }
+        m_panelStateMachine->start();
+        show();
     }
     else {
-        qFatal("Illegal type set for SidePanel::setType");
+        qWarning() << "Illegally tried to set type multiple times at SidePanel::setType";
     }
-    m_panelStateMachine->start();
-    show();
 }
 
 void SidePanel::stateChangedToClosed()
index f8fd98f..9e72e07 100644 (file)
@@ -49,11 +49,11 @@ public:
 
     /**
     * @brief Enumerator for the panel type
-    * Defines values: UserPanel, FriendPanel
+    * Defines values: UserPanel, FriendPanel, None
     *
     * @sa setType
     */
-    enum PanelType {UserPanel, FriendPanel};
+    enum PanelType {UserPanel, FriendPanel, None};
 /******************************************************************************
  * MEMBER FUNCTIONS AND SLOTS
  ******************************************************************************/
@@ -80,7 +80,8 @@ public slots:
     *
     * Use to set panel type as UserPanel or FriendPanel. Panel type determines
     * which side the panel will be rendered. UserPanel will always be rendered
-    * on the left side of the screen and FriendPanel on the right side.
+    * on the left side of the screen and FriendPanel on the right side. Type
+    * cannot be set twice.
     *
     * @param type Type of the panel, either UserPanel or FriendPanel
     * @sa PanelType
index a239af5..eb617ff 100644 (file)
@@ -22,6 +22,7 @@
 
 
 #include <QtTest/QtTest>
+#include "sidepanel.h"
 
 class TestSidePanel : public QObject
 {
@@ -31,3 +32,10 @@ private slots:
     void testPanelTypes();
     void testPanelToggling();
 };
+
+void TestSidePanel::testPanelTypes()
+{
+    SidePanel *testPanel = new SidePanel(this);
+    testPanel->setType(SidePanel::UserPanel);
+
+}