23 |
#include "appdata.h" |
#include "appdata.h" |
24 |
|
|
25 |
/* disable/enable main screen control dependant on presence of open project */ |
/* disable/enable main screen control dependant on presence of open project */ |
26 |
static void main_project_loaded(appdata_t *appdata) { |
static void main_ui_enable(appdata_t *appdata) { |
27 |
gboolean loaded = (appdata->project != NULL); |
gboolean project_valid = (appdata->project != NULL); |
28 |
|
gboolean osm_valid = (appdata->osm != NULL); |
29 |
|
|
30 |
/* cancel any action in progress */ |
/* cancel any action in progress */ |
31 |
if(GTK_WIDGET_FLAGS(appdata->iconbar->cancel) & GTK_SENSITIVE) |
if(GTK_WIDGET_FLAGS(appdata->iconbar->cancel) & GTK_SENSITIVE) |
34 |
/* ---- set project name as window title ----- */ |
/* ---- set project name as window title ----- */ |
35 |
#ifndef USE_HILDON |
#ifndef USE_HILDON |
36 |
char *str = NULL; |
char *str = NULL; |
37 |
if(loaded) |
if(project_valid) |
38 |
str = g_strdup_printf("OSM2Go - %s", appdata->project->name); |
str = g_strdup_printf("OSM2Go - %s", appdata->project->name); |
39 |
else |
else |
40 |
str = g_strdup_printf("OSM2Go"); |
str = g_strdup_printf("OSM2Go"); |
42 |
gtk_window_set_title(GTK_WINDOW(appdata->window), str); |
gtk_window_set_title(GTK_WINDOW(appdata->window), str); |
43 |
g_free(str); |
g_free(str); |
44 |
#else |
#else |
45 |
if(loaded) |
if(project_valid) |
46 |
gtk_window_set_title(GTK_WINDOW(appdata->window), appdata->project->name); |
gtk_window_set_title(GTK_WINDOW(appdata->window), appdata->project->name); |
47 |
else |
else |
48 |
gtk_window_set_title(GTK_WINDOW(appdata->window), ""); |
gtk_window_set_title(GTK_WINDOW(appdata->window), ""); |
49 |
#endif |
#endif |
50 |
|
|
51 |
if(appdata->iconbar && appdata->iconbar->toolbar) |
if(appdata->iconbar && appdata->iconbar->toolbar) |
52 |
gtk_widget_set_sensitive(appdata->iconbar->toolbar, loaded); |
gtk_widget_set_sensitive(appdata->iconbar->toolbar, osm_valid); |
53 |
|
|
54 |
/* disable all menu entries related to map */ |
/* disable all menu entries related to map */ |
55 |
gtk_widget_set_sensitive(appdata->track.menu_track, loaded); |
gtk_widget_set_sensitive(appdata->menu_osm, project_valid); |
56 |
gtk_widget_set_sensitive(appdata->menu_view, loaded); |
gtk_widget_set_sensitive(appdata->menu_item_osm_upload, osm_valid); |
57 |
gtk_widget_set_sensitive(appdata->menu_osm, loaded); |
gtk_widget_set_sensitive(appdata->menu_item_osm_diff, osm_valid); |
58 |
gtk_widget_set_sensitive(appdata->menu_wms, loaded); |
gtk_widget_set_sensitive(appdata->menu_item_osm_undo_changes, osm_valid); |
59 |
gtk_widget_set_sensitive(appdata->menu_map, loaded); |
gtk_widget_set_sensitive(appdata->track.menu_track, osm_valid); |
60 |
gtk_widget_set_sensitive(appdata->menu_item_project_close, loaded); |
gtk_widget_set_sensitive(appdata->menu_view, osm_valid); |
61 |
|
gtk_widget_set_sensitive(appdata->menu_wms, osm_valid); |
62 |
|
gtk_widget_set_sensitive(appdata->menu_map, osm_valid); |
63 |
|
gtk_widget_set_sensitive(appdata->menu_item_project_close, project_valid); |
64 |
|
|
65 |
if(!loaded) |
if(!project_valid) |
66 |
statusbar_set(appdata, _("Plase load or create a project"), FALSE); |
statusbar_set(appdata, _("Please load or create a project"), FALSE); |
67 |
} |
} |
68 |
|
|
69 |
/******************** begin of menu *********************/ |
/******************** begin of menu *********************/ |
85 |
cb_menu_project_open(GtkWidget *window, gpointer data) { |
cb_menu_project_open(GtkWidget *window, gpointer data) { |
86 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
87 |
project_load(appdata, NULL); |
project_load(appdata, NULL); |
88 |
main_project_loaded(appdata); |
main_ui_enable(appdata); |
89 |
} |
} |
90 |
|
|
91 |
static void |
static void |
92 |
cb_menu_project_close(GtkWidget *window, gpointer data) { |
cb_menu_project_close(GtkWidget *window, gpointer data) { |
93 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
94 |
project_close(appdata); |
project_close(appdata); |
95 |
main_project_loaded(appdata); |
main_ui_enable(appdata); |
96 |
} |
} |
97 |
|
|
98 |
static void |
static void |
140 |
static void |
static void |
141 |
cb_menu_download(GtkWidget *window, gpointer data) { |
cb_menu_download(GtkWidget *window, gpointer data) { |
142 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
143 |
if(!appdata->osm || !appdata->project) return; |
if(!appdata->project) return; |
144 |
|
|
145 |
/* redraw the entire map by destroying all map items and redrawing them */ |
/* if we have valid osm data loaded: save state first */ |
146 |
diff_save(appdata->project, appdata->osm); |
if(appdata->osm) { |
147 |
map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); |
/* redraw the entire map by destroying all map items and redrawing them */ |
148 |
osm_free(&appdata->icon, appdata->osm); |
diff_save(appdata->project, appdata->osm); |
149 |
|
map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); |
150 |
|
osm_free(&appdata->icon, appdata->osm); |
151 |
|
|
152 |
|
appdata->osm = NULL; |
153 |
|
} |
154 |
|
|
155 |
// download |
// download |
156 |
osm_download(GTK_WIDGET(appdata->window), appdata->project); |
if(osm_download(GTK_WIDGET(appdata->window), appdata->project)) { |
157 |
|
appdata->osm = osm_parse(appdata->project->osm); |
158 |
|
diff_restore(appdata, appdata->project, appdata->osm); |
159 |
|
map_paint(appdata); |
160 |
|
} |
161 |
|
|
162 |
appdata->osm = osm_parse(appdata->project->osm); |
main_ui_enable(appdata); |
|
diff_restore(appdata, appdata->project, appdata->osm); |
|
|
map_paint(appdata); |
|
163 |
} |
} |
164 |
|
|
165 |
static void |
static void |
194 |
map_show_all(appdata); |
map_show_all(appdata); |
195 |
} |
} |
196 |
|
|
197 |
/* ----------------------------------------------- ----------- */ |
/* ---------------------------------------------------------- */ |
198 |
|
|
199 |
#if 1 // mainly for testing |
#if 1 // mainly for testing |
200 |
static void |
static void |
220 |
#endif |
#endif |
221 |
|
|
222 |
static void |
static void |
223 |
cb_menu_style(GtkWidget *window, gpointer data) { |
cb_menu_style(GtkWidget *widget, gpointer data) { |
224 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
225 |
|
|
226 |
style_select(GTK_WIDGET(appdata->window), appdata); |
style_select(GTK_WIDGET(appdata->window), appdata); |
227 |
} |
} |
228 |
|
|
229 |
static void |
static void |
230 |
cb_menu_save_changes(GtkWidget *window, gpointer data) { |
cb_menu_map_no_icons(GtkWidget *widget, gpointer data) { |
231 |
|
appdata_t *appdata = (appdata_t*)data; |
232 |
|
|
233 |
|
map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); |
234 |
|
appdata->settings->no_icons = |
235 |
|
gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); |
236 |
|
map_paint(appdata); |
237 |
|
} |
238 |
|
|
239 |
|
static void |
240 |
|
cb_menu_save_changes(GtkWidget *widget, gpointer data) { |
241 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
242 |
|
|
243 |
diff_save(appdata->project, appdata->osm); |
diff_save(appdata->project, appdata->osm); |
244 |
statusbar_set(appdata, _("Saved all changes in projects diff file"), FALSE); |
statusbar_set(appdata, _("Saved all changes made " |
245 |
|
"to this project so far"), FALSE); |
246 |
|
} |
247 |
|
|
248 |
|
static void |
249 |
|
cb_menu_undo_changes(GtkWidget *widget, gpointer data) { |
250 |
|
appdata_t *appdata = (appdata_t*)data; |
251 |
|
|
252 |
|
if(!yes_no_f(GTK_WIDGET(appdata->window), NULL, 0, 0, |
253 |
|
_("Undo all changes?"), |
254 |
|
_("Do you really want to undo all your changes " |
255 |
|
"not uploaded so far? This cannot be undone!"))) |
256 |
|
return; |
257 |
|
|
258 |
|
map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); |
259 |
|
osm_free(&appdata->icon, appdata->osm); |
260 |
|
diff_remove(appdata->project); |
261 |
|
appdata->osm = osm_parse(appdata->project->osm); |
262 |
|
map_paint(appdata); |
263 |
|
|
264 |
|
statusbar_set(appdata, _("All changes made " |
265 |
|
"so far have been reset"), FALSE); |
266 |
} |
} |
267 |
|
|
268 |
|
|
415 |
|
|
416 |
item = gtk_menu_item_new_with_label( _("Zoom -") ); |
item = gtk_menu_item_new_with_label( _("Zoom -") ); |
417 |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
418 |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_zoomout), appdata); |
g_signal_connect(item, "activate", |
419 |
|
GTK_SIGNAL_FUNC(cb_menu_zoomout), appdata); |
420 |
|
|
421 |
/* -------------------- OSM submenu -------------------- */ |
/* -------------------- OSM submenu -------------------- */ |
422 |
|
|
425 |
submenu = gtk_menu_new(); |
submenu = gtk_menu_new(); |
426 |
gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); |
gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); |
427 |
|
|
428 |
item = gtk_menu_item_new_with_label( _("Upload...") ); |
appdata->menu_item_osm_upload = item = |
429 |
|
gtk_menu_item_new_with_label( _("Upload...") ); |
430 |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
431 |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_upload), appdata); |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_upload), appdata); |
432 |
|
|
433 |
item = gtk_menu_item_new_with_label( _("Download...") ); |
item = gtk_menu_item_new_with_label( _("Download...") ); |
434 |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
435 |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_download), appdata); |
g_signal_connect(item, "activate", |
436 |
|
GTK_SIGNAL_FUNC(cb_menu_download), appdata); |
437 |
|
|
438 |
gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); |
gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); |
439 |
|
|
440 |
item = gtk_menu_item_new_with_label( _("Save diff file") ); |
appdata->menu_item_osm_diff = item = |
441 |
|
gtk_menu_item_new_with_label( _("Save diff file") ); |
442 |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
443 |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes), |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes), |
444 |
appdata); |
appdata); |
445 |
|
|
446 |
|
appdata->menu_item_osm_undo_changes = item = |
447 |
|
gtk_menu_item_new_with_label( _("Undo all changes...") ); |
448 |
|
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
449 |
|
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_undo_changes), |
450 |
|
appdata); |
451 |
|
|
452 |
/* -------------------- wms submenu -------------------- */ |
/* -------------------- wms submenu -------------------- */ |
453 |
|
|
454 |
appdata->menu_wms = item = gtk_menu_item_new_with_label( _("WMS") ); |
appdata->menu_wms = item = gtk_menu_item_new_with_label( _("WMS") ); |
508 |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
509 |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_style), appdata); |
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_style), appdata); |
510 |
|
|
511 |
|
gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); |
512 |
|
|
513 |
|
appdata->menu_item_map_no_icons = |
514 |
|
item = gtk_check_menu_item_new_with_label( _("No Icons") ); |
515 |
|
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), |
516 |
|
appdata->settings->no_icons); |
517 |
|
gtk_menu_append(GTK_MENU_SHELL(submenu), item); |
518 |
|
g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_map_no_icons), |
519 |
|
appdata); |
520 |
|
|
521 |
/* -------------------- track submenu -------------------- */ |
/* -------------------- track submenu -------------------- */ |
522 |
|
|
523 |
appdata->track.menu_track = item = gtk_menu_item_new_with_label(_("Track")); |
appdata->track.menu_track = item = gtk_menu_item_new_with_label(_("Track")); |
736 |
g_signal_connect(G_OBJECT(appdata.window), "key_press_event", |
g_signal_connect(G_OBJECT(appdata.window), "key_press_event", |
737 |
G_CALLBACK(on_window_key_press), &appdata); |
G_CALLBACK(on_window_key_press), &appdata); |
738 |
|
|
|
appdata.vbox = gtk_vbox_new(FALSE,0); |
|
|
menu_create(&appdata); |
|
|
|
|
739 |
/* user specific init */ |
/* user specific init */ |
740 |
appdata.settings = settings_load(); |
appdata.settings = settings_load(); |
741 |
|
|
742 |
|
appdata.vbox = gtk_vbox_new(FALSE,0); |
743 |
|
menu_create(&appdata); |
744 |
|
|
745 |
/* ----------------------- setup main window ---------------- */ |
/* ----------------------- setup main window ---------------- */ |
746 |
|
|
747 |
GtkWidget *hbox = gtk_hbox_new(FALSE,0); |
GtkWidget *hbox = gtk_hbox_new(FALSE,0); |
778 |
if(appdata.settings->project) |
if(appdata.settings->project) |
779 |
project_load(&appdata, appdata.settings->project); |
project_load(&appdata, appdata.settings->project); |
780 |
|
|
781 |
main_project_loaded(&appdata); |
main_ui_enable(&appdata); |
782 |
|
|
783 |
/* ------------ jump into main loop ---------------- */ |
/* ------------ jump into main loop ---------------- */ |
784 |
|
|
785 |
gtk_main(); |
gtk_main(); |
786 |
|
|
787 |
|
puts("gtk_main() left"); |
788 |
|
|
789 |
track_save(appdata.project, appdata.track.track); |
track_save(appdata.project, appdata.track.track); |
790 |
|
|
791 |
/* save a diff if there are dirty entries */ |
/* save a diff if there are dirty entries */ |