Fix #245: Zoom settings on status bar
[geeqie.git] / src / menu.c
index ffd4195..e5bde77 100644 (file)
@@ -220,6 +220,80 @@ GtkWidget *submenu_add_sort(GtkWidget *menu, GCallback func, gpointer data,
        return submenu;
 }
 
+gchar *zoom_type_get_text(ZoomMode method)
+{
+       switch (method)
+               {
+               case ZOOM_RESET_ORIGINAL:
+                       return _("Zoom to original size");
+                       break;
+               case ZOOM_RESET_FIT_WINDOW:
+                       return _("Fit image to window");
+                       break;
+               case ZOOM_RESET_NONE:
+                       return _("Leave Zoom at previous setting");
+                       break;
+               default:
+                       return _("Zoom to original size");
+                       break;
+               }
+
+       return "";
+}
+
+static GtkWidget *submenu_add_zoom_item(GtkWidget *menu,
+                                       GCallback func, ZoomMode mode,
+                                       gboolean show_current, ZoomMode show_mode)
+{
+       GtkWidget *item;
+
+       if (show_current)
+               {
+               item = menu_item_add_radio(menu,
+                                          zoom_type_get_text(mode), GINT_TO_POINTER((gint)mode), (mode == show_mode),
+                                          func, GINT_TO_POINTER((gint)mode));
+               }
+       else
+               {
+               item = menu_item_add(menu, zoom_type_get_text(mode),
+                                    func, GINT_TO_POINTER((gint)mode));
+               }
+
+       return item;
+}
+
+GtkWidget *submenu_add_zoom(GtkWidget *menu, GCallback func, gpointer data,
+                           gboolean include_none, gboolean include_path,
+                           gboolean show_current, ZoomMode mode)
+{
+       GtkWidget *submenu;
+
+       if (!menu)
+               {
+               submenu = gtk_menu_new();
+               g_object_set_data(G_OBJECT(submenu), "submenu_data", data);
+               }
+       else
+               {
+               submenu = menu;
+               }
+
+       submenu_add_zoom_item(submenu, func, ZOOM_RESET_ORIGINAL, show_current, mode);
+       submenu_add_zoom_item(submenu, func, ZOOM_RESET_FIT_WINDOW, show_current, mode);
+       submenu_add_zoom_item(submenu, func, ZOOM_RESET_NONE, show_current, mode);
+
+       if (menu)
+               {
+               GtkWidget *item;
+
+               item = menu_item_add(menu, _("Zoom"), NULL, NULL);
+               gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
+               return item;
+               }
+
+       return submenu;
+}
+
 /*
  *-----------------------------------------------------------------------------
  * altering