2 Situare - A location system for Facebook
3 Copyright (C) 2010 Ixonos Plc. Authors:
5 Kaj Wallin - kaj.wallin@ixonos.com
6 Jukka Saastamoinen jukka.saastamoinen@ixonos.com
8 Situare is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 version 2 as published by the Free Software Foundation.
12 Situare is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Situare; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
23 #include <QGraphicsScene>
24 #include <QGraphicsView>
25 #include <QGraphicsWidget>
26 #include <QtGui/QVBoxLayout>
27 #include <QGraphicsProxyWidget>
28 #include <QStateMachine>
29 #include <QtGui/QGraphicsTransform>
30 #include <QtGui/QGraphicsRotation>
32 #include <QScrollArea>
34 #include "listviewscreen.h"
35 #include "friendlistitemdelegate.h"
36 #include "friendlistview.h"
37 #include "friendlistitem.h"
38 #include "friendlistmodel.h"
39 #include "user/user.h"
40 #include "situareuser.h"
42 const int INFOTAB_Y_LOC_STATE1 = 71;
43 const int INFOTAB_X_LOC_STATE2 = 59;
44 const int INFOTAB_Y_LOC_STATE2 = 71;
45 const int LEFTBAR_X_LOC = 0;
46 const int LEFTBAR_Y_LOC = 0;
47 const int SLIDING_BAR_X_LOC_STATE1 = 0;
48 const int SLIDING_BAR_Y_LOC_STATE1 = 0;
49 const int BACKGROUND_X_LOC_STATE1 = 400;
50 const int BACKGROUND_Y_LOC_STATE1 = 0;
51 const int RIGHTARROW_X_LOC_STATE1 = 9;
52 const int RIGHTARROW_Y_LOC_STATE1 = 205;
53 const int LEFTARROW_X_LOC_STATE1 = 9;
54 const int LEFTARROW_Y_LOC_STATE1 = 205;
55 const int PROXYWIDGET_X_LOC_STATE1 = 59;
56 const int PROXYWIDGET_Y_LOC_STATE1 = 71;
57 const int SLIDING_BAR_X_LOC_STATE2 = 376;
58 const int SLIDING_BAR_Y_LOC_STATE2 = 0;
59 const int BACKGROUND_X_LOC_STATE2 = 0;
60 const int BACKGROUND_Y_LOC_STATE2 = 0;
61 const int RIGHTARROW_X_LOC_STATE2 = 385;
62 const int RIGHTARROW_Y_LOC_STATE2 = 205;
63 const int LEFTARROW_X_LOC_STATE2 = 385;
64 const int LEFTARROW_Y_LOC_STATE2 = 205;
65 const int PROXYWIDGET_X_LOC_STATE2 = 59;
66 const int PROXYWIDGET_Y_LOC_STATE2 = 71;
68 ListViewScreen::ListViewScreen(QWidget *parent)
72 m_friendListView = new FriendListView(this);
74 // User user1(QString("Kiviharjunlenkki 1E, 91910 Oulu"), QPointF(25.5, 65), QString("User 1"),
75 // QString("Hello Maemo Situare!"), QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago" \
76 // " 2 days ago 2 days ago 2 days ago"), false, QString(),
78 // User user2(QString("Kiviharjunlenkki 1E, 91910 Oulu"), QPointF(25.5, 65), QString("User 2"),
79 // QString("Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare!"),
80 // QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago"), false, QString(),
82 // User user3(QString("Kiviharjunlenkki 1E, 91910 Oulu"), QPointF(25.5, 65), QString("User 2"),
83 // QString("Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare!" \
84 // "Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare! " \
85 // "Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare! "),
86 // QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago"), false, QString(),
88 // FriendListItem *item1 = new FriendListItem(m_friendListView);
89 // item1->setData(user1);
90 // FriendListItem *item2 = new FriendListItem(m_friendListView);
91 // item2->setData(user1);
92 // FriendListItem *item3 = new FriendListItem(m_friendListView);
93 // item3->setData(user1);
94 // FriendListItem *item4 = new FriendListItem(m_friendListView);
95 // item4->setData(user2);
96 // FriendListItem *item5 = new FriendListItem(m_friendListView);
97 // item5->setData(user3);
98 // FriendListItem *item6 = new FriendListItem(m_friendListView);
99 // item6->setData(user1);
101 // m_friendListView->addWidget(item1);
102 // m_friendListView->addWidget(item2);
103 // m_friendListView->addWidget(item3);
104 // m_friendListView->addWidget(item4);
105 // m_friendListView->addWidget(item5);
106 // m_friendListView->addWidget(item6);
108 QScrollArea *friendListScroll = new QScrollArea();
109 friendListScroll->setWidget(m_friendListView);
110 friendListScroll->setWidgetResizable(true);
114 m_leftSideBar = new Pixmap(QPixmap(":/res/images/side_bar_left.png"));
115 m_slidingLeftSideBar = new Pixmap(QPixmap(":/res/images/sliding_bar_left.png"));
116 m_personalInfoBackGround = new Pixmap(QPixmap(":/res/images/personal_info_bckgrnd.png"));
117 m_arrowLeft = new Pixmap(QPixmap(":/res/images/arrow_left.png"));
118 m_arrowRight = new Pixmap(QPixmap(":/res/images/arrow_right.png"));
119 m_personalInfo = new InfoTab;
120 m_personalInfo->setAvatar(QPixmap(":/res/images/situare_user.jpg"));
121 m_personalInfo->setUserName("Fred Facebook");
122 m_personalInfo->setMessageText("Hello Maemo Situare !");
123 m_personalInfo->setTime("1 hour ago");
124 m_personalInfo->setAddress("Kiviharjunlenkki 1E, 91910 Oulu");
126 qDebug() << "InfoTab width: " << m_personalInfo->width();
127 qDebug() << "InfoTab heigth: " << m_personalInfo->height();
129 m_locationDialog = new UpdateLocationDialog(this);
130 m_widgetProxy = new QGraphicsProxyWidget();
131 m_widgetProxy->setWidget(m_personalInfo);
133 QGraphicsScene *scene= new QGraphicsScene(this);
134 scene->setBackgroundBrush(Qt::black);
135 scene->addItem(m_personalInfoBackGround);
136 scene->addItem(m_widgetProxy);
137 scene->addItem(m_leftSideBar);
138 scene->addItem(m_slidingLeftSideBar);
139 scene->addItem(m_arrowRight);
140 scene->addItem(m_arrowLeft);
142 QGraphicsProxyWidget *scrollProxy = new QGraphicsProxyWidget();
143 scrollProxy->setWidget(friendListScroll);
144 scrollProxy->setZValue(m_personalInfoBackGround->zValue() - 3);
145 scrollProxy->setMinimumSize(790 - 400, 480 - 56);
146 scene->addItem(scrollProxy);
147 scrollProxy->setPos(410, 0);
149 m_leftSideBar->setPos(0,0);
151 QGraphicsView *view = new QGraphicsView(scene);
152 view->setAlignment(Qt::AlignLeft|Qt::AlignTop);
153 view->setSceneRect(0,0,7000,3000);
154 view->centerOn(QPointF(0,0));
155 view->setFrameStyle(0);
156 view->setAlignment(Qt::AlignLeft | Qt::AlignTop);
157 view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
158 view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
159 view->setBackgroundBrush(Qt::black);
162 QStateMachine *machine = new QStateMachine(this);
163 machine->setGlobalRestorePolicy(QStateMachine::RestoreProperties);
165 QState *state1 = new QState(machine);
166 QState *state2 = new QState(machine);
167 machine->setInitialState(state1);
170 state1->assignProperty(m_widgetProxy,"pos",QPointF(-m_personalInfo->width(),
171 INFOTAB_Y_LOC_STATE1));
172 state1->assignProperty(m_slidingLeftSideBar,"pos",
173 QPointF(SLIDING_BAR_X_LOC_STATE1,SLIDING_BAR_Y_LOC_STATE1));
174 state1->assignProperty(m_personalInfoBackGround,"pos",
175 QPointF(-BACKGROUND_X_LOC_STATE1,BACKGROUND_Y_LOC_STATE1));
176 state1->assignProperty(m_arrowRight,"pos", QPointF(RIGHTARROW_X_LOC_STATE1,
177 RIGHTARROW_Y_LOC_STATE1));
178 state1->assignProperty(m_arrowLeft,"pos", QPointF(LEFTARROW_X_LOC_STATE2,
179 LEFTARROW_Y_LOC_STATE2));
180 state1->assignProperty(m_arrowRight,"visible", true);
181 state1->assignProperty(m_arrowLeft,"visible", false);
184 state2->assignProperty(m_widgetProxy,"pos",QPointF(INFOTAB_X_LOC_STATE2,INFOTAB_Y_LOC_STATE2));
185 state2->assignProperty(m_slidingLeftSideBar,"pos",QPointF(SLIDING_BAR_X_LOC_STATE2,
186 SLIDING_BAR_Y_LOC_STATE2));
187 state2->assignProperty(m_personalInfoBackGround,"pos",QPointF(BACKGROUND_X_LOC_STATE2,
188 BACKGROUND_Y_LOC_STATE2));
189 state2->assignProperty(m_arrowRight,"pos", QPointF(RIGHTARROW_X_LOC_STATE2,
190 RIGHTARROW_Y_LOC_STATE2));
191 state2->assignProperty(m_arrowLeft,"pos", QPointF(LEFTARROW_X_LOC_STATE2,
192 LEFTARROW_Y_LOC_STATE2));
193 state2->assignProperty(m_arrowRight,"visible", false);
194 state2->assignProperty(m_arrowLeft,"visible", true);
196 m_trans1 = state1->addTransition(m_slidingLeftSideBar,SIGNAL(clicked()),state2);
197 m_anim1 = new QPropertyAnimation(m_widgetProxy,"pos");
198 m_anim2 = new QPropertyAnimation(m_slidingLeftSideBar,"pos");
199 m_anim3 = new QPropertyAnimation(m_personalInfoBackGround,"pos");
200 m_anim4 = new QPropertyAnimation(m_arrowRight,"pos");
201 m_anim5 = new QPropertyAnimation(m_arrowLeft,"pos");
202 m_anim6 = new QPropertyAnimation(m_arrowRight,"visible");
203 m_anim7 = new QPropertyAnimation(m_arrowLeft,"visible");
204 m_trans1->addAnimation(m_anim1);
205 m_trans1->addAnimation(m_anim2);
206 m_trans1->addAnimation(m_anim3);
207 m_trans1->addAnimation(m_anim4);
208 m_trans1->addAnimation(m_anim5);
209 m_trans1->addAnimation(m_anim6);
210 m_trans1->addAnimation(m_anim7);
212 m_trans2 = state2->addTransition(m_slidingLeftSideBar,SIGNAL(clicked()),state1);
213 m_anim8 = new QPropertyAnimation(m_widgetProxy,"pos");
214 m_anim9 = new QPropertyAnimation(m_slidingLeftSideBar,"pos");
215 m_anim10 = new QPropertyAnimation(m_personalInfoBackGround,"pos");
216 m_anim11 = new QPropertyAnimation(m_arrowRight,"pos");
217 m_anim12 = new QPropertyAnimation(m_arrowLeft,"pos");
218 m_anim13 = new QPropertyAnimation(m_arrowRight,"visible");
219 m_anim14 = new QPropertyAnimation(m_arrowLeft,"visible");
220 m_trans2->addAnimation(m_anim8);
221 m_trans2->addAnimation(m_anim9);
222 m_trans2->addAnimation(m_anim10);
223 m_trans2->addAnimation(m_anim11);
224 m_trans2->addAnimation(m_anim12);
225 m_trans2->addAnimation(m_anim13);
226 m_trans2->addAnimation(m_anim14);
229 m_vbox = new QVBoxLayout(this);
230 m_vbox->addWidget(view);
231 //m_vbox->addWidget(friendListScroll);
232 m_vbox->setMargin(0);
234 // connect(m_personalInfo,SIGNAL(launchMessageUpdate()),this,SLOT(updateMessage()));
235 setObjectName("List view");
238 ListViewScreen::~ListViewScreen()
240 delete m_personalInfo;
241 delete m_leftSideBar;
242 delete m_slidingLeftSideBar;
243 delete m_personalInfoBackGround;
265 void ListViewScreen::updateMessage()
267 qDebug() << __PRETTY_FUNCTION__;
269 m_locationDialog->exec();
272 void ListViewScreen::userDataChanged(User *user, QList<User *> &friends)
274 qDebug() << __PRETTY_FUNCTION__;
276 m_friendListView->clear();
279 foreach (User *user, friends) {
280 FriendListItem *item = new FriendListItem(m_friendListView);
281 item->setData(*user);
282 m_friendListView->addWidget(item);
285 FriendListItem *item = new FriendListItem(m_friendListView);
286 item->setData(*user);
287 m_friendListView->addWidget(item);