From 7bc965c0914e0e4333e09dd0bd83aad4f7282f53 Mon Sep 17 00:00:00 2001 From: Guilhem Bonnefille Date: Tue, 28 Aug 2007 13:45:03 +0000 Subject: [PATCH] Refactoring: compute drawmode name by getting menu entry label As Viking will be internationalized, it seems better to avoid duplication of labels. --- src/vikmapslayer.c | 3 ++- src/vikviewport.c | 24 +++++++++++++----------- src/vikwindow.c | 30 ++++++++++++++++++------------ src/vikwindow.h | 3 +++ 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/vikmapslayer.c b/src/vikmapslayer.c index c06fb02..e144f96 100644 --- a/src/vikmapslayer.c +++ b/src/vikmapslayer.c @@ -1072,7 +1072,8 @@ static void download_onscreen_maps ( gpointer vml_vvp[2], gint redownload ) map_type->coord_to_mapcoord ( &br, xzoom, yzoom, &brm ) ) start_download_thread ( vml, vvp, &ul, &br, redownload ); else if (map_type->drawmode != vp_drawmode) { - gchar *err = g_strdup_printf("Wrong drawmode for this map.\nSelect \"%s Mode\" from View menu and try again.", vik_viewport_drawmode_name(map_type->drawmode)); + gchar *drawmode_name = vik_viewport_get_drawmode_name (vvp, map_type->drawmode); + gchar *err = g_strdup_printf("Wrong drawmode for this map.\nSelect \"%s\" from View menu and try again.", drawmode_name); a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(vml), err ); g_free(err); } diff --git a/src/vikviewport.c b/src/vikviewport.c index e306a65..4c41fef 100644 --- a/src/vikviewport.c +++ b/src/vikviewport.c @@ -1012,18 +1012,20 @@ static void viewport_google_rezoom ( VikViewport *vvp ) vvp->google_calcy_rev_fact = 1 / vvp->google_calcy_fact; } -const gchar *vik_viewport_drawmode_name(VikViewportDrawMode mode) + +const gchar *vik_viewport_get_drawmode_name(VikViewport *vv, VikViewportDrawMode mode) { - static gchar *names[] = { - "UTM", - "Expedia", - "Old Google", - "Old KH", - "Google" - }; + const gchar *name = NULL; + GtkWidget *mode_button; + GtkWidget *label; + + mode_button = vik_window_get_drawmode_button(vv->vw, mode); + label = gtk_bin_get_child(GTK_BIN(mode_button)); + + name = gtk_label_get_text ( GTK_LABEL(label) ); - if (mode < VIK_VIEWPORT_NUM_DRAWMODES) - return names[mode]; - return NULL; + return name; } + + diff --git a/src/vikwindow.c b/src/vikwindow.c index 29f8ae1..d2831d7 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -245,7 +245,7 @@ static void window_init ( VikWindow *vw ) vw->action_group = NULL; - vw->viking_vvp = vik_viewport_new(); + vw->viking_vvp = vik_viewport_new( vw ); vw->viking_vlp = vik_layers_panel_new(); vik_layers_panel_set_viewport ( vw->viking_vlp, vw->viking_vvp ); vw->viking_vs = vik_statusbar_new(); @@ -1045,6 +1045,22 @@ static void window_set_filename ( VikWindow *vw, const gchar *filename ) } } +GtkWidget *vik_window_get_drawmode_button ( VikWindow *vw, VikViewportDrawMode mode ) +{ + GtkWidget *mode_button; + gchar *buttonname; + switch ( mode ) { + case VIK_VIEWPORT_DRAWMODE_UTM: buttonname = "/ui/MainMenu/View/ModeUTM"; break; + case VIK_VIEWPORT_DRAWMODE_EXPEDIA: buttonname = "/ui/MainMenu/View/ModeExpedia"; break; + case VIK_VIEWPORT_DRAWMODE_GOOGLE: buttonname = "/ui/MainMenu/View/ModeGoogle"; break; + case VIK_VIEWPORT_DRAWMODE_MERCATOR: buttonname = "/ui/MainMenu/View/ModeMercator"; break; + default: buttonname = "/ui/MainMenu/View/ModeKH"; + } + mode_button = gtk_ui_manager_get_widget ( vw->uim, buttonname ); + g_assert ( mode_button ); + return mode_button; +} + void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean change_filename ) { switch ( a_file_load ( vik_layers_panel_get_top_layer(vw->viking_vlp), vw->viking_vvp, filename ) ) @@ -1055,18 +1071,9 @@ void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean chang case 1: { GtkWidget *mode_button; - gchar *buttonname; if ( change_filename ) window_set_filename ( vw, filename ); - switch ( vik_viewport_get_drawmode ( vw->viking_vvp ) ) { - case VIK_VIEWPORT_DRAWMODE_UTM: buttonname = "/ui/MainMenu/View/ModeUTM"; break; - case VIK_VIEWPORT_DRAWMODE_EXPEDIA: buttonname = "/ui/MainMenu/View/ModeExpedia"; break; - case VIK_VIEWPORT_DRAWMODE_GOOGLE: buttonname = "/ui/MainMenu/View/ModeGoogle"; break; - case VIK_VIEWPORT_DRAWMODE_MERCATOR: buttonname = "/ui/MainMenu/View/ModeMercator"; break; - default: buttonname = "/ui/MainMenu/View/ModeKH"; - } - mode_button = gtk_ui_manager_get_widget ( vw->uim, buttonname ); - g_assert ( mode_button ); + mode_button = vik_window_get_drawmode_button ( vw, vik_viewport_get_drawmode ( vw->viking_vvp ) ); vw->only_updating_coord_mode_ui = TRUE; /* if we don't set this, it will change the coord to UTM if we click Lat/Lon. I don't know why. */ gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(mode_button), TRUE ); vw->only_updating_coord_mode_ui = FALSE; @@ -1084,7 +1091,6 @@ void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean chang default: draw_update ( vw ); } } - static void load_file ( GtkAction *a, VikWindow *vw ) { gboolean newwindow; diff --git a/src/vikwindow.h b/src/vikwindow.h index 7feba1d..521c7fd 100644 --- a/src/vikwindow.h +++ b/src/vikwindow.h @@ -27,6 +27,8 @@ #include #include +#include "vikviewport.h" + G_BEGIN_DECLS #define VIK_WINDOW_TYPE (vik_window_get_type ()) @@ -48,6 +50,7 @@ struct _VikWindowClass GType vik_window_get_type (); VikWindow *vik_window_new (); +GtkWidget *vik_window_get_drawmode_button ( VikWindow *vw, VikViewportDrawMode mode ); void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean changefilename ); struct _VikLayer; void vik_window_selected_layer(VikWindow *vw, struct _VikLayer *vl); -- 2.11.4.GIT