#include "friendlistitem.h"
#include "../user/user.h"
#include "imagebutton.h"
-#include "common.h"
+#include "../common.h"
const int BACKGROUND_TOP_HEIGHT = 20;
const int BACKGROUND_BOTTOM_HEIGHT = 15;
double value;
user->distance(value, unit);
m_distanceTextLabel->setText(QString::number(value) + " " + unit);
- setDistanceIcon(value);
+ setDistanceIcon(value, unit);
shortenTexts();
setText(false);
}
-void FriendListItem::setDistanceIcon(double value)
+void FriendListItem::setDistanceIcon(double value, const QString &unit)
{
QPixmap distanceImage;
- if (value < WALK_DISTANCE)
+ if ((unit == "m") || (value < WALK_DISTANCE))
distanceImage.load(":/res/images/walk_icon_gray.png");
else if (value < CAR_DISTANCE)
distanceImage.load(":/res/images/car_icon_gray.png");
* Icon is selected by distance.
*
* @param value distance value
+ * @param unit distance unit
*/
- void setDistanceIcon(double value);
+ void setDistanceIcon(double value, const QString &unit);
/**
* @brief Set shortened or full-length text to labels.
{
qDebug() << __PRETTY_FUNCTION__;
- m_clearFilterButton->hide();
- m_friendListView->clear();
+ QStringList newUserIDs;
foreach (User *user, friendList) {
- FriendListItem *item = new FriendListItem(m_friendListView);
- item->setData(user);
- m_friendListView->addWidget(user->userId(), item);
-
- connect(item, SIGNAL(findFriend(QPointF)),
- this, SIGNAL(findFriend(QPointF)));
+ FriendListItem *item = 0;
+ if (!m_friendListView->contains(user->userId())) {
+ item = new FriendListItem(m_friendListView);
+ item->setData(user);
+ m_friendListView->addWidget(user->userId(), item);
+
+ connect(item, SIGNAL(findFriend(QPointF)),
+ this, SIGNAL(findFriend(QPointF)));
+ }
+ else {
+ item = m_friendListView->widget(user->userId());
+ item->setData(user);
+ }
+
+ newUserIDs.append(user->userId());
}
+
+ m_friendListView->clearUnused(newUserIDs);
}
void FriendListPanel::clearFriendListFilter()
#include <QLabel>
#include "friendlistview.h"
+#include "friendlistitem.h"
+#include "../user/user.h"
FriendListView::FriendListView(QWidget *parent)
: QWidget(parent)
{
qDebug() << __PRETTY_FUNCTION__;
- if (!widgets.contains(key)) {
+ if (!m_widgets.contains(key)) {
m_friendListLayout->addWidget(widget);
- widgets.insert(key, widget);
+ m_widgets.insert(key, widget);
}
}
-void FriendListView::clear()
+void FriendListView::clearUnused(const QStringList &userIDs)
{
qDebug() << __PRETTY_FUNCTION__;
- foreach (QWidget *widget, widgets) {
- m_friendListLayout->removeWidget(widget);
- disconnect(widget, 0, 0, 0);
- delete widget;
- }
+ foreach (QString key, m_widgets.keys()) {
+ if (!userIDs.contains(key)) {
+ QWidget *widget = m_widgets.value(key);
- widgets.clear();
+ if (widget) {
+ m_friendListLayout->removeWidget(widget);
+ disconnect(widget, 0, 0, 0);
+ delete widget;
+ }
+ }
+ }
}
void FriendListView::filter(const QList<QString> &userIDs)
{
- foreach (QWidget *widget, widgets)
+ foreach (QWidget *widget, m_widgets)
widget->hide();
foreach (QString userID, userIDs) {
- QWidget *widget = widgets.value(userID);
+ QWidget *widget = m_widgets.value(userID);
if (widget)
widget->show();
}
void FriendListView::clearFilter()
{
- foreach (QWidget *widget, widgets)
+ foreach (QWidget *widget, m_widgets)
widget->show();
}
+
+bool FriendListView::contains(const QString &userID)
+{
+ return m_widgets.contains(userID);
+}
+
+FriendListItem *FriendListView::widget(const QString &userID)
+{
+ return static_cast<FriendListItem*>(m_widgets.value(userID));
+}
class QVBoxLayout;
class QLabel;
+class User;
+class FriendListItem;
/**
* @brief FriendListView shows items in list.
void addWidget(const QString &key, QWidget *widget);
/**
- * @brief Clear view.
+ * @brief Clear unused widgets from view.
*
- * Clears all items from the view and widget list.
+ * Clears items which are not in user ID's list from the view and widget list.
+ *
+ * @param userIDs list of new user ID's.
*/
- void clear();
+ void clearUnused(const QStringList &userIDs);
/**
* @brief Clears filtering from list.
void clearFilter();
/**
+ * @brief Checks if view contains widget with userID.
+ *
+ * @param userID user's ID
+ * @return true if view contains widget, false otherwise
+ */
+ bool contains(const QString &userID);
+
+ /**
* @brief Sets filter to list.
*
* Hide all widgets that are not in the userIDs list.
*/
void filter(const QList<QString> &userIDs);
+ /**
+ * @brief Returns FriendListItem with userID.
+ *
+ * @param userID user's ID
+ * @return FriendListItem
+ */
+ FriendListItem *widget(const QString &userID);
+
/******************************************************************************
* DATA MEMBERS
******************************************************************************/
private:
QVBoxLayout *m_friendListLayout; ///< Layout for this view
- QHash<QString, QWidget *> widgets; ///< List of widgets in this view. Key = user ID
+ QHash<QString, QWidget *> m_widgets; ///< List of widgets in this view. Key = user ID
};
#endif // FRIENDLISTVIEW_H
/**
- * @brief Clear widgets from the view.
+ * @brief Clear unused widgets from the view.
*/
- void friendListViewClear();
+ void friendListViewClearUnused();
};
void TestFriendList::friendListViewAddWidget()
User *user1 = new User(QString("Address"), QPointF(12.22, 23.33), QString("Name"),
QString("Note"), QUrl("http://image.url"), QString("Timestamp"), true,
- QString("UserID"), QString("Units"), 44.12);
+ QString("UserID1"), QString("Units"), 44.12);
User *user2 = new User(QString("Address"), QPointF(12.22, 23.33), QString("Name"),
QString("Note"), QUrl("http://image.url"), QString("Timestamp"), true,
- QString("UserID"), QString("Units"), 44.12);
+ QString("UserID2"), QString("Units"), 44.12);
FriendListItem *item1 = new FriendListItem(view);
item1->setData(user1);
FriendListItem *item2 = new FriendListItem(view);
item2->setData(user2);
- view->addWidget(item1);
- view->addWidget(item2);
+ view->addWidget(user1->userId(), item1);
+ view->addWidget(user2->userId(), item2);
QCOMPARE(view->layout()->count(), 2);
User *user3 = new User(QString("Address"), QPointF(12.22, 23.33), QString("Name"),
QString("Note"), QUrl("http://image.url"), QString("Timestamp"), true,
- QString("UserID"), QString("Units"), 44.12);
+ QString("UserID3"), QString("Units"), 44.12);
FriendListItem *item3 = new FriendListItem(view);
item3->setData(user3);
- view->addWidget(item3);
+ view->addWidget(user3->userId(), item3);
QCOMPARE(view->layout()->count(), 3);
- view->addWidget(item3);
+ view->addWidget(user3->userId(), item3);
QCOMPARE(view->layout()->count(), 3);
}
-void TestFriendList::friendListViewClear()
+void TestFriendList::friendListViewClearUnused()
{
FriendListView *view = new FriendListView();
User *user1 = new User(QString("Address"), QPointF(12.22, 23.33), QString("Name"),
QString("Note"), QUrl("http://image.url"), QString("Timestamp"), true,
- QString("UserID"), QString("Units"), 44.12);
+ QString("UserID1"), QString("Units"), 44.12);
User *user2 = new User(QString("Address"), QPointF(12.22, 23.33), QString("Name"),
QString("Note"), QUrl("http://image.url"), QString("Timestamp"), true,
- QString("UserID"), QString("Units"), 44.12);
+ QString("UserID2"), QString("Units"), 44.12);
FriendListItem *item1 = new FriendListItem(view);
item1->setData(user1);
FriendListItem *item2 = new FriendListItem(view);
item2->setData(user2);
- view->addWidget(item1);
- view->addWidget(item2);
+ view->addWidget(user1->userId(), item1);
+ view->addWidget(user2->userId(), item2);
QCOMPARE(view->layout()->count(), 2);
- view->clear();
+ QStringList newUserIDs;
+ newUserIDs.append(user2->userId());
+ view->clearUnused(newUserIDs);
- QCOMPARE(view->layout()->count(), 0);
+ QCOMPARE(view->layout()->count(), 1);
}
HEADERS += ../../../src/ui/friendlistview.h \
../../../src/ui/friendlistitem.h \
../../../src/user/user.h \
- ../../../src/ui/avatarimage.h
+ ../../../src/ui/avatarimage.h \
+ ../../../src/ui/imagebutton.h
SOURCES += ../../../src/ui/friendlistview.cpp \
../../../src/ui/friendlistitem.cpp \
../../../src/user/user.cpp \
../../../src/ui/avatarimage.cpp \
+ ../../../src/ui/imagebutton.cpp \
testfriendlist.cpp