|
|
1.1 root 1: /*
2: * util.c
3: *
4: * Copyright 2003-2004 Richard Drummond
5: */
6:
7: #include <sys/types.h>
8: #include <sys/stat.h>
9: #include <unistd.h>
10: #include <string.h>
11:
12: #include <gdk/gdkkeysyms.h>
13: #include <gtk/gtk.h>
14:
15: #include "util.h"
16:
17: /*
18: * Some utility functions to make building a GTK+ GUI easier
19: * and more compact, to hide differences between GTK1.x and GTK2.x
20: * and to help maintain consistency
21: */
22:
23: GtkWidget *make_chooser (int count, ...)
24: {
25: GtkWidget *chooser;
26: va_list choices;
27: int i;
28:
29: chooser = gtk_combo_box_new_text ();
30:
31: va_start (choices, count);
32: for (i = 0; i < count; i++)
33: gtk_combo_box_append_text (GTK_COMBO_BOX (chooser), va_arg (choices, char *));
34:
35: gtk_widget_show (chooser);
36: return chooser;
37: }
38:
39: /*
40: * Add some padding to a vbox or hbox which will consume
41: * space when the box is resized to larger than default size
42: */
43: void add_box_padding (GtkWidget *box)
44: {
45: GtkWidget *vbox;
46:
47: vbox = gtk_vbox_new (FALSE, 0);
48: gtk_widget_show (vbox);
49: gtk_box_pack_start (GTK_BOX (box), vbox, TRUE, TRUE, 0);
50: }
51:
52: /*
53: * Add some padding to a table which will consime space when
54: * when the table is resized to larger than default size
55: */
56: void add_table_padding (GtkWidget *table, int x, int y)
57: {
58: GtkWidget *vbox;
59: vbox = gtk_vbox_new (FALSE, 0);
60: gtk_widget_show (vbox);
61: gtk_table_attach (GTK_TABLE (table), vbox, x, x+1, y, y+1,
62: (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
63: (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
64: }
65:
66: /*
67: * Add a widget to a table with some sensible defaults
68: *
69: * <x,y> is the table position to insert the widget
70: * <width> is the the number of columns the widget will take up
71: * <xflags> are the attachment flags that will apply horizontally
72: */
73: void add_to_table(GtkWidget *table, GtkWidget *widget, int x, int y, int width, int xflags)
74: {
75: gtk_table_attach (GTK_TABLE (table), widget, x, x+width, y, y+1,
76: (GtkAttachOptions) (xflags),
77: (GtkAttachOptions) (0), 0, 0);
78: }
79:
80:
81: /*
82: * Super-duper, handy table creation tool!
83: *
84: * Creates a table and add a list of widgets to it.
85: */
86: GtkWidget *gtkutil_add_table (GtkWidget *container, ...)
87: {
88: va_list contents;
89: GtkWidget *widget;
90: GtkWidget *table;
91: int row, max_col;
92: int col, width;
93: int flags;
94:
95: table = gtk_table_new (3, 3, FALSE);
96: gtk_container_set_border_width (GTK_CONTAINER (table), TABLE_BORDER_WIDTH);
97: gtk_table_set_row_spacings (GTK_TABLE (table), TABLE_ROW_SPACING);
98: gtk_table_set_col_spacings (GTK_TABLE (table), TABLE_COL_SPACING);
99: gtk_container_add (GTK_CONTAINER (container), table);
100:
101: va_start (contents, container);
102: widget = va_arg (contents, GtkWidget *);
103: row = 1;
104: max_col = 1;
105:
106: while (widget != GTKUTIL_TABLE_END) {
107: if (widget == GTKUTIL_ROW_END) {
108: row += 2;
109: } else {
110: col = va_arg (contents, gint);
111: if (col > max_col) max_col = col;
112: width = va_arg (contents, gint);
113: flags = va_arg (contents, gint);
114:
115: gtk_table_attach (GTK_TABLE (table), widget, col, col+width, row, row+1,
116: (GtkAttachOptions) (flags), (GtkAttachOptions) (0), 0, 0);
117: }
118: widget = va_arg (contents, GtkWidget *);
119: }
120:
121: gtk_table_resize (GTK_TABLE (table), row, max_col + 2);
122: add_table_padding (table, 0, 0);
123: add_table_padding (table, max_col + 1, row - 1);
124:
125: gtk_widget_show_all (table);
126:
127: return table;
128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.