Merge branch 'master' into new_panels_with_context_buttons
[situare] / src / ui / routingpanel.h
1 /*
2     Situare - A location system for Facebook
3     Copyright (C) 2010  Ixonos Plc. Authors:
4
5         Jussi Laitinen - jussi.laitinen@ixonos.com
6
7     Situare is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     version 2 as published by the Free Software Foundation.
10
11     Situare is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with Situare; if not, write to the Free Software
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
19     USA.
20 */
21
22 #ifndef ROUTINGPANEL_H
23 #define ROUTINGPANEL_H
24
25 #include <QtGui>
26
27 #include "panelbase.h"
28
29 class ExtendedListItemDelegate;
30 class GeoCoordinate;
31 class ImageButton;
32 class Location;
33 class LocationListView;
34 class Route;
35 class RouteWaypointListView;
36
37 /**
38  * @brief Class for sliding routing panel
39  *
40  * @author Jussi Laitinen - jussi.laitinen (at) ixonos.com
41  */
42 class RoutingPanel : public PanelBase
43 {
44     Q_OBJECT
45
46 public:
47     /**
48      * @brief Default constructor
49      *
50      * @param parent
51      */
52     RoutingPanel(QWidget *parent = 0);
53
54 /*******************************************************************************
55  * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS
56  ******************************************************************************/
57 protected:
58     /**
59     * @brief Re-implemented from QWidget::hideEvent()
60     *
61     * Calls clearListsSelections()
62     *
63     * @param event
64     */
65     void hideEvent(QHideEvent *event);
66
67 /*******************************************************************************
68  * MEMBER FUNCTIONS AND SLOTS
69  ******************************************************************************/
70 private slots:
71     /**
72     * @brief Clears lists' selections.
73     *
74     * Does call setRouteButtonDisabled().
75     */
76     void clearListsSelections();
77
78     /**
79     * @brief Populates location list view.
80     *
81     * @param locations list of Location objects
82     */
83     void populateLocationListView(const QList<Location> &locations);
84
85     /**
86     * @brief Routes to selected location.
87     *
88     * Emits routeToLocation if location is selected from list.
89     */
90     void routeToSelectedLocation();
91
92     /**
93     * @brief Sets route to the panel.
94     *
95     * Appends route waypoint list with route segments.
96     * @param route Route item containing parsed route details
97     */
98     void setRoute(Route &route);
99
100     /**
101     * @brief Sets route button disabled.
102     *
103     * Disabled if there isn't any list item selected.
104     */
105     void setRouteButtonDisabled();
106
107 /*******************************************************************************
108  * SIGNALS
109  ******************************************************************************/
110 signals:
111     /**
112     * @brief Signal for location item clicked.
113     *
114     * @param swBound south-west bound GeoCoordinate
115     * @param neBound north-east bound GeoCoordinate
116     */
117     void locationItemClicked(const GeoCoordinate &swBound, const GeoCoordinate &neBound);
118
119     /**
120     * @brief Signal for requesting searching location.
121     */
122     void requestSearchLocation();
123
124     /**
125     * @brief Signal for routing to location.
126     *
127     * @param coordinates location's geo coordinates
128     */
129     void routeToLocation(const GeoCoordinate &coordinates);
130
131     /**
132     * @brief Signal for route waypoint item clicked.
133     *
134     * @param coordinate waypoint item's coordinate
135     */
136     void routeWaypointItemClicked(const GeoCoordinate &coordinate);
137
138     /**
139      * @brief Signal for requesting a panel to be opened
140      *
141      * @param widget Pointer to the widget that emitted the signal
142      */
143     void showPanelRequested(QWidget *widget);
144
145 /*******************************************************************************
146  * DATA MEMBERS
147  ******************************************************************************/
148 private:
149     QLabel *m_locationListLabel;            ///< Location list label
150
151     QPushButton *m_searchLocationButton;    ///< Search location button
152
153     QWidget *m_locationListHeaderWidget;    ///< Location list header widget
154
155     ImageButton *m_routeButton;             ///< Route to location button
156     LocationListView *m_locationListView;   ///< Location list view
157     RouteWaypointListView *m_routeWaypointListView; ///< Route waypoint list view
158 };
159
160 #endif // ROUTINGPANEL_H