diff options
Diffstat (limited to 'image-converter/caja-image-converter.c')
-rw-r--r-- | image-converter/caja-image-converter.c | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/image-converter/caja-image-converter.c b/image-converter/caja-image-converter.c new file mode 100644 index 0000000..8840258 --- /dev/null +++ b/image-converter/caja-image-converter.c @@ -0,0 +1,201 @@ +/* + * caja-image-converter.c + * + * Copyright (C) 2004-2005 Jürg Billeter + * + * This library 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 library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Author: Jürg Billeter <[email protected]> + * + */ + +#ifdef HAVE_CONFIG_H + #include <config.h> /* for GETTEXT_PACKAGE */ +#endif + +#include "caja-image-converter.h" +#include "caja-image-resizer.h" +#include "caja-image-rotator.h" + +#include <libcaja-extension/caja-menu-provider.h> + +#include <glib/gi18n-lib.h> +#include <gtk/gtk.h> + +#include <string.h> /* for strcmp */ + +static void caja_image_converter_instance_init (CajaImageConverter *img); +static void caja_image_converter_class_init (CajaImageConverterClass *class); +GList * caja_image_converter_get_file_items (CajaMenuProvider *provider, + GtkWidget *window, + GList *files); + +static GType image_converter_type = 0; + +static gboolean +image_converter_file_is_image (CajaFileInfo *file_info) +{ + gchar *uri_scheme; + gchar *mime_type; + gboolean maybe_image; + + maybe_image = TRUE; + uri_scheme = caja_file_info_get_uri_scheme (file_info); + if (strcmp (uri_scheme, "file") != 0) + maybe_image = FALSE; + g_free (uri_scheme); + + mime_type = caja_file_info_get_mime_type (file_info); + if (strncmp (mime_type, "image/", 6) != 0) + maybe_image = FALSE; + g_free (mime_type); + + return maybe_image; +} + +static GList * +image_converter_filter_images (GList *files) +{ + GList *images; + GList *file; + + images = NULL; + + for (file = files; file != NULL; file = file->next) { + if (image_converter_file_is_image (file->data)) + images = g_list_prepend (images, file->data); + } + + return images; +} + +static void +image_resize_callback (CajaMenuItem *item, + GList *files) +{ + CajaImageResizer *resizer = caja_image_resizer_new (image_converter_filter_images (files)); + caja_image_resizer_show_dialog (resizer); +} + +static void +image_rotate_callback (CajaMenuItem *item, + GList *files) +{ + CajaImageRotator *rotator = caja_image_rotator_new (image_converter_filter_images (files)); + caja_image_rotator_show_dialog (rotator); +} + +static GList * +caja_image_converter_get_background_items (CajaMenuProvider *provider, + GtkWidget *window, + CajaFileInfo *file_info) +{ + return NULL; +} + +GList * +caja_image_converter_get_file_items (CajaMenuProvider *provider, + GtkWidget *window, + GList *files) +{ + CajaMenuItem *item; + GList *file; + GList *items = NULL; + + for (file = files; file != NULL; file = file->next) { + if (image_converter_file_is_image (file->data)) { + item = caja_menu_item_new ("CajaImageConverter::resize", + _("_Resize Images..."), + _("Resize each selected image"), + "stock_position-size"); + g_signal_connect (item, "activate", + G_CALLBACK (image_resize_callback), + caja_file_info_list_copy (files)); + + items = g_list_prepend (items, item); + + item = caja_menu_item_new ("CajaImageConverter::rotate", + _("Ro_tate Images..."), + _("Rotate each selected image"), + "stock_rotate"); + g_signal_connect (item, "activate", + G_CALLBACK (image_rotate_callback), + caja_file_info_list_copy (files)); + + items = g_list_prepend (items, item); + + items = g_list_reverse (items); + + return items; + } + } + + return NULL; +} + +static void +caja_image_converter_menu_provider_iface_init (CajaMenuProviderIface *iface) +{ + iface->get_background_items = caja_image_converter_get_background_items; + iface->get_file_items = caja_image_converter_get_file_items; +} + +static void +caja_image_converter_instance_init (CajaImageConverter *img) +{ +} + +static void +caja_image_converter_class_init (CajaImageConverterClass *class) +{ +} + +GType +caja_image_converter_get_type (void) +{ + return image_converter_type; +} + +void +caja_image_converter_register_type (GTypeModule *module) +{ + static const GTypeInfo info = { + sizeof (CajaImageConverterClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) caja_image_converter_class_init, + NULL, + NULL, + sizeof (CajaImageConverter), + 0, + (GInstanceInitFunc) caja_image_converter_instance_init, + }; + + static const GInterfaceInfo menu_provider_iface_info = { + (GInterfaceInitFunc) caja_image_converter_menu_provider_iface_init, + NULL, + NULL + }; + + image_converter_type = g_type_module_register_type (module, + G_TYPE_OBJECT, + "CajaImageConverter", + &info, 0); + + g_type_module_add_interface (module, + image_converter_type, + CAJA_TYPE_MENU_PROVIDER, + &menu_provider_iface_info); +} |