aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/menus/gal-view-instance.c
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@ximian.com>2002-04-23 05:46:59 +0800
committerChris Lahey <clahey@src.gnome.org>2002-04-23 05:46:59 +0800
commitacf4bad9d022d9d4c69e7d05877194157f3fd31c (patch)
tree80714dfa3acf377d55744a8d09644f937b7b3edd /widgets/menus/gal-view-instance.c
parentfe26a0fee38b095d62a68783ea4d1b01b04e22db (diff)
downloadgsoc2013-evolution-acf4bad9d022d9d4c69e7d05877194157f3fd31c.tar.gz
gsoc2013-evolution-acf4bad9d022d9d4c69e7d05877194157f3fd31c.tar.zst
gsoc2013-evolution-acf4bad9d022d9d4c69e7d05877194157f3fd31c.zip
Bumped version number to 0.19.99.14.
2002-04-22 Christopher James Lahey <clahey@ximian.com> * configure.in: Bumped version number to 0.19.99.14. * gal/widgets/e-popup-menu.c, gal/widgets/e-popup-menu.h (e_popup_menu_copy_1, e_popup_menu_free_1, e_popup_menu_copy, e_popup_menu_free): Added these functions From gal/e-table/ChangeLog: 2002-04-22 Christopher James Lahey <clahey@ximian.com> * e-table-memory-store.c, e-table-memory-store.h: Renamed the insert functions in this class to make a bit more sense. From gal/menus/ChangeLog: 2002-04-22 Christopher James Lahey <clahey@ximian.com> * gal-view-instance.c, gal-view-instance.h (gal_view_instance_get_popup_menu, gal_view_instance_free_popup_menu): Added these functions. Used to add a current view menu to your popup menus. From gal/shortcut-bar/ChangeLog: 2002-04-22 Christopher James Lahey <clahey@ximian.com> * e-icon-bar.c (e_icon_bar_drag_motion): Removed an unused variable. svn path=/trunk/; revision=16559
Diffstat (limited to 'widgets/menus/gal-view-instance.c')
-rw-r--r--widgets/menus/gal-view-instance.c139
1 files changed, 139 insertions, 0 deletions
diff --git a/widgets/menus/gal-view-instance.c b/widgets/menus/gal-view-instance.c
index 26e1f5546d..1cc0389f47 100644
--- a/widgets/menus/gal-view-instance.c
+++ b/widgets/menus/gal-view-instance.c
@@ -36,8 +36,10 @@
#include <gal/widgets/e-unicode.h>
#include "gal-view-instance.h"
#include "gal-view-instance-save-as-dialog.h"
+#include "gal-define-views-dialog.h"
#include <sys/stat.h>
#include <unistd.h>
+#include <gtk/gtkcheckmenuitem.h>
#define GVI_CLASS(e) ((GalViewInstanceClass *)((GtkObject *)e)->klass)
@@ -45,6 +47,10 @@
static GtkObjectClass *gal_view_instance_parent_class;
+static const EPopupMenu separator = E_POPUP_SEPARATOR;
+static const EPopupMenu terminator = E_POPUP_TERMINATOR;
+
+
#define d(x) x
enum {
@@ -479,3 +485,136 @@ gal_view_instance_exists (GalViewInstance *instance)
return FALSE;
}
+
+typedef struct {
+ GalViewInstance *instance;
+ char *id;
+} ListenerClosure;
+
+static void
+view_item_cb (GtkWidget *widget,
+ gpointer user_data)
+{
+ ListenerClosure *closure = user_data;
+
+ if (GTK_CHECK_MENU_ITEM (widget)->active) {
+ gal_view_instance_set_current_view_id (closure->instance, closure->id);
+ }
+}
+
+static void
+add_popup_radio_item (EPopupMenu *menu_item,
+ gchar *title,
+ void (*fn) (GtkWidget *widget, gpointer closure),
+ gpointer closure,
+ gboolean value)
+{
+ const EPopupMenu menu_item_struct =
+ E_POPUP_RADIO_ITEM_CC (title,
+ fn,
+ closure,
+ 0,
+ value);
+
+ e_popup_menu_copy_1 (menu_item, &menu_item_struct);
+}
+
+static void
+add_popup_menu_item (EPopupMenu *menu_item,
+ gchar *title,
+ void (*fn) (GtkWidget *widget, gpointer closure),
+ gpointer closure)
+{
+ const EPopupMenu menu_item_struct =
+ E_POPUP_ITEM_CC (title,
+ fn,
+ closure,
+ 0);
+
+ e_popup_menu_copy_1 (menu_item, &menu_item_struct);
+}
+
+static void
+define_views_dialog_clicked(GtkWidget *dialog, int button, GalViewInstance *instance)
+{
+ if (button == 0) {
+ gal_view_collection_save(instance->collection);
+ }
+ gnome_dialog_close(GNOME_DIALOG(dialog));
+}
+
+static void
+define_views_cb(GtkWidget *widget,
+ GalViewInstance *instance)
+{
+ GtkWidget *dialog = gal_define_views_dialog_new(instance->collection);
+ gtk_signal_connect(GTK_OBJECT(dialog), "clicked",
+ GTK_SIGNAL_FUNC(define_views_dialog_clicked), instance);
+ gtk_widget_show(dialog);
+}
+
+static void
+save_current_view_cb(GtkWidget *widget,
+ GalViewInstance *instance)
+{
+ gal_view_instance_save_as (instance);
+}
+
+EPopupMenu *
+gal_view_instance_get_popup_menu (GalViewInstance *instance)
+{
+ EPopupMenu *ret_val;
+ int length;
+ int i;
+ gboolean found = FALSE;
+ char *id;
+
+ length = gal_view_collection_get_count(instance->collection);
+ id = gal_view_instance_get_current_view_id (instance);
+
+ ret_val = g_new (EPopupMenu, length + 6);
+
+ for (i = 0; i < length; i++) {
+ gboolean value = FALSE;
+ GalViewCollectionItem *item = gal_view_collection_get_view_item(instance->collection, i);
+ ListenerClosure *closure;
+
+ closure = g_new (ListenerClosure, 1);
+ closure->instance = instance;
+ closure->id = item->id;
+ gtk_object_ref (GTK_OBJECT(closure->instance));
+
+ if (!found && id && !strcmp (id, item->id)) {
+ found = TRUE;
+ value = TRUE;
+ }
+
+ add_popup_radio_item (ret_val + i, item->title, GTK_SIGNAL_FUNC (view_item_cb), closure, value);
+ }
+
+ if (!found) {
+ e_popup_menu_copy_1 (ret_val + i++, &separator);
+
+ add_popup_radio_item (ret_val + i++, N_("Custom View"), NULL, NULL, TRUE);
+ add_popup_menu_item (ret_val + i++, N_("Save Custom View"), GTK_SIGNAL_FUNC (save_current_view_cb), instance);
+ }
+
+ e_popup_menu_copy_1 (ret_val + i++, &separator);
+ add_popup_menu_item (ret_val + i++, N_("Define Views"), GTK_SIGNAL_FUNC (define_views_cb), instance);
+ e_popup_menu_copy_1 (ret_val + i++, &terminator);
+
+ return ret_val;
+}
+
+void
+gal_view_instance_free_popup_menu (GalViewInstance *instance, EPopupMenu *menu)
+{
+ int i;
+ /* This depends on the first non-custom closure to be a separator or a terminator. */
+ for (i = 0; menu[i].name && *(menu[i].name); i++) {
+ gtk_object_unref (GTK_OBJECT ( ((ListenerClosure *)(menu[i].closure))->instance));
+ g_free (menu[i].closure);
+ }
+
+ e_popup_menu_free (menu);
+}