USA.
*/
-#include <QVBoxLayout>
-#include <QPushButton>
#include <QPainter>
#include <QDebug>
-#include <QPaintEvent>
-#include <QLabel>
#include <QPixmap>
-#include <QFormLayout>
-#include <QSpacerItem>
-#include <QStylePainter>
-#include <math.h>
-#include "friendlistitem.h"
#include "../user/user.h"
-#include "imagebutton.h"
#include "../common.h"
#include "listcommon.h"
-const int WALK_DISTANCE = 5; ///< Walk distance limit for distance icon
-const int CAR_DISTANCE = 500; ///< Car distance limit for distance icon
+#include "friendlistitem.h"
+
const int AEROPLANE_DISTANCE = 5000;///< Aeroplane distance limit for distance icon
+const int CAR_DISTANCE = 500; ///< Car distance limit for distance icon
+const int WALK_DISTANCE = 5; ///< Walk distance limit for distance icon
FriendListItem::FriendListItem()
- : m_selected(false)
- , m_user(0)
{
qDebug() << __PRETTY_FUNCTION__;
- setData(ITEM_SIZE_HINT_INDEX, QSize(ITEM_WIDTH, ITEM_MIN_HEIGHT));
+ setSubitemTextWidth(SUBITEM_TEXT_MAX_WIDTH);
}
-void FriendListItem::calculateTextRects()
+GeoCoordinate FriendListItem::coordinates()
{
qDebug() << __PRETTY_FUNCTION__;
- //Dummy value to get painter font metrics.
- QPixmap p = QPixmap(ICON_WIDTH, ICON_HEIGHT);
- QPainter painter(&p);
- painter.setFont(NOKIA_FONT_SMALL);
- QFontMetrics smallFontMetrics = painter.fontMetrics();
-
- QRect distanceRect = smallFontMetrics.boundingRect(m_distanceText);
- QRect statusTextRect = smallFontMetrics.boundingRect(m_user->note());
- QRect updatedRect = smallFontMetrics.boundingRect(m_user->timestamp());
- QRect locationRect = smallFontMetrics.boundingRect(m_user->address());
-
- int statusTextRectFactor = statusTextRect.width() / LABEL_MAX_WIDTH;
- statusTextRectFactor++;
- m_statusTextRect = QRect(0, 0, LABEL_MAX_WIDTH, ICON_HEIGHT * statusTextRectFactor);
- int updatedRectFactor = updatedRect.width() / LABEL_MAX_WIDTH;
- updatedRectFactor++;
- m_updatedRect = QRect(0, 0, LABEL_MAX_WIDTH, ICON_HEIGHT * updatedRectFactor);
- int locationRectFactor = locationRect.width() / LABEL_MAX_WIDTH;
- locationRectFactor++;
- m_locationRect = QRect(0, 0, LABEL_MAX_WIDTH, ICON_HEIGHT * locationRectFactor);
-
- m_expandedHeight = ITEM_MIN_HEIGHT + ((statusTextRectFactor + updatedRectFactor +
- locationRectFactor - 3) * ICON_HEIGHT);
-
- setData(DISTANCE_SIZE_HINT_INDEX, distanceRect);
+ return m_coordinates;
}
-QPointF FriendListItem::coordinates()
+void FriendListItem::setUserData(User *user)
{
qDebug() << __PRETTY_FUNCTION__;
- return m_user->coordinates();
+ if(user) {
+
+ QString unit;
+ double value;
+ user->distance(value, unit);
+ QString distanceText = QString::number(value) + " " + unit;
+ setData(DISTANCE_TEXT_DISPLAY_INDEX, distanceText);
+ setDistanceIcon(value, unit);
+
+ //Dummy value to get painter font metrics.
+ QPixmap p = QPixmap(ICON_WIDTH, ICON_HEIGHT);
+ QPainter painter(&p);
+ painter.setFont(NOKIA_FONT_SMALL);
+ QFontMetrics distanceTextFontMetrics = painter.fontMetrics();
+ QRect distanceRect = distanceTextFontMetrics.boundingRect(distanceText);
+
+ setData(DISTANCE_SIZE_HINT_INDEX, distanceRect);
+ setName(shortenText(user->name(), NAME_TEXT_MAX_WIDTH - distanceRect.width() + MARGIN,
+ ListItem::TEXT_SIZE_NORMAL));
+ setCoordinates(user->coordinates());
+
+ if (!user->profileImage().isNull())
+ setImage(user->profileImage());
+
+ clearSubItems();
+
+ addSubItem(user->note(), QPixmap(":/res/images/envelope.png"));
+ addSubItem(user->address(), QPixmap(":/res/images/compass.png"));
+ addSubItem(user->timestamp(), QPixmap(":/res/images/clock.png"));
+ }
}
-QString FriendListItem::id() const
+void FriendListItem::setAvatarImage(const QPixmap &image)
{
qDebug() << __PRETTY_FUNCTION__;
- return m_user->userId();
+ if(!image.isNull())
+ setImage(image);
}
-void FriendListItem::setUserData(User *user)
+void FriendListItem::setCoordinates(const GeoCoordinate &coordinates)
{
qDebug() << __PRETTY_FUNCTION__;
- if(user) {
- m_user = user;
-
- if (!m_user->profileImage().isNull())
- setData(AVATAR_IMAGE_INDEX, m_user->profileImage());
-
- QString unit;
- double value;
- m_user->distance(value, unit);
- m_distanceText = QString::number(value) + " " + unit;
- setData(DISTANCE_TEXT_DISPLAY_INDEX, m_distanceText);
- setDistanceIcon(value, unit);
-
- shortenTexts();
- calculateTextRects();
- setText(false);
- }
+ m_coordinates = coordinates;
}
void FriendListItem::setDistanceIcon(double value, const QString &unit)
setData(DISTANCE_IMAGE_INDEX, distanceImage);
}
-void FriendListItem::shortenTexts()
+FriendListItem::~FriendListItem()
{
qDebug() << __PRETTY_FUNCTION__;
-
- //Dummy value to get painter font metrics.
- QPixmap p = QPixmap(ICON_WIDTH, ICON_HEIGHT);
- QPainter painter(&p);
- painter.setFont(NOKIA_FONT_NORMAL);
- QFontMetrics nameLabelMetrics = painter.fontMetrics();
- painter.setFont(NOKIA_FONT_SMALL);
- QFontMetrics otherLabelsMetrics = painter.fontMetrics();
-
- QString name = m_user->name();
- QString updated = m_user->timestamp();
- QString statusText = m_user->note();
- QString location = m_user->address();
-
- int nameIndex = name.indexOf('\n');
- int updatedIndex = updated.indexOf('\n');
- int statusTextIndex = statusText.indexOf('\n');
- int locationIndex = location.indexOf('\n');
-
- if (nameIndex > 0) {
- name.truncate(nameIndex);
- name.append("...");
- }
- if (updatedIndex > 0) {
- updated.truncate(updatedIndex);
- updated.append("...");
- }
- if (statusTextIndex > 0) {
- statusText.truncate(statusTextIndex);
- statusText.append("...");
- }
- if (locationIndex > 0) {
- location.truncate(locationIndex);
- location.append("...");
- }
-
- int distanceLabelWidth = otherLabelsMetrics.width(m_distanceText) + MARGIN;
- m_shortenedName = nameLabelMetrics.elidedText(name, Qt::ElideRight, NAME_LABEL_MAX_WIDTH
- - distanceLabelWidth);
- m_shortenedStatusText = otherLabelsMetrics.elidedText(statusText, Qt::ElideRight,
- LABEL_MAX_WIDTH);
- m_shortenedUpdated = otherLabelsMetrics.elidedText(updated, Qt::ElideRight, LABEL_MAX_WIDTH);
- m_shortenedLocation = otherLabelsMetrics.elidedText(location, Qt::ElideRight, LABEL_MAX_WIDTH);
-
- setData(NAME_DISPLAY_INDEX, m_shortenedName);
-}
-
-void FriendListItem::setText(bool expanded)
-{
- qDebug() << __PRETTY_FUNCTION__;
-
- if (expanded) {
- setData(STATUS_TEXT_DISPLAY_INDEX, m_user->note());
- setData(LOCATION_DISPLAY_INDEX, m_user->address());
- setData(UPDATED_DISPLAY_INDEX, m_user->timestamp());
-
- setData(STATUS_TEXT_SIZE_HINT_INDEX, m_statusTextRect);
- setData(LOCATION_SIZE_HINT_INDEX, m_locationRect);
- setData(UPDATED_SIZE_HINT_INDEX, m_updatedRect);
-
- }
- else {
- setData(STATUS_TEXT_DISPLAY_INDEX, m_shortenedStatusText);
- setData(LOCATION_DISPLAY_INDEX, m_shortenedLocation);
- setData(UPDATED_DISPLAY_INDEX, m_shortenedUpdated);
-
- setData(STATUS_TEXT_SIZE_HINT_INDEX, QRect(0, 0, LABEL_MAX_WIDTH, ICON_HEIGHT));
- setData(LOCATION_SIZE_HINT_INDEX, QRect(0, 0, LABEL_MAX_WIDTH, ICON_HEIGHT));
- setData(UPDATED_SIZE_HINT_INDEX, QRect(0, 0, LABEL_MAX_WIDTH, ICON_HEIGHT));
- }
-}
-
-bool FriendListItem::toggleSelection()
-{
- qDebug() << __PRETTY_FUNCTION__;
-
- setSelected(!m_selected);
- return m_selected;
-}
-
-void FriendListItem::setSelected(bool selected)
-{
- qDebug() << __PRETTY_FUNCTION__;
-
- m_selected = selected;
-
- if (m_selected) {
- setText(true);
- setData(ITEM_SIZE_HINT_INDEX, QSize(ITEM_WIDTH, m_expandedHeight));
- }
- else {
- setText(false);
- setData(ITEM_SIZE_HINT_INDEX, QSize(ITEM_WIDTH, ITEM_MIN_HEIGHT));
- }
}