Mercurial > geeqie.yaz
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) |