summaryrefslogtreecommitdiff
path: root/matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c
diff options
context:
space:
mode:
Diffstat (limited to 'matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c')
-rw-r--r--matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c349
1 files changed, 349 insertions, 0 deletions
diff --git a/matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c b/matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c
new file mode 100644
index 00000000..7c0da952
--- /dev/null
+++ b/matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c
@@ -0,0 +1,349 @@
+/*
+ * panel-test-applets.c:
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ *
+ * Copyright 2002 Sun Microsystems, Inc.
+ */
+
+#include <config.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <matecomponent/matecomponent-exception.h>
+#include <matecomponent/matecomponent-main.h>
+#include <matecomponent/matecomponent-widget.h>
+#include <mateconf/mateconf.h>
+
+#include "mate-panel-applet.h"
+
+G_GNUC_UNUSED void on_execute_button_clicked (GtkButton *button, gpointer dummy);
+
+static GtkWidget *win = NULL;
+static GtkWidget *applet_combo = NULL;
+static GtkWidget *prefs_dir_entry = NULL;
+static GtkWidget *orient_combo = NULL;
+static GtkWidget *size_combo = NULL;
+
+static char *cli_iid = NULL;
+static char *cli_prefs_dir = NULL;
+static char *cli_size = NULL;
+static char *cli_orient = NULL;
+
+static const GOptionEntry options [] = {
+ { "iid", 0, 0, G_OPTION_ARG_STRING, &cli_iid, N_("Specify an applet IID to load"), NULL},
+ { "prefs-dir", 0, 0, G_OPTION_ARG_STRING, &cli_prefs_dir, N_("Specify a mateconf location in which the applet preferences should be stored"), NULL},
+ { "size", 0, 0, G_OPTION_ARG_STRING, &cli_size, N_("Specify the initial size of the applet (xx-small, medium, large etc.)"), NULL},
+ { "orient", 0, 0, G_OPTION_ARG_STRING, &cli_orient, N_("Specify the initial orientation of the applet (top, bottom, left or right)"), NULL},
+ { NULL}
+};
+
+enum {
+ COLUMN_TEXT,
+ COLUMN_ITEM,
+ NUMBER_COLUMNS
+};
+
+typedef struct {
+ const char *name;
+ const char *value;
+} ComboItem;
+
+static ComboItem orient_items [] = {
+ { NC_("Orientation", "Top"), "top" },
+ { NC_("Orientation", "Bottom"), "bottom" },
+ { NC_("Orientation", "Left"), "left" },
+ { NC_("Orientation", "Right"), "right" }
+};
+
+
+static ComboItem size_items [] = {
+ { NC_("Size", "XX Small"), "xx-small" },
+ { NC_("Size", "X Small"), "x-small" },
+ { NC_("Size", "Small"), "small" },
+ { NC_("Size", "Medium"), "medium" },
+ { NC_("Size", "Large"), "large" },
+ { NC_("Size", "X Large"), "x-large" },
+ { NC_("Size", "XX Large"), "xx-large" }
+};
+
+static char *
+get_combo_value (GtkWidget *combo_box)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ char *value;
+
+ if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter))
+ return NULL;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box));
+ gtk_tree_model_get (model, &iter, COLUMN_ITEM, &value, -1);
+
+ return value;
+}
+
+static char *
+construct_moniker (void)
+{
+ const char *prefs_key;
+ char *iid;
+ char *size;
+ char *orient;
+ char *ret_value;
+
+ iid = get_combo_value (applet_combo);
+ g_assert (iid != NULL);
+ size = get_combo_value (size_combo);
+ g_assert (size != NULL);
+ orient = get_combo_value (orient_combo);
+ g_assert (orient != NULL);
+
+ prefs_key = gtk_entry_get_text (GTK_ENTRY (prefs_dir_entry));
+
+ ret_value= g_strdup_printf ("%s!prefs_key=%s;size=%s;orient=%s",
+ iid, prefs_key, size, orient);
+ g_free (iid);
+ g_free (size);
+ g_free (orient);
+
+ return ret_value;
+}
+
+static void
+load_applet_into_window (const char *moniker,
+ const char *title)
+{
+ GtkWidget *applet_window;
+ GtkWidget *applet;
+
+ applet = matecomponent_widget_new_control (moniker, NULL);
+
+ if (!applet) {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (win ? GTK_WINDOW (win) : NULL,
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Failed to load applet %s"),
+ title);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ return;
+ }
+
+ applet_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_widget_show (applet);
+
+ gtk_container_add (GTK_CONTAINER (applet_window), applet);
+
+ //FIXME: we could set the window icon with the applet icon
+ gtk_window_set_title (GTK_WINDOW (applet_window), title);
+ gtk_widget_show (applet_window);
+}
+
+static void
+load_applet_from_command_line (void)
+{
+ GString *str;
+
+ g_assert (cli_iid != NULL);
+
+ str = g_string_new (cli_iid);
+
+ if (cli_prefs_dir || cli_size || cli_orient) {
+ g_string_append_c (str, '!');
+
+ if (cli_prefs_dir)
+ g_string_append_printf (str, "prefs_key=%s", cli_prefs_dir);
+
+ g_string_append_c (str, ';');
+
+ if (cli_size)
+ g_string_append_printf (str, "size=%s", cli_size);
+
+ g_string_append_c (str, ';');
+
+ if (cli_orient)
+ g_string_append_printf (str, "orient=%s", cli_orient);
+ }
+
+ g_print ("Loading %s\n", str->str);
+
+ load_applet_into_window (str->str, cli_iid);
+
+ g_string_free (str, TRUE);
+}
+
+G_GNUC_UNUSED void
+on_execute_button_clicked (GtkButton *button,
+ gpointer dummy)
+{
+ char *moniker;
+ char *title;
+
+ moniker = construct_moniker ();
+ title = get_combo_value (applet_combo);
+ load_applet_into_window (moniker, title);
+ g_free (moniker);
+ g_free (title);
+}
+
+static void
+setup_combo (GtkWidget *combo_box,
+ ComboItem *items,
+ const char *context,
+ int nb_items,
+ gboolean dynamic)
+{
+ GtkListStore *model;
+ GtkTreeIter iter;
+ GtkCellRenderer *renderer;
+ int i;
+
+ model = gtk_list_store_new (NUMBER_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box),
+ GTK_TREE_MODEL (model));
+
+
+ for (i = 0; i < nb_items; i++) {
+ gtk_list_store_append (model, &iter);
+ gtk_list_store_set (model, &iter,
+ COLUMN_TEXT, dynamic ? g_strdup (items [i].name) : g_dpgettext2 (NULL, context, items [i].name),
+ COLUMN_ITEM, dynamic ? g_strdup (items [i].value) : items [i].value,
+ -1);
+ }
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box),
+ renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box),
+ renderer, "text", COLUMN_TEXT, NULL);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0);
+}
+
+static void
+setup_options (void)
+{
+ MateComponent_ServerInfoList *applets;
+ CORBA_Environment env;
+ int i;
+ char *prefs_dir;
+ char *unique_key;
+ ComboItem *applet_items;
+ int applet_nb;
+
+ CORBA_exception_init (&env);
+
+ applets = matecomponent_activation_query (
+ "has (repo_ids, 'IDL:MATE/Vertigo/MatePanelAppletShell:1.0')",
+ NULL, &env);
+
+ if (MATECOMPONENT_EX (&env))
+ g_error (_("query returned exception %s\n"), MATECOMPONENT_EX_REPOID (&env));
+
+ CORBA_exception_free (&env);
+
+ applet_nb = applets->_length;
+ applet_items = g_new0 (ComboItem, applet_nb);
+
+ for (i = 0; i < applet_nb; i++) {
+ MateComponent_ServerInfo *info;
+
+ info = &applets->_buffer [i];
+
+ applet_items[i].name = info->iid;
+ applet_items[i].value = info->iid;
+ }
+
+ setup_combo (applet_combo, applet_items, NULL, applet_nb, TRUE);
+ g_free (applet_items);
+ CORBA_free (applets);
+
+ setup_combo (size_combo, size_items, "Size",
+ G_N_ELEMENTS (size_items), FALSE);
+ setup_combo (orient_combo, orient_items, "Orientation",
+ G_N_ELEMENTS (orient_items), FALSE);
+
+ unique_key = mateconf_unique_key ();
+ prefs_dir = g_strdup_printf ("/tmp/%s", unique_key);
+ g_free (unique_key);
+ gtk_entry_set_text (GTK_ENTRY (prefs_dir_entry), prefs_dir);
+ g_free (prefs_dir);
+}
+
+int
+main (int argc, char **argv)
+{
+ GtkBuilder *builder;
+ char *uifile;
+ GError *error;
+
+ bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ error = NULL;
+ if (!gtk_init_with_args (&argc, &argv,
+ "", (GOptionEntry *) options, GETTEXT_PACKAGE,
+ &error)) {
+ if (error) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ } else
+ g_printerr ("Cannot initiliaze GTK+.\n");
+
+ return 1;
+ }
+
+ if (!matecomponent_init (&argc, argv)) {
+ g_printerr ("Cannot initialize matecomponent.\n");
+ return 1;
+ }
+
+ if (cli_iid) {
+ load_applet_from_command_line ();
+ gtk_main ();
+ return 0;
+ }
+
+ builder = gtk_builder_new ();
+ gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
+
+ uifile = MATE_PANEL_APPLET_BUILDERDIR "/panel-test-applets.ui";
+ gtk_builder_add_from_file (builder, uifile, &error);
+
+ if (error) {
+ g_warning ("Error loading \"%s\": %s", uifile, error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ gtk_builder_connect_signals (builder, NULL);
+
+ win = GTK_WIDGET (gtk_builder_get_object (builder,
+ "toplevel"));
+ applet_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+ "applet-combo"));
+ prefs_dir_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+ "prefs-dir-entry"));
+ orient_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+ "orient-combo"));
+ size_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+ "size-combo"));
+ g_object_unref (builder);
+
+ setup_options ();
+
+ gtk_widget_show (win);
+
+ gtk_main ();
+
+ return 0;
+}