return false;
}
-bool GeoCoordinate::isValid()
+bool GeoCoordinate::isValid() const
{
qDebug() << __PRETTY_FUNCTION__;
*
* @return true if coordinate is valid, false otherwise
*/
- bool isValid();
+ bool isValid() const;
/**
* @brief Returns the latitude value
connect(m_situareService, SIGNAL(interestingPeopleReceived(QList<User>&)),
m_ui, SIGNAL(interestingPeopleReceived(QList<User>&)));
- connect(m_situareService, SIGNAL(messagesReceived(QList<Message>&)),
- m_ui, SIGNAL(messagesReceived(QList<Message>&)));
+ connect(m_situareService, SIGNAL(messagesReceived(QList<Message>&, QList<Message> &)),
+ m_ui, SIGNAL(messagesReceived(QList<Message>&, QList<Message>&)));
}
void SituareEngine::startAutomaticUpdate()
if (m_networkAccessManager->isConnected()) {
if (successfulMethod == SituareService::SuccessfulUpdateLocation)
m_situareService->fetchLocations();
- else if (successfulMethod == SituareService::SuccessfulRemoveMessage)
+ else if ((successfulMethod == SituareService::SuccessfulRemoveMessage) ||
+ (successfulMethod == SituareService::SuccessfulSendMessage))
m_situareService->fetchMessages();
+ else if ((successfulMethod == SituareService::SuccessfulAddTags) ||
+ (successfulMethod == SituareService::SuccessfulRemoveTags))
+ m_situareService->fetchLocations();
} else {
error(ErrorContext::NETWORK, QNetworkReply::UnknownNetworkError);
}
"id INTEGER PRIMARY KEY,"
"senderid INTEGER,"
"receiverid INTEGER,"
- "read INTEGER,"
"timestamp VARCHAR(20),"
"text TEXT,"
+ "latitude REAL,"
+ "longitude REAL,"
"FOREIGN KEY(senderid) REFERENCES user(id),"
"FOREIGN KEY(receiverid) REFERENCES user(id)"
")");
//People start
QString result;
- result.append("{\"people\": [");
+ result.append("{\"people\": {");
QHash<QString, QString> tags;
- //Get friends
+ //Get all
QSqlQuery tagQuery(QString("SELECT usertag.userid, tag.name FROM usertag, tag WHERE "
"usertag.tagid IN (SELECT usertag.tagid FROM usertag WHERE "
"usertag.userid = '%1') AND usertag.userid != '%2' "
}
}
- QStringList userIds;
+ QStringList friendIds;
QHashIterator<QString, QString> i(tags);
while (i.hasNext())
- userIds.append(i.next().key());
+ friendIds.append(i.next().key());
- QSqlQuery userQuery(QString("SELECT user.id, user.name, user.image_url FROM user WHERE "
- "user.id IN (") + userIds.join(", ") + QString(") AND "
+ result.append("\"friends\": [");
+
+ //Get friends
+ //(SELECT friend.uid2 FROM friend WHERE friend.uid1 = 613374451
+ //UNION
+ //SELECT friend.uid1 FROM friend WHERE friend.uid2 = 613374451)
+
+ QSqlQuery friendQuery(QString("SELECT user.id, user.name, user.image_url FROM user WHERE "
+ "user.id IN (") + friendIds.join(", ") + QString(") AND "
"user.latitude >= '%1' AND user.latitude < '%2' AND "
"user.longitude >= '%3' AND user.longitude < '%4'")
.arg(southWestCoordinates.latitude()).arg(northEastCoordinates.latitude())
.arg(southWestCoordinates.longitude()).arg(northEastCoordinates.longitude()));
- while (userQuery.next()) {
+ while (friendQuery.next()) {
result.append("{");
- result.append("\"uid\": \"" + userQuery.value(0).toString() + "\",");
- result.append("\"name\": \"" + userQuery.value(1).toString() + "\",");
- result.append("\"image_url\": \"" + userQuery.value(2).toString() + "\",");
- result.append("\"tags\": [" + tags.value(userQuery.value(0).toString()) + "]");
+ result.append("\"uid\": \"" + friendQuery.value(0).toString() + "\",");
+ result.append("\"name\": \"" + friendQuery.value(1).toString() + "\",");
+ result.append("\"image_url\": \"" + friendQuery.value(2).toString() + "\",");
+ result.append("\"tags\": [" + tags.value(friendQuery.value(0).toString()) + "]");
result.append("},");
}
- int lastComma = result.lastIndexOf(",");
- if (lastComma != -1)
+ int friendLastComma = result.lastIndexOf(",");
+ if (friendLastComma != -1)
+ result.remove(result.lastIndexOf(","), 1);
+
+ result.append("],");
+
+ QSqlQuery othersQuery(QString("SELECT user.id, user.name, user.image_url FROM user WHERE "
+ "user.id IN (") + friendIds.join(", ") + QString(") AND "
+ "user.latitude >= '%1' AND user.latitude < '%2' AND "
+ "user.longitude >= '%3' AND user.longitude < '%4'")
+ .arg(southWestCoordinates.latitude()).arg(northEastCoordinates.latitude())
+ .arg(southWestCoordinates.longitude()).arg(northEastCoordinates.longitude()));
+
+ while (othersQuery.next()) {
+ result.append("{");
+ result.append("\"uid\": \"" + othersQuery.value(0).toString() + "\",");
+ result.append("\"name\": \"" + othersQuery.value(1).toString() + "\",");
+ result.append("\"image_url\": \"" + othersQuery.value(2).toString() + "\",");
+ result.append("\"tags\": [" + tags.value(othersQuery.value(0).toString()) + "]");
+ result.append("},");
+ }
+
+ int friendLastComma = result.lastIndexOf(",");
+ if (friendLastComma != -1)
result.remove(result.lastIndexOf(","), 1);
+ result.append("]");
+
//People end
- result.append("]}");
+ result.append("}}");
return result.toUtf8();
}
{
qDebug() << __PRETTY_FUNCTION__;
- QSqlQuery query(QString("SELECT notification.id, notification.senderid, user.name, "
- "user.image_url, notification.timestamp, notification.text "
- "FROM notification, user WHERE notification.receiverid = '%1' "
- "AND notification.senderid = user.id").arg(userId));
-
QString result;
- result.append("{\"messages\": [");
+ result.append("{\"messages\": {");
+
+ //Received
+ QSqlQuery receivedQuery(QString("SELECT notification.id, notification.senderid, "
+ "notification.receiverid, user.name, user.image_url, "
+ "notification.timestamp, notification.text, "
+ "notification.latitude, notification.longitude "
+ "FROM notification, user WHERE notification.receiverid = '%1' AND "
+ "notification.senderid = user.id "
+ "ORDER BY notification.timestamp DESC")
+ .arg(userId));
+
+ result.append("\"received\": [");
+
+ while (receivedQuery.next()) {
+ result.append("{");
+ result.append("\"id\": \"" + receivedQuery.value(0).toString() + "\",");
+ result.append("\"sender_id\": \"" + receivedQuery.value(1).toString() + "\",");
+ result.append("\"receiver_id\": \"" + receivedQuery.value(2).toString() + "\",");
+ result.append("\"sender_name\": \"" + receivedQuery.value(3).toString() + "\",");
+ result.append("\"image_url\": \"" + receivedQuery.value(4).toString() + "\",");
+ result.append("\"timestamp\": \"" + receivedQuery.value(5).toString() + "\",");
+ result.append("\"text\": \"" + receivedQuery.value(6).toString() + "\",");
+ result.append("\"latitude\": \"" + receivedQuery.value(7).toString() + "\",");
+ result.append("\"longitude\": \"" + receivedQuery.value(8).toString() + "\"");
+ result.append("},");
+ }
+
+ int receivedLastComma = result.lastIndexOf(",");
+ if (receivedLastComma != -1)
+ result.remove(result.lastIndexOf(","), 1);
+
+ result.append("],");
+
+ //Sent
+ QSqlQuery sentQuery(QString("SELECT notification.id, notification.senderid, "
+ "notification.receiverid, user.name, user.image_url, "
+ "notification.timestamp, notification.text, "
+ "notification.latitude, notification.longitude "
+ "FROM notification, user WHERE notification.senderid = '%1' AND "
+ "notification.receiverid = user.id "
+ "ORDER BY notification.timestamp DESC")
+ .arg(userId));
- while (query.next()) {
+ result.append("\"sent\": [");
+
+ while (sentQuery.next()) {
result.append("{");
- result.append("\"id\": \"" + query.value(0).toString() + "\",");
- result.append("\"sender_id\": \"" + query.value(1).toString() + "\",");
- result.append("\"sender_name\": \"" + query.value(2).toString() + "\",");
- result.append("\"image_url\": \"" + query.value(3).toString() + "\",");
- result.append("\"timestamp\": \"" + query.value(4).toString() + "\",");
- result.append("\"text\": \"" + query.value(5).toString() + "\"");
+ result.append("\"id\": \"" + sentQuery.value(0).toString() + "\",");
+ result.append("\"sender_id\": \"" + sentQuery.value(1).toString() + "\",");
+ result.append("\"receiver_id\": \"" + sentQuery.value(2).toString() + "\",");
+ result.append("\"sender_name\": \"" + sentQuery.value(3).toString() + "\",");
+ result.append("\"image_url\": \"" + sentQuery.value(4).toString() + "\",");
+ result.append("\"timestamp\": \"" + sentQuery.value(5).toString() + "\",");
+ result.append("\"text\": \"" + sentQuery.value(6).toString() + "\",");
+ result.append("\"latitude\": \"" + sentQuery.value(7).toString() + "\",");
+ result.append("\"longitude\": \"" + sentQuery.value(8).toString() + "\"");
result.append("},");
}
if (lastComma != -1)
result.remove(result.lastIndexOf(","), 1);
- result.append("]}");
+ result.append("]");
+
+ result.append("}}");
return result.toUtf8();
}
QSqlQuery removeMessageQuery;
return removeMessageQuery.exec(QString("DELETE FROM notification WHERE "
- "notification.receiverid = '%1' AND "
+ "(notification.receiverid = '%1' OR "
+ "notification.senderid = '%1') AND "
"notification.id = '%2'").arg(userId).arg(id));
}
QSqlQuery sendMessageQuery;
- return sendMessageQuery.exec(QString("INSERT INTO notification VALUES("
- "NULL, '%1', '%2', strftime('%s','now'), '%3', '%4', '%5')")
+ bool returnValue;
+
+ if (coordinates.isValid()) {
+ returnValue = sendMessageQuery.exec(QString("INSERT INTO notification VALUES("
+ "NULL, '%1', '%2', strftime('%s','now'), '%3', '%4', '%5')")
.arg(senderId).arg(receiverId).arg(message).arg(coordinates.latitude()).
arg(coordinates.longitude()));
+ } else {
+ returnValue = sendMessageQuery.exec(QString("INSERT INTO notification VALUES("
+ "NULL, '%1', '%2', strftime('%s','now'), '%3', NULL, NULL)")
+ .arg(senderId).arg(receiverId).arg(message));
+ }
+
+ return returnValue;
}
#include "message.h"
-Message::Message()
+Message::Message(const Type type)
: m_timestamp(QDateTime()),
m_id(QString()),
m_image(QPixmap()),
+ m_receiverId(QString()),
m_senderId(QString()),
m_senderName(QString()),
m_text(QString()),
- m_title(QString())
+ m_title(QString()),
+ m_coordinates(GeoCoordinate()),
+ m_type(type)
{
qDebug() << __PRETTY_FUNCTION__;
}
+const GeoCoordinate &Message::coordinates() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_coordinates;
+}
+
+
const QString &Message::id() const
{
qDebug() << __PRETTY_FUNCTION__;
return m_image;
}
+const QString &Message::receiverId() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_receiverId;
+}
+
const QString &Message::senderId() const
{
qDebug() << __PRETTY_FUNCTION__;
return m_senderName;
}
+void Message::setCoordinates(const GeoCoordinate &coordinates)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ m_coordinates = coordinates;
+}
void Message::setImage(const QPixmap &image)
{
m_id = id;
}
+void Message::setReceiverId(const QString &receiverId)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ m_receiverId = receiverId;
+}
+
void Message::setSenderId(const QString &senderId)
{
qDebug() << __PRETTY_FUNCTION__;
m_title = title;
}
+void Message::setType(const Type type)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ m_type = type;
+}
+
const QString &Message::text() const
{
qDebug() << __PRETTY_FUNCTION__;
return m_title;
}
+
+const Message::Type &Message::type() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_type;
+}
#include <QPixmap>
#include <QString>
+#include "coordinates/geocoordinate.h"
+
/**
* @brief Container for a single message.
*
class Message
{
public:
+ enum Type{MessageTypeReceived, MessageTypeSent};
+
/**
* @brief Constructor
*
* Constructs empty Message object.
*/
- Message();
+ Message(const Type type = Message::MessageTypeReceived);
/*******************************************************************************
* MEMBER FUNCTIONS AND SLOTS
******************************************************************************/
public:
/**
+ * @brief Returns message's coordinates
+ *
+ * @return message's coordinates as GeoCoordinate
+ */
+ const GeoCoordinate &coordinates() const;
+
+ /**
* @brief Returns message's ID
*
* @return message's ID
const QPixmap &image() const;
/**
+ * @brief Returns message receiver's ID
+ *
+ * @return message receiver's ID
+ */
+ const QString &receiverId() const;
+
+ /**
* @brief Returns message sender's ID
*
* @return message sender's ID
const QString &senderName() const;
/**
+ * @brief Sets message's coordinates
+ *
+ * @param coordinates message's coordinates
+ */
+ void setCoordinates(const GeoCoordinate &coordinates);
+
+ /**
* @brief Sets message's image
*
* @param image message's image
void setId(const QString &id);
/**
+ * @brief Sets message receiver's ID
+ *
+ * @param id message receiver's ID
+ */
+ void setReceiverId(const QString &receiverId);
+
+ /**
* @brief Sets message's text
*
* @param text message's text
void setTitle(const QString &title);
/**
+ * @brief Sets message's type
+ *
+ * @param type message's type
+ */
+ void setType(const Type type);
+
+ /**
* @brief Sets message sender's ID
*
* @param id message sender's ID
*/
const QString &title() const;
+ /**
+ * @brief Returns message's type
+ *
+ * @return message's type
+ */
+ const Message::Type &type() const;
+
/*******************************************************************************
* DATA MEMBERS
******************************************************************************/
private:
QDateTime m_timestamp; ///< message's timestamp
- QPixmap m_image; ///< message's image
QString m_id; ///< message's ID
+ QPixmap m_image; ///< message's image
+ QString m_receiverId; ///< message receiver's ID
QString m_senderId; ///< message sender's ID
QString m_senderName; ///< message sender's name
QString m_text; ///< message's text
QString m_title; ///< message's title
+
+ GeoCoordinate m_coordinates; ///< message's coordinates
+
+ Type m_type; ///< message's type
};
Q_DECLARE_METATYPE(Message)
{
qDebug() << __PRETTY_FUNCTION__;
- qWarning() << __PRETTY_FUNCTION__ << m_database->sendMessage(613374451,
- receiverId.toULongLong(), message,
- coordinates);
+ if (m_database->sendMessage(613374451, receiverId.toULongLong(), message, coordinates))
+ emit updateWasSuccessful(SituareService::SuccessfulSendMessage);
}
void SituareService::sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie)
emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
return;
} else {
- QList<Message> messages;
+ QVariant messages = result["messages"];
- foreach (QVariant messageVariant, result["messages"].toList()) {
- Message message;
+ QList<Message> received;
+ QList<Message> sent;
+
+ foreach (QVariant messageVariant, messages.toMap().value("received").toList()) {
+ Message message(Message::MessageTypeReceived);
QMap<QString, QVariant> messageMap = messageVariant.toMap();
message.setId(messageMap["id"].toString());
message.setSenderId(messageMap["sender_id"].toString());
+ message.setReceiverId(messageMap["receiver_id"].toString());
message.setSenderName(messageMap["sender_name"].toString());
uint timestampSeconds = messageMap["timestamp"].toUInt();
message.setTimestamp(QDateTime::fromTime_t(timestampSeconds));
message.setImage(AvatarImage::create(
QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
- messages.append(message);
+ bool latOk;
+ qreal latitude = messageMap["latitude"].toReal(&latOk);
+ bool lonOk;
+ qreal longitude = messageMap["longitude"].toReal(&lonOk);
+
+ if (latOk && lonOk)
+ message.setCoordinates(GeoCoordinate(latitude, longitude));
+
+ received.append(message);
//emit fetchImage(message.id(), messageMap["image_url"].toString());
}
- emit messagesReceived(messages);
+ foreach (QVariant messageVariant, messages.toMap().value("sent").toList()) {
+ Message message(Message::MessageTypeSent);
+ QMap<QString, QVariant> messageMap = messageVariant.toMap();
+ message.setId(messageMap["id"].toString());
+ message.setSenderId(messageMap["sender_id"].toString());
+ message.setReceiverId(messageMap["receiver_id"].toString());
+ message.setSenderName(messageMap["sender_name"].toString());
+ uint timestampSeconds = messageMap["timestamp"].toUInt();
+ message.setTimestamp(QDateTime::fromTime_t(timestampSeconds));
+ message.setText(messageMap["text"].toString());
+ message.setImage(AvatarImage::create(
+ QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
+
+ bool latOk;
+ qreal latitude = messageMap["latitude"].toReal(&latOk);
+ bool lonOk;
+ qreal longitude = messageMap["longitude"].toReal(&lonOk);
+
+ if (latOk && lonOk)
+ message.setCoordinates(GeoCoordinate(latitude, longitude));
+
+ sent.append(message);
+
+ //emit fetchImage(message.id(), messageMap["image_url"].toString());
+ }
+
+ emit messagesReceived(received, sent);
}
}
{
qDebug() << __PRETTY_FUNCTION__;
- m_database->removeTags(613374451, tags);
+ if (m_database->removeTags(613374451, tags))
+ emit updateWasSuccessful(SituareService::SuccessfulRemoveTags);
}
void SituareService::removeMessage(const QString &id)
{
qDebug() << __PRETTY_FUNCTION__;
+ bool retVal = false;
+
foreach (QString tag, tags)
- m_database->addTag(613374451, tag);
+ retVal = m_database->addTag(613374451, tag);
+
+ if (retVal)
+ emit updateWasSuccessful(SituareService::SuccessfulAddTags);
}
void SituareService::searchPeopleByTag(const QString &tag)
*
* @param messages list of messages sent to user
*/
- void messagesReceived(QList<Message> &messages);
+ void messagesReceived(QList<Message> &received, QList<Message> &sent);
/**
* @brief Signals when address data is retrieved
m_messagePanel = new MessagePanel(this);
- connect(this, SIGNAL(messagesReceived(QList<Message>&)),
- m_messagePanel, SLOT(populateMessageListView(QList<Message>&)));
+ connect(this, SIGNAL(messagesReceived(QList<Message>&, QList<Message>&)),
+ m_messagePanel, SLOT(populateMessageListView(QList<Message>&, QList<Message>&)));
connect(m_messagePanel, SIGNAL(requestMessages()),
this, SIGNAL(requestMessages()));
connect(m_messagePanel, SIGNAL(requestRemoveMessage(QString)),
this, SIGNAL(requestRemoveMessage(QString)));
+
+ connect(m_messagePanel, SIGNAL(findFriend(GeoCoordinate)),
+ this, SIGNAL(centerToCoordinates(GeoCoordinate)));
+
+ connect(m_messagePanel, SIGNAL(requestMessageDialog(QPair<QString, QString>)),
+ this, SIGNAL(requestMessageDialog(QPair<QString, QString>)));
}
void MainWindow::buildOsmLicense()
*
* @param messages list of messages sent to user
*/
- void messagesReceived(QList<Message> &messages);
+ void messagesReceived(QList<Message> &received, QList<Message> &sent);
/**
* @brief Signal for refreshing user data.
/**
* @brief Requests message dialog.
+ *
* @param receiver receiver facebook ID and name
*/
void requestMessageDialog(const QPair<QString, QString> &receiver);
qDebug() << __PRETTY_FUNCTION__;
}
+GeoCoordinate MessageListItem::coordinates() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_coordinates;
+}
+
const QString &MessageListItem::id() const
{
qDebug() << __PRETTY_FUNCTION__;
return m_id;
}
+const QString &MessageListItem::receiverId() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_receiverId;
+}
+
void MessageListItem::setMessageData(const Message &message)
{
qDebug() << __PRETTY_FUNCTION__;
m_id = message.id();
+ if (message.type() == Message::MessageTypeReceived)
+ m_receiverId = message.senderId();
+ else
+ m_receiverId = message.receiverId();
+
setTitle(message.senderName());
if (!message.image().isNull())
setImage(message.image());
+ m_coordinates = message.coordinates();
+
clearSubItems();
QPixmap icon;
icon.load(":/res/images/chat.png");
#ifndef MESSAGELISTITEM_H
#define MESSAGELISTITEM_H
+#include "coordinates/geocoordinate.h"
#include "extendedlistitem.h"
class Message;
******************************************************************************/
public:
/**
+ * @brief Returns item's coordinates.
+ *
+ * @return item's coordinates
+ */
+ GeoCoordinate coordinates() const;
+
+ /**
* @brief Returns message's ID.
*
* @return message's ID
const QString &id() const;
/**
+ * @brief Returns message receiver's ID.
+ *
+ * @return message receiver's ID
+ */
+ const QString &receiverId() const;
+
+ /**
* @brief Set message data for this item.
*
* @param message Messagedata
* DATA MEMBERS
******************************************************************************/
private:
- QString m_id; ///< message's ID
+ QString m_id; ///< message's ID
+ QString m_receiverId; ///< message reveiver's ID
+
+ GeoCoordinate m_coordinates; ///< message's coordinates
};
#endif // MESSAGELISTITEM_H
#include <QDebug>
+#include "coordinates/geocoordinate.h"
#include "messagelistitem.h"
#include "messagelistview.h"
MessageListItem *messageItem = dynamic_cast<MessageListItem*>(item);
- if (messageItem && selected)
- ;//emit messageItemClicked(messageItem->messageSenderId());
+ if (messageItem && selected && messageItem->coordinates().isValid())
+ emit messageItemClicked(messageItem->coordinates());
return selected;
}
*/
MessageListView(QWidget *parent = 0);
+/******************************************************************************
+* MEMBER FUNCTIONS AND SLOTS
+******************************************************************************/
public slots:
/**
* @brief Slot for list item clicked.
* @return true if item was selected, false otherwise
*/
bool listItemClicked(ListItem *item);
+
+/******************************************************************************
+* SIGNALS
+******************************************************************************/
+signals:
+ /**
+ * @brief Signal is emitted when message item is clicked.
+ *
+ * @param coordinates item's coordinates
+ */
+ void messageItemClicked(const GeoCoordinate &coordinates);
};
#endif // MESSAGELISTVIEW_H
#include "extendedlistitemdelegate.h"
#include "imagebutton.h"
+#include "headerlistitemdelegate.h"
#include "messagelistitem.h"
#include "messagelistview.h"
#include "panelcommon.h"
connect(refreshMessagesButton, SIGNAL(clicked()),
this, SIGNAL(requestMessages()));
+ ImageButton *messageButton = new ImageButton(":/res/images/chat_btn.png",
+ ":/res/images/chat_btn_s.png",
+ ":/res/images/chat_btn_d.png", this);
+ connect(messageButton, SIGNAL(clicked()),
+ this, SLOT(messageButtonPressed()));
+
ImageButton *deleteMessageButton = new ImageButton(":res/images/message_remove_btn.png",
":res/images/message_remove_btn_s.png",
":res/images/message_remove_btn_d.png", this);
this, SLOT(removeMessage()));
m_messageListView = new MessageListView(this);
- m_messageListView->setItemDelegate(new ExtendedListItemDelegate(this));
+ m_messageListItemDelegate = new ExtendedListItemDelegate(this);
+ m_headerListItemDelegate = new HeaderListItemDelegate(this);
+ initItemDelegates();
+
listViewLayout->addWidget(m_messageListView);
connect(m_messageListView, SIGNAL(listItemSelectionChanged()),
this, SLOT(onListItemSelectionChanged()));
+ connect(m_messageListView, SIGNAL(messageItemClicked(GeoCoordinate)),
+ this, SIGNAL(findFriend(GeoCoordinate)));
+ m_itemButtonsLayout->addWidget(messageButton);
m_itemButtonsLayout->addWidget(deleteMessageButton);
m_genericButtonsLayout->addWidget(refreshMessagesButton);
m_messageListView->clearItemSelection();
}
-void MessagePanel::populateMessageListView(QList<Message> &messages)
+void MessagePanel::initItemDelegates()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ m_messageListView->setItemDelegate(m_messageListItemDelegate);
+ delete m_headerListItemDelegate;
+ m_headerListItemDelegate = new HeaderListItemDelegate(this);
+
+}
+
+void MessagePanel::messageButtonPressed()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ MessageListItem *messageItem = dynamic_cast<MessageListItem*>(
+ m_messageListView->selectedItem());
+
+ if (messageItem)
+ emit requestMessageDialog(QPair<QString, QString>(messageItem->receiverId(),
+ messageItem->title()));
+}
+
+void MessagePanel::populateMessageListView(QList<Message> &received, QList<Message> &sent)
{
qDebug() << __PRETTY_FUNCTION__;
m_messageListView->clearList();
+ initItemDelegates();
+
+ if (received.count() > 0) {
+ m_messageListView->setItemDelegateForRow(0, m_headerListItemDelegate);
+ ExtendedListItem *receivedHeaderItem = new ExtendedListItem(0, QListWidgetItem::UserType);
+ receivedHeaderItem->setTitle(tr("Received:"));
+ m_messageListView->addListItem(QString("receivedHeader"), receivedHeaderItem);
+
+ foreach (Message message, received) {
+ MessageListItem *item = new MessageListItem();
+ item->setMessageData(message);
+ m_messageListView->addListItem(message.id(), item);
+ }
+ }
- foreach (Message message, messages) {
- MessageListItem *item = new MessageListItem();
- item->setMessageData(message);
- m_messageListView->addListItem(message.id(), item);
+ if (sent.count() > 0) {
+ m_messageListView->setItemDelegateForRow(m_messageListView->count(),
+ m_headerListItemDelegate);
+ ExtendedListItem *sentHeaderItem = new ExtendedListItem(0, QListWidgetItem::UserType);
+ sentHeaderItem->setTitle(tr("Sent:"));
+ m_messageListView->addListItem(QString("sentHeader"), sentHeaderItem);
+
+ foreach (Message message, sent) {
+ MessageListItem *item = new MessageListItem();
+ item->setMessageData(message);
+ m_messageListView->addListItem(message.id(), item);
+ }
}
}
#include "panelbase.h"
class ExtendedListItemDelegate;
+class GeoCoordinate;
+class HeaderListItemDelegate;
class ImageButton;
class Message;
class MessageListView;
void anyPanelClosed();
/**
- * @brief Removes message.
+ * @brief Called when message button is pressed.
*
- * Removes selected message from list view and emits removeMessage signal.
+ * Calls requestMessageDialog with message receiver's ID and name
*/
- void removeMessage();
+ void messageButtonPressed();
/**
* @brief Populates message list view.
*
- * @param locations list of Message objects
+ * @param received list of received Message objects
+ * @param sent list of sent Message objects
+ */
+ void populateMessageListView(QList<Message> &received, QList<Message> &sent);
+
+ /**
+ * @brief Removes message.
+ *
+ * Removes selected message from list view and emits removeMessage signal.
*/
- void populateMessageListView(QList<Message> &messages);
+ void removeMessage();
/**
* @brief Sets person's image.
*/
void setImage(const QString &id, const QPixmap &image);
+private:
+ /**
+ * @brief Inits item delegates for message list view.
+ */
+ void initItemDelegates();
+
/*******************************************************************************
* SIGNALS
******************************************************************************/
signals:
/**
+ * @brief Signal for friend finding
+ *
+ * @param coordinates Target coordinate
+ */
+ void findFriend(const GeoCoordinate &coordinates);
+
+ /**
+ * @brief Requests message dialog.
+ *
+ * @param receiver receiver facebook ID and name
+ */
+ void requestMessageDialog(const QPair<QString, QString> &receiver);
+
+ /**
* @brief Requests messages sent to the user.
*/
void requestMessages();
******************************************************************************/
private:
MessageListView *m_messageListView; ///< Message list view
+
+ ExtendedListItemDelegate *m_messageListItemDelegate; ///< Message list item delegate
+ HeaderListItemDelegate *m_headerListItemDelegate; ///< Header list item delegate
};
#endif // NOTIFICATIONPANEL_H