summaryrefslogtreecommitdiff
path: root/gtk+-mingw/share/gtk-3.0/demo/combobox.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk+-mingw/share/gtk-3.0/demo/combobox.c')
-rw-r--r--gtk+-mingw/share/gtk-3.0/demo/combobox.c473
1 files changed, 0 insertions, 473 deletions
diff --git a/gtk+-mingw/share/gtk-3.0/demo/combobox.c b/gtk+-mingw/share/gtk-3.0/demo/combobox.c
deleted file mode 100644
index 354fcab..0000000
--- a/gtk+-mingw/share/gtk-3.0/demo/combobox.c
+++ /dev/null
@@ -1,473 +0,0 @@
-/* Combo boxes
- *
- * The ComboBox widget allows to select one option out of a list.
- * The ComboBoxEntry additionally allows the user to enter a value
- * that is not in the list of options.
- *
- * How the options are displayed is controlled by cell renderers.
- */
-
-#include <gtk/gtk.h>
-
-enum
-{
- PIXBUF_COL,
- TEXT_COL
-};
-
-static gchar *
-strip_underscore (const gchar *text)
-{
- gchar *p, *q;
- gchar *result;
-
- result = g_strdup (text);
- p = q = result;
- while (*p)
- {
- if (*p != '_')
- {
- *q = *p;
- q++;
- }
- p++;
- }
- *q = '\0';
-
- return result;
-}
-
-static GtkTreeModel *
-create_stock_icon_store (void)
-{
- gchar *stock_id[6] = {
- GTK_STOCK_DIALOG_WARNING,
- GTK_STOCK_STOP,
- GTK_STOCK_NEW,
- GTK_STOCK_CLEAR,
- NULL,
- GTK_STOCK_OPEN
- };
-
- GtkStockItem item;
- GdkPixbuf *pixbuf;
- GtkWidget *cellview;
- GtkTreeIter iter;
- GtkListStore *store;
- gchar *label;
- gint i;
-
- cellview = gtk_cell_view_new ();
-
- store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
-
- for (i = 0; i < G_N_ELEMENTS (stock_id); i++)
- {
- if (stock_id[i])
- {
- pixbuf = gtk_widget_render_icon_pixbuf (cellview, stock_id[i],
- GTK_ICON_SIZE_BUTTON);
- gtk_stock_lookup (stock_id[i], &item);
- label = strip_underscore (item.label);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- PIXBUF_COL, pixbuf,
- TEXT_COL, label,
- -1);
- g_object_unref (pixbuf);
- g_free (label);
- }
- else
- {
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- PIXBUF_COL, NULL,
- TEXT_COL, "separator",
- -1);
- }
- }
-
- gtk_widget_destroy (cellview);
-
- return GTK_TREE_MODEL (store);
-}
-
-/* A GtkCellLayoutDataFunc that demonstrates how one can control
- * sensitivity of rows. This particular function does nothing
- * useful and just makes the second row insensitive.
- */
-static void
-set_sensitive (GtkCellLayout *cell_layout,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GtkTreePath *path;
- gint *indices;
- gboolean sensitive;
-
- path = gtk_tree_model_get_path (tree_model, iter);
- indices = gtk_tree_path_get_indices (path);
- sensitive = indices[0] != 1;
- gtk_tree_path_free (path);
-
- g_object_set (cell, "sensitive", sensitive, NULL);
-}
-
-/* A GtkTreeViewRowSeparatorFunc that demonstrates how rows can be
- * rendered as separators. This particular function does nothing
- * useful and just turns the fourth row into a separator.
- */
-static gboolean
-is_separator (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GtkTreePath *path;
- gboolean result;
-
- path = gtk_tree_model_get_path (model, iter);
- result = gtk_tree_path_get_indices (path)[0] == 4;
- gtk_tree_path_free (path);
-
- return result;
-}
-
-static GtkTreeModel *
-create_capital_store (void)
-{
- struct {
- gchar *group;
- gchar *capital;
- } capitals[] = {
- { "A - B", NULL },
- { NULL, "Albany" },
- { NULL, "Annapolis" },
- { NULL, "Atlanta" },
- { NULL, "Augusta" },
- { NULL, "Austin" },
- { NULL, "Baton Rouge" },
- { NULL, "Bismarck" },
- { NULL, "Boise" },
- { NULL, "Boston" },
- { "C - D", NULL },
- { NULL, "Carson City" },
- { NULL, "Charleston" },
- { NULL, "Cheyenne" },
- { NULL, "Columbia" },
- { NULL, "Columbus" },
- { NULL, "Concord" },
- { NULL, "Denver" },
- { NULL, "Des Moines" },
- { NULL, "Dover" },
- { "E - J", NULL },
- { NULL, "Frankfort" },
- { NULL, "Harrisburg" },
- { NULL, "Hartford" },
- { NULL, "Helena" },
- { NULL, "Honolulu" },
- { NULL, "Indianapolis" },
- { NULL, "Jackson" },
- { NULL, "Jefferson City" },
- { NULL, "Juneau" },
- { "K - O" },
- { NULL, "Lansing" },
- { NULL, "Lincoln" },
- { NULL, "Little Rock" },
- { NULL, "Madison" },
- { NULL, "Montgomery" },
- { NULL, "Montpelier" },
- { NULL, "Nashville" },
- { NULL, "Oklahoma City" },
- { NULL, "Olympia" },
- { NULL, "P - S" },
- { NULL, "Phoenix" },
- { NULL, "Pierre" },
- { NULL, "Providence" },
- { NULL, "Raleigh" },
- { NULL, "Richmond" },
- { NULL, "Sacramento" },
- { NULL, "Salem" },
- { NULL, "Salt Lake City" },
- { NULL, "Santa Fe" },
- { NULL, "Springfield" },
- { NULL, "St. Paul" },
- { "T - Z", NULL },
- { NULL, "Tallahassee" },
- { NULL, "Topeka" },
- { NULL, "Trenton" },
- { NULL, NULL }
- };
-
- GtkTreeIter iter, iter2;
- GtkTreeStore *store;
- gint i;
-
- store = gtk_tree_store_new (1, G_TYPE_STRING);
-
- for (i = 0; capitals[i].group || capitals[i].capital; i++)
- {
- if (capitals[i].group)
- {
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter, 0, capitals[i].group, -1);
- }
- else if (capitals[i].capital)
- {
- gtk_tree_store_append (store, &iter2, &iter);
- gtk_tree_store_set (store, &iter2, 0, capitals[i].capital, -1);
- }
- }
-
- return GTK_TREE_MODEL (store);
-}
-
-static void
-is_capital_sensitive (GtkCellLayout *cell_layout,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gboolean sensitive;
-
- sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
-
- g_object_set (cell, "sensitive", sensitive, NULL);
-}
-
-static void
-fill_combo_entry (GtkWidget *combo)
-{
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "One");
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Two");
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "2\302\275");
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Three");
-}
-
-
-/* A simple validating entry */
-
-#define TYPE_MASK_ENTRY (mask_entry_get_type ())
-#define MASK_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MASK_ENTRY, MaskEntry))
-#define MASK_ENTRY_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), TYPE_MASK_ENTRY, MaskEntryClass))
-#define IS_MASK_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MASK_ENTRY))
-#define IS_MASK_ENTRY_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), TYPE_MASK_ENTRY))
-#define MASK_ENTRY_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), TYPE_MASK_ENTRY, MaskEntryClass))
-
-
-typedef struct _MaskEntry MaskEntry;
-struct _MaskEntry
-{
- GtkEntry entry;
- gchar *mask;
-};
-
-typedef struct _MaskEntryClass MaskEntryClass;
-struct _MaskEntryClass
-{
- GtkEntryClass parent_class;
-};
-
-
-static void mask_entry_editable_init (GtkEditableInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (MaskEntry, mask_entry, GTK_TYPE_ENTRY,
- G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
- mask_entry_editable_init));
-
-
-static void
-mask_entry_set_background (MaskEntry *entry)
-{
- static const GdkRGBA error_color = { 1.0, 0.9, 0.9, 1.0 };
-
- if (entry->mask)
- {
- if (!g_regex_match_simple (entry->mask, gtk_entry_get_text (GTK_ENTRY (entry)), 0, 0))
- {
- gtk_widget_override_color (GTK_WIDGET (entry), 0, &error_color);
- return;
- }
- }
-
- gtk_widget_override_color (GTK_WIDGET (entry), 0, NULL);
-}
-
-
-static void
-mask_entry_changed (GtkEditable *editable)
-{
- mask_entry_set_background (MASK_ENTRY (editable));
-}
-
-
-static void
-mask_entry_init (MaskEntry *entry)
-{
- entry->mask = NULL;
-}
-
-
-static void
-mask_entry_class_init (MaskEntryClass *klass)
-{ }
-
-
-static void
-mask_entry_editable_init (GtkEditableInterface *iface)
-{
- iface->changed = mask_entry_changed;
-}
-
-
-GtkWidget *
-do_combobox (GtkWidget *do_widget)
-{
- static GtkWidget *window = NULL;
- GtkWidget *vbox, *frame, *box, *combo, *entry;
- GtkTreeModel *model;
- GtkCellRenderer *renderer;
- GtkTreePath *path;
- GtkTreeIter iter;
-
- if (!window)
- {
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_screen (GTK_WINDOW (window),
- gtk_widget_get_screen (do_widget));
- gtk_window_set_title (GTK_WINDOW (window), "Combo boxes");
-
- g_signal_connect (window, "destroy",
- G_CALLBACK (gtk_widget_destroyed),
- &window);
-
- gtk_container_set_border_width (GTK_CONTAINER (window), 10);
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
- gtk_container_add (GTK_CONTAINER (window), vbox);
-
- /* A combobox demonstrating cell renderers, separators and
- * insensitive rows
- */
- frame = gtk_frame_new ("Some stock icons");
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_set_border_width (GTK_CONTAINER (box), 5);
- gtk_container_add (GTK_CONTAINER (frame), box);
-
- model = create_stock_icon_store ();
- combo = gtk_combo_box_new_with_model (model);
- g_object_unref (model);
- gtk_container_add (GTK_CONTAINER (box), combo);
-
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
- "pixbuf", PIXBUF_COL,
- NULL);
-
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
- renderer,
- set_sensitive,
- NULL, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
- "text", TEXT_COL,
- NULL);
-
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
- renderer,
- set_sensitive,
- NULL, NULL);
-
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
- is_separator, NULL, NULL);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
-
- /* A combobox demonstrating trees.
- */
- frame = gtk_frame_new ("Where are we ?");
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_set_border_width (GTK_CONTAINER (box), 5);
- gtk_container_add (GTK_CONTAINER (frame), box);
-
- model = create_capital_store ();
- combo = gtk_combo_box_new_with_model (model);
- g_object_unref (model);
- gtk_container_add (GTK_CONTAINER (box), combo);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
- "text", 0,
- NULL);
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
- renderer,
- is_capital_sensitive,
- NULL, NULL);
-
- path = gtk_tree_path_new_from_indices (0, 8, -1);
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_path_free (path);
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &iter);
-
- /* A GtkComboBoxEntry with validation.
- */
- frame = gtk_frame_new ("Editable");
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_set_border_width (GTK_CONTAINER (box), 5);
- gtk_container_add (GTK_CONTAINER (frame), box);
-
- combo = gtk_combo_box_text_new_with_entry ();
- fill_combo_entry (combo);
- gtk_container_add (GTK_CONTAINER (box), combo);
-
- entry = g_object_new (TYPE_MASK_ENTRY, NULL);
- MASK_ENTRY (entry)->mask = "^([0-9]*|One|Two|2\302\275|Three)$";
-
- gtk_container_remove (GTK_CONTAINER (combo), gtk_bin_get_child (GTK_BIN (combo)));
- gtk_container_add (GTK_CONTAINER (combo), entry);
-
- /* A combobox with string IDs */
- frame = gtk_frame_new ("String IDs");
- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_set_border_width (GTK_CONTAINER (box), 5);
- gtk_container_add (GTK_CONTAINER (frame), box);
-
- combo = gtk_combo_box_text_new ();
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "never", "Not visible");
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "when-active", "Visible when active");
- gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "always", "Always visible");
- gtk_container_add (GTK_CONTAINER (box), combo);
-
- entry = gtk_entry_new ();
- g_object_bind_property (combo, "active-id",
- entry, "text",
- G_BINDING_BIDIRECTIONAL);
- gtk_container_add (GTK_CONTAINER (box), entry);
- }
-
- if (!gtk_widget_get_visible (window))
- {
- gtk_widget_show_all (window);
- }
- else
- {
- gtk_widget_destroy (window);
- window = NULL;
- }
-
- return window;
-}