/*
- * Geeqie
- * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2009 The Geeqie Team
+ * Copyright (C) 2004 John Ellis
+ * Copyright (C) 2008 - 2016 The Geeqie Team
*
* Author: John Ellis
*
- * This software is released under the GNU General Public License (GNU GPL).
- * Please read the included file COPYING for more information.
- * This software comes with no warranty of any kind, use at your own risk!
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
#include "main.h"
#include "menu.h"
#include "cache_maint.h"
#include "collect.h"
#include "collect-dlg.h"
+#include "collect-io.h"
+#include "collect-table.h"
#include "dupe.h"
#include "editors.h"
#include "filedata.h"
gpointer submenu_item_get_data(GtkWidget *menu)
{
- if (!menu->parent || !GTK_IS_MENU(menu->parent)) return NULL;
+ if (!gtk_widget_get_parent(menu) || !GTK_IS_MENU(gtk_widget_get_parent(menu))) return NULL;
- return g_object_get_data(G_OBJECT(menu->parent), "submenu_data");
+ return g_object_get_data(G_OBJECT(gtk_widget_get_parent(menu)), "submenu_data");
}
/*
g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(edit_item_destroy_cb), key);
}
}
-
+
g_list_free(editors_list);
}
GtkWidget *item;
GtkWidget *submenu;
- item = menu_item_add(menu, _("_Edit"), NULL, NULL);
+ item = menu_item_add(menu, _("Plugins"), NULL, NULL);
submenu = gtk_menu_new();
g_object_set_data(G_OBJECT(submenu), "submenu_data", data);
case SORT_TIME:
return _("Sort by date");
break;
+ case SORT_CTIME:
+ return _("Sort by file creation date");
+ break;
+ case SORT_EXIFTIME:
+ return _("Sort by Exif date original");
+ break;
+ case SORT_EXIFTIMEDIGITIZED:
+ return _("Sort by Exif date digitized");
+ break;
case SORT_NONE:
return _("Unsorted");
break;
case SORT_NUMBER:
return _("Sort by number");
break;
+ case SORT_RATING:
+ return _("Sort by rating");
+ break;
+ case SORT_CLASS:
+ return _("Sort by class");
+ break;
case SORT_NAME:
default:
return _("Sort by name");
submenu_add_sort_item(submenu, func, SORT_NUMBER, show_current, type);
#endif
submenu_add_sort_item(submenu, func, SORT_TIME, show_current, type);
+ submenu_add_sort_item(submenu, func, SORT_CTIME, show_current, type);
+ submenu_add_sort_item(submenu, func, SORT_EXIFTIME, show_current, type);
+ submenu_add_sort_item(submenu, func, SORT_EXIFTIMEDIGITIZED, show_current, type);
submenu_add_sort_item(submenu, func, SORT_SIZE, show_current, type);
+ submenu_add_sort_item(submenu, func, SORT_RATING, show_current, type);
+ submenu_add_sort_item(submenu, func, SORT_CLASS, show_current, type);
+ if (include_path) submenu_add_sort_item(submenu, func, SORT_PATH, show_current, type);
+ if (include_none) submenu_add_sort_item(submenu, func, SORT_NONE, show_current, type);
+
+ if (menu)
+ {
+ GtkWidget *item;
+
+ item = menu_item_add(menu, _("Sort"), NULL, NULL);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
+ return item;
+ }
+
+ return submenu;
+}
+
+GtkWidget *submenu_add_dir_sort(GtkWidget *menu, GCallback func, gpointer data,
+ gboolean include_none, gboolean include_path,
+ gboolean show_current, SortType type)
+{
+ GtkWidget *submenu;
+
+ submenu = gtk_menu_new();
+ g_object_set_data(G_OBJECT(submenu), "submenu_data", data);
+
+ submenu_add_sort_item(submenu, func, SORT_NAME, show_current, type);
+ submenu_add_sort_item(submenu, func, SORT_TIME, show_current, type);
if (include_path) submenu_add_sort_item(submenu, func, SORT_PATH, show_current, type);
if (include_none) submenu_add_sort_item(submenu, func, SORT_NONE, show_current, type);
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
switch (type)
{
case ALTER_ROTATE_90:
- return _("_Rotate clockwise");
+ return _("_Rotate clockwise 90°");
break;
case ALTER_ROTATE_90_CC:
- return _("Rotate _counterclockwise");
+ return _("Rotate _counterclockwise 90°");
break;
case ALTER_ROTATE_180:
- return _("Rotate _180");
+ return _("Rotate _180°");
break;
case ALTER_MIRROR:
return _("_Mirror");
{
return real_submenu_add_alter(menu, func, data, NULL);
}
+
+/*
+ *-----------------------------------------------------------------------------
+ * collections
+ *-----------------------------------------------------------------------------
+ */
+
+/**
+ * @brief Add submenu consisting of "New collection", and list of existing collections to a right-click menu.
+ * @param[in] menu
+ * @param[in] func
+ * @param[in] collection_list Type gchar
+ * @param[in] data
+ *
+ * Used by all image windows
+ */
+static void add_collection_list(GtkWidget *menu, GCallback func,
+ GList *collection_list, gpointer data)
+{
+ GList *work;
+ gint index = 0; /* index to existing collection list menu item selected */
+
+ work = collection_list;
+ while (work)
+ {
+ const gchar *collection_name = work->data;
+
+ menu_item_add(menu, collection_name, func,
+ GINT_TO_POINTER(index));
+ work = work->next;
+ index++;
+ }
+}
+
+GtkWidget *submenu_add_collections(GtkWidget *menu, GtkWidget **menu_item,
+ GCallback func, gpointer data)
+{
+ GtkWidget *item;
+ GtkWidget *submenu;
+ GList *collection_list = NULL;
+
+ item = menu_item_add(menu, _("_Add to Collection"), NULL, NULL);
+
+ submenu = gtk_menu_new();
+ g_object_set_data(G_OBJECT(submenu), "submenu_data", data);
+
+ menu_item_add_stock_sensitive(submenu, _("New collection"),
+ GTK_STOCK_INDEX, TRUE, G_CALLBACK(func), GINT_TO_POINTER(-1));
+ menu_item_add_divider(submenu);
+
+ collect_manager_list(&collection_list,NULL,NULL);
+ add_collection_list(submenu, func, collection_list, data);
+
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
+ if (menu_item) *menu_item = item;
+
+ g_list_free(collection_list);
+
+ return submenu;
+}
+
+/**
+ * @brief Add file selection list to a collection
+ * @param[in] selection_list Selection list of ::_FileData
+ * @param[in] data Index to the collection list menu item selected, or -1 for new collection
+ *
+ *
+ */
+void pop_menu_collections(GList *selection_list, gpointer data)
+{
+ CollectWindow *cw;
+ gchar *collection_name;
+ GList *collection_list = NULL;
+ gchar *name;
+ const gint index = GPOINTER_TO_INT(data);
+
+ if (index >= 0)
+ {
+ collect_manager_list(&collection_list, NULL, NULL);
+ collection_name = g_list_nth_data(collection_list, index);
+ name = collection_path(collection_name);
+ cw = collection_window_new(name);
+ g_free(name);
+ string_list_free(collection_list);
+ }
+ else
+ {
+ cw = collection_window_new(NULL);
+ }
+
+ collection_table_add_filelist(cw->table, selection_list);
+}
+
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */