Modified FriendListView::clear method.
[situare] / src / ui / listviewscreen.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       Jukka Saastamoinen jukka.saastamoinen@ixonos.com
7
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.
11
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.
16
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,
20    USA.
21 */
22
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>
31 #include <QDebug>
32 #include <QScrollArea>
33
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"
41
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;
67
68 ListViewScreen::ListViewScreen(QWidget *parent)
69     : QWidget(parent)
70 {
71     //DEBUG
72     m_friendListView = new FriendListView(this);
73
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(),
77 //               QString(), 12.2);
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(),
81 //               QString(), 12.2);
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(),
87 //               QString(), 12.2);
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);
100 //
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);
107
108     QScrollArea *friendListScroll = new QScrollArea();
109     friendListScroll->setWidget(m_friendListView);
110     friendListScroll->setWidgetResizable(true);
111     //DEBUG
112
113
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");
125
126     qDebug() << "InfoTab width: " << m_personalInfo->width();
127     qDebug() << "InfoTab heigth: " << m_personalInfo->height();
128
129     m_locationDialog = new UpdateLocationDialog(this);
130     m_widgetProxy = new QGraphicsProxyWidget();
131     m_widgetProxy->setWidget(m_personalInfo);
132
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);
141     //DEBUG
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);
148     //DEBUG
149     m_leftSideBar->setPos(0,0);
150
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);
160
161
162     QStateMachine *machine = new QStateMachine(this);
163     machine->setGlobalRestorePolicy(QStateMachine::RestoreProperties);
164
165     QState *state1 = new QState(machine);
166     QState *state2 = new QState(machine);
167     machine->setInitialState(state1);
168
169     // State 1
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);
182
183     // State 2
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);
195
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);
211
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);
227     machine->start();
228
229     m_vbox = new QVBoxLayout(this);
230     m_vbox->addWidget(view);
231     //m_vbox->addWidget(friendListScroll);
232     m_vbox->setMargin(0);
233
234 //    connect(m_personalInfo,SIGNAL(launchMessageUpdate()),this,SLOT(updateMessage()));
235     setObjectName("List view");
236 }
237
238 ListViewScreen::~ListViewScreen()
239 {
240     delete m_personalInfo;
241     delete m_leftSideBar;
242     delete m_slidingLeftSideBar;
243     delete m_personalInfoBackGround;
244     delete m_arrowLeft;
245     delete m_arrowRight;
246     delete m_trans1;
247     delete m_trans2;
248     delete m_anim1;
249     delete m_anim2;
250     delete m_anim3;
251     delete m_anim4;
252     delete m_anim5;
253     delete m_anim6;
254     delete m_anim7;
255     delete m_anim8;
256     delete m_anim9;
257     delete m_anim10;
258     delete m_anim11;
259     delete m_anim12;
260     delete m_anim13;
261     delete m_anim14;
262     delete m_vbox;
263 }
264
265 void ListViewScreen::updateMessage()
266 {
267    qDebug() << __PRETTY_FUNCTION__;
268
269    m_locationDialog->exec();
270 }
271
272 void ListViewScreen::userDataChanged(User *user, QList<User *> &friends)
273 {
274     qDebug() << __PRETTY_FUNCTION__;
275
276     m_friendListView->clear();
277
278
279     foreach (User *user, friends) {
280         FriendListItem *item = new FriendListItem(m_friendListView);
281         item->setData(*user);
282         m_friendListView->addWidget(item);
283     }
284     
285     FriendListItem *item = new FriendListItem(m_friendListView);
286     item->setData(*user);
287     m_friendListView->addWidget(item);
288 }