1ba979cf35c10bde93e7dec83036eb97b77b2c74
[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 class ExtendedListItemDelegate;
28 class GeoCoordinate;
29 class LocationListView;
30 class Location;
31 class Route;
32 class RouteWaypointListView;
33
34 /**
35  * @brief Class for sliding routing panel
36  *
37  * @author Jussi Laitinen - jussi.laitinen (at) ixonos.com
38  */
39 class RoutingPanel : public QWidget
40 {
41     Q_OBJECT
42
43 public:
44     /**
45      * @brief Default constructor
46      *
47      * @param parent
48      */
49     RoutingPanel(QWidget *parent = 0);
50
51 /*******************************************************************************
52  * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS
53  ******************************************************************************/
54 protected:
55     /**
56     * @brief Re-implemented from QWidget::hideEvent()
57     *
58     * Calls clearListsSelections()
59     *
60     * @param event
61     */
62     void hideEvent(QHideEvent *event);
63
64 /*******************************************************************************
65  * MEMBER FUNCTIONS AND SLOTS
66  ******************************************************************************/
67 private slots:
68     /**
69     * @brief Clears lists' selections.
70     *
71     * Does call setRouteButtonDisabled().
72     */
73     void clearListsSelections();
74
75     /**
76     * @brief Populates location list view.
77     *
78     * @param locations list of Location objects
79     */
80     void populateLocationListView(const QList<Location> &locations);
81
82     /**
83     * @brief Routes to selected location.
84     *
85     * Emits routeToLocation if location is selected from list.
86     */
87     void routeToSelectedLocation();
88
89     /**
90     * @brief Sets route to the panel.
91     *
92     * Appends route waypoint list with route segments.
93     * @param route Route item containing parsed route details
94     */
95     void setRoute(Route &route);
96
97     /**
98     * @brief Sets route button disabled.
99     *
100     * Disabled if there isn't any list item selected.
101     */
102     void setRouteButtonDisabled();
103
104 /*******************************************************************************
105  * SIGNALS
106  ******************************************************************************/
107 signals:
108     /**
109     * @brief Signal for location item clicked.
110     *
111     * @param swBound south-west bound GeoCoordinate
112     * @param neBound north-east bound GeoCoordinate
113     */
114     void locationItemClicked(const GeoCoordinate &swBound, const GeoCoordinate &neBound);
115
116     /**
117     * @brief Signal for requesting searching location.
118     */
119     void requestSearchLocation();
120
121     /**
122     * @brief Signal for routing to location.
123     *
124     * @param coordinates location's geo coordinates
125     */
126     void routeToLocation(const GeoCoordinate &coordinates);
127
128     /**
129     * @brief Signal for route waypoint item clicked.
130     *
131     * @param coordinate waypoint item's coordinate
132     */
133     void routeWaypointItemClicked(const GeoCoordinate &coordinate);
134
135     /**
136      * @brief Signal for requesting a panel to be opened
137      *
138      * @param widget Pointer to the widget that emitted the signal
139      */
140     void showPanelRequested(QWidget *widget);
141
142 /*******************************************************************************
143  * DATA MEMBERS
144  ******************************************************************************/
145 private:
146     QLabel *m_locationListLabel;            ///< Location list label
147
148     QPushButton *m_routeButton;             ///< Route to location button
149     QPushButton *m_searchLocationButton;    ///< Search location button
150
151     QWidget *m_locationListHeaderWidget;    ///< Location list header widget
152
153     LocationListView *m_locationListView;   ///< Location list view
154     RouteWaypointListView *m_routeWaypointListView; ///< Route waypoint list view
155 };
156
157 #endif // ROUTINGPANEL_H