2 Situare - A location system for Facebook
3 Copyright (C) 2010 Ixonos Plc. Authors:
5 Kaj Wallin - kaj.wallin@ixonos.com
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.
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.
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,
23 #include "sidepanel.h"
24 #include "panelsliderbar.h"
25 #include "panelsidebar.h"
26 #include <QAbstractState>
28 SidePanel::SidePanel(QWidget *parent) :
32 qDebug() << __PRETTY_FUNCTION__;
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);
40 m_panelBase = new QWidget(this);
41 m_panelBase->setLayout(m_panelVBox);
43 QPalette pal = palette();
44 pal.setColor(QPalette::Background, QColor(0, 0, 0, 128));
45 m_panelBase->setPalette(pal);
46 m_panelBase->setAutoFillBackground(true);
48 m_panelStateMachine = new QStateMachine(this);
49 m_panelStateClosed = new QState(m_panelStateMachine);
50 m_panelStateOpened = new QState(m_panelStateMachine);
52 m_panelStateMachine->setInitialState(m_panelStateClosed);
54 m_panelTransitionOpen = m_panelStateClosed->addTransition(
55 this, SIGNAL(toggleState()), m_panelStateOpened);
56 m_panelTransitionOpen->addAnimation(new QPropertyAnimation(this, "pos", this));
58 m_panelTransitionClose = m_panelStateOpened->addTransition(
59 this, SIGNAL(toggleState()), m_panelStateClosed);
60 m_panelTransitionClose->addAnimation(new QPropertyAnimation(this, "pos", this));
62 connect(m_panelStateClosed, SIGNAL(entered()),
63 this, SLOT(stateChangedToClosed()));
64 connect(m_panelStateOpened, SIGNAL(entered()),
65 this, SLOT(stateChangedToOpen()));
69 void SidePanel::openPanel()
71 qDebug() << __PRETTY_FUNCTION__;
79 void SidePanel::closePanel()
81 qDebug() << __PRETTY_FUNCTION__;
89 void SidePanel::screenResized(const QSize &size)
91 qDebug() << __PRETTY_FUNCTION__;
93 if(currentType == SidePanel::UserPanel)
95 m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
96 resize(USERPANEL_WIDTH + SLIDINGBAR_WIDTH,SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
98 else if(currentType == SidePanel::FriendPanel)
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);
110 qFatal("Illegal panel type in SidePanel::screenResized");
114 void SidePanel::setType(SidePanel::PanelType type)
116 qDebug() << __PRETTY_FUNCTION__;
118 if(currentType == SidePanel::None) {
119 if(type == SidePanel::UserPanel) {
121 m_panelBase->move(TOP_CORNER_X,PANEL_TOP_Y);
122 m_panelBase->resize(USERPANEL_WIDTH, SLIDINGBAR_HEIGHT + MARGIN_CORRECTION);
124 PanelSliderBar *m_panelSlidingBar = new PanelSliderBar(this, LEFT);
125 m_panelSlidingBar->move(USERPANEL_WIDTH - SLIDINGBAR_WIDTH, PANEL_TOP_Y);
127 connect(m_panelSlidingBar, SIGNAL(clicked()),
128 this, SIGNAL(toggleState()));
130 // set mask to allow clicking zoom button at their default position
131 setMask(QPixmap(":/res/images/userpanel_mask.png").mask());
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");
139 else if (type == SidePanel::FriendPanel) {
141 m_panelBase->move(TOP_CORNER_X + SLIDINGBAR_WIDTH,PANEL_TOP_Y);
142 m_panelBase->resize(FRIENDPANEL_WIDTH, FRIENDPANEL_HEIGHT);
144 m_panelSlidingBar = new PanelSliderBar(this, RIGHT);
145 m_panelSlidingBar->move(TOP_CORNER_X, PANEL_TOP_Y);
147 connect(m_panelSlidingBar, SIGNAL(clicked()),
148 this, SIGNAL(toggleState()));
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");
157 qWarning() << "In" << __PRETTY_FUNCTION__ << ":" << type;
158 qFatal("Illegal type set for SidePanel::setType");
160 m_panelStateMachine->start();
164 qWarning() << "Illegally tried to set type multiple times at SidePanel::setType";
168 void SidePanel::stateChangedToClosed()
170 qDebug() << __PRETTY_FUNCTION__;
176 void SidePanel::stateChangedToOpen()
178 qDebug() << __PRETTY_FUNCTION__;