]> err.no Git - mapper/blob - src/gtkmap.h
Path: More fixes and adjustments
[mapper] / src / gtkmap.h
1 /*
2  * MapWidget: Display a map
3  * Copyright (C) 2008 Kaj-Michael Lang
4  * Original non-widget map Copyright (C) 2006-2007 John Costigan.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library 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 GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the Free
18  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20 #ifndef __GTK_MAP_H__
21 #define __GTK_MAP_H__
22
23 #include <gtk/gtk.h>
24 #include "path.h"
25 #include "position.h"
26 #include "map-tile-repo.h"
27
28 typedef enum {
29         CENTER_WAS_LATLON = -2,
30         CENTER_WAS_LEAD = -1,
31         CENTER_MANUAL = 0,
32         CENTER_LEAD = 1,
33         CENTER_LATLON = 2
34 } GtkMapCenterMode;
35
36 typedef enum {
37         MAP_MARKER_TYPE_POI=0,
38         MAP_MARKER_TYPE_POSITION,
39         MAP_MARKER_TYPE_BOOKMARK,
40         MAP_MARKER_TYPE_CACHE,
41 } GtkMapMarkerType;
42
43 typedef enum {
44         MAP_MARKER_ID=0,
45         MAP_MARKER_TYPE,
46         MAP_MARKER_LAT,
47         MAP_MARKER_LON,
48         MAP_MARKER_LABEL,
49         MAP_MARKER_ICON,
50         MAP_MARKER_COLOR,
51         MAP_MARKER_CACHE_X, /* Private, screen x,y cache */
52         MAP_MARKER_CACHE_Y,
53         MAP_MARKER_ENUM
54 } GtkMapMarkerStoreID;
55
56 #define TRACKS_MASK  0x00000001
57 #define ROUTES_MASK  0x00000002
58 #define FRIENDS_MASK 0x00000004
59
60 #define GTK_MAP_TYPE                    (gtk_map_get_type ())
61 #define GTK_MAP(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MAP_TYPE, GtkMap))
62 #define GTK_MAP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_MAP_TYPE, GtkMapClass))
63 #define GTK_IS_MAP(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_MAP_TYPE))
64
65 typedef struct _GtkMap                  GtkMap;
66 typedef struct _GtkMapClass             GtkMapClass;
67
68 struct _GtkMap {
69         GtkDrawingArea map;
70         guint size;
71         gfloat heading;
72         gfloat speed;
73 };
74
75 struct _GtkMapClass {
76         GtkDrawingAreaClass parent_class;
77         void (* zoom_changed) (GtkWidget *widget, int zoom);
78         void (* location_changed) (GtkWidget *widget, int zoom);
79         void (* center_mode_changed) (GtkWidget *widget, int zoom);
80 };
81
82 G_BEGIN_DECLS
83
84 void latlon2unit(gdouble lat, gdouble lon, guint *unitx, guint *unity);
85 void unit2latlon(guint unitx, guint unity, gdouble *lat, gdouble *lon);
86
87 GType gtk_map_get_type(void);
88 GtkWidget* gtk_map_new(void);
89
90 void gtk_map_refresh(GtkWidget *map);
91
92 /* Map repository handling */
93 void gtk_map_set_tile_repository(GtkWidget *map, RepoData *rd);
94
95 /* Markers */
96 gboolean gtk_map_markers_add(GtkWidget *map, GtkMapMarkerType type, GtkListStore *store);
97 gboolean gtk_map_markers_remove(GtkWidget *map, GtkMapMarkerType type, GtkListStore *store);
98
99 /* Paths */
100 gboolean gtk_map_add_path(GtkWidget *map, Path *path);
101 gboolean gtk_map_remove_path(GtkWidget *map, Path *path);
102 gboolean gtk_map_remove_path_by_id(GtkWidget *map, gint path_id);
103 void gtk_map_set_path_display(GtkWidget *widget, gint path_mask);
104
105 /* Get copy of map back buffer */
106 GdkPixmap *gtk_map_pixmap_get(GtkWidget *map);
107
108 /* Tile cache config */
109 void gtk_map_set_cache_size(GtkWidget *widget, guint cache_size);
110
111 /* Location functions */
112 void gtk_map_set_center(GtkWidget *map, guint unitx, guint unity);
113 void gtk_map_get_center(GtkWidget *map, guint *unitx, guint *unity);
114
115 void gtk_map_set_center_latlon(GtkWidget *map, gdouble lat, gdouble lon);
116 void gtk_map_get_center_latlon(GtkWidget *map, gdouble *lat, gdouble *lon);
117
118 gboolean gtk_map_set_center_mode(GtkWidget *widget, GtkMapCenterMode mode);
119
120 void gtk_map_pan(GtkWidget *map, gint delta_unitx, gint delta_unity);
121
122 /* Map rotation */
123 gboolean gtk_map_rotate(GtkWidget *map, gfloat angle);
124
125 /* Zoom functions */
126 gint gtk_map_get_zoom(GtkWidget *map);
127 gint gtk_map_set_zoom(GtkWidget *map, gint zoom);
128 gint gtk_map_zoom(GtkWidget *map, gint zdir);
129 gboolean gtk_map_zoom_out(GtkWidget *map);
130 gboolean gtk_map_zoom_in(GtkWidget *map);
131 gboolean gtk_map_set_autozoom(GtkWidget *map, gboolean az);
132
133 /* Menu and mouse related */
134 void gtk_map_set_context_menu(GtkWidget *widget, GtkMenu *menu);
135 void gtk_map_clear_context_menu(GtkWidget *widget);
136 void gtk_map_get_menu_latlon(GtkWidget *map, gdouble *lat, gdouble *lon);
137
138 G_END_DECLS
139
140 #endif /* __GTK_MAP_H__ */