|
|
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.