Made a few cosmetic changes
[situare] / src / ui / friendlistitem.cpp
index 24b76c7..e3e5996 100644 (file)
 
 #include "friendlistitem.h"
 #include "../user/user.h"
-
-const QString BACKGROUND_PATH = ":/res/images/list_item.png";   ///< Background image path
-const QString BACKGROUND_TOP_PATH = ":/res/images/list_item_top.png";   ///< Background image path
-const QString BACKGROUND_MIDDLE_PATH = ":/res/images/list_item_middle.png";   ///< Background image path
-const QString BACKGROUND_BOTTOM_PATH = ":/res/images/list_item_bottom.png";   ///< Background image path
-const QString CLOCK_PATH = ":/res/images/clock.png";        ///< Clock image path
-const QString COMPASS_PATH = ":/res/images/compass.png";    ///< Compass image path
-const QString ENVELOPE_PATH = ":/res/images/envelope.png";  ///< Envelope image path
-
-const int ICON_MARGIN = 5;   ///< Icon margin
-const int IMAGE_HEIGHT = 60; ///< Friend image height
-const int IMAGE_WIDTH = 60;  ///< Friend image width
-
-const int ITEM_MAX_HEIGHT = 240; ///< Maximum height for item
-const int ITEM_MAX_WIDTH = 368;  ///< Maximum width for item
-const int ITEM_MIN_HEIGHT = 141; ///< Minimum height for item
-const int ITEM_MIN_WIDTH = 368;  ///< Minimum width for item
-const int LABEL_MAX_WIDTH = 247;   ///< Label maximum width
-
-const int MOUSE_PRESS_AREA_WIDTH = 20;  ///< Area width for item height toggling
-const int MOUSE_PRESS_AREA_HEIGHT = 20; ///< Area height for item height toggling
-
-const QFont NOKIA_FONT_NORMAL = QFont( "Nokia Sans", 18, QFont::Normal);    ///< Normal font
-const QFont NOKIA_FONT_SMALL = QFont( "Nokia Sans", 13, QFont::Normal);     ///< Small font
-
-/**
-* @var STYLESHEET
-* @brief Stylesheet for FriendListItem
-*/
-const QString STYLESHEET = "QWidget#listItem { border-image: url(:/res/images/list_item.png) 20%; " \
-                           "border-width: 20px 14px 16px 14px; } " \
-                           "QLabel { color: #989898; }" \
-                           "#nameLabel { color: #ffffff }";
+#include "avatarimage.h"
+#include "imagebutton.h"
 
 FriendListItem::FriendListItem(QWidget *parent)
     : QWidget(parent)
@@ -75,7 +44,9 @@ FriendListItem::FriendListItem(QWidget *parent)
     qDebug() << __PRETTY_FUNCTION__;
 
     QVBoxLayout *layout = new QVBoxLayout(this);
-    this->setLayout(layout);
+    layout->setContentsMargins(MARGIN, 0, MARGIN*2, MARGIN*2);
+    layout->setSpacing(0);
+    setLayout(layout);
 
     QHBoxLayout *topLayout = new QHBoxLayout();
     topLayout->setMargin(0);
@@ -88,23 +59,32 @@ FriendListItem::FriendListItem(QWidget *parent)
     QFormLayout *infoLayout = new QFormLayout();
     infoLayout->setMargin(0);
     infoLayout->setSpacing(0);
+    infoLayout->setLabelAlignment(Qt::AlignTop);
 
     QLabel *clockLabel = new QLabel();
-    clockLabel->setPixmap(QPixmap(CLOCK_PATH));
-    clockLabel->setContentsMargins(0, 0, ICON_MARGIN, 0);
+    clockLabel->setPixmap(QPixmap(":/res/images/clock.png"));
+    clockLabel->setContentsMargins(0, 0, MARGIN, 0);
+    clockLabel->setFixedSize(ICON_WIDTH + MARGIN, ICON_HEIGHT);
     QLabel *envelopeLabel = new QLabel();
-    envelopeLabel->setPixmap(QPixmap(ENVELOPE_PATH));
-    envelopeLabel->setContentsMargins(0, 0, ICON_MARGIN, 0);
+    envelopeLabel->setPixmap(QPixmap(":/res/images/envelope.png"));
+    envelopeLabel->setContentsMargins(0, 0, MARGIN, 0);
+    envelopeLabel->setFixedSize(ICON_WIDTH + MARGIN, ICON_HEIGHT);
     QLabel *compassLabel = new QLabel();
-    compassLabel->setPixmap(QPixmap(COMPASS_PATH));
-    compassLabel->setContentsMargins(0, 0, ICON_MARGIN, 0);
+    compassLabel->setPixmap(QPixmap(":/res/images/compass.png"));
+    compassLabel->setContentsMargins(0, 0, MARGIN, 0);
+    compassLabel->setFixedSize(ICON_WIDTH + MARGIN, ICON_HEIGHT);
 
     m_imageLabel = new QLabel();
     m_imageLabel->setFixedSize(IMAGE_WIDTH, IMAGE_HEIGHT);
 
     m_nameLabel = new QLabel();
     m_nameLabel->setFixedHeight(IMAGE_HEIGHT);
-    m_nameLabel->setFont(NOKIA_FONT_NORMAL);
+
+    m_distanceLabel = new QLabel();
+    m_distanceLabel->setFixedHeight(IMAGE_HEIGHT);
+
+    m_findButton = new ImageButton(this, ":/res/images/show_position.png",
+                                   ":/res/images/show_position_s.png");
 
     m_updatedLabel = new QLabel();
     m_updatedLabel->setWordWrap(true);
@@ -118,36 +98,50 @@ FriendListItem::FriendListItem(QWidget *parent)
     infoLayout->addRow(clockLabel, m_updatedLabel);
 
     topLayout->addWidget(m_imageLabel);
-    topLayout->addWidget(m_nameLabel);
+    topLayout->addWidget(m_nameLabel, 1);
+    topLayout->addWidget(m_distanceLabel);
 
-    bottomLayout->addSpacing(IMAGE_WIDTH);
-    bottomLayout->addLayout(infoLayout, 1);
+    bottomLayout->addWidget(m_findButton, 0, Qt::AlignTop);
+    bottomLayout->addLayout(infoLayout);
 
     layout->addLayout(topLayout, 0);
     layout->addLayout(bottomLayout, 1);
 
-    setObjectName("listItem");
-    m_nameLabel->setObjectName("nameLabel");
-
-    setFont(NOKIA_FONT_SMALL);
-
-    setStyleSheet(STYLESHEET);
-
     setMinimumSize(ITEM_MIN_WIDTH, ITEM_MIN_HEIGHT);
     setMaximumSize(ITEM_MIN_WIDTH, ITEM_MAX_HEIGHT);
+
+    setFont(NOKIA_FONT_SMALL);
+    m_nameLabel->setFont(NOKIA_FONT_NORMAL);
+    QPalette itemPalette = palette();
+    itemPalette.setColor(QPalette::Foreground, COLOR_GRAY);
+    setPalette(itemPalette);
+    QPalette namePalette = m_nameLabel->palette();
+    namePalette.setColor(QPalette::Foreground, Qt::white);
+    m_nameLabel->setPalette(namePalette);
+
+    m_backgroundTopImage.load(":/res/images/list_item_top.png");
+    m_backgroundMiddleImage.load(":/res/images/list_item_middle.png");
+    m_backgroundBottomImage.load(":/res/images/list_item_bottom.png");
+
+    connect(m_findButton, SIGNAL(clicked()),
+        this, SLOT(findButtonClicked()));
 }
 
 void FriendListItem::setData(User *user)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (user) {
-        m_user = user;
-        shortenTexts();
+    m_user = user;
 
-        m_imageLabel->setPixmap(m_user->profileImage());
-        setText(false);
-    }
+    m_imageLabel->setPixmap(AvatarImage::create(m_user->profileImage()));
+
+    QString unit;
+    double value;
+    user->distance(value, unit);
+    m_distanceLabel->setText(QString::number(value) + " " + unit);
+
+    shortenTexts();
+    setText(false);
 }
 
 void FriendListItem::shortenTexts()
@@ -184,8 +178,9 @@ void FriendListItem::shortenTexts()
         location.append("...");
     }
 
-
-    m_shortenedName = nameLabelMetrics.elidedText(name, Qt::ElideRight, LABEL_MAX_WIDTH + 30);
+    int distanceLabelWidth = otherLabelsMetrics.width(m_distanceLabel->text());
+    m_shortenedName = nameLabelMetrics.elidedText(name, Qt::ElideRight, NAME_LABEL_MAX_WIDTH
+                                                  - distanceLabelWidth);
     m_shortenedUpdated = otherLabelsMetrics.elidedText(updated, Qt::ElideRight, LABEL_MAX_WIDTH);
     m_shortenedStatusText = otherLabelsMetrics.elidedText(statusText, Qt::ElideRight,
                                                           LABEL_MAX_WIDTH);
@@ -197,16 +192,20 @@ void FriendListItem::setText(bool expanded)
     qDebug() << __PRETTY_FUNCTION__;
 
     if (expanded) {
+        setUpdatesEnabled(false);
         m_nameLabel->setText(m_shortenedName);
         m_updatedLabel->setText(m_user->timestamp());
         m_statusTextLabel->setText(m_user->note());
         m_locationLabel->setText(m_user->address());
+        setUpdatesEnabled(true);
     }
     else {
+        setUpdatesEnabled(false);
         m_nameLabel->setText(m_shortenedName);
         m_updatedLabel->setText(m_shortenedUpdated);
         m_statusTextLabel->setText(m_shortenedStatusText);
         m_locationLabel->setText(m_shortenedLocation);
+        setUpdatesEnabled(true);
     }
 }
 
@@ -236,12 +235,22 @@ void FriendListItem::mouseReleaseEvent(QMouseEvent *event)
 
 void FriendListItem::paintEvent(QPaintEvent *event)
 {
-//    qDebug() << __PRETTY_FUNCTION__ << " " << event->rect();
-    Q_UNUSED(event);
+    qDebug() << __PRETTY_FUNCTION__ << " " << event->rect();
+
+    QPainter painter(this);
 
-    QStyleOption option;
-    option.init(this);
+    QRect topRect = QRect(0, 0, ITEM_MIN_WIDTH, BACKGROUND_TOP_HEIGHT);
+    QRect middleRect = QRect(0, topRect.bottom(), ITEM_MIN_WIDTH,
+                             height() - BACKGROUND_TOP_HEIGHT - BACKGROUND_BOTTOM_HEIGHT);
+    QRect bottomRect = QRect(topRect.left(), middleRect.bottom(), ITEM_MIN_WIDTH,
+                             BACKGROUND_BOTTOM_HEIGHT);
 
-    QStylePainter painter(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this);
+    painter.drawPixmap(topRect, m_backgroundTopImage);
+    painter.drawPixmap(middleRect, m_backgroundMiddleImage);
+    painter.drawPixmap(bottomRect, m_backgroundBottomImage);
+}
+
+void FriendListItem::findButtonClicked()
+{
+    emit findFriend(m_user->coordinates());
 }