Modified FriendListItemDelegate::paint.
authorJussi Laitinen <jupe@l3l7588.ixonos.local>
Mon, 26 Apr 2010 13:24:36 +0000 (16:24 +0300)
committerJussi Laitinen <jupe@l3l7588.ixonos.local>
Mon, 26 Apr 2010 13:24:36 +0000 (16:24 +0300)
src/images.qrc
src/src.pro
src/ui/friendlistitemdelegate.cpp
src/ui/friendlistitemdelegate.h
src/ui/friendlistview.cpp
src/ui/friendlistview.h
src/ui/listviewscreen.cpp

index 4a3fb4a..f56a766 100644 (file)
@@ -28,5 +28,8 @@
         <file>resources/top_separtor.png</file>
         <file>resources/zoom_in.png</file>
         <file>resources/zoom_out.png</file>
+        <file>resources/list_item_bottom.png</file>
+        <file>resources/list_item_middle.png</file>
+        <file>resources/list_item_top.png</file>
     </qresource>
 </RCC>
index 6372405..3d92a8f 100644 (file)
@@ -23,7 +23,8 @@ SOURCES += main.cpp \
     ui/updatelocation/texteditautoresizer.cpp \
     ui/friendlistview.cpp \
     ui/friendlistitemdelegate.cpp \
-    ui/friendlistitem.cpp
+    ui/friendlistitem.cpp \
+    ui/friendlistmodel.cpp
 HEADERS += ui/mainwindow.h \
     ui/mapviewscreen.h \
     ui/listviewscreen.h \
@@ -45,7 +46,8 @@ HEADERS += ui/mainwindow.h \
     facebookservice/facebookcommon.h \
     ui/friendlistview.h \
     ui/friendlistitemdelegate.h \
-    ui/friendlistitem.h
+    ui/friendlistitem.h \
+    ui/friendlistmodel.h
 QT += network \
     webkit
 
index ce409fb..2412966 100644 (file)
 #include "friendlistitemdelegate.h"
 #include "friendlistitem.h"
 
-const int BACKGROUND_LEFT = 0;
-const int BACKGROUND_TOP = 0;
-const int BACKGROUND_WIDTH = 368;
-const int BACKGROUND_HEIGHT = 141;
-const int IMAGE_LEFT = 9;
-const int IMAGE_TOP = 0;
+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_LEFT = 71;
-const int CLOCK_TOP = 53;
-const int ENVELOPE_LEFT = 71;
-const int ENVELOPE_TOP = 77;
-const int COMPASS_LEFT = 71;
-const int COMPASS_TOP = 101;
+const int CLOCK_X = 71;
+const int CLOCK_Y = 53;
+const int ENVELOPE_X = 71;
+const int ENVELOPE_Y = 77;
+const int COMPASS_X = 71;
+const int COMPASS_Y = 101;
 const int ICON_WIDTH = 24;
 const int ICON_HEIGHT = 24;
 
-const QString BACKGROUND_PATH = QString(":/resources/list_item.png");
+const QString BACKGROUND_TOP_PATH = QString(":/resources/list_item_top.png");
+const QString BACKGROUND_MIDDLE_PATH = QString(":/resources/list_item_middle.png");
+const QString BACKGROUND_BOTTOM_PATH = QString(":/resources/list_item_bottom.png");
 const QString CLOCK_PATH = QString(":/resources/clock.png");
 const QString ENVELOPE_PATH = QString(":/resources/envelope.png");
 const QString COMPASS_PATH = QString(":/resources/compass.png");
 
 FriendListItemDelegate::FriendListItemDelegate()
+    : m_currentIndex(-1)
 {
 }
 
@@ -57,29 +66,45 @@ void FriendListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
                       const QModelIndex &index) const
 {
     QRect itemRect = option.rect;
-
+    itemRect = QRect(itemRect.left(), itemRect.top(), 368, 141);
+    qDebug() << "Item rect: " << itemRect;
     //Draw selected background
-    if(option.state & QStyle::State_Selected){
+    if(option.state & QStyle::State_Selected) {
+
+        QRect topRect = QRect(itemRect.left(), itemRect.top(), BACKGROUND_TOP_WIDTH,
+                              BACKGROUND_TOP_HEIGHT);
+        painter->drawPixmap(topRect, QPixmap(BACKGROUND_TOP_PATH));
 
-        QRect backRect = QRect(itemRect.left() + BACKGROUND_LEFT, itemRect.top() + BACKGROUND_TOP,
-                               BACKGROUND_WIDTH, BACKGROUND_HEIGHT);
-        painter->drawPixmap(backRect, QPixmap(BACKGROUND_PATH));
+        QRect middleRect = QRect(topRect.left(), topRect.bottom() + 1, BACKGROUND_MIDDLE_WIDTH,
+                                 BACKGROUND_MIDDLE_HEIGHT);
+        painter->drawPixmap(middleRect, QPixmap(BACKGROUND_MIDDLE_PATH));
 
+        QRect bottomRect = QRect(topRect.left(), middleRect.bottom() + 1, BACKGROUND_BOTTOM_WIDTH,
+                                 BACKGROUND_BOTTOM_HEIGHT);
+        painter->drawPixmap(bottomRect, QPixmap(BACKGROUND_BOTTOM_PATH));
 
     }
     //Draw background
     else {
 
-        QRect backRect = QRect(itemRect.left() + BACKGROUND_LEFT, itemRect.top() + BACKGROUND_TOP,
-                               BACKGROUND_WIDTH, BACKGROUND_HEIGHT);
-        painter->drawPixmap(backRect, QPixmap(BACKGROUND_PATH));
+        QRect topRect = QRect(itemRect.left(), itemRect.top(), BACKGROUND_TOP_WIDTH,
+                              BACKGROUND_TOP_HEIGHT);
+        painter->drawPixmap(topRect, QPixmap(BACKGROUND_TOP_PATH));
 
+        QRect middleRect = QRect(topRect.left(), topRect.bottom() + 1, BACKGROUND_MIDDLE_WIDTH,
+                                 BACKGROUND_MIDDLE_HEIGHT);
+        painter->drawPixmap(middleRect, QPixmap(BACKGROUND_MIDDLE_PATH));
 
+        QRect bottomRect = QRect(topRect.left(), middleRect.bottom() + 1, BACKGROUND_BOTTOM_WIDTH,
+                                 BACKGROUND_BOTTOM_HEIGHT);
+        painter->drawPixmap(bottomRect, QPixmap(BACKGROUND_BOTTOM_PATH));
     }
 
+    //index.model()->layoutChanged();
+
     //Draw image
     QString image = index.data(FriendListItem::Image).toString();
-    QRect imageRect = QRect(itemRect.left() + IMAGE_LEFT, itemRect.top() + IMAGE_TOP,
+    QRect imageRect = QRect(itemRect.left() + IMAGE_X, itemRect.top() + IMAGE_Y,
                                 IMAGE_WIDTH, IMAGE_HEIGHT);
     painter->drawPixmap(imageRect, QPixmap(image));
 
@@ -90,48 +115,61 @@ void FriendListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
     QPen whitePen(QColor(Qt::white), 1, Qt::SolidLine);
     painter->setPen(whitePen);
     painter->setFont(QFont( "Nokia Sans", 18, QFont::Normal));
-    painter->drawText(nameRect, Qt::AlignLeft, name, &nameRect);
+    painter->drawText(nameRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, name, &nameRect);
 
     //Draw clock
-    QRect clockRect = QRect(itemRect.left() + CLOCK_LEFT, itemRect.top() + CLOCK_TOP,
+    QRect clockRect = QRect(itemRect.left() + CLOCK_X, itemRect.top() + CLOCK_Y,
                             ICON_WIDTH, ICON_HEIGHT);
 
     painter->drawPixmap(clockRect, QPixmap(CLOCK_PATH));
 
     //Draw updated
-    QRect updatedRect = QRect(clockRect.right() + 10, clockRect.top(), itemRect.width(),
-                           itemRect.height());
+    QRect updatedRect = QRect(clockRect.right() + 10, clockRect.top(), itemRect.width()
+                              - (itemRect.left() + CLOCK_X), itemRect.height());
     QString updated = index.data(FriendListItem::Updated).toString();
     QPen grayPen(QColor::fromRgb(152,152,152), 1, Qt::SolidLine);
     painter->setPen(grayPen);
     painter->setFont(QFont( "Nokia Sans", 13, QFont::Normal));
-    painter->drawText(updatedRect, Qt::AlignLeft | Qt::AlignTop, updated, &updatedRect);
+    painter->drawText(updatedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, updated,
+                      &updatedRect);
 
     //Draw envelope
-    QRect envelopeRect = QRect(itemRect.left() + ENVELOPE_LEFT, itemRect.top() + ENVELOPE_TOP,
+    QRect envelopeRect = QRect(itemRect.left() + ENVELOPE_X, itemRect.top() + ENVELOPE_Y,
                             ICON_WIDTH, ICON_HEIGHT);
     painter->drawPixmap(envelopeRect, QPixmap(ENVELOPE_PATH));
 
     //Draw status text
-    QRect statusTextRect = QRect(envelopeRect.right() + 10, envelopeRect.top(), itemRect.width(),
+    QRect statusTextRect = QRect(envelopeRect.right() + 10, envelopeRect.top(),
+                                 itemRect.width() -(itemRect.left() + ENVELOPE_X) ,
                            itemRect.height());
     QString statusText = index.data(FriendListItem::StatusText).toString();
-    painter->drawText(statusTextRect, Qt::AlignLeft | Qt::AlignTop, statusText, &statusTextRect);
+    painter->drawText(statusTextRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, statusText,
+                      &statusTextRect);
 
 
     //Draw compass
-    QRect compassRect = QRect(itemRect.left() + COMPASS_LEFT, itemRect.top() + COMPASS_TOP,
-                            ICON_WIDTH, ICON_HEIGHT);
+    QRect compassRect = QRect(itemRect.left() + COMPASS_X, itemRect.top() + COMPASS_Y,
+                            ICON_WIDTH - (itemRect.left() + COMPASS_X), ICON_HEIGHT);
     painter->drawPixmap(compassRect, QPixmap(COMPASS_PATH));
 
     //Draw location
     QRect locationRect = QRect(compassRect.right() + 10, compassRect.top(), itemRect.width(),
                            itemRect.height());
     QString location = index.data(FriendListItem::Location).toString();
-    painter->drawText(locationRect, Qt::AlignLeft | Qt::AlignTop, location, &locationRect);
+    painter->drawText(locationRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, location,
+                      &locationRect);
 }
 
 QSize FriendListItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
-    return QSize(BACKGROUND_WIDTH, BACKGROUND_HEIGHT);
+    qDebug() <<  __PRETTY_FUNCTION__;
+
+    if(option.state & QStyle::State_Selected) {
+        return QSize(BACKGROUND_TOP_WIDTH, BACKGROUND_TOP_HEIGHT + BACKGROUND_MIDDLE_HEIGHT +
+                 BACKGROUND_BOTTOM_HEIGHT);
+    }
+    else {
+        return QSize(BACKGROUND_TOP_WIDTH, BACKGROUND_TOP_HEIGHT + BACKGROUND_MIDDLE_HEIGHT +
+                 BACKGROUND_BOTTOM_HEIGHT);
+    }
 }
index 448294d..917bb82 100644 (file)
@@ -35,8 +35,18 @@ class FriendListItemDelegate : public QStyledItemDelegate
 public:
     FriendListItemDelegate();
 
+/*******************************************************************************
+ * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS
+ ******************************************************************************/
+public:
     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
     QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+
+/*******************************************************************************
+ * DATA MEMBERS
+ ******************************************************************************/
+public:
+    mutable int m_currentIndex;
 };
 
 #endif // FRIENDLISTITEMDELEGATE_H
index 6d13c53..ba076d2 100644 (file)
@@ -25,4 +25,11 @@ FriendListView::FriendListView(QWidget *parent)
     : QListWidget(parent)
 {
     this->setSelectionMode(QAbstractItemView::SingleSelection);
+    QPalette pal = this->palette();
+    pal.setColor(QPalette::Background, Qt::red);
+    this->setPalette(pal);
+}
+
+void FriendListView::setListModel(QAbstractItemModel *model)
+{
 }
index d4893ed..91851c9 100644 (file)
@@ -30,6 +30,9 @@ class FriendListView : public QListWidget
 
 public:
     FriendListView(QWidget *parent = 0);
+
+public:
+    void setListModel(QAbstractItemModel *model);
 };
 
 #endif // FRIENDLISTVIEW_H
index 500a0eb..91d240f 100644 (file)
 #include <QtGui/QVBoxLayout>
 #include <QGraphicsProxyWidget>
 #include <QStateMachine>
-#include "listviewscreen.h"
+#include <QListView>
 #include <QDebug>
 
+#include "listviewscreen.h"
 #include "friendlistitemdelegate.h"
 #include "friendlistview.h"
 #include "friendlistitem.h"
+#include "friendlistmodel.h"
 
 ListViewScreen::ListViewScreen(QWidget *parent)
     : QWidget(parent)
 {
+    QPalette pal = this->palette();
+    pal.setColor(QPalette::Background, Qt::blue);
+    this->setPalette(pal);
+
     //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");
-    item1->setData(FriendListItem::StatusText, "Hello Maemo Situare!");
+    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();