Fixed naming convention and started writing unit tests
[situare] / src / ui / sidepanel.cpp
1  /*
2     Situare - A location system for Facebook
3     Copyright (C) 2010  Ixonos Plc. Authors:
4
5         Kaj Wallin - kaj.wallin@ixonos.com
6
7     Situare is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     version 2 as published by the Free Software Foundation.
10
11     Situare is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with Situare; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
19     USA.
20  */
21
22
23 #include "sidepanel.h"
24 #include "panelsliderbar.h"
25 #include "panelsidebar.h"
26
27 SidePanel::SidePanel(QWidget *parent) :
28     QWidget(parent)
29 {
30     qDebug() << __PRETTY_FUNCTION__;
31
32     m_panelVBox = new QVBoxLayout(this);
33     m_panelVBox->setMargin(0);
34     m_panelVBox->setContentsMargins(SLIDINGBAR_WIDTH+1, 0, SIDEBAR_WIDTH, 0);
35     m_panelVBox->setSpacing(0);
36
37     m_panelBase = new QWidget(this);
38     m_panelBase->setLayout(m_panelVBox);
39
40     QPalette pal = palette();
41     pal.setColor(QPalette::Background, QColor(0, 0, 0, 128));
42     m_panelBase->setPalette(pal);
43     m_panelBase->setAutoFillBackground(true);
44
45     m_panelStateMachine = new QStateMachine(this);
46     m_panelStateClosed = new QState(m_panelStateMachine);
47     m_panelStateMachine->setInitialState(m_panelStateClosed);
48     m_panelStateOpened = new QState(m_panelStateMachine);
49
50     m_panelTransitionOpen = m_panelStateClosed->addTransition(
51             this, SIGNAL(toggleState()), m_panelStateOpened);
52     m_panelTransitionOpen->addAnimation(new QPropertyAnimation(this, "pos", this));
53
54     m_panelTransitionClose = m_panelStateOpened->addTransition(
55             this, SIGNAL(toggleState()), m_panelStateClosed);
56     m_panelTransitionClose->addAnimation(new QPropertyAnimation(this, "pos", this));
57
58     connect(m_panelStateClosed, SIGNAL(entered()),
59             this, SLOT(stateChangedToClosed()));
60     connect(m_panelStateOpened, SIGNAL(entered()),
61             this, SLOT(stateChangedToOpen()));
62
63     hide();
64 }
65
66 void SidePanel::openPanel()
67 {
68     qDebug() << __PRETTY_FUNCTION__;
69     if(!isOpen)
70     {
71         emit toggleState();
72     }
73 }
74
75 void SidePanel::closePanel()
76 {
77     qDebug() << __PRETTY_FUNCTION__;
78     if(isOpen)
79     {
80         emit toggleState();
81     }
82 }
83
84 void SidePanel::screenResized(const QSize &size)
85 {
86     qDebug() << __PRETTY_FUNCTION__;
87     if(currentType == SidePanel::UserPanel)
88     {
89         m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
90         resize(USERPANEL_WIDTH + SLIDINGBAR_WIDTH,SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
91     }
92     else if(currentType == SidePanel::FriendPanel)
93     {
94         resize(FRIENDPANEL_WIDTH + SLIDINGBAR_WIDTH, size.height() + MARGIN_CORRECTION);
95         m_panelBase->resize(FRIENDPANEL_WIDTH, size.height() + MARGIN_CORRECTION);
96         m_panelStateClosed->assignProperty(this, "pos", QPoint(
97                 size.width() - PANEL_PEEK_AMOUNT - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y));
98         m_panelStateOpened->assignProperty(this, "pos", QPoint(
99                 size.width() - FRIENDPANEL_WIDTH - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y));
100         move(size.width() - PANEL_PEEK_AMOUNT - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y);
101     }
102     else
103     {
104         qFatal("Illegal panel type in SidePanel::screenResized");
105     }
106 }
107
108 void SidePanel::setType(SidePanel::PanelType type)
109 {
110     qDebug() << __PRETTY_FUNCTION__;
111     if(type == SidePanel::UserPanel) {
112         currentType = type;
113         m_panelBase->move(TOP_CORNER_X,PANEL_TOP_Y);
114         m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
115
116         PanelSliderBar *m_panelSlidingBar = new PanelSliderBar(this, LEFT);
117         m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDINGBAR_WIDTH, PANEL_TOP_Y);
118
119         connect(m_panelSlidingBar, SIGNAL(clicked()),
120                 this, SIGNAL(toggleState()));
121
122         // set mask to allow clicking zoom button at their default position
123         setMask(QPixmap(":/res/images/userpanel_mask.png").mask());
124
125         m_panelStateClosed->assignProperty(this, "pos", QPoint(
126                 USERPANEL_CLOSED_X, PANEL_TOP_Y));
127         m_panelStateOpened->assignProperty(this, "pos", QPoint(
128                 USERPANEL_OPENED_X, PANEL_TOP_Y));
129         setObjectName("UserPanel");
130     }
131     else if (type == SidePanel::FriendPanel) {
132         currentType = type;
133         m_panelBase->move(TOP_CORNER_X + SLIDINGBAR_WIDTH,PANEL_TOP_Y);
134         m_panelBase->resize(FRIENDPANEL_WIDTH, FRIENDPANEL_HEIGHT);
135
136         m_panelSlidingBar = new PanelSliderBar(this, RIGHT);
137         m_panelSlidingBar->move(TOP_CORNER_X, PANEL_TOP_Y);
138
139         connect(m_panelSlidingBar, SIGNAL(clicked()),
140                 this, SIGNAL(toggleState()));
141
142         m_panelStateClosed->assignProperty(this, "pos", QPoint(
143                 FRIENDPANEL_CLOSED_X, PANEL_TOP_Y));
144         m_panelStateOpened->assignProperty(this, "pos", QPoint(
145                 FRIENDPANEL_OPENED_X, PANEL_TOP_Y));
146         setObjectName("FriendPanel");
147     }
148     else {
149         qFatal("Illegal type set for SidePanel::setType");
150     }
151     m_panelStateMachine->start();
152     show();
153 }
154
155 void SidePanel::stateChangedToClosed()
156 {
157     qDebug() << __PRETTY_FUNCTION__;
158     isOpen = false;
159 }
160
161 void SidePanel::stateChangedToOpen()
162 {
163     qDebug() << __PRETTY_FUNCTION__;
164     isOpen = true;
165 }