Removed disabled button states, don't open panel without buttons
[situare] / src / ui / friendlistpanel.h
index 685e73f..6a2723e 100644 (file)
 #ifndef FRIENDLISTPANEL_H
 #define FRIENDLISTPANEL_H
 
-#include <QWidget>
+#include "panelbase.h"
 
 class QLabel;
 class QLineEdit;
 class QPushButton;
 
 class FriendListItemDelegate;
-class GeoCoordinate;
 class FriendListView;
+class GeoCoordinate;
+class ImageButton;
 class User;
 
 /**
@@ -46,7 +47,7 @@ class User;
  * @author Jussi Laitinen - jussi.laitinen (at) ixonos.com
  * @author Sami Rämö - sami.ramo (at) ixonos.com
  */
-class FriendListPanel : public QWidget
+class FriendListPanel : public PanelBase
 {
     Q_OBJECT
 
@@ -65,7 +66,7 @@ protected:
     /**
     * @brief Re-implemented from QWidget::hideEvent()
     *
-    * Calls updateKeyboardGrabbing().
+    * Calls updateKeyboardGrabbing() and clearFriendGroupFiltering().
     *
     * @param event
     */
@@ -100,7 +101,7 @@ public slots:
 
 private:
     /**
-    * @brief Set visibility for filtering related UI elements
+    * @brief Set visibility for filtering text field and clearing button
     *
     * @param visible True if items should be visible, false if not
     */
@@ -109,29 +110,53 @@ private:
     /**
     * @brief Takes care of grabbing and releasing the keyboard when required
     *
-    * 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.
+    * Keyboard is grabbed when MainWindow it the topmost window, panel tab is open and
+    * FriendListPanel is visible. Releasing is done if the MainWindow is not the topmost window
+    * or panel tab is not open or FriendListPanel is invisible.
     */
     void updateKeyboardGrabbing();
 
 private slots:
     /**
-     * @brief Slot to clear friend list filter
-     */
-    void clearFriendListFilter();
+    * @brief Called when any of the panel tabs is closed
+    *
+    * Does call clearFriendGroupFiltering().
+    *
+    * Calls updateKeyboardGrabbing() for releasing the grabbing when FriendListPanel is closed, not
+    * changed to other panel. In this case the hideEvent() is not triggered.
+    */
+    void anyPanelClosed();
 
     /**
-    * @brief Slot for clearing the friend list filtering.
+    * @brief Called when any of the panel tabs is opened
+    *
+    * Calls updateKeyboardGrabbing() for grabbing the keyboard when FriendListPanel is closed and
+    * is the last selected tab. In this case the showEvent() is not triggered.
+    */
+    void anyPanelOpened();
+
+    /**
+    * @brief Slot for clearing the filtering
+    *
+    * Clears friend group (or single friend) filtering and calls clearTextFiltering().
     */
     void clearFiltering();
 
     /**
-    * @brief Set filtering UI elements visibility based on the filtering text value
+    * @brief Slot for clearing the text based filtering.
+    *
+    * Does clear only the text based filtering. Friend group based filtering is not affected.
+    */
+    void clearTextFiltering();
+
+    /**
+    * @brief Updates the filtering when filtering text value is changed
     *
     * Filtering UI elements are invoked when the text becomes not empty and hidden when text
     * becomes empty.
     *
+    * Sets the new filtering text.
+    *
     * @param text New text value
     */
     void filterTextChanged(const QString &text);
@@ -178,30 +203,24 @@ signals:
     */
     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:
-    bool m_mainWindowIsTopmost;         ///< Is the MainWindow the topmost one
+    bool m_mainWindowIsTopmost;                 ///< Is the MainWindow the topmost one
+    bool m_somePanelIsOpen;                     ///< Is any panel tab open
 
-    QLabel *m_friendListLabel;          ///< Friend list label
+    QLabel *m_headerLabel;                      ///< Show how many friends are selected
 
-    QLineEdit *m_filterField;           ///< Text field for the filter text
+    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
+    QPushButton *m_clearTextFilteringButton;    ///< Button for clearing the text filtering
 
-    QWidget *m_friendListHeaderWidget;  ///< Friend list header widget
+    QWidget *m_headerWidget;                    ///< Friend list header widget
 
-    FriendListView *m_friendListView;   ///< Friend list view
+    FriendListView *m_friendListView;           ///< Friend list view
+    ImageButton *m_clearGroupFilteringButton;   ///< Button for clearing friend group filtering
+    ImageButton *m_routeButton;                 ///< Button for routing to selected friend
 };
 
 #endif // FRIENDLISTPANEL_H