Modified FriendListItem constructor.
authorJussi Laitinen <jupe@l3l7588.ixonos.local>
Thu, 29 Apr 2010 07:54:28 +0000 (10:54 +0300)
committerJussi Laitinen <jupe@l3l7588.ixonos.local>
Thu, 29 Apr 2010 07:54:28 +0000 (10:54 +0300)
images.qrc
src/ui/friendlistitem.cpp
src/ui/friendlistitem.h
src/ui/friendlistview.cpp
src/ui/listviewscreen.cpp
src/user/user.cpp
src/user/user.h

index 25da8f4..8218c07 100644 (file)
@@ -16,5 +16,6 @@
         <file>res/images/list_item_middle.png</file>
         <file>res/images/list_item_top.png</file>
         <file>res/images/list_item.png</file>
+        <file>res/images/dummy_image.png</file>
     </qresource>
 </RCC>
index 359683b..7bb7f5c 100644 (file)
 #include "friendlistitem.h"
 #include "user/user.h"
 
-const int BACKGROUND_TOP_WIDTH = 368;
-const int BACKGROUND_TOP_HEIGHT = 20;
-const int BACKGROUND_MIDDLE_X = 0;
-const int BACKGROUND_MIDDLE_Y = BACKGROUND_TOP_HEIGHT;
-const int BACKGROUND_MIDDLE_WIDTH = 368;
-const int BACKGROUND_MIDDLE_HEIGHT = 106;
-const int BACKGROUND_BOTTOM_X = 0;
-const int BACKGROUND_BOTTOM_Y = BACKGROUND_MIDDLE_Y + BACKGROUND_MIDDLE_HEIGHT;
-const int BACKGROUND_BOTTOM_WIDTH = 368;
-const int BACKGROUND_BOTTOM_HEIGHT = 15;
-const int IMAGE_X = 9;
-const int IMAGE_Y = 0;
 const int IMAGE_WIDTH = 60;
 const int IMAGE_HEIGHT = 60;
-const int CLOCK_X = 75;
-const int CLOCK_Y = 53;
-const int ENVELOPE_X = 75;
-const int ENVELOPE_Y = 77;
-const int COMPASS_X = 75;
-const int COMPASS_Y = 101;
-const int ICON_WIDTH = 24;
-const int ICON_HEIGHT = 24;
-
-const QString BACKGROUND_TOP_PATH = QString(":/res/images/list_item_top.png");
-const QString BACKGROUND_MIDDLE_PATH = QString(":/res/images/list_item_middle.png");
-const QString BACKGROUND_BOTTOM_PATH = QString(":/res/images/list_item_bottom.png");
+
+const int ITEM_MIN_WIDTH = 368;
+const int ITEM_MAX_WIDTH = 368;
+const int ITEM_MIN_HEIGHT = 141;
+const int ITEM_MAX_HEIGHT = 240;
+const int ICON_MARGIN = 5;
+
+const QString BACKGROUND_PATH = QString(":/res/images/list_item.png");
 const QString CLOCK_PATH = QString(":/res/images/clock.png");
 const QString ENVELOPE_PATH = QString(":/res/images/envelope.png");
 const QString COMPASS_PATH = QString(":/res/images/compass.png");
 
+const int MAXIMUM_CHARS = 32;
+
 FriendListItem::FriendListItem(QWidget *parent)
     : QWidget(parent)
     , m_expanded(false)
 {
-    QGridLayout *layout = new QGridLayout(this);
+    QVBoxLayout *layout = new QVBoxLayout(this);
     this->setLayout(layout);
 
-    m_childWidget = new QWidget(this);
-    QPalette palette = m_childWidget->palette();
-    palette.setColor(QPalette::Foreground, QColor::fromRgb(152, 152, 152));
-    m_childWidget->setPalette(palette);
-    QFont font = QFont("Nokia Sans", 13, QFont::Normal);
-    m_childWidget->setFont(font);
+    QHBoxLayout *topLayout = new QHBoxLayout(this);
+    topLayout->setMargin(0);
+    topLayout->setSpacing(0);
+
+    QHBoxLayout *bottomLayout = new QHBoxLayout(this);
+    bottomLayout->setMargin(0);
+    bottomLayout->setSpacing(0);
+
+    m_infoWidget = new QWidget(this);
 
     QFormLayout *infoLayout = new QFormLayout(this);
-    m_childWidget->setLayout(infoLayout);
+    infoLayout->setMargin(0);
+    infoLayout->setSpacing(0);
+    m_infoWidget->setLayout(infoLayout);
 
     QLabel *clockLabel = new QLabel(this);
     clockLabel->setPixmap(QPixmap(CLOCK_PATH));
-    clockLabel->setMinimumSize(ICON_WIDTH, ICON_HEIGHT);
+    clockLabel->setContentsMargins(0, 0, ICON_MARGIN, 0);
     QLabel *envelopeLabel = new QLabel(this);
     envelopeLabel->setPixmap(QPixmap(ENVELOPE_PATH));
-    envelopeLabel->setMinimumSize(ICON_WIDTH, ICON_HEIGHT);
+    envelopeLabel->setContentsMargins(0, 0, ICON_MARGIN, 0);
     QLabel *compassLabel = new QLabel(this);
     compassLabel->setPixmap(QPixmap(COMPASS_PATH));
-    compassLabel->setMinimumSize(ICON_WIDTH, ICON_HEIGHT);
+    compassLabel->setContentsMargins(0, 0, ICON_MARGIN, 0);
 
     m_imageLabel = new QLabel(this);
+    m_imageLabel->setFixedSize(IMAGE_WIDTH, IMAGE_HEIGHT);
     m_nameLabel = new QLabel("", this);
+    m_nameLabel->setFixedHeight(IMAGE_HEIGHT);
     m_updatedLabel = new QLabel("", this);
     m_updatedLabel->setWordWrap(true);
-    m_updatedLabel->setMinimumWidth(ICON_WIDTH);
     m_statusTextLabel = new QLabel("", this);
     m_statusTextLabel->setWordWrap(true);
-    m_statusTextLabel->setMinimumWidth(ICON_WIDTH);
     m_locationLabel = new QLabel("", this);
     m_locationLabel->setWordWrap(true);
-    m_locationLabel->setMinimumWidth(ICON_WIDTH);
 
     infoLayout->addRow(clockLabel, m_updatedLabel);
     infoLayout->addRow(envelopeLabel, m_statusTextLabel);
     infoLayout->addRow(compassLabel, m_locationLabel);
 
-    infoLayout->setLabelAlignment(Qt::AlignTop);
-    infoLayout->setFormAlignment(Qt::AlignCenter);
+    topLayout->addWidget(m_imageLabel);
+    topLayout->addWidget(m_nameLabel);
 
-    QPalette childPal = m_childWidget->palette();
-    childPal.setColor(QPalette::Background, Qt::red);
-    m_childWidget->setPalette(childPal);
+    QLabel *tmp = new QLabel(this);
+    bottomLayout->addSpacerItem(new QSpacerItem(IMAGE_WIDTH, IMAGE_HEIGHT));
+    bottomLayout->addWidget(m_infoWidget, 1);
 
-    //m_childWidget->setGeometry(75, 53, 368-75-5, 141-53-5);
-
-    layout->addWidget(m_imageLabel, 0, 0);
-    layout->addWidget(m_nameLabel, 0, 1);
-    layout->addWidget(m_childWidget, 1, 1);
+    layout->addLayout(topLayout, 0);
+    layout->addLayout(bottomLayout, 1);
 
     this->setObjectName("listItem");
+    m_infoWidget->setObjectName("infoWidget");
+    m_nameLabel->setObjectName("nameLabel");
     this->setStyleSheet("#listItem { border-image: url(:/res/images/list_item.png) 20%; " \
-                        "border-width: 20px 14px 16px 14px; }");
-
-    this->setMinimumSize(368, 141);
+                        "border-width: 20px 14px 16px 14px; } " \
+                        "QLabel { font-size: 13pt; color: #989898; }" \
+                        "#nameLabel { font-size: 18pt; color: #ffffff }");
 
-//    this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    this->setMinimumSize(ITEM_MIN_WIDTH, ITEM_MIN_HEIGHT);
+    this->setMaximumSize(ITEM_MAX_WIDTH, ITEM_MAX_HEIGHT);
 }
 
 void FriendListItem::setData(const User &user)
 {
+    m_user = user;
+
+    shortenTexts();
+
     m_imageLabel->setPixmap(QPixmap(":/res/images/dummy_Avatar.png"));
-    m_nameLabel->setText(user.name());
-    m_updatedLabel->setText(user.timestamp());
-    m_statusTextLabel->setText(user.note());
-    m_locationLabel->setText(user.address());
+    m_nameLabel->setText(m_shortenedName);
+    m_updatedLabel->setText(m_shortenedUpdated);
+    m_statusTextLabel->setText(m_shortenedStatusText);
+    m_locationLabel->setText(m_shortenedLocation);
     m_image = user.profileImageUrl().toString();
 
-    QFontMetrics fontMetrics = QFontMetrics(QFont("Nokia Sans", 13, QFont::Normal));
+}
 
-    qDebug() << "Status text metrics: " << fontMetrics.boundingRect(user.note());
+void FriendListItem::shortenTexts()
+{
+    if (m_user.name().length() > MAXIMUM_CHARS) {
+        m_shortenedName = m_user.name().left(MAXIMUM_CHARS-3).append("...");
+    }
+    else {
+         m_shortenedName = m_user.name();
+    }
+    if (m_user.timestamp().length() > MAXIMUM_CHARS) {
+        m_shortenedUpdated = m_user.timestamp().left(MAXIMUM_CHARS-3).append("...");
+    }
+    else {
+        m_shortenedUpdated = m_user.timestamp();
+    }
+    if (m_user.note().length() > MAXIMUM_CHARS) {
+        m_shortenedStatusText = m_user.note().left(MAXIMUM_CHARS-3).append("...");
+    }
+    else {
+        m_shortenedStatusText = m_user.note();
+    }
+    if (m_user.address().length() > MAXIMUM_CHARS) {
+        m_shortenedLocation = m_user.address().left(MAXIMUM_CHARS-3).append("...");
+    }
+    else {
+        m_shortenedLocation = m_user.address();
+    }
+}
+
+void FriendListItem::toggleHeight()
+{
+    if (m_expanded) {
+        m_nameLabel->setText(m_shortenedName);
+        m_updatedLabel->setText(m_shortenedUpdated);
+        m_statusTextLabel->setText(m_shortenedStatusText);
+        m_locationLabel->setText(m_shortenedLocation);
+        m_expanded = false;
+
+    }
+    else {
+        m_nameLabel->setText(m_user.name());
+        m_updatedLabel->setText(m_user.timestamp());
+        m_statusTextLabel->setText(m_user.note());
+        m_locationLabel->setText(m_user.address());
+        m_expanded = true;
+    }
 }
 
 void FriendListItem::mousePressEvent(QMouseEvent *event)
@@ -155,94 +193,15 @@ void FriendListItem::mouseReleaseEvent(QMouseEvent *event)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (event->pos() == m_mousePosition) {
-
-        emit changeState();
-
-        if (m_expanded) {
-            m_expanded = false;
-            this->setGeometry(0, 0, this->width(), 141);
-            m_childWidget->setGeometry(75, 53, 368-75-5, 141-53-5);
-            m_childWidget->updateGeometry();
-
-        }
-        else {
-            m_expanded = true;
-            this->setGeometry(0, 0, this->width(), 200);
-            m_childWidget->setGeometry(75, 53, 368-75-5, 250-53-5);
-            m_childWidget->updateGeometry();
-        }
-
-        updateGeometry();
-        emit changeState();
-    }
+    if (event->pos() == m_mousePosition)
+        toggleHeight();
 }
 
-QSize FriendListItem::sizeHint() const
+void FriendListItem::paintEvent(QPaintEvent *)
 {
-    qDebug() << __PRETTY_FUNCTION__ << " " << m_expanded;
-
-    if (m_expanded)
-        return QSize(this->width(), 250);
-    else
-        return QSize(this->width(), 141);
-}
+    QStyleOption option;
+    option.init(this);
 
-void FriendListItem::paintEvent(QPaintEvent *event)
-{
-    QStyleOption opt;
-    opt.init(this);
     QPainter painter(this);
-    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
-
-    QRect itemRect = event->rect();
-
-//    if (m_expanded)
-//        itemRect = QRect(0, 0, 568, 200);
-//    else
-//        itemRect = QRect(0, 0, 568, 141);
-//
-//    //Draw background
-//    QRect topRect = QRect(itemRect.left(), itemRect.top(), BACKGROUND_TOP_WIDTH,
-//                          BACKGROUND_TOP_HEIGHT);
-//    painter.drawPixmap(topRect, QPixmap(BACKGROUND_TOP_PATH));
-//    qDebug() << "Top rect   : " << topRect;
-//
-//    QRect middleRect = QRect(topRect.left(), topRect.bottom() + 1, BACKGROUND_MIDDLE_WIDTH,
-//                             itemRect.height() - BACKGROUND_BOTTOM_HEIGHT - BACKGROUND_TOP_HEIGHT);
-//    painter.drawPixmap(middleRect, QPixmap(BACKGROUND_MIDDLE_PATH));
-//    qDebug() << "Middle rect: " << middleRect;
-//
-//    QRect bottomRect = QRect(topRect.left(), middleRect.bottom() + 1, BACKGROUND_BOTTOM_WIDTH,
-//                             BACKGROUND_BOTTOM_HEIGHT);
-//    painter.drawPixmap(bottomRect, QPixmap(BACKGROUND_BOTTOM_PATH));
-//    qDebug() << "Bottom rect: " << bottomRect;
-//
-//    //Draw image
-//    QString image = QString(":/res/images/dummy_Avatar.png");
-//    QRect imageRect = QRect(itemRect.left() + IMAGE_X, itemRect.top() + IMAGE_Y,
-//                                IMAGE_WIDTH, IMAGE_HEIGHT);
-//    painter.drawPixmap(imageRect, QPixmap(image));
-//
-//    //Draw name
-//    QRect nameRect = QRect(itemRect.left() + IMAGE_WIDTH + 11, itemRect.top() + 15, itemRect.width(),
-//                           itemRect.height());
-//    QPen whitePen(QColor(Qt::white), 1, Qt::SolidLine);
-//    painter.setPen(whitePen);
-//    painter.setFont(QFont( "Nokia Sans", 18, QFont::Normal));
-//    painter.drawText(nameRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, m_name, &nameRect);
-
-//    //Draw image
-//    QString image = QString(":/res/images/dummy_Avatar.png");
-//    QRect imageRect = QRect(IMAGE_X, IMAGE_Y,
-//                                IMAGE_WIDTH, IMAGE_HEIGHT);
-//    painter.drawPixmap(imageRect, QPixmap(image));
-//
-//    //Draw name
-//    QRect nameRect = QRect(IMAGE_WIDTH + 11, 15, itemRect.width(),
-//                           50);
-//    QPen whitePen(QColor(Qt::white), 1, Qt::SolidLine);
-//    painter.setPen(whitePen);
-//    painter.setFont(QFont( "Nokia Sans", 18, QFont::Normal));
-//    painter.drawText(nameRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, m_name, &nameRect);
+    style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this);
 }
index b356dc5..8a75e0a 100644 (file)
@@ -51,8 +51,12 @@ protected:
 ******************************************************************************/
 public:
     enum ListRole { Name, Image, Distance, Updated, StatusText, Location };
+//
+//    QSize sizeHint() const;
 
-    QSize sizeHint() const;
+private:
+    void toggleHeight();
+    void shortenTexts();
 
 signals:
     void changeState();
@@ -67,11 +71,15 @@ private:
     QLabel *m_locationLabel;
     QLabel *m_imageLabel;
     QLabel *m_nameLabel;
-    QString m_name;
+    QString m_shortenedName;
+    QString m_shortenedUpdated;
+    QString m_shortenedStatusText;
+    QString m_shortenedLocation;
     QString m_image;
     bool m_expanded;
     QPoint m_mousePosition;
-    QWidget *m_childWidget;
+    QWidget *m_infoWidget;
+    User m_user;
 };
 
 #endif // FRIENDLISTITEM_H
index 8300234..1c3e4d6 100644 (file)
@@ -32,10 +32,6 @@ FriendListView::FriendListView(QWidget *parent)
     m_friendListLayout->setStretch(0, 0);
     m_friendListLayout->setSizeConstraint(QLayout::SetFixedSize);
 
-    QPalette pal = this->palette();
-    pal.setColor(QPalette::Background, Qt::green);
-    this->setPalette(pal);
-
     this->setLayout(m_friendListLayout);
 }
 
index 6a946de..e5b6045 100644 (file)
@@ -41,66 +41,22 @@ ListViewScreen::ListViewScreen(QWidget *parent)
     : QWidget(parent)
 {
     //DEBUG
-//    FriendListView *friendListView = new FriendListView(this);
-//    friendListView->setItemDelegate(new FriendListItemDelegate());
-
-//    FriendListItem *item1 = new FriendListItem();
-//    item1->setData(FriendListItem::Name, "Name 1");
-//    item1->setData(FriendListItem::Updated, "2 days ago");
-//    QString test = QString("Hello Maemo Situare! Hello Maemo Situare! ");
-//    test.append("Hello Maemo Situare! ");
-//    test.append("Hello Maemo Situare! ");
-//    test.append("Hello Maemo Situare! ");
-//    test.append("Hello Maemo Situare! ");
-//    item1->setData(FriendListItem::StatusText, test);
-//    item1->setData(FriendListItem::Location, "Kiviharjunlenkki 1E, 91910 Oulu");
-//    item1->setData(FriendListItem::Image, ":/resources/dummy_Avatar.png");
-//    FriendListItem *item2 = new FriendListItem();
-//    item2->setData(FriendListItem::Name, "Name 2");
-//    item2->setData(FriendListItem::Updated, "2 days ago");
-//    item2->setData(FriendListItem::StatusText, "Hello Maemo Situare!");
-//    item2->setData(FriendListItem::Location, "Kiviharjunlenkki 1E, 91910 Oulu");
-//    item2->setData(FriendListItem::Image, ":/resources/dummy_Avatar.png");
-//    FriendListItem *item3 = new FriendListItem();
-//    item3->setData(FriendListItem::Name, "Name 3");
-//    item3->setData(FriendListItem::Updated, "2 days ago");
-//    item3->setData(FriendListItem::StatusText, "Hello Maemo Situare!");
-//    item3->setData(FriendListItem::Location, "Kiviharjunlenkki 1E, 91910 Oulu");
-//    item3->setData(FriendListItem::Image, ":/resources/dummy_Avatar.png");
-//    FriendListItem *item4 = new FriendListItem();
-//    item4->setData(FriendListItem::Name, "Name 4");
-//    item4->setData(FriendListItem::Updated, "2 days ago");
-//    item4->setData(FriendListItem::StatusText, "Hello Maemo Situare!");
-//    item4->setData(FriendListItem::Location, "Kiviharjunlenkki 1E, 91910 Oulu");
-//    item4->setData(FriendListItem::Image, ":/resources/dummy_Avatar.png");
-//    FriendListItem *item5 = new FriendListItem();
-//    item5->setData(FriendListItem::Name, "Name 5");
-//    item5->setData(FriendListItem::Updated, "2 days ago");
-//    item5->setData(FriendListItem::StatusText, "Hello Maemo Situare!");
-//    item5->setData(FriendListItem::Location, "Kiviharjunlenkki 1E, 91910 Oulu");
-//    item5->setData(FriendListItem::Image, ":/resources/dummy_Avatar.png");
-//    FriendListItem *item6 = new FriendListItem();
-//    item6->setData(FriendListItem::Name, "Name 6");
-//    item6->setData(FriendListItem::Updated, "2 days ago");
-//    item6->setData(FriendListItem::StatusText, "Hello Maemo Situare!");
-//    item6->setData(FriendListItem::Location, "Kiviharjunlenkki 1E, 91910 Oulu");
-//    item6->setData(FriendListItem::Image, ":/resources/dummy_Avatar.png");
-//    friendListView->addItem(item1);
-//    friendListView->addItem(item2);
-//    friendListView->addItem(item3);
-//    friendListView->addItem(item4);
-//    friendListView->addItem(item5);
-//    friendListView->addItem(item6);
-
     FriendListView *friendListView = new FriendListView(this);
 
     User user1(QString("Kiviharjunlenkki 1E, 91910 Oulu"), QPointF(25.5, 65), QString("User 1"),
-               QString("Hello Maemo Situare!"), QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago"), false, QString(),
+               QString("Hello Maemo Situare!"), QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago" \
+               " 2 days ago 2 days ago 2 days ago"), false, QString(),
                QString(), 12.2);
     User user2(QString("Kiviharjunlenkki 1E, 91910 Oulu"), QPointF(25.5, 65), QString("User 2"),
                QString("Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare!"),
                QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago"), false, QString(),
                QString(), 12.2);
+    User user3(QString("Kiviharjunlenkki 1E, 91910 Oulu"), QPointF(25.5, 65), QString("User 2"),
+               QString("Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare!" \
+                       "Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare! " \
+                       "Hello Maemo Situare! Hello Maemo Situare! Hello Maemo Situare! "),
+               QUrl("http://static.ak.fbcdn.net/pics/q_silhouette.gif"), QString("2 days ago"), false, QString(),
+               QString(), 12.2);
     FriendListItem *item1 = new FriendListItem(friendListView);
     item1->setData(user1);
     FriendListItem *item2 = new FriendListItem(friendListView);
@@ -110,7 +66,7 @@ ListViewScreen::ListViewScreen(QWidget *parent)
     FriendListItem *item4 = new FriendListItem(friendListView);
     item4->setData(user2);
     FriendListItem *item5 = new FriendListItem(friendListView);
-    item5->setData(user1);
+    item5->setData(user3);
     FriendListItem *item6 = new FriendListItem(friendListView);
     item6->setData(user1);
 
index 6bb83f8..e8d6e51 100644 (file)
 
 #include "user.h"
 
+User::User()
+{
+}
+
 User::User(QString address, QPointF coordinates, QString name, QString note, QUrl imageUrl,
            QString timestamp, bool type, QString userId, QString units, double value)
                : m_address(address)
index 968003a..07d8ecd 100644 (file)
@@ -36,6 +36,8 @@ class User
 {
 public:
 
+    User();
+
     /**
     * @brief Default constructor, initializes member data
     *