diff options
author | Perberos <[email protected]> | 2011-12-01 22:56:10 -0300 |
---|---|---|
committer | Perberos <[email protected]> | 2011-12-01 22:56:10 -0300 |
commit | c51ef797a707f4e2c6f9688d4378f2b0e9898a66 (patch) | |
tree | 019ae92bb53c19b30077545cb14743cbd1b57aef /matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c | |
download | mate-panel-c51ef797a707f4e2c6f9688d4378f2b0e9898a66.tar.bz2 mate-panel-c51ef797a707f4e2c6f9688d4378f2b0e9898a66.tar.xz |
moving from https://github.com/perberos/mate-desktop-environment
Diffstat (limited to 'matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c')
-rw-r--r-- | matecomponent/libmate-panel-applet/panel-test-applets-matecomponent.c | 349 |
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; +} |