Removed unnecessary images from res folder and made a few cosmetic changes
[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 #include <QAbstractState>
27
28 SidePanel::SidePanel(QWidget *parent) :
29     QWidget(parent),
30     m_isOpen(false)
31 {
32     qDebug() << __PRETTY_FUNCTION__;
33
34     currentType = SidePanel::None;
35     m_panelVBox = new QVBoxLayout(this);
36     m_panelVBox->setMargin(0);
37     m_panelVBox->setContentsMargins(SLIDINGBAR_WIDTH+1, 0, SIDEBAR_WIDTH, 0);
38     m_panelVBox->setSpacing(0);
39
40     m_panelBase = new QWidget(this);
41     m_panelBase->setLayout(m_panelVBox);
42
43     QPalette pal = palette();
44     pal.setColor(QPalette::Background, QColor(0, 0, 0, 128));
45     m_panelBase->setPalette(pal);
46     m_panelBase->setAutoFillBackground(true);
47
48     m_panelStateMachine = new QStateMachine(this);
49     m_panelStateClosed = new QState(m_panelStateMachine);
50     m_panelStateOpened = new QState(m_panelStateMachine);
51
52     m_panelStateMachine->setInitialState(m_panelStateClosed);
53
54     m_panelTransitionOpen = m_panelStateClosed->addTransition(
55             this, SIGNAL(toggleState()), m_panelStateOpened);
56     m_panelTransitionOpen->addAnimation(new QPropertyAnimation(this, "pos", this));
57
58     m_panelTransitionClose = m_panelStateOpened->addTransition(
59             this, SIGNAL(toggleState()), m_panelStateClosed);
60     m_panelTransitionClose->addAnimation(new QPropertyAnimation(this, "pos", this));
61
62     connect(m_panelStateClosed, SIGNAL(entered()),
63             this, SLOT(stateChangedToClosed()));
64     connect(m_panelStateOpened, SIGNAL(entered()),
65             this, SLOT(stateChangedToOpen()));
66     hide();
67 }
68
69 void SidePanel::openPanel()
70 {
71     qDebug() << __PRETTY_FUNCTION__;
72     
73     if(!m_isOpen)
74     {
75         emit toggleState();
76     }
77 }
78
79 void SidePanel::closePanel()
80 {
81     qDebug() << __PRETTY_FUNCTION__;
82     
83     if(m_isOpen)
84     {
85         emit toggleState();
86     }
87 }
88
89 void SidePanel::screenResized(const QSize &size)
90 {
91     qDebug() << __PRETTY_FUNCTION__;
92
93     if(currentType == SidePanel::UserPanel)
94     {
95         m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
96         resize(USERPANEL_WIDTH + SLIDINGBAR_WIDTH,SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
97     }
98     else if(currentType == SidePanel::FriendPanel)
99     {
100         resize(FRIENDPANEL_WIDTH + SLIDINGBAR_WIDTH, size.height() + MARGIN_CORRECTION);
101         m_panelBase->resize(FRIENDPANEL_WIDTH, size.height() + MARGIN_CORRECTION);
102         m_panelStateClosed->assignProperty(this, "pos", QPoint(
103                 size.width() - PANEL_PEEK_AMOUNT - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y));
104         m_panelStateOpened->assignProperty(this, "pos", QPoint(
105                 size.width() - FRIENDPANEL_WIDTH - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y));
106         move(size.width() - PANEL_PEEK_AMOUNT - SLIDINGBAR_WIDTH + MARGIN_CORRECTION, PANEL_TOP_Y);
107     }
108     else
109     {
110         qFatal("Illegal panel type in SidePanel::screenResized");
111     }
112 }
113
114 void SidePanel::setType(SidePanel::PanelType type)
115 {
116     qDebug() << __PRETTY_FUNCTION__;
117
118     if(currentType == SidePanel::None) {
119         if(type == SidePanel::UserPanel) {
120             currentType = type;
121             m_panelBase->move(TOP_CORNER_X,PANEL_TOP_Y);
122             m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
123
124             PanelSliderBar *m_panelSlidingBar = new PanelSliderBar(this, LEFT);
125             m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDINGBAR_WIDTH, PANEL_TOP_Y);
126
127             connect(m_panelSlidingBar, SIGNAL(clicked()),
128                     this, SIGNAL(toggleState()));
129
130             // set mask to allow clicking zoom button at their default position
131             setMask(QPixmap(":/res/images/userpanel_mask.png").mask());
132
133             m_panelStateClosed->assignProperty(this, "pos", QPoint(
134                     USERPANEL_CLOSED_X, PANEL_TOP_Y));
135             m_panelStateOpened->assignProperty(this, "pos", QPoint(
136                     USERPANEL_OPENED_X, PANEL_TOP_Y));
137             setObjectName("UserPanel");
138         }
139         else if (type == SidePanel::FriendPanel) {
140             currentType = type;
141             m_panelBase->move(TOP_CORNER_X + SLIDINGBAR_WIDTH,PANEL_TOP_Y);
142             m_panelBase->resize(FRIENDPANEL_WIDTH, FRIENDPANEL_HEIGHT);
143
144             m_panelSlidingBar = new PanelSliderBar(this, RIGHT);
145             m_panelSlidingBar->move(TOP_CORNER_X, PANEL_TOP_Y);
146
147             connect(m_panelSlidingBar, SIGNAL(clicked()),
148                     this, SIGNAL(toggleState()));
149
150             m_panelStateClosed->assignProperty(this, "pos", QPoint(
151                     FRIENDPANEL_CLOSED_X, PANEL_TOP_Y));
152             m_panelStateOpened->assignProperty(this, "pos", QPoint(
153                     FRIENDPANEL_OPENED_X, PANEL_TOP_Y));
154             setObjectName("FriendPanel");
155         }
156         else {
157             qWarning() << "In" << __PRETTY_FUNCTION__ << ":" << type;
158             qFatal("Illegal type set for SidePanel::setType");
159         }
160         m_panelStateMachine->start();
161         show();
162     }
163     else {
164         qWarning() << "Illegally tried to set type multiple times at SidePanel::setType";
165     }
166 }
167
168 void SidePanel::stateChangedToClosed()
169 {
170     qDebug() << __PRETTY_FUNCTION__;
171     
172     m_isOpen = false;
173     emit panelClosed();
174 }
175
176 void SidePanel::stateChangedToOpen()
177 {
178     qDebug() << __PRETTY_FUNCTION__;
179     
180     m_isOpen = true;
181     emit panelOpened();
182 }