]> git.street.me.uk Git - andy/viking.git/commitdiff
Remove zoom combobox in toolbar
authorGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Sat, 26 Jan 2013 20:36:36 +0000 (21:36 +0100)
committerGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Sat, 26 Jan 2013 20:36:36 +0000 (21:36 +0100)
Since it is possible to change the zoom level from the status bar,
there is no more need for an other zoom level selector.
Furthermore, it is always better to have a GUI as clean as possible.

This patch remove the combo box allowing to select the zoom level
from the tool bar.

This patch also refactor the zoom levels related list.

Signed-off-by: Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
src/menu.xml.h
src/vikstatus.c
src/vikstatus.h
src/vikwindow.c

index 6f29321781b11ac7777c5d501b39fef188fd571d..31117fde018e55eb6a1b3cff6a8c28a571c1d273 100644 (file)
@@ -85,24 +85,7 @@ static const char *menu_xml =
        "      <menuitem action='ZoomOut'/>"
        "      <menuitem action='ZoomTo'/>"
        "      <menu action='SetZoom'>"
-       "        <menuitem action='Zoom0.25'/>"
-       "        <menuitem action='Zoom0.5'/>"
-       "        <menuitem action='Zoom1'/>"
-       "        <menuitem action='Zoom2'/>"
-       "        <menuitem action='Zoom4'/>"
-       "        <menuitem action='Zoom8'/>"
-       "        <menuitem action='Zoom16'/>"
-       "        <menuitem action='Zoom32'/>"
-       "        <menuitem action='Zoom64'/>"
-       "        <menuitem action='Zoom128'/>"
-       "        <menuitem action='Zoom256'/>"
-       "        <menuitem action='Zoom512'/>"
-       "        <menuitem action='Zoom1024'/>"
-       "        <menuitem action='Zoom2048'/>"
-       "        <menuitem action='Zoom4096'/>"
-       "        <menuitem action='Zoom8192'/>"
-       "        <menuitem action='Zoom16384'/>"
-       "        <menuitem action='Zoom32768'/>"
+       "        <placeholder name='ZoomLevels'/>"
        "      </menu>"
         "      <menu action='SetPan'>"
         "          <menuitem action='PanNorth'/>"
index a27e3a36dc47b054cc0778d5007ffa4b434982a5..2bcd38ed4decd2c7900457881558c747d44767e0 100644 (file)
@@ -33,7 +33,7 @@
 
 enum
 {
-  ZOOM_CHANGED,
+  CLICKED,
   LAST_SIGNAL
 };
 
@@ -47,71 +47,33 @@ G_DEFINE_TYPE (VikStatusbar, vik_statusbar, GTK_TYPE_HBOX)
 
 static guint vik_statusbar_signals[LAST_SIGNAL] = { 0 };
 
-static void
-selection_done (GtkMenuShell *menushell,
-                gpointer      user_data)
-{
-  VikStatusbar *vs = VIK_STATUSBAR (user_data);
-
-  GtkWidget *aw = gtk_menu_get_active ( GTK_MENU (menushell) );
-  gint active = GPOINTER_TO_INT(gtk_object_get_data ( GTK_OBJECT (aw), "position" ));
-
-  gdouble zoom_request = pow (2, active-2 );
-
-  g_signal_emit (G_OBJECT (vs),
-                         vik_statusbar_signals[ZOOM_CHANGED], 0,
-                         zoom_request);
-}
-
 static gint
-zoom_popup_handler (GtkWidget *widget)
+forward_signal (GtkObject *object, gpointer user_data)
 {
-  GtkMenu *menu;
+    gint item = GPOINTER_TO_INT (gtk_object_get_data ( object, "type" ));
+    VikStatusbar *vs = VIK_STATUSBAR (user_data);
 
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_MENU (widget), FALSE);
+    g_signal_emit (G_OBJECT (vs),
+                   vik_statusbar_signals[CLICKED], 0,
+                   item);
 
-  /* The "widget" is the menu that was supplied when 
-   * g_signal_connect_swapped() was called.
-   */
-  menu = GTK_MENU (widget);
-
-  gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 
-                  1, gtk_get_current_event_time());
-  return TRUE;
-}
-
-static GtkWidget *
-create_zoom_menu_all_levels ()
-{
-  GtkWidget *menu = gtk_menu_new ();
-  char *itemLabels[] = { "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "32768", NULL };
-
-  int i;
-  for (i = 0 ; itemLabels[i] != NULL ; i++)
-    {
-      GtkWidget *item = gtk_menu_item_new_with_label (itemLabels[i]);
-      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-      gtk_widget_show (item);
-      gtk_object_set_data (GTK_OBJECT (item), "position", GINT_TO_POINTER(i));
-    }
-  return menu;
+    return TRUE;
 }
 
 static void
 vik_statusbar_class_init (VikStatusbarClass *klass)
 {
-  vik_statusbar_signals[ZOOM_CHANGED] =
-    g_signal_new ("zoom-changed",
+  vik_statusbar_signals[CLICKED] =
+    g_signal_new ("clicked",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_FIRST,
-                  G_STRUCT_OFFSET (VikStatusbarClass, zoom_changed),
+                  G_STRUCT_OFFSET (VikStatusbarClass, clicked),
                   NULL, NULL,
-                  g_cclosure_marshal_VOID__DOUBLE,
+                  g_cclosure_marshal_VOID__INT,
                   G_TYPE_NONE, 1,
-                  G_TYPE_DOUBLE);
+                  G_TYPE_INT);
 
-  klass->zoom_changed = NULL;
+  klass->clicked = NULL;
 }
 
 static void
@@ -129,6 +91,7 @@ vik_statusbar_init (VikStatusbar *vs)
       vs->status[i] = gtk_statusbar_new();
       gtk_statusbar_set_has_resize_grip ( GTK_STATUSBAR(vs->status[i]), FALSE );
     }
+    gtk_object_set_data (GTK_OBJECT (vs->status[i]), "type", GINT_TO_POINTER(i));
   }
 
   gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_TOOL], FALSE, FALSE, 1);
@@ -137,9 +100,7 @@ vik_statusbar_init (VikStatusbar *vs)
   gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_ITEMS], FALSE, FALSE, 1);
   gtk_widget_set_size_request ( vs->status[VIK_STATUSBAR_ITEMS], 100, -1 );
 
-  GtkWidget *menu = create_zoom_menu_all_levels ();
-  g_signal_connect ( G_OBJECT(menu), "selection-done", G_CALLBACK(selection_done), vs);
-  g_signal_connect_swapped ( G_OBJECT(vs->status[VIK_STATUSBAR_ZOOM]), "clicked", G_CALLBACK (zoom_popup_handler), menu);
+  g_signal_connect ( G_OBJECT(vs->status[VIK_STATUSBAR_ZOOM]), "clicked", G_CALLBACK (forward_signal), vs);
   gtk_button_set_relief ( GTK_BUTTON(vs->status[VIK_STATUSBAR_ZOOM]), GTK_RELIEF_NONE );
   gtk_widget_set_tooltip_text (GTK_WIDGET (vs->status[VIK_STATUSBAR_ZOOM]), _("Current zoom level. Click to select a new one."));
   gtk_box_pack_start ( GTK_BOX(vs), vs->status[VIK_STATUSBAR_ZOOM], FALSE, FALSE, 1);
index a1ad8d7589185244be4d5dc60fba780079603f31..c5fd5ba711bd3cbba98cb8a3b074d53f307a2fb3 100644 (file)
@@ -41,8 +41,8 @@ struct _VikStatusbarClass
 {
   GtkStatusbarClass statusbar_class;
 
-  void (* zoom_changed)  (VikStatusbar *vs,
-                          gint          zoom);
+  void (* clicked)  (VikStatusbar *vs,
+                     gint          item);
 };
 
 GType vik_statusbar_get_type ();
index 0ecbc4560cd06808f2aab7ca0b6e81c067bba281..42e34e2b3564f8372cd542785d861497e3947218 100644 (file)
@@ -156,7 +156,6 @@ struct _VikWindow {
   VikStatusbar *viking_vs;
 
   GtkToolbar *toolbar;
-  GtkComboBox *tb_zoom_combo;
 
   GtkItemFactory *item_factory;
 
@@ -379,17 +378,16 @@ static void vik_window_class_init ( VikWindowClass *klass )
 
 }
 
-static void set_toolbar_zoom ( VikWindow *vw, gdouble mpp )
+static void zoom_changed (GtkMenuShell *menushell,
+              gpointer      user_data)
 {
-  gint active = 2 + round ( log (mpp) / log (2) );
-  // Can we not hard code size here?
-  if ( active > 17 )
-    active = 17;
-  gtk_combo_box_set_active ( vw->tb_zoom_combo, active );
-}
+  VikWindow *vw = VIK_WINDOW (user_data);
+
+  GtkWidget *aw = gtk_menu_get_active ( GTK_MENU (menushell) );
+  gint active = GPOINTER_TO_INT(gtk_object_get_data ( GTK_OBJECT (aw), "position" ));
+
+  gdouble zoom_request = pow (2, active-2 );
 
-static void zoom_changed_cb ( VikStatusbar *vs, gdouble zoom_request, VikWindow *vw )
-{
   // But has it really changed?
   gdouble current_zoom = vik_viewport_get_zoom ( vw->viking_vvp );
   if ( current_zoom != 0.0 && zoom_request != current_zoom ) {
@@ -397,22 +395,23 @@ static void zoom_changed_cb ( VikStatusbar *vs, gdouble zoom_request, VikWindow
     // Force drawing update
     draw_update ( vw );
   }
-
 }
 
-static void zoom_changed ( GtkComboBox *combo, VikWindow *vw )
+static GtkWidget * create_zoom_menu_all_levels ()
 {
-  gint active = gtk_combo_box_get_active ( combo );
+  GtkWidget *menu = gtk_menu_new ();
+  char *itemLabels[] = { "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "32768", NULL };
 
-  // But has it really changed?
-  // Unfortunately this function gets invoked even on manual setting of the combo value
-  gdouble zoom_request = pow (2, active-2 );
-  gdouble current_zoom = vik_viewport_get_zoom ( vw->viking_vvp );
-  if ( current_zoom != 0.0 && zoom_request != current_zoom ) {
-    vik_viewport_set_zoom ( vw->viking_vvp, zoom_request );
-    // Force drawing update
-    draw_update ( vw );
-  }
+  int i;
+  for (i = 0 ; itemLabels[i] != NULL ; i++)
+    {
+      GtkWidget *item = gtk_menu_item_new_with_label (itemLabels[i]);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_widget_show (item);
+      gtk_object_set_data (GTK_OBJECT (item), "position", GINT_TO_POINTER(i));
+    }
+
+  return menu;
 }
 
 static GtkWidget *create_zoom_combo_all_levels ()
@@ -442,6 +441,23 @@ static GtkWidget *create_zoom_combo_all_levels ()
   return zoom_combo;
 }
 
+static gint zoom_popup_handler (GtkWidget *widget)
+{
+  GtkMenu *menu;
+
+  g_return_val_if_fail (widget != NULL, FALSE);
+  g_return_val_if_fail (GTK_IS_MENU (widget), FALSE);
+
+  /* The "widget" is the menu that was supplied when
+   * g_signal_connect_swapped() was called.
+   */
+  menu = GTK_MENU (widget);
+
+  gtk_menu_popup (menu, NULL, NULL, NULL, NULL,
+                  1, gtk_get_current_event_time());
+  return TRUE;
+}
+
 static void vik_window_init ( VikWindow *vw )
 {
   GtkWidget *main_vbox;
@@ -484,15 +500,11 @@ static void vik_window_init ( VikWindow *vw )
 
   vik_ext_tools_add_menu_items ( vw, vw->uim );
 
-  vw->tb_zoom_combo = GTK_COMBO_BOX(create_zoom_combo_all_levels());
-
-  g_signal_connect ( G_OBJECT(vw->tb_zoom_combo), "changed", G_CALLBACK(zoom_changed), vw );
-  g_signal_connect ( G_OBJECT(vw->viking_vs), "zoom-changed", G_CALLBACK(zoom_changed_cb), vw );
-
-  // Add the zoom combo to the toolbar at the end
-  GtkToolItem *tooli = gtk_tool_item_new ();
-  gtk_container_add ( GTK_CONTAINER(tooli), GTK_WIDGET (vw->tb_zoom_combo) );
-  gtk_toolbar_insert ( vw->toolbar, tooli, gtk_toolbar_get_n_items (vw->toolbar) );
+  GtkWidget * zoom_levels = gtk_ui_manager_get_widget (vw->uim, "/MainMenu/View/SetZoom");
+  GtkWidget * zoom_levels_menu = create_zoom_menu_all_levels ();
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (zoom_levels), zoom_levels_menu);
+  g_signal_connect ( G_OBJECT(zoom_levels_menu), "selection-done", G_CALLBACK(zoom_changed), vw);
+  g_signal_connect_swapped ( G_OBJECT(vw->viking_vs), "clicked", G_CALLBACK(zoom_popup_handler), zoom_levels_menu );
 
   g_signal_connect (G_OBJECT (vw), "delete_event", G_CALLBACK (delete_event), NULL);
 
@@ -692,8 +704,6 @@ static void draw_status ( VikWindow *vw )
       g_snprintf ( zoom_level, 22, "%d %s", (int)xmpp, unit );
 
   vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_ZOOM, zoom_level );
-  // OK maybe not quite in the statusbar - but we have the zoom level so use it
-  set_toolbar_zoom ( vw, xmpp ); // But it's a status of some kind!
 
   draw_status_tool ( vw );  
 }
@@ -3177,24 +3187,6 @@ static GtkActionEntry entries[] = {
   { "ZoomIn",    GTK_STOCK_ZOOM_IN,      N_("Zoom _In"),                   "<control>plus", NULL,                                           (GCallback)draw_zoom_cb          },
   { "ZoomOut",   GTK_STOCK_ZOOM_OUT,     N_("Zoom _Out"),                 "<control>minus", NULL,                                           (GCallback)draw_zoom_cb          },
   { "ZoomTo",    GTK_STOCK_ZOOM_FIT,     N_("Zoom _To..."),               "<control>Z", NULL,                                           (GCallback)zoom_to_cb            },
-  { "Zoom0.25",  NULL,                   N_("0.25"),                          NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom0.5",   NULL,                   N_("0.5"),                           NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom1",     NULL,                   N_("1"),                             NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom2",     NULL,                   N_("2"),                             NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom4",     NULL,                   N_("4"),                             NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom8",     NULL,                   N_("8"),                             NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom16",    NULL,                   N_("16"),                            NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom32",    NULL,                   N_("32"),                            NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom64",    NULL,                   N_("64"),                            NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom128",   NULL,                   N_("128"),                           NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom256",   NULL,                   N_("256"),                           NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom512",   NULL,                   N_("512"),                           NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom1024",  NULL,                   N_("1024"),                          NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom2048",  NULL,                   N_("2048"),                          NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom4096",  NULL,                   N_("4096"),                          NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom8192",  NULL,                   N_("8192"),                          NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom16384", NULL,                   N_("16384"),                         NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
-  { "Zoom32768", NULL,                   N_("32768"),                         NULL,         NULL,                                           (GCallback)draw_zoom_cb          },
   { "PanNorth",  NULL,                   N_("Pan _North"),                "<control>Up",    NULL,                                           (GCallback)draw_pan_cb },
   { "PanEast",   NULL,                   N_("Pan _East"),                 "<control>Right", NULL,                                           (GCallback)draw_pan_cb },
   { "PanSouth",  NULL,                   N_("Pan _South"),                "<control>Down",  NULL,                                           (GCallback)draw_pan_cb },