comparison src/bar.c @ 1387:6f31fa931d3f

simplified bar interface
author nadvornik
date Fri, 06 Mar 2009 15:52:47 +0000
parents 3c9abbc05792
children c44f21235ffe
comparison
equal deleted inserted replaced
1386:4da6d326919c 1387:6f31fa931d3f
40 GtkWidget *widget; 40 GtkWidget *widget;
41 GtkWidget *vbox; 41 GtkWidget *vbox;
42 FileData *fd; 42 FileData *fd;
43 GtkWidget *label_file_name; 43 GtkWidget *label_file_name;
44 44
45 GList *(*list_func)(gpointer); 45 LayoutWindow *lw;
46 gpointer list_data;
47 gint width; 46 gint width;
48 }; 47 };
49 48
50 static void bar_expander_move(GtkWidget *widget, gpointer data, gboolean up) 49 static void bar_expander_move(GtkWidget *widget, gpointer data, gboolean up)
51 { 50 {
185 184
186 WRITE_STRING("</bar>\n"); 185 WRITE_STRING("</bar>\n");
187 } 186 }
188 187
189 188
190 void bar_pane_set_selection_func(GtkWidget *pane, GList *(*list_func)(gpointer data), gpointer data)
191 {
192 PaneData *pd;
193
194 pd = g_object_get_data(G_OBJECT(pane), "pane_data");
195 if (!pd) return;
196
197 pd->list_func = list_func;
198 pd->list_data = data;
199 }
200
201 void bar_set_selection_func(GtkWidget *bar, GList *(*list_func)(gpointer data), gpointer data)
202 {
203 BarData *bd;
204 GList *list, *work;
205 bd = g_object_get_data(G_OBJECT(bar), "bar_data");
206 if (!bd) return;
207
208 bd->list_func = list_func;
209 bd->list_data = data;
210
211 list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
212
213 work = list;
214 while (work)
215 {
216 GtkWidget *widget = gtk_bin_get_child(GTK_BIN(work->data));
217
218 bar_pane_set_selection_func(widget, list_func, data);
219
220 work = work->next;
221 }
222 g_list_free(list);
223 return;
224 }
225
226 void bar_add(GtkWidget *bar, GtkWidget *pane) 189 void bar_add(GtkWidget *bar, GtkWidget *pane)
227 { 190 {
228 GtkWidget *expander; 191 GtkWidget *expander;
229 BarData *bd = g_object_get_data(G_OBJECT(bar), "bar_data"); 192 BarData *bd = g_object_get_data(G_OBJECT(bar), "bar_data");
230 PaneData *pd = g_object_get_data(G_OBJECT(pane), "pane_data"); 193 PaneData *pd = g_object_get_data(G_OBJECT(pane), "pane_data");
231 194
232 195
233 if (!bd) return; 196 if (!bd) return;
234 197
198 pd->lw = bd->lw;
199 pd->bar = bar;
200
235 expander = gtk_expander_new(NULL); 201 expander = gtk_expander_new(NULL);
236 if (pd && pd->title) 202 if (pd && pd->title)
237 { 203 {
238 gtk_expander_set_label_widget(GTK_EXPANDER(expander), pd->title); 204 gtk_expander_set_label_widget(GTK_EXPANDER(expander), pd->title);
239 gtk_widget_show(pd->title); 205 gtk_widget_show(pd->title);
240 pref_label_bold(pd->title, TRUE, FALSE);
241 } 206 }
242 207
243 gtk_box_pack_start(GTK_BOX(bd->vbox), expander, FALSE, TRUE, 0); 208 gtk_box_pack_start(GTK_BOX(bd->vbox), expander, FALSE, TRUE, 0);
244 209
245 g_signal_connect(expander, "button_press_event", G_CALLBACK(bar_expander_menu_cb), bd); 210 g_signal_connect(expander, "button_press_event", G_CALLBACK(bar_expander_menu_cb), bd);
248 213
249 gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded); 214 gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded);
250 215
251 gtk_widget_show(expander); 216 gtk_widget_show(expander);
252 217
253 if (bd->list_func) bar_pane_set_selection_func(pane, bd->list_func, bd->list_data);
254 if (bd->fd && pd && pd->pane_set_fd) pd->pane_set_fd(pane, bd->fd); 218 if (bd->fd && pd && pd->pane_set_fd) pd->pane_set_fd(pane, bd->fd);
255 219
256 } 220 }
257 221
258 static void bar_populate_default(GtkWidget *bar) 222 static void bar_populate_default(GtkWidget *bar)
304 268
305 file_data_unref(bd->fd); 269 file_data_unref(bd->fd);
306 g_free(bd); 270 g_free(bd);
307 } 271 }
308 272
309 GtkWidget *bar_new(GtkWidget *bounding_widget) 273 GtkWidget *bar_new(LayoutWindow *lw)
310 { 274 {
311 BarData *bd; 275 BarData *bd;
312 GtkWidget *box; 276 GtkWidget *box;
313 GtkWidget *sizer;
314 GtkWidget *button;
315 GtkWidget *arrow;
316 GtkWidget *scrolled; 277 GtkWidget *scrolled;
317 278
318 bd = g_new0(BarData, 1); 279 bd = g_new0(BarData, 1);
319 280
281 bd->lw = lw;
282
320 bd->widget = gtk_vbox_new(FALSE, PREF_PAD_GAP); 283 bd->widget = gtk_vbox_new(FALSE, PREF_PAD_GAP);
321 g_object_set_data(G_OBJECT(bd->widget), "bar_data", bd); 284 g_object_set_data(G_OBJECT(bd->widget), "bar_data", bd);
322 g_signal_connect(G_OBJECT(bd->widget), "destroy", 285 g_signal_connect(G_OBJECT(bd->widget), "destroy",
323 G_CALLBACK(bar_destroy), bd); 286 G_CALLBACK(bar_destroy), bd);
324 287
354 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_NONE); 317 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_NONE);
355 gtk_widget_show(bd->vbox); 318 gtk_widget_show(bd->vbox);
356 return bd->widget; 319 return bd->widget;
357 } 320 }
358 321
359 GtkWidget *bar_new_default(GtkWidget *bounding_widget) 322 GtkWidget *bar_new_default(LayoutWindow *lw)
360 { 323 {
361 GtkWidget *bar = bar_new(bounding_widget); 324 GtkWidget *bar = bar_new(lw);
362 325
363 bar_populate_default(bar); 326 bar_populate_default(bar);
364 327
365 gtk_widget_show(bar); 328 gtk_widget_show(bar);
366 329
367 return bar; 330 return bar;
368 } 331 }
369 332
370 GtkWidget *bar_new_from_config(GtkWidget *bounding_widget, const gchar **attribute_names, const gchar **attribute_values) 333 GtkWidget *bar_new_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values)
371 { 334 {
372 GtkWidget *bar = bar_new(bounding_widget); 335 GtkWidget *bar = bar_new(lw);
373 336
374 gboolean enabled = TRUE; 337 gboolean enabled = TRUE;
375 gint width = SIDEBAR_DEFAULT_WIDTH; 338 gint width = SIDEBAR_DEFAULT_WIDTH;
376 339
377 while (*attribute_names) 340 while (*attribute_names)