Modified TagsDialog.
[situare] / src / ui / messagepanel.cpp
1 /*
2     Situare - A location system for Facebook
3     Copyright (C) 2010  Ixonos Plc. Authors:
4
5         Jussi Laitinen - jussi.laitinen@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 #include <QDebug>
23 #include <QVBoxLayout>
24
25 #include "extendedlistitemdelegate.h"
26 #include "imagebutton.h"
27 #include "headerlistitemdelegate.h"
28 #include "messagelistitem.h"
29 #include "messagelistview.h"
30 #include "panelcommon.h"
31 #include "situareservice/message.h"
32
33 #include "messagepanel.h"
34
35 MessagePanel::MessagePanel(QWidget *parent)
36     : PanelBase(parent),
37       m_headerListItemDelegate(0)
38 {
39     qDebug() << __PRETTY_FUNCTION__;
40
41     // --- MAIN LAYOUT ---
42     QVBoxLayout *messageLayout = new QVBoxLayout;
43     messageLayout->setMargin(0);
44     messageLayout->setSpacing(0);
45     setLayout(messageLayout);
46
47     QVBoxLayout *listViewLayout = new QVBoxLayout;
48     listViewLayout->setContentsMargins(PANEL_MARGIN_LEFT, PANEL_MARGIN_TOP,
49                                        PANEL_MARGIN_RIGHT, PANEL_MARGIN_BOTTOM);
50     messageLayout->addLayout(listViewLayout);
51
52     ImageButton *refreshMessagesButton = new ImageButton(":/res/images/refresh.png",
53                                                               ":/res/images/refresh_s.png",
54                                                               "", this);
55     connect(refreshMessagesButton, SIGNAL(clicked()),
56             this, SIGNAL(requestMessages()));
57
58     ImageButton *messageButton = new ImageButton(":/res/images/chat_btn.png",
59                                                  ":/res/images/chat_btn_s.png",
60                                                  ":/res/images/chat_btn_d.png", this);
61     connect(messageButton, SIGNAL(clicked()),
62             this, SLOT(messageButtonPressed()));
63
64     ImageButton *deleteMessageButton = new ImageButton(":res/images/message_remove_btn.png",
65                                           ":res/images/message_remove_btn_s.png",
66                                           ":res/images/message_remove_btn_d.png", this);
67     connect(deleteMessageButton, SIGNAL(clicked()),
68             this, SLOT(removeMessage()));
69
70     m_messageListView = new MessageListView(this);
71     m_messageListItemDelegate = new ExtendedListItemDelegate(this);
72     m_headerListItemDelegate = new HeaderListItemDelegate(this);
73     initItemDelegates();
74
75     listViewLayout->addWidget(m_messageListView);
76     connect(m_messageListView, SIGNAL(listItemSelectionChanged()),
77             this, SLOT(onListItemSelectionChanged()));
78     connect(m_messageListView, SIGNAL(messageItemClicked(GeoCoordinate)),
79             this, SIGNAL(findFriend(GeoCoordinate)));
80
81     m_itemButtonsLayout->addWidget(messageButton);
82     m_itemButtonsLayout->addWidget(deleteMessageButton);
83
84     m_genericButtonsLayout->addWidget(refreshMessagesButton);
85 }
86
87 void MessagePanel::anyPanelClosed()
88 {
89     qDebug() << __PRETTY_FUNCTION__;
90
91     m_messageListView->clearItemSelection();
92 }
93
94 void MessagePanel::removeMessage()
95 {
96     qDebug() << __PRETTY_FUNCTION__;
97
98     MessageListItem *item = dynamic_cast<MessageListItem *>(m_messageListView->selectedItem());
99
100     if (item)
101         emit requestRemoveMessage(item->id());
102 }
103
104 void MessagePanel::hideEvent(QHideEvent *event)
105 {
106     qDebug() << __PRETTY_FUNCTION__;
107
108     QWidget::hideEvent(event);
109
110     m_messageListView->clearItemSelection();
111 }
112
113 void MessagePanel::initItemDelegates()
114 {
115     qDebug() << __PRETTY_FUNCTION__;
116
117     m_messageListView->setItemDelegate(m_messageListItemDelegate);
118
119     if (m_headerListItemDelegate)
120         delete m_headerListItemDelegate;
121     m_headerListItemDelegate = new HeaderListItemDelegate(this);
122
123 }
124
125 void MessagePanel::messageButtonPressed()
126 {
127     qDebug() << __PRETTY_FUNCTION__;
128
129     MessageListItem *messageItem = dynamic_cast<MessageListItem*>(
130             m_messageListView->selectedItem());
131
132     if (messageItem) {
133         m_messageListView->clearItemSelection();
134         emit requestMessageDialog(QPair<QString, QString>(messageItem->receiverId(),
135                                                           messageItem->title()));
136     }
137 }
138
139 void MessagePanel::populateMessageListView(QList<Message> &received, QList<Message> &sent)
140 {
141     qDebug() << __PRETTY_FUNCTION__;
142
143     m_messageListView->clearList();
144     initItemDelegates();
145
146     if (received.count() > 0) {
147         m_messageListView->setItemDelegateForRow(0, m_headerListItemDelegate);
148         ExtendedListItem *receivedHeaderItem = new ExtendedListItem(0, QListWidgetItem::UserType);
149         receivedHeaderItem->setTitle(tr("Received:"));
150         m_messageListView->addListItem(QString("receivedHeader"), receivedHeaderItem);
151
152         foreach (Message message, received) {
153             MessageListItem *item = new MessageListItem();
154             item->setMessageData(message);
155             m_messageListView->addListItem(message.id(), item);
156         }
157     }
158
159     if (sent.count() > 0) {
160         m_messageListView->setItemDelegateForRow(m_messageListView->count(),
161                                                  m_headerListItemDelegate);
162         ExtendedListItem *sentHeaderItem = new ExtendedListItem(0, QListWidgetItem::UserType);
163         sentHeaderItem->setTitle(tr("Sent:"));
164         m_messageListView->addListItem(QString("sentHeader"), sentHeaderItem);
165
166         foreach (Message message, sent) {
167             MessageListItem *item = new MessageListItem();
168             item->setMessageData(message);
169             m_messageListView->addListItem(message.id(), item);
170         }
171     }
172 }
173
174 void MessagePanel::setImage(const QString &id, const QPixmap &image)
175 {
176     qDebug() << __PRETTY_FUNCTION__;
177
178     MessageListItem *item = dynamic_cast<MessageListItem*>(
179             m_messageListView->listItem(id));
180
181     if (item)
182         item->setImage(image);
183 }
184