]> Pileus Git - ~andy/gtk/blob - tests/testcellarea.c
379ff398378701e510a34ec981f4afd556041dc9
[~andy/gtk] / tests / testcellarea.c
1 #include <gtk/gtk.h>
2 #include "cellareascaffold.h"
3
4 enum {
5   SIMPLE_COLUMN_NAME,
6   SIMPLE_COLUMN_ICON,
7   SIMPLE_COLUMN_DESCRIPTION,
8   N_SIMPLE_COLUMNS
9 };
10
11 static GtkCellRenderer *cell_1 = NULL, *cell_2 = NULL, *cell_3 = NULL;
12
13 static GtkTreeModel *
14 simple_list_model (void)
15 {
16   GtkTreeIter   iter;
17   GtkListStore *store = 
18     gtk_list_store_new (N_SIMPLE_COLUMNS,
19                         G_TYPE_STRING,  /* name text */
20                         G_TYPE_STRING,  /* icon name */
21                         G_TYPE_STRING); /* description text */
22
23   gtk_list_store_append (store, &iter);
24   gtk_list_store_set (store, &iter, 
25                       SIMPLE_COLUMN_NAME, "Alice in wonderland",
26                       SIMPLE_COLUMN_ICON, "gtk-execute",
27                       SIMPLE_COLUMN_DESCRIPTION, "One pill makes you smaller and the other pill makes you tall",
28                       -1);
29
30   gtk_list_store_append (store, &iter);
31   gtk_list_store_set (store, &iter, 
32                       SIMPLE_COLUMN_NAME, "Highschool Principal",
33                       SIMPLE_COLUMN_ICON, "gtk-help",
34                       SIMPLE_COLUMN_DESCRIPTION, 
35                       "Will make you copy the dictionary if you dont like your math teacher",
36                       -1);
37
38   gtk_list_store_append (store, &iter);
39   gtk_list_store_set (store, &iter, 
40                       SIMPLE_COLUMN_NAME, "Marry Poppins",
41                       SIMPLE_COLUMN_ICON, "gtk-yes",
42                       SIMPLE_COLUMN_DESCRIPTION, "Supercalifragilisticexpialidocious",
43                       -1);
44
45   gtk_list_store_append (store, &iter);
46   gtk_list_store_set (store, &iter, 
47                       SIMPLE_COLUMN_NAME, "George Bush",
48                       SIMPLE_COLUMN_ICON, "gtk-dialog-warning",
49                       SIMPLE_COLUMN_DESCRIPTION, "Please hide your nuclear weapons when inviting "
50                       "him to dinner",
51                       -1);
52
53   gtk_list_store_append (store, &iter);
54   gtk_list_store_set (store, &iter, 
55                       SIMPLE_COLUMN_NAME, "Whinnie the pooh",
56                       SIMPLE_COLUMN_ICON, "gtk-stop",
57                       SIMPLE_COLUMN_DESCRIPTION, "The most wonderful thing about tiggers, "
58                       "is tiggers are wonderful things",
59                       -1);
60
61   return (GtkTreeModel *)store;
62 }
63
64 static GtkWidget *
65 simple_scaffold (void)
66 {
67   GtkTreeModel *model;
68   GtkWidget *scaffold;
69   GtkCellArea *area;
70   GtkCellRenderer *renderer;
71
72   scaffold = cell_area_scaffold_new ();
73   gtk_widget_show (scaffold);
74
75   model = simple_list_model ();
76
77   cell_area_scaffold_set_model (CELL_AREA_SCAFFOLD (scaffold), model);
78
79   area = cell_area_scaffold_get_area (CELL_AREA_SCAFFOLD (scaffold));
80
81   cell_1 = renderer = gtk_cell_renderer_text_new ();
82   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, FALSE);
83   gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_NAME);
84
85   cell_2 = renderer = gtk_cell_renderer_pixbuf_new ();
86   g_object_set (G_OBJECT (renderer), "xalign", 0.0F, NULL);
87   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE);
88   gtk_cell_area_attribute_connect (area, renderer, "stock-id", SIMPLE_COLUMN_ICON);
89
90   cell_3 = renderer = gtk_cell_renderer_text_new ();
91   g_object_set (G_OBJECT (renderer), 
92                 "wrap-mode", PANGO_WRAP_WORD,
93                 "wrap-width", 215,
94                 NULL);
95   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
96   gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_DESCRIPTION);
97
98   return scaffold;
99 }
100
101 static void
102 orientation_changed (GtkComboBox      *combo,
103                      CellAreaScaffold *scaffold)
104 {
105   GtkOrientation orientation = gtk_combo_box_get_active (combo);
106
107   gtk_orientable_set_orientation (GTK_ORIENTABLE (scaffold), orientation);
108 }
109
110 static void
111 align_cell_2_toggled (GtkToggleButton  *toggle,
112                       CellAreaScaffold *scaffold)
113 {
114   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
115   gboolean     align = gtk_toggle_button_get_active (toggle);
116
117   gtk_cell_area_cell_set (area, cell_2, "align", align, NULL);
118   gtk_widget_queue_resize (GTK_WIDGET (scaffold));
119 }
120
121 static void
122 align_cell_3_toggled (GtkToggleButton  *toggle,
123                       CellAreaScaffold *scaffold)
124 {
125   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
126   gboolean     align = gtk_toggle_button_get_active (toggle);
127
128   gtk_cell_area_cell_set (area, cell_3, "align", align, NULL);
129   gtk_widget_queue_resize (GTK_WIDGET (scaffold));
130 }
131
132 static void
133 expand_cell_1_toggled (GtkToggleButton  *toggle,
134                        CellAreaScaffold *scaffold)
135 {
136   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
137   gboolean     expand = gtk_toggle_button_get_active (toggle);
138
139   gtk_cell_area_cell_set (area, cell_1, "expand", expand, NULL);
140   gtk_widget_queue_resize (GTK_WIDGET (scaffold));
141 }
142
143 static void
144 expand_cell_2_toggled (GtkToggleButton  *toggle,
145                        CellAreaScaffold *scaffold)
146 {
147   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
148   gboolean     expand = gtk_toggle_button_get_active (toggle);
149
150   gtk_cell_area_cell_set (area, cell_2, "expand", expand, NULL);
151   gtk_widget_queue_resize (GTK_WIDGET (scaffold));
152 }
153
154 static void
155 expand_cell_3_toggled (GtkToggleButton  *toggle,
156                        CellAreaScaffold *scaffold)
157 {
158   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
159   gboolean     expand = gtk_toggle_button_get_active (toggle);
160
161   gtk_cell_area_cell_set (area, cell_3, "expand", expand, NULL);
162   gtk_widget_queue_resize (GTK_WIDGET (scaffold));
163 }
164
165 static void
166 simple_cell_area (void)
167 {
168   GtkWidget *window, *widget;
169   GtkWidget *scaffold, *frame, *vbox, *hbox;
170
171   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
172
173   scaffold = simple_scaffold ();
174
175   hbox  = gtk_hbox_new (FALSE, 4);
176   frame = gtk_frame_new (NULL);
177   gtk_widget_show (hbox);
178   gtk_widget_show (frame);
179
180   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
181   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
182
183   gtk_container_add (GTK_CONTAINER (frame), scaffold);
184
185   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
186
187   /* Now add some controls */
188   vbox  = gtk_vbox_new (FALSE, 4);
189   gtk_widget_show (vbox);
190   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
191
192   widget = gtk_combo_box_text_new ();
193   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
194   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
195   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
196   gtk_widget_show (widget);
197   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
198
199   g_signal_connect (G_OBJECT (widget), "changed",
200                     G_CALLBACK (orientation_changed), scaffold);
201
202   widget = gtk_check_button_new_with_label ("Align 2nd Cell");
203   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
204   gtk_widget_show (widget);
205   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
206   
207   g_signal_connect (G_OBJECT (widget), "toggled",
208                     G_CALLBACK (align_cell_2_toggled), scaffold);
209
210   widget = gtk_check_button_new_with_label ("Align 3rd Cell");
211   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
212   gtk_widget_show (widget);
213   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
214   
215   g_signal_connect (G_OBJECT (widget), "toggled",
216                     G_CALLBACK (align_cell_3_toggled), scaffold);
217
218
219   widget = gtk_check_button_new_with_label ("Expand 1st Cell");
220   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
221   gtk_widget_show (widget);
222   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
223   
224   g_signal_connect (G_OBJECT (widget), "toggled",
225                     G_CALLBACK (expand_cell_1_toggled), scaffold);
226
227   widget = gtk_check_button_new_with_label ("Expand 2nd Cell");
228   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
229   gtk_widget_show (widget);
230   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
231   
232   g_signal_connect (G_OBJECT (widget), "toggled",
233                     G_CALLBACK (expand_cell_2_toggled), scaffold);
234
235   widget = gtk_check_button_new_with_label ("Expand 3rd Cell");
236   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
237   gtk_widget_show (widget);
238   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
239   
240   g_signal_connect (G_OBJECT (widget), "toggled",
241                     G_CALLBACK (expand_cell_3_toggled), scaffold);
242
243   gtk_container_add (GTK_CONTAINER (window), hbox);
244
245   gtk_widget_show (window);
246 }
247
248 int
249 main (int argc, char *argv[])
250 {
251   gtk_init (NULL, NULL);
252
253   simple_cell_area ();
254
255   gtk_main ();
256
257   return 0;
258 }