2002-03-28 Richard Hestilow <hestilow@ximian.com> * control/control.c (create_form): Construct list example from a single string. Fixes bug #72761.
213 lines
6.5 KiB
C
213 lines
6.5 KiB
C
#include <config.h>
|
|
#include <libbonoboui.h>
|
|
#include <string.h>
|
|
|
|
static gchar* current_theme = NULL;
|
|
static gchar **new_rc_files = NULL;
|
|
|
|
#define GNOME_PAD_SMALL 4
|
|
|
|
static GtkWidget*
|
|
create_form (void)
|
|
{
|
|
GtkWidget *widget, *table, *hbox;
|
|
GtkWidget *scrolled_window, *menubar, *menu;
|
|
GtkListStore *store;
|
|
GtkTreeIter iter;
|
|
GSList *group;
|
|
const gchar *text = _("Eenie Meenie Mynie Moe Catcha Tiger By Its Toe");
|
|
gchar **textarr;
|
|
gint i;
|
|
gint col = 0, newcol;
|
|
|
|
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
|
|
textarr = g_strsplit (text, " ", -1);
|
|
|
|
for (i = 0; textarr && textarr[i]; i++) {
|
|
if (!col) {
|
|
gtk_list_store_append (store, &iter);
|
|
newcol = 1;
|
|
}
|
|
else
|
|
newcol = 0;
|
|
|
|
gtk_list_store_set (store,
|
|
&iter,
|
|
col, textarr[i],
|
|
-1);
|
|
col = newcol;
|
|
}
|
|
|
|
table = gtk_table_new (5, 3, FALSE);
|
|
|
|
widget = gtk_label_new (_("Selected themes from above will be tested by previewing here."));
|
|
gtk_label_set_justify (GTK_LABEL (widget), GTK_JUSTIFY_LEFT);
|
|
gtk_table_attach (GTK_TABLE (table), widget, 0, 3, 0, 1, 0, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
|
|
|
|
/* column one */
|
|
widget = gtk_button_new_with_label (_("Sample Button"));
|
|
hbox = gtk_hbox_new (FALSE, 0);
|
|
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
|
|
gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
|
|
widget = gtk_check_button_new_with_label (_("Sample Check Button"));
|
|
hbox = gtk_hbox_new (FALSE, 0);
|
|
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
|
|
gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
|
|
widget = gtk_entry_new ();
|
|
gtk_entry_set_max_length (GTK_ENTRY (widget), 50);
|
|
gtk_entry_set_text (GTK_ENTRY (widget), _("Sample Text Entry Field"));
|
|
gtk_widget_set_size_request (widget, 70, -1);
|
|
hbox = gtk_hbox_new (FALSE, 0);
|
|
gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
|
|
gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
|
|
|
|
/* column two */
|
|
|
|
menubar = gtk_menu_bar_new();
|
|
gtk_table_attach (GTK_TABLE (table), menubar, 1, 2, 2, 3, 0, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
|
|
|
|
widget = gtk_menu_item_new_with_label(_("Submenu"));
|
|
gtk_menu_shell_append (GTK_MENU_SHELL (menubar), widget);
|
|
|
|
menu = gtk_menu_new();
|
|
gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget), menu);
|
|
widget = gtk_menu_item_new_with_label(_("Item 1"));
|
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu), widget);
|
|
widget = gtk_menu_item_new_with_label(_("Another item"));
|
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu), widget);
|
|
|
|
|
|
widget = gtk_radio_button_new_with_label (NULL, _("Radio Button 1"));
|
|
hbox = gtk_hbox_new (FALSE, 0);
|
|
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
|
|
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
|
|
gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0);
|
|
|
|
widget = gtk_radio_button_new_with_label (group, _("Radio Button 2"));
|
|
hbox = gtk_hbox_new (FALSE, 0);
|
|
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
|
|
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
|
|
gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 0, 0);
|
|
|
|
/* column three */
|
|
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
|
|
GTK_SHADOW_ETCHED_IN);
|
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_window),
|
|
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
|
|
|
gtk_table_attach (GTK_TABLE (table), scrolled_window, 2, 3, 2, 5, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
|
|
|
|
widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
|
|
gtk_widget_set_size_request (widget, 150, 75);
|
|
g_object_unref (store);
|
|
|
|
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (widget),
|
|
-1,
|
|
_("One"),
|
|
gtk_cell_renderer_text_new (),
|
|
"text", 0,
|
|
NULL);
|
|
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (widget),
|
|
-1,
|
|
_("Two"),
|
|
gtk_cell_renderer_text_new (),
|
|
"text", 1,
|
|
NULL);
|
|
|
|
gtk_container_add (GTK_CONTAINER (scrolled_window), widget);
|
|
|
|
return table;
|
|
}
|
|
|
|
static void
|
|
get_prop_cb (BonoboPropertyBag *bag, BonoboArg *arg, guint arg_id,
|
|
CORBA_Environment *ev, gpointer data)
|
|
{
|
|
BONOBO_ARG_SET_STRING (arg, current_theme);
|
|
}
|
|
|
|
static void
|
|
set_prop_cb (BonoboPropertyBag *bag, const BonoboArg *arg, guint arg_id,
|
|
CORBA_Environment *ev, gpointer data)
|
|
{
|
|
GtkWidget *form = GTK_WIDGET (data);
|
|
|
|
if (!new_rc_files)
|
|
{
|
|
gchar **rc_files = gtk_rc_get_default_files ();
|
|
int i, j;
|
|
for (i = 0; rc_files[i] != NULL; i++)
|
|
{
|
|
}
|
|
new_rc_files = g_new0 (gchar *, i + 2);
|
|
for (j = 0; j < i; j++)
|
|
new_rc_files[j] = g_strdup (rc_files[j]);
|
|
current_theme = g_strdup (BONOBO_ARG_GET_STRING (arg));
|
|
new_rc_files[j] = current_theme;
|
|
}
|
|
else
|
|
{
|
|
gchar **rc_files = gtk_rc_get_default_files ();
|
|
int i;
|
|
for (i = 0; rc_files[i] != NULL; i++)
|
|
{
|
|
if (!strcmp (rc_files[i], current_theme))
|
|
{
|
|
g_free (current_theme);
|
|
current_theme = g_strdup (BONOBO_ARG_GET_STRING (arg));
|
|
new_rc_files[i] = current_theme;
|
|
}
|
|
else
|
|
{
|
|
g_free (new_rc_files[i]);
|
|
new_rc_files[i] = g_strdup (rc_files[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
gtk_rc_set_default_files (new_rc_files);
|
|
|
|
gtk_rc_reparse_all_for_settings (gtk_settings_get_default (), TRUE);
|
|
gtk_widget_reset_rc_styles (form);
|
|
}
|
|
|
|
BonoboObject *
|
|
gnome_theme_preview_new (void)
|
|
{
|
|
BonoboPropertyBag *pb;
|
|
BonoboControl *control;
|
|
GtkWidget *form;
|
|
|
|
form = create_form ();
|
|
gtk_widget_show_all (form);
|
|
|
|
control = bonobo_control_new (form);
|
|
pb = bonobo_property_bag_new (get_prop_cb, set_prop_cb, form);
|
|
bonobo_property_bag_add (pb, "theme", 0, BONOBO_ARG_STRING, NULL,
|
|
"The currently previewed theme",
|
|
BONOBO_PROPERTY_READABLE |
|
|
BONOBO_PROPERTY_WRITEABLE);
|
|
bonobo_control_set_properties (control, BONOBO_OBJREF (pb), NULL);
|
|
bonobo_object_unref (BONOBO_OBJECT (pb));
|
|
|
|
return BONOBO_OBJECT (control);
|
|
}
|
|
|
|
static BonoboObject *
|
|
control_factory (BonoboGenericFactory *factory, const char *id, gpointer data)
|
|
{
|
|
BonoboObject *object = NULL;
|
|
|
|
g_return_val_if_fail (id != NULL, NULL);
|
|
|
|
if (!strcmp (id, "OAFIID:GNOME_Theme_Preview"))
|
|
object = gnome_theme_preview_new ();
|
|
|
|
return object;
|
|
}
|
|
|
|
BONOBO_ACTIVATION_FACTORY ("OAFIID:GNOME_Theme_PreviewFactory",
|
|
"gnome-theme-preview", VERSION,
|
|
control_factory, NULL);
|
|
|