- /*
+/*
Situare - A location system for Facebook
Copyright (C) 2010 Ixonos Plc. Authors:
Kaj Wallin - kaj.wallin@ixonos.com
+ Henri Lampela - henri.lampela@ixonos.com
+ Pekka Nissinen - pekka.nissinen@ixonos.com
+ Jussi Laitinen - jussi.laitinen@ixonos.com
+ Sami Rämö - sami.ramo@ixonos.com
Situare is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
along with Situare; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA.
- */
+*/
#ifndef FRIENDLISTPANEL_H
#define FRIENDLISTPANEL_H
-#include <QtGui>
+#include <QWidget>
+class QLabel;
+class QLineEdit;
+class QPushButton;
+
+class FriendListItemDelegate;
+class GeoCoordinate;
class FriendListView;
class User;
-class PanelSliderBar;
/**
-* @brief Class for sliding friends list panel
-*
-* @author Kaj Wallin - kaj.wallin (at) ixonos.com
-* @class FriendListPanel friendlistpanel.h "ui/friendlistpanel.h"
-*/
+ * @brief Class for sliding friends list panel
+ *
+ * @author Kaj Wallin - kaj.wallin (at) ixonos.com
+ * @author Henri Lampela - henri.lampela (at) ixonos.com
+ * @author Pekka Nissinen - pekka.nissinen (at) ixonos.com
+ * @author Jussi Laitinen - jussi.laitinen (at) ixonos.com
+ * @author Sami Rämö - sami.ramo (at) ixonos.com
+ */
class FriendListPanel : public QWidget
{
Q_OBJECT
public:
/**
- * @brief Default constructor
+ * @brief Default constructor
+ *
+ * @param parent
+ */
+ FriendListPanel(QWidget *parent = 0);
+
+/*******************************************************************************
+ * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS
+ ******************************************************************************/
+protected:
+ /**
+ * @brief Re-implemented from QWidget::hideEvent()
*
- * @param parent
+ * Calls updateKeyboardGrabbing().
+ *
+ * @param event
*/
- FriendListPanel(QWidget *parent = 0);
+ void hideEvent(QHideEvent *event);
+
+ /**
+ * @brief Re-implemented from QWidget::showEvent()
+ *
+ * Calls updateKeyboardGrabbing().
+ *
+ * @param event
+ */
+ void showEvent(QShowEvent *event);
/*******************************************************************************
* MEMBER FUNCTIONS AND SLOTS
******************************************************************************/
public slots:
/**
- * @brief Slot to refresh friends list
+ * @brief Slot to update friend item's image
+ *
+ * @param user Friend
+ */
+ void friendImageReady(User *user);
+
+ /**
+ * @brief Slot to refresh friends list
+ *
+ * @param friendList
+ */
+ void friendInfoReceived(QList<User *> &friendList);
+
+private:
+ /**
+ * @brief Set visibility for filtering related UI elements
*
- * @param friendList
+ * @param visible True if items should be visible, false if not
*/
- void friendInfoReceived(QList<User *> &friendList);
+ void setFilteringLayoutVisibility(bool visible);
/**
- * @brief Slot to redraw the panel after window resize event
+ * @brief Takes care of grabbing and releasing the keyboard when required
*
- * @param width Width of the window after resize
- * @param height Height of the window after resize
+ * Keyboard is grabbed when MainWindow it the topmost window and FriendListPanel is visible.
+ * Releasing is done if the MainWindow is not the topmost window and/or FriendListPanel
+ * is invisible.
+ */
+ void updateKeyboardGrabbing();
+
+private slots:
+ /**
+ * @brief Slot to clear friend list filter
+ */
+ void clearFriendListFilter();
+
+ /**
+ * @brief Slot for clearing the friend list filtering.
*/
- void reDrawFriendsPanel(int width, int height);
+ void clearFiltering();
+
+ /**
+ * @brief Set filtering UI elements visibility based on the filtering text value
+ *
+ * Filtering UI elements are invoked when the text becomes not empty and hidden when text
+ * becomes empty.
+ *
+ * @param text New text value
+ */
+ void filterTextChanged(const QString &text);
+
+ /**
+ * @brief Routes to selected friend.
+ *
+ * Emits routeToFriend if friend is selected from list.
+ */
+ void routeToSelectedFriend();
+
+ /**
+ * @brief Slot to show friends in list.
+ *
+ * Shows only friends that are on userIDs list
+ * @param userIDs list of user ID's
+ */
+ void showFriendsInList(const QList<QString> &userIDs);
+
+ /**
+ * @brief Called when topmost window is changed
+ *
+ * Does set m_mainWindowIsTopmost and calls updateKeyboardGrabbing()
+ *
+ * @param mainWindowIsTopmost True if MainWindow is the topmost one
+ */
+ void topmostWindowChanged(bool mainWindowIsTopmost);
/*******************************************************************************
* SIGNALS
******************************************************************************/
signals:
- void findFriend(const QPointF &coordinates);
+ /**
+ * @brief Signal for friend finding
+ *
+ * @param coordinates Target coordinate
+ */
+ void findFriend(const GeoCoordinate &coordinates);
+
+ /**
+ * @brief Signal for routing to friend.
+ *
+ * @param coordinates friend's geo coordinates
+ */
+ void routeToFriend(const GeoCoordinate &coordinates);
+
+ /**
+ * @brief Signal for requesting a panel to be opened
+ *
+ * @param widget Pointer to the widget that emitted the signal
+ */
+ void showPanelRequested(QWidget *widget);
/*******************************************************************************
* DATA MEMBERS
******************************************************************************/
private:
- FriendListView *m_friendListView; ///< Friend list view
- QVBoxLayout *m_friendsPanelVBox; ///< Vertical layout inside the panel
- PanelSliderBar *m_friendsPanelSlidingBar; ///< Widget for sidebar tab item
-
- QStateMachine *m_friendsPanelStateMachine; ///< State machine for sliding the panel
- QState *m_friendsPanelStateClosed; ///< State of the closed panel
- QState *m_friendsPanelStateOpened; ///< State of the opened panel
- QSignalTransition *m_friendsPanelTransitionClose; ///< Transition signal for closing the panel
- QSignalTransition *m_friendsPanelTransitionOpen; ///< Transition signal for opening the panel
+ bool m_mainWindowIsTopmost; ///< Is the MainWindow the topmost one
+
+ QLabel *m_friendListLabel; ///< Friend list label
+
+ QLineEdit *m_filterField; ///< Text field for the filter text
+
+ QPushButton *m_clearFilterButton; ///< Button to clear list filtering
+ QPushButton *m_filterClearButton; ///< Button for clearing the filtering
+ QPushButton *m_routeButton; ///< Button to route to friend
+
+ QWidget *m_friendListHeaderWidget; ///< Friend list header widget
+
+ FriendListView *m_friendListView; ///< Friend list view
};
#endif // FRIENDLISTPANEL_H