45e8d18aea52f71cb86ed958943d2d7f21202fb9
[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:
71     /**
72     * @brief Switch to search results view mode
73     */
74     void showResultsView();
75
76     /**
77     * @brief Switch to routing instructions view mode
78     */
79     void showRoutingView();
80
81 private slots:
82     /**
83     * @brief Clears lists' selections.
84     *
85     * Does call setRouteButtonDisabled().
86     */
87     void clearListsSelections();
88
89     /**
90     * @brief Populates location list view.
91     *
92     * @param locations list of Location objects
93     */
94     void populateLocationListView(const QList<Location> &locations);
95
96     /**
97     * @brief Handler for route button toggling actions
98     */
99     void routeButtonToggled(bool checked);
100
101     /**
102     * @brief Routes to selected location.
103     *
104     * Emits routeToLocation if location is selected from list.
105     */
106     void routeToSelectedLocation();
107
108     /**
109     * @brief Handler for search button toggling actions
110     */
111     void searchLocationButtonToggled(bool checked);
112
113     /**
114     * @brief Sets route to the panel.
115     *
116     * Appends route waypoint list with route segments.
117     * @param route Route item containing parsed route details
118     */
119     void setRoute(Route &route);
120
121     /**
122     * @brief Sets route button disabled.
123     *
124     * Disabled if there isn't any list item selected.
125     */
126     void setRouteButtonDisabled();
127
128 /*******************************************************************************
129  * SIGNALS
130  ******************************************************************************/
131 signals:
132     /**
133     * @brief Emitted when route is cleared
134     */
135     void clearRoute();
136
137     /**
138     * @brief Signal for location item clicked.
139     *
140     * @param swBound south-west bound GeoCoordinate
141     * @param neBound north-east bound GeoCoordinate
142     */
143     void locationItemClicked(const GeoCoordinate &swBound, const GeoCoordinate &neBound);
144
145     /**
146     * @brief Signal for requesting searching location.
147     */
148     void requestSearchLocation();
149
150     /**
151     * @brief Signal for routing to location.
152     *
153     * @param coordinates location's geo coordinates
154     */
155     void routeToLocation(const GeoCoordinate &coordinates);
156
157     /**
158     * @brief Signal for route waypoint item clicked.
159     *
160     * @param coordinate waypoint item's coordinate
161     */
162     void routeWaypointItemClicked(const GeoCoordinate &coordinate);
163
164     /**
165      * @brief Signal for requesting a panel to be opened
166      *
167      * @param widget Pointer to the widget that emitted the signal
168      */
169     void showPanelRequested(QWidget *widget);
170
171 /*******************************************************************************
172  * DATA MEMBERS
173  ******************************************************************************/
174 private:
175     QLabel *m_resultsLabel;                 ///< Location list label
176
177     QStackedLayout *m_views;                ///< Views
178
179     QWidget *m_resultsView;                 ///< Search results view widget
180     QWidget *m_routingView;                 ///< Routing instructions view widget
181
182     ImageButton *m_routeButton;             ///< Route to location button
183     ImageButton *m_searchLocationButton;    ///< Search location button
184     LocationListView *m_locationListView;   ///< Search results list view
185     RouteWaypointListView *m_routeWaypointListView;     ///< Route instructions list view
186 };
187
188 #endif // ROUTINGPANEL_H