summaryrefslogtreecommitdiff
path: root/gtk+-mingw/share/gtk-3.0/demo/stock_browser.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2018-08-20 21:12:06 -0400
committerLeo Tenenbaum <pommicket@gmail.com>2018-08-20 21:12:06 -0400
commit63e87c2d0c9d263f14c77b68f85c67d46ece82a9 (patch)
tree6260365cbf7d24f37d27669e8538227fcb72e243 /gtk+-mingw/share/gtk-3.0/demo/stock_browser.c
parenta4460f6d9453bbd7e584937686449cef3e19f052 (diff)
Removed gtk+ docsHEADmaster
Diffstat (limited to 'gtk+-mingw/share/gtk-3.0/demo/stock_browser.c')
-rw-r--r--gtk+-mingw/share/gtk-3.0/demo/stock_browser.c535
1 files changed, 0 insertions, 535 deletions
diff --git a/gtk+-mingw/share/gtk-3.0/demo/stock_browser.c b/gtk+-mingw/share/gtk-3.0/demo/stock_browser.c
deleted file mode 100644
index 06ccb8c..0000000
--- a/gtk+-mingw/share/gtk-3.0/demo/stock_browser.c
+++ /dev/null
@@ -1,535 +0,0 @@
-/* Stock Item and Icon Browser
- *
- * This source code for this demo doesn't demonstrate anything
- * particularly useful in applications. The purpose of the "demo" is
- * just to provide a handy place to browse the available stock icons
- * and stock items.
- */
-
-#include <string.h>
-
-#include <gtk/gtk.h>
-
-static GtkWidget *window = NULL;
-
-typedef struct _StockItemInfo StockItemInfo;
-struct _StockItemInfo
-{
- gchar *id;
- GtkStockItem item;
- GdkPixbuf *small_icon;
- gchar *macro;
- gchar *accel_str;
-};
-
-/* Make StockItemInfo a boxed type so we can automatically
- * manage memory
- */
-#define STOCK_ITEM_INFO_TYPE stock_item_info_get_type ()
-
-static void
-stock_item_info_free (StockItemInfo *info)
-{
- g_free (info->id);
- g_free (info->macro);
- g_free (info->accel_str);
- if (info->small_icon)
- g_object_unref (info->small_icon);
-
- g_free (info);
-}
-
-static StockItemInfo*
-stock_item_info_copy (StockItemInfo *src)
-{
- StockItemInfo *info;
-
- info = g_new (StockItemInfo, 1);
- info->id = g_strdup (src->id);
- info->macro = g_strdup (src->macro);
- info->accel_str = g_strdup (src->accel_str);
-
- info->item = src->item;
-
- info->small_icon = src->small_icon;
- if (info->small_icon)
- g_object_ref (info->small_icon);
-
- return info;
-}
-
-static
-G_DEFINE_BOXED_TYPE (StockItemInfo, stock_item_info,
- stock_item_info_copy,
- stock_item_info_free)
-
-typedef struct _StockItemDisplay StockItemDisplay;
-struct _StockItemDisplay
-{
- GtkWidget *type_label;
- GtkWidget *macro_label;
- GtkWidget *id_label;
- GtkWidget *label_accel_label;
- GtkWidget *icon_image;
-};
-
-static gchar*
-id_to_macro (const gchar *id)
-{
- GString *macro = NULL;
- const gchar *cp;
-
- /* gtk-foo-bar -> GTK_STOCK_FOO_BAR */
-
- macro = g_string_new (NULL);
-
- cp = id;
-
- if (strncmp (cp, "gtk-", 4) == 0)
- {
- g_string_append (macro, "GTK_STOCK_");
- cp += 4;
- }
-
- while (*cp)
- {
- if (*cp == '-')
- g_string_append_c (macro, '_');
- else if (g_ascii_islower (*cp))
- g_string_append_c (macro, g_ascii_toupper (*cp));
- else
- g_string_append_c (macro, *cp);
-
- cp++;
- }
-
- return g_string_free (macro, FALSE);
-}
-
-static GtkTreeModel*
-create_model (void)
-{
- GtkListStore *store;
- GSList *ids;
- GSList *tmp_list;
-
- store = gtk_list_store_new (2, STOCK_ITEM_INFO_TYPE, G_TYPE_STRING);
-
- ids = gtk_stock_list_ids ();
- ids = g_slist_sort (ids, (GCompareFunc) strcmp);
- tmp_list = ids;
- while (tmp_list != NULL)
- {
- StockItemInfo info;
- GtkStockItem item;
- GtkTreeIter iter;
- GtkIconSet *icon_set;
-
- info.id = tmp_list->data;
-
- if (gtk_stock_lookup (info.id, &item))
- {
- info.item = item;
- }
- else
- {
- info.item.label = NULL;
- info.item.stock_id = NULL;
- info.item.modifier = 0;
- info.item.keyval = 0;
- info.item.translation_domain = NULL;
- }
-
- /* only show icons for stock IDs that have default icons */
- icon_set = gtk_icon_factory_lookup_default (info.id);
- if (icon_set)
- {
- GtkIconSize *sizes = NULL;
- gint n_sizes = 0;
- gint i;
- GtkIconSize size;
-
- /* See what sizes this stock icon really exists at */
- gtk_icon_set_get_sizes (icon_set, &sizes, &n_sizes);
-
- /* Use menu size if it exists, otherwise first size found */
- size = sizes[0];
- i = 0;
- while (i < n_sizes)
- {
- if (sizes[i] == GTK_ICON_SIZE_MENU)
- {
- size = GTK_ICON_SIZE_MENU;
- break;
- }
- ++i;
- }
- g_free (sizes);
-
- info.small_icon = gtk_widget_render_icon_pixbuf (window,
- info.id,
- size);
-
- if (size != GTK_ICON_SIZE_MENU)
- {
- /* Make the result the proper size for our thumbnail */
- gint w, h;
- GdkPixbuf *scaled;
-
- gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
-
- scaled = gdk_pixbuf_scale_simple (info.small_icon,
- w, h,
- GDK_INTERP_BILINEAR);
-
- g_object_unref (info.small_icon);
- info.small_icon = scaled;
- }
- }
- else
- info.small_icon = NULL;
-
- if (info.item.keyval != 0)
- {
- info.accel_str = gtk_accelerator_name (info.item.keyval,
- info.item.modifier);
- }
- else
- {
- info.accel_str = g_strdup ("");
- }
-
- info.macro = id_to_macro (info.id);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, &info, 1, info.id, -1);
-
- g_free (info.macro);
- g_free (info.accel_str);
- if (info.small_icon)
- g_object_unref (info.small_icon);
-
- tmp_list = g_slist_next (tmp_list);
- }
-
- g_slist_foreach (ids, (GFunc)g_free, NULL);
- g_slist_free (ids);
-
- return GTK_TREE_MODEL (store);
-}
-
-/* Finds the largest size at which the given image stock id is
- * available. This would not be useful for a normal application
- */
-static GtkIconSize
-get_largest_size (const char *id)
-{
- GtkIconSet *set = gtk_icon_factory_lookup_default (id);
- GtkIconSize *sizes;
- gint n_sizes, i;
- GtkIconSize best_size = GTK_ICON_SIZE_INVALID;
- gint best_pixels = 0;
-
- gtk_icon_set_get_sizes (set, &sizes, &n_sizes);
-
- for (i = 0; i < n_sizes; i++)
- {
- gint width, height;
-
- gtk_icon_size_lookup (sizes[i], &width, &height);
-
- if (width * height > best_pixels)
- {
- best_size = sizes[i];
- best_pixels = width * height;
- }
- }
-
- g_free (sizes);
-
- return best_size;
-}
-
-static void
-selection_changed (GtkTreeSelection *selection)
-{
- GtkTreeView *treeview;
- StockItemDisplay *display;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- treeview = gtk_tree_selection_get_tree_view (selection);
- display = g_object_get_data (G_OBJECT (treeview), "stock-display");
-
- if (gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- StockItemInfo *info;
- gchar *str;
-
- gtk_tree_model_get (model, &iter,
- 0, &info,
- -1);
-
- if (info->small_icon && info->item.label)
- gtk_label_set_text (GTK_LABEL (display->type_label), "Icon and Item");
- else if (info->small_icon)
- gtk_label_set_text (GTK_LABEL (display->type_label), "Icon Only");
- else if (info->item.label)
- gtk_label_set_text (GTK_LABEL (display->type_label), "Item Only");
- else
- gtk_label_set_text (GTK_LABEL (display->type_label), "???????");
-
- gtk_label_set_text (GTK_LABEL (display->macro_label), info->macro);
- gtk_label_set_text (GTK_LABEL (display->id_label), info->id);
-
- if (info->item.label)
- {
- str = g_strdup_printf ("%s %s", info->item.label, info->accel_str);
- gtk_label_set_text_with_mnemonic (GTK_LABEL (display->label_accel_label), str);
- g_free (str);
- }
- else
- {
- gtk_label_set_text (GTK_LABEL (display->label_accel_label), "");
- }
-
- if (info->small_icon)
- gtk_image_set_from_stock (GTK_IMAGE (display->icon_image), info->id,
- get_largest_size (info->id));
- else
- gtk_image_set_from_pixbuf (GTK_IMAGE (display->icon_image), NULL);
-
- stock_item_info_free (info);
- }
- else
- {
- gtk_label_set_text (GTK_LABEL (display->type_label), "No selected item");
- gtk_label_set_text (GTK_LABEL (display->macro_label), "");
- gtk_label_set_text (GTK_LABEL (display->id_label), "");
- gtk_label_set_text (GTK_LABEL (display->label_accel_label), "");
- gtk_image_set_from_pixbuf (GTK_IMAGE (display->icon_image), NULL);
- }
-}
-
-static void
-macro_set_func_text (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- StockItemInfo *info;
-
- gtk_tree_model_get (model, iter,
- 0, &info,
- -1);
-
- g_object_set (GTK_CELL_RENDERER (cell),
- "text", info->macro,
- NULL);
-
- stock_item_info_free (info);
-}
-
-static void
-id_set_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- StockItemInfo *info;
-
- gtk_tree_model_get (model, iter,
- 0, &info,
- -1);
-
- g_object_set (GTK_CELL_RENDERER (cell),
- "text", info->id,
- NULL);
-
- stock_item_info_free (info);
-}
-
-static void
-accel_set_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- StockItemInfo *info;
-
- gtk_tree_model_get (model, iter,
- 0, &info,
- -1);
-
- g_object_set (GTK_CELL_RENDERER (cell),
- "text", info->accel_str,
- NULL);
-
- stock_item_info_free (info);
-}
-
-static void
-label_set_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- StockItemInfo *info;
-
- gtk_tree_model_get (model, iter,
- 0, &info,
- -1);
-
- g_object_set (GTK_CELL_RENDERER (cell),
- "text", info->item.label,
- NULL);
-
- stock_item_info_free (info);
-}
-
-GtkWidget *
-do_stock_browser (GtkWidget *do_widget)
-{
- if (!window)
- {
- GtkWidget *frame;
- GtkWidget *vbox;
- GtkWidget *hbox;
- GtkWidget *sw;
- GtkWidget *treeview;
- GtkTreeModel *model;
- GtkCellRenderer *cell_renderer;
- StockItemDisplay *display;
- GtkTreeSelection *selection;
- GtkTreeViewColumn *column;
-
- 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), "Stock Icons and Items");
- gtk_window_set_default_size (GTK_WINDOW (window), -1, 500);
-
- g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
- gtk_container_set_border_width (GTK_CONTAINER (window), 8);
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
- gtk_container_add (GTK_CONTAINER (window), hbox);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start (GTK_BOX (hbox), sw, FALSE, FALSE, 0);
-
- model = create_model ();
-
- treeview = gtk_tree_view_new_with_model (model);
-
- g_object_unref (model);
-
- gtk_container_add (GTK_CONTAINER (sw), treeview);
-
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, "Macro");
-
- cell_renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_tree_view_column_pack_start (column,
- cell_renderer,
- FALSE);
- gtk_tree_view_column_set_attributes (column, cell_renderer,
- "stock_id", 1, NULL);
- cell_renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (column,
- cell_renderer,
- TRUE);
- gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
- macro_set_func_text, NULL, NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview),
- column);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
- -1,
- "Label",
- cell_renderer,
- label_set_func,
- NULL,
- NULL);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
- -1,
- "Accel",
- cell_renderer,
- accel_set_func,
- NULL,
- NULL);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
- -1,
- "ID",
- cell_renderer,
- id_set_func,
- NULL,
- NULL);
-
- frame = gtk_frame_new ("Selected Item");
- gtk_widget_set_valign (frame, GTK_ALIGN_START);
- gtk_box_pack_end (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
- gtk_container_add (GTK_CONTAINER (frame), vbox);
-
- display = g_new (StockItemDisplay, 1);
- g_object_set_data_full (G_OBJECT (treeview),
- "stock-display",
- display,
- g_free); /* free display with treeview */
-
- display->type_label = gtk_label_new (NULL);
- display->macro_label = gtk_label_new (NULL);
- display->id_label = gtk_label_new (NULL);
- display->label_accel_label = gtk_label_new (NULL);
- display->icon_image = gtk_image_new_from_pixbuf (NULL); /* empty image */
-
- gtk_box_pack_start (GTK_BOX (vbox), display->type_label,
- FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), display->icon_image,
- FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), display->label_accel_label,
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), display->macro_label,
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), display->id_label,
- FALSE, FALSE, 0);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-
- g_signal_connect (selection,
- "changed",
- G_CALLBACK (selection_changed),
- NULL);
- }
-
- if (!gtk_widget_get_visible (window))
- {
- gtk_widget_show_all (window);
- }
- else
- {
- gtk_widget_destroy (window);
- window = NULL;
- }
-
- return window;
-}