summaryrefslogtreecommitdiff
path: root/libcaja-extension/caja-menu-item.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcaja-extension/caja-menu-item.c')
-rw-r--r--libcaja-extension/caja-menu-item.c342
1 files changed, 342 insertions, 0 deletions
diff --git a/libcaja-extension/caja-menu-item.c b/libcaja-extension/caja-menu-item.c
new file mode 100644
index 00000000..967f8001
--- /dev/null
+++ b/libcaja-extension/caja-menu-item.c
@@ -0,0 +1,342 @@
+/*
+ * caja-menu-item.c - Menu items exported by CajaMenuProvider
+ * objects.
+ *
+ * Copyright (C) 2003 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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 Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Dave Camp <[email protected]>
+ *
+ */
+
+#include <config.h>
+#include "caja-menu.h"
+#include "caja-extension-i18n.h"
+
+enum
+{
+ ACTIVATE,
+ LAST_SIGNAL
+};
+
+enum
+{
+ PROP_0,
+ PROP_NAME,
+ PROP_LABEL,
+ PROP_TIP,
+ PROP_ICON,
+ PROP_SENSITIVE,
+ PROP_PRIORITY,
+ PROP_MENU,
+ LAST_PROP
+};
+
+struct _CajaMenuItemDetails
+{
+ char *name;
+ char *label;
+ char *tip;
+ char *icon;
+ CajaMenu *menu;
+ gboolean sensitive;
+ gboolean priority;
+};
+
+static guint signals[LAST_SIGNAL];
+
+static GObjectClass *parent_class = NULL;
+
+/**
+ * caja_menu_item_new:
+ * @name: the identifier for the menu item
+ * @label: the user-visible label of the menu item
+ * @tip: the tooltip of the menu item
+ * @icon: the name of the icon to display in the menu item
+ *
+ * Creates a new menu item that can be added to the toolbar or to a contextual menu.
+ *
+ * Returns: a newly create #CajaMenuItem
+ */
+CajaMenuItem *
+caja_menu_item_new (const char *name,
+ const char *label,
+ const char *tip,
+ const char *icon)
+{
+ CajaMenuItem *item;
+
+ g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (label != NULL, NULL);
+ g_return_val_if_fail (tip != NULL, NULL);
+
+ item = g_object_new (CAJA_TYPE_MENU_ITEM,
+ "name", name,
+ "label", label,
+ "tip", tip,
+ "icon", icon,
+ NULL);
+
+ return item;
+}
+
+/**
+ * caja_menu_item_activate:
+ * @item: pointer to a #CajaMenuItem
+ *
+ * emits the activate signal.
+ */
+void
+caja_menu_item_activate (CajaMenuItem *item)
+{
+ g_signal_emit (item, signals[ACTIVATE], 0);
+}
+
+/**
+ * caja_menu_item_set_submenu:
+ * @item: pointer to a #CajaMenuItem
+ * @menu: pointer to a #CajaMenu to attach to the button
+ *
+ * Attachs a menu to the given #CajaMenuItem.
+ */
+void
+caja_menu_item_set_submenu (CajaMenuItem *item, CajaMenu *menu)
+{
+ g_object_set (item, "menu", menu, NULL);
+}
+
+static void
+caja_menu_item_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CajaMenuItem *item;
+
+ item = CAJA_MENU_ITEM (object);
+
+ switch (param_id)
+ {
+ case PROP_NAME :
+ g_value_set_string (value, item->details->name);
+ break;
+ case PROP_LABEL :
+ g_value_set_string (value, item->details->label);
+ break;
+ case PROP_TIP :
+ g_value_set_string (value, item->details->tip);
+ break;
+ case PROP_ICON :
+ g_value_set_string (value, item->details->icon);
+ break;
+ case PROP_SENSITIVE :
+ g_value_set_boolean (value, item->details->sensitive);
+ break;
+ case PROP_PRIORITY :
+ g_value_set_boolean (value, item->details->priority);
+ break;
+ case PROP_MENU :
+ g_value_set_object (value, item->details->menu);
+ break;
+ default :
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+caja_menu_item_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CajaMenuItem *item;
+
+ item = CAJA_MENU_ITEM (object);
+
+ switch (param_id)
+ {
+ case PROP_NAME :
+ g_free (item->details->name);
+ item->details->name = g_strdup (g_value_get_string (value));
+ g_object_notify (object, "name");
+ break;
+ case PROP_LABEL :
+ g_free (item->details->label);
+ item->details->label = g_strdup (g_value_get_string (value));
+ g_object_notify (object, "label");
+ break;
+ case PROP_TIP :
+ g_free (item->details->tip);
+ item->details->tip = g_strdup (g_value_get_string (value));
+ g_object_notify (object, "tip");
+ break;
+ case PROP_ICON :
+ g_free (item->details->icon);
+ item->details->icon = g_strdup (g_value_get_string (value));
+ g_object_notify (object, "icon");
+ break;
+ case PROP_SENSITIVE :
+ item->details->sensitive = g_value_get_boolean (value);
+ g_object_notify (object, "sensitive");
+ break;
+ case PROP_PRIORITY :
+ item->details->priority = g_value_get_boolean (value);
+ g_object_notify (object, "priority");
+ break;
+ case PROP_MENU :
+ if (item->details->menu)
+ {
+ g_object_unref (item->details->menu);
+ }
+ item->details->menu = g_object_ref (g_value_get_object (value));
+ g_object_notify (object, "menu");
+ break;
+ default :
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+caja_menu_item_finalize (GObject *object)
+{
+ CajaMenuItem *item;
+
+ item = CAJA_MENU_ITEM (object);
+
+ g_free (item->details->name);
+ g_free (item->details->label);
+ g_free (item->details->tip);
+ g_free (item->details->icon);
+ if (item->details->menu)
+ {
+ g_object_unref (item->details->menu);
+ }
+
+ g_free (item->details);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+caja_menu_item_instance_init (CajaMenuItem *item)
+{
+ item->details = g_new0 (CajaMenuItemDetails, 1);
+ item->details->sensitive = TRUE;
+ item->details->menu = NULL;
+}
+
+static void
+caja_menu_item_class_init (CajaMenuItemClass *class)
+{
+ parent_class = g_type_class_peek_parent (class);
+
+ G_OBJECT_CLASS (class)->finalize = caja_menu_item_finalize;
+ G_OBJECT_CLASS (class)->get_property = caja_menu_item_get_property;
+ G_OBJECT_CLASS (class)->set_property = caja_menu_item_set_property;
+
+ signals[ACTIVATE] =
+ g_signal_new ("activate",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CajaMenuItemClass,
+ activate),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "Name of the item",
+ NULL,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_READABLE));
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_LABEL,
+ g_param_spec_string ("label",
+ "Label",
+ "Label to display to the user",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_TIP,
+ g_param_spec_string ("tip",
+ "Tip",
+ "Tooltip for the menu item",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_ICON,
+ g_param_spec_string ("icon",
+ "Icon",
+ "Name of the icon to display in the menu item",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_SENSITIVE,
+ g_param_spec_boolean ("sensitive",
+ "Sensitive",
+ "Whether the menu item is sensitive",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_PRIORITY,
+ g_param_spec_boolean ("priority",
+ "Priority",
+ "Show priority text in toolbars",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (G_OBJECT_CLASS (class),
+ PROP_MENU,
+ g_param_spec_object ("menu",
+ "Menu",
+ "The menu belonging to this item. May be null.",
+ CAJA_TYPE_MENU,
+ G_PARAM_READWRITE));
+}
+
+GType
+caja_menu_item_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type)
+ {
+ const GTypeInfo info =
+ {
+ sizeof (CajaMenuItemClass),
+ NULL,
+ NULL,
+ (GClassInitFunc)caja_menu_item_class_init,
+ NULL,
+ NULL,
+ sizeof (CajaMenuItem),
+ 0,
+ (GInstanceInitFunc)caja_menu_item_instance_init
+ };
+
+ type = g_type_register_static
+ (G_TYPE_OBJECT,
+ "CajaMenuItem",
+ &info, 0);
+ }
+
+ return type;
+}
+