Sorted includes alphabetically.
[situare] / src / ui / friendlistitem.cpp
index 3e9d11b..f2e4e05 100644 (file)
    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));
-}
-
-void FriendListItem::calculateTextRects()
-{
-    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);
-}
-
-QPointF FriendListItem::coordinates()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    return m_user->coordinates();
+    setSubitemTextWidth(SUBITEM_TEXT_MAX_WIDTH);
 }
 
-QString FriendListItem::id() const
+GeoCoordinate FriendListItem::coordinates()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    return m_user->userId();
+    return m_coordinates;
 }
 
 void FriendListItem::setUserData(User *user)
@@ -100,19 +52,34 @@ void FriendListItem::setUserData(User *user)
     qDebug() << __PRETTY_FUNCTION__;
 
     if(user) {
-        m_user = user;
-        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);
+        user->distance(value, unit);
+        QString distanceText = QString::number(value) + " " + unit;
+        setData(DISTANCE_TEXT_DISPLAY_INDEX, distanceText);
         setDistanceIcon(value, unit);
 
-        shortenTexts();
-        calculateTextRects();
-        setText(false);
+        //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"));
     }
 }
 
@@ -121,7 +88,14 @@ void FriendListItem::setAvatarImage(const QPixmap &image)
     qDebug() << __PRETTY_FUNCTION__;
 
     if(!image.isNull())
-        setData(AVATAR_IMAGE_INDEX, m_user->profileImage());
+        setImage(image);
+}
+
+void FriendListItem::setCoordinates(const GeoCoordinate &coordinates)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    m_coordinates = coordinates;
 }
 
 void FriendListItem::setDistanceIcon(double value, const QString &unit)
@@ -142,101 +116,7 @@ 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));
-    }
 }