7 #define SQRT3 1.732050808
11 typedef struct _AdgPart AdgPart
;
16 gdouble D1
, D2
, D3
, D4
, D5
, D6
, D7
;
18 gdouble LD2
, LD3
, LD5
, LD6
, LD7
;
25 g_print("adg-demo " PACKAGE_VERSION
"\n");
30 _adg_parse_args(gint
*p_argc
, gchar
**p_argv
[], gboolean
*show_extents
)
33 GOptionEntry entries
[] = {
34 {"version", 'V', G_OPTION_FLAG_NO_ARG
, G_OPTION_ARG_CALLBACK
,
35 _adg_version
, "Display version information", NULL
},
36 {"show-extents", 'E', 0, G_OPTION_ARG_NONE
,
37 NULL
, "Show the boundary boxes of every entity", NULL
},
41 entries
[1].arg_data
= show_extents
;
42 *show_extents
= FALSE
;
43 gtk_init_with_args(p_argc
, p_argv
, "- ADG demonstration program",
44 entries
, GETTEXT_PACKAGE
, &error
);
47 gint error_code
= error
->code
;
49 g_printerr("%s\n", error
->message
);
57 _adg_part_init(AdgPart
*part
)
80 _adg_part_hole(const AdgPart
*part
, gdouble height
)
86 path
= adg_path_new();
87 model
= ADG_MODEL(path
);
91 adg_path_move_to(path
, &pair
);
92 adg_model_set_named_pair(model
, "LHOLE", &pair
);
94 pair
.y
= part
->DHOLE
/ 2;
95 pair
.x
-= pair
.y
/ SQRT3
;
96 adg_path_line_to(path
, &pair
);
99 adg_path_line_to(path
, &pair
);
100 adg_model_set_named_pair(model
, "DHOLE", &pair
);
102 pair
.y
= part
->D1
/ 2;
103 adg_path_line_to(path
, &pair
);
104 adg_model_set_named_pair(model
, "D1I", &pair
);
107 adg_path_line_to(path
, &pair
);
108 adg_model_set_named_pair(model
, "D1F", &pair
);
114 _adg_part_shape(const AdgPart
*part
)
119 const AdgPrimitive
*primitive
;
121 pair
.x
= part
->A
- part
->B
- part
->LD2
;
122 path
= _adg_part_hole(part
, pair
.x
);
123 model
= ADG_MODEL(path
);
125 pair
.x
+= (part
->D1
- part
->D2
) / 2;
126 pair
.y
= part
->D2
/ 2;
127 adg_path_line_to(path
, &pair
);
128 adg_model_set_named_pair(model
, "D2I", &pair
);
130 pair
.x
= part
->A
- part
->B
;
131 adg_path_line_to(path
, &pair
);
132 adg_path_fillet(path
, 0.4);
134 pair
.x
= part
->A
- part
->B
;
135 pair
.y
= part
->D3
/ 2;
136 adg_path_line_to(path
, &pair
);
137 adg_model_set_named_pair(model
, "D3I", &pair
);
140 adg_model_set_named_pair(model
, "East", &pair
);
143 adg_model_set_named_pair(model
, "West", &pair
);
145 adg_path_chamfer(path
, CHAMFER
, CHAMFER
);
147 pair
.x
= part
->A
- part
->B
+ part
->LD3
;
148 pair
.y
= part
->D3
/ 2;
149 adg_path_line_to(path
, &pair
);
151 primitive
= adg_path_over_primitive(path
);
152 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, 0));
153 adg_model_set_named_pair(model
, "D3I_X", &tmp
);
155 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, -1));
156 adg_model_set_named_pair(model
, "D3I_Y", &tmp
);
158 adg_path_chamfer(path
, CHAMFER
, CHAMFER
);
160 pair
.y
= part
->D4
/ 2;
161 adg_path_line_to(path
, &pair
);
163 primitive
= adg_path_over_primitive(path
);
164 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, 0));
165 adg_model_set_named_pair(model
, "D3F_Y", &tmp
);
166 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, -1));
167 adg_model_set_named_pair(model
, "D3F_X", &tmp
);
169 adg_path_fillet(path
, part
->RD34
);
171 pair
.x
+= part
->RD34
;
172 adg_model_set_named_pair(model
, "D4I", &pair
);
174 pair
.x
= part
->A
- part
->C
- part
->LD5
;
175 adg_path_line_to(path
, &pair
);
176 adg_model_set_named_pair(model
, "D4F", &pair
);
178 pair
.y
= part
->D3
/ 2;
179 adg_model_set_named_pair(model
, "D4_POS", &pair
);
181 primitive
= adg_path_over_primitive(path
);
182 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, 0));
184 adg_model_set_named_pair(model
, "RD34", &tmp
);
186 tmp
.x
-= cos(G_PI_4
) * part
->RD34
,
187 tmp
.y
-= sin(G_PI_4
) * part
->RD34
,
188 adg_model_set_named_pair(model
, "RD34_R", &tmp
);
192 adg_model_set_named_pair(model
, "RD34_XY", &tmp
);
194 pair
.x
+= (part
->D4
- part
->D5
) / 2;
195 pair
.y
= part
->D5
/ 2;
196 adg_path_line_to(path
, &pair
);
197 adg_model_set_named_pair(model
, "D5I", &pair
);
199 pair
.x
= part
->A
- part
->C
;
200 adg_path_line_to(path
, &pair
);
202 adg_path_fillet(path
, 0.2);
204 pair
.y
= part
->D6
/ 2;
205 adg_path_line_to(path
, &pair
);
207 primitive
= adg_path_over_primitive(path
);
208 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, 0));
209 adg_model_set_named_pair(model
, "D5F", &tmp
);
211 adg_path_fillet(path
, 0.1);
214 adg_path_line_to(path
, &pair
);
215 adg_model_set_named_pair(model
, "D6F", &pair
);
217 primitive
= adg_path_over_primitive(path
);
218 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, 0));
219 adg_model_set_named_pair(model
, "D6I_X", &tmp
);
221 primitive
= adg_path_over_primitive(path
);
222 cpml_pair_from_cairo(&tmp
, cpml_primitive_get_point(primitive
, -1));
223 adg_model_set_named_pair(model
, "D6I_Y", &tmp
);
225 pair
.x
= part
->A
- part
->LD7
;
226 pair
.y
-= (part
->C
- part
->LD7
- part
->LD6
) / SQRT3
;
227 adg_path_line_to(path
, &pair
);
228 adg_model_set_named_pair(model
, "D67", &pair
);
230 pair
.y
= part
->D7
/ 2;
231 adg_path_line_to(path
, &pair
);
234 adg_path_line_to(path
, &pair
);
235 adg_model_set_named_pair(model
, "D7F", &pair
);
241 _adg_demo_canvas_add_sheet(AdgCanvas
*canvas
)
243 AdgTitleBlock
*title_block
;
247 title_block
= adg_title_block_new();
249 logo
= adg_logo_new();
250 cairo_matrix_init_scale(&map
, 2, 2);
251 adg_entity_set_global_map(ADG_ENTITY(logo
), &map
);
253 g_object_set(title_block
,
254 "title", "SAMPLE DRAWING",
257 "drawing", "TEST123",
259 "projection", adg_projection_new(ADG_PROJECTION_FIRST_ANGLE
),
264 cairo_matrix_init_translate(&map
, 300, 150);
265 adg_entity_set_global_map(ADG_ENTITY(title_block
), &map
);
267 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(title_block
));
271 _adg_demo_canvas_add_dimensions(AdgCanvas
*canvas
, AdgModel
*model
)
278 adim
= adg_adim_new_full_from_model(model
, "-D1I", "-D1F",
279 "-D1F", "-D2I", "-D1F");
280 adg_dim_set_level(ADG_DIM(adim
), 2);
281 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(adim
));
283 ldim
= adg_ldim_new_full_from_model(model
, "-D1F", "-D3I_X", "-D3F_Y",
285 adg_dim_set_outside(ADG_DIM(ldim
), ADG_THREE_STATE_OFF
);
286 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
288 ldim
= adg_ldim_new_full_from_model(model
, "-D3I_X", "-D3F_X", "-D3F_Y",
290 adg_ldim_switch_extension1(ldim
, FALSE
);
291 adg_dim_set_outside(ADG_DIM(ldim
), ADG_THREE_STATE_OFF
);
292 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
294 ldim
= adg_ldim_new_full_from_model(model
, "-D6I_X", "-D67", "-East",
296 adg_dim_set_level(ADG_DIM(ldim
), 0);
297 adg_ldim_switch_extension1(ldim
, FALSE
);
298 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
300 ldim
= adg_ldim_new_full_from_model(model
, "-D6I_X", "-D7F", "-East",
302 adg_dim_set_limits(ADG_DIM(ldim
), "-0.06", NULL
);
303 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
305 adim
= adg_adim_new_full_from_model(model
, "-D6I_Y", "-D6F",
306 "-D6F", "-D67", "-D6F");
307 adg_dim_set_level(ADG_DIM(adim
), 2);
308 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(adim
));
310 rdim
= adg_rdim_new_full_from_model(model
, "-RD34", "-RD34_R", "-RD34_XY");
311 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(rdim
));
315 ldim
= adg_ldim_new_full_from_model(model
, "D1I", "LHOLE", "D3F_Y",
317 adg_ldim_switch_extension1(ldim
, FALSE
);
318 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
320 ldim
= adg_ldim_new_full_from_model(model
, "D4F", "D6I_X", "D4_POS",
322 adg_dim_set_limits(ADG_DIM(ldim
), NULL
, "+0.2");
323 adg_dim_set_outside(ADG_DIM(ldim
), ADG_THREE_STATE_OFF
);
324 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
326 ldim
= adg_ldim_new_full_from_model(model
, "D3I_X", "D7F", "D3F_Y",
328 adg_dim_set_limits(ADG_DIM(ldim
), NULL
, "+0.1");
329 adg_dim_set_level(ADG_DIM(ldim
), 2);
330 adg_ldim_switch_extension2(ldim
, FALSE
);
331 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
333 ldim
= adg_ldim_new_full_from_model(model
, "D1I", "D7F", "D3F_Y",
335 adg_dim_set_limits(ADG_DIM(ldim
), "-0.05", "+0.05");
336 adg_dim_set_level(ADG_DIM(ldim
), 3);
337 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
339 adim
= adg_adim_new_full_from_model(model
, "D4F", "D4I",
340 "D5I", "D4F", "D4F");
341 adg_dim_set_level(ADG_DIM(adim
), 1.5);
342 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(adim
));
346 ldim
= adg_ldim_new_full_from_model(model
, "D6F", "-D6F", "East",
348 adg_dim_set_limits(ADG_DIM(ldim
), "-0.1", NULL
);
349 adg_dim_set_level(ADG_DIM(ldim
), 4);
350 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
352 ldim
= adg_ldim_new_full_from_model(model
, "D4F", "-D4F", "East",
354 adg_dim_set_level(ADG_DIM(ldim
), 3);
355 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
357 ldim
= adg_ldim_new_full_from_model(model
, "D5F", "-D5F", "East",
359 adg_dim_set_limits(ADG_DIM(ldim
), "-0.1", NULL
);
360 adg_dim_set_level(ADG_DIM(ldim
), 2);
361 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
363 ldim
= adg_ldim_new_full_from_model(model
, "D7F", "-D7F", "East",
365 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
369 ldim
= adg_ldim_new_full_from_model(model
, "D3I_Y", "-D3I_Y", "-West",
371 adg_dim_set_limits(ADG_DIM(ldim
), "-0.25", NULL
);
372 adg_dim_set_level(ADG_DIM(ldim
), 4);
373 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
375 ldim
= adg_ldim_new_full_from_model(model
, "D1I", "-D1I", "-West",
377 adg_dim_set_limits(ADG_DIM(ldim
), "+0.05", "-0.05");
378 adg_dim_set_level(ADG_DIM(ldim
), 3);
379 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
381 ldim
= adg_ldim_new_full_from_model(model
, "D2I", "-D2I", "-West",
383 adg_dim_set_limits(ADG_DIM(ldim
), "-0.1", NULL
);
384 adg_dim_set_level(ADG_DIM(ldim
), 2);
385 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
387 ldim
= adg_ldim_new_full_from_model(model
, "DHOLE", "-DHOLE", "-West",
389 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(ldim
));
393 _adg_demo_canvas_add_stuff(AdgCanvas
*canvas
, AdgModel
*model
)
395 AdgToyText
*toy_text
;
398 toy_text
= adg_toy_text_new("Rotate the mouse wheel to zoom in and out");
399 adg_entity_set_local_method(ADG_ENTITY(toy_text
), ADG_MIX_DISABLED
);
400 cairo_matrix_init_translate(&map
, -100, 200);
401 adg_entity_set_global_map(ADG_ENTITY(toy_text
), &map
);
402 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(toy_text
));
404 toy_text
= adg_toy_text_new("Drag with the wheel pressed to pan");
405 adg_entity_set_local_method(ADG_ENTITY(toy_text
), ADG_MIX_DISABLED
);
406 cairo_matrix_init_translate(&map
, -100, 215);
407 adg_entity_set_global_map(ADG_ENTITY(toy_text
), &map
);
408 adg_container_add(ADG_CONTAINER(canvas
), ADG_ENTITY(toy_text
));
412 _adg_canvas_init(AdgCanvas
*canvas
, const AdgPart
*part
)
414 AdgContainer
*container
;
415 AdgPath
*bottom
, *shape
;
420 container
= (AdgContainer
*) canvas
;
422 bottom
= _adg_part_hole(part
, part
->LHOLE
+ 2);
423 adg_path_reflect(bottom
, NULL
);
424 adg_path_close(bottom
);
426 shape
= _adg_part_shape(part
);
427 adg_path_reflect(shape
, NULL
);
428 adg_path_close(shape
);
429 adg_path_move_to_explicit(shape
, part
->LHOLE
+ 2, part
->D1
/ 2);
430 adg_path_line_to_explicit(shape
, part
->LHOLE
+ 2, -part
->D1
/ 2);
432 edges
= adg_edges_new_with_source(ADG_TRAIL(shape
));
434 entity
= ADG_ENTITY(adg_stroke_new(ADG_TRAIL(shape
)));
435 adg_container_add(container
, entity
);
437 entity
= ADG_ENTITY(adg_hatch_new(ADG_TRAIL(bottom
)));
438 adg_container_add(container
, entity
);
440 entity
= ADG_ENTITY(adg_stroke_new(ADG_TRAIL(edges
)));
441 adg_container_add(container
, entity
);
443 _adg_demo_canvas_add_sheet(canvas
);
444 _adg_demo_canvas_add_dimensions(canvas
, ADG_MODEL(shape
));
445 _adg_demo_canvas_add_stuff(canvas
, ADG_MODEL(shape
));
447 cairo_matrix_init_scale(&map
, 7, 7);
448 adg_entity_set_local_map(ADG_ENTITY(container
), &map
);
453 static GtkRadioButton
*
454 _adg_group_get_active(GtkRadioButton
*radio_group
)
456 GSList
*list
= gtk_radio_button_get_group(radio_group
);
459 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(list
->data
)))
469 _adg_save_as_response(GtkWidget
*window
, GtkResponseType response
,
472 gchar
*file
, *suffix
;
473 GtkRadioButton
*type_radio
;
474 cairo_surface_t
*surface
= NULL
;
475 void (*callback
)(cairo_surface_t
*, gchar
*) = NULL
;
477 if (response
!= GTK_RESPONSE_OK
) {
478 gtk_widget_hide(window
);
482 file
= gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(window
));
486 type_radio
= _adg_group_get_active(g_object_get_data(G_OBJECT(window
),
488 g_assert(GTK_IS_RADIO_BUTTON(type_radio
));
490 suffix
= gtk_widget_get_tooltip_markup(GTK_WIDGET(type_radio
));
491 g_assert(suffix
!= NULL
);
493 if (!g_str_has_suffix(file
, suffix
)) {
495 file
= g_strconcat(file
, suffix
, NULL
);
499 if (strcmp(suffix
, ".png") == 0) {
500 #ifdef CAIRO_HAS_PNG_FUNCTIONS
501 surface
= cairo_image_surface_create(CAIRO_FORMAT_RGB24
, 800, 600);
502 callback
= (gpointer
) cairo_surface_write_to_png
;
504 } else if (strcmp(suffix
, ".pdf") == 0) {
505 #ifdef CAIRO_HAS_PDF_SURFACE
506 #include <cairo-pdf.h>
507 surface
= cairo_pdf_surface_create(file
, 841, 595);
509 } else if (strcmp(suffix
, ".ps") == 0) {
510 #ifdef CAIRO_HAS_PS_SURFACE
511 #include <cairo-ps.h>
512 surface
= cairo_ps_surface_create(file
, 841, 595);
513 cairo_ps_surface_dsc_comment(surface
, "%%Title: " PACKAGE_STRING
);
514 cairo_ps_surface_dsc_comment(surface
, "%%Copyright: Copyright (C) 2006-2010 Fontana Nicola");
515 cairo_ps_surface_dsc_comment(surface
, "%%Orientation: Portrait");
516 cairo_ps_surface_dsc_begin_setup(surface
);
517 cairo_ps_surface_dsc_begin_page_setup(surface
);
518 cairo_ps_surface_dsc_comment(surface
, "%%IncludeFeature: *PageSize A4");
523 cairo_t
*cr
= cairo_create(surface
);
524 cairo_surface_destroy(surface
);
525 adg_entity_render(ADG_ENTITY(canvas
), cr
);
528 callback(surface
, file
);
534 gtk_widget_hide(window
);
538 _adg_about_window(GtkBuilder
*builder
)
542 window
= (GtkWidget
*) gtk_builder_get_object(builder
, "wndAbout");
543 g_assert(GTK_IS_ABOUT_DIALOG(window
));
545 g_signal_connect(window
, "response", G_CALLBACK(gtk_widget_hide
), NULL
);
550 /* A one-time signal that set the USER_POS and USER_SIZE flags, so the
551 * last window position is retained */
553 _adg_keep_upos(GtkWindow
*window
)
555 gtk_window_set_geometry_hints(window
, GTK_WIDGET(window
), NULL
,
556 GDK_HINT_USER_POS
| GDK_HINT_USER_SIZE
);
557 g_signal_handlers_disconnect_by_func(window
, _adg_keep_upos
, NULL
);
561 _adg_edit_window(GtkBuilder
*builder
, AdgPart
*part
)
564 GtkWidget
*button_close
;
566 window
= (GtkWidget
*) gtk_builder_get_object(builder
, "wndEdit");
567 g_assert(GTK_IS_DIALOG(window
));
568 button_close
= (GtkWidget
*) gtk_builder_get_object(builder
, "editClose");
569 g_assert(GTK_IS_BUTTON(button_close
));
571 g_signal_connect(window
, "show", G_CALLBACK(_adg_keep_upos
), NULL
);
572 g_signal_connect(window
, "response", G_CALLBACK(gtk_widget_hide
), NULL
);
578 _adg_save_as_window(GtkBuilder
*builder
, AdgCanvas
*canvas
)
581 GtkWidget
*type_group
, *button_save
;
583 window
= (GtkWidget
*) gtk_builder_get_object(builder
, "wndSaveAs");
584 g_assert(GTK_IS_WINDOW(window
));
585 type_group
= (GtkWidget
*) gtk_builder_get_object(builder
, "saveAsPng");
586 g_assert(GTK_IS_RADIO_BUTTON(type_group
));
587 button_save
= (GtkWidget
*) gtk_builder_get_object(builder
, "saveAsSave");
588 g_assert(GTK_IS_BUTTON(button_save
));
590 g_object_set_data(G_OBJECT(window
), "type-group", type_group
);
592 g_signal_connect(window
, "response",
593 G_CALLBACK(_adg_save_as_response
), canvas
);
599 _adg_main_window(GtkBuilder
*builder
)
604 GtkWidget
*button_edit
, *button_save_as
, *button_about
, *button_quit
;
605 AdgGtkArea
*adg_area
;
607 window
= (GtkWidget
*) gtk_builder_get_object(builder
, "wndMain");
608 part
= g_new(AdgPart
, 1);
609 canvas
= adg_canvas_new();
611 g_assert(GTK_IS_WINDOW(window
));
612 button_edit
= (GtkWidget
*) gtk_builder_get_object(builder
, "mainEdit");
613 g_assert(GTK_IS_BUTTON(button_edit
));
614 button_save_as
= (GtkWidget
*) gtk_builder_get_object(builder
, "mainSaveAs");
615 g_assert(GTK_IS_BUTTON(button_save_as
));
616 button_about
= (GtkWidget
*) gtk_builder_get_object(builder
, "mainAbout");
617 g_assert(GTK_IS_BUTTON(button_about
));
618 button_quit
= (GtkWidget
*) gtk_builder_get_object(builder
, "mainQuit");
619 g_assert(GTK_IS_BUTTON(button_quit
));
620 adg_area
= (AdgGtkArea
*) gtk_builder_get_object(builder
, "mainCanvas");
621 g_assert(ADG_GTK_IS_AREA(adg_area
));
623 _adg_part_init(part
);
624 _adg_canvas_init(canvas
, part
);
625 adg_gtk_area_set_canvas(adg_area
, canvas
);
627 g_signal_connect_swapped(button_edit
, "clicked",
628 G_CALLBACK(gtk_dialog_run
),
629 _adg_edit_window(builder
, part
));
630 g_signal_connect_swapped(button_save_as
, "clicked",
631 G_CALLBACK(gtk_dialog_run
),
632 _adg_save_as_window(builder
, canvas
));
633 g_signal_connect_swapped(button_about
, "clicked",
634 G_CALLBACK(gtk_dialog_run
),
635 _adg_about_window(builder
));
636 g_signal_connect(button_quit
, "clicked", G_CALLBACK(gtk_main_quit
), NULL
);
637 g_signal_connect(window
, "delete-event", G_CALLBACK(gtk_main_quit
), NULL
);
638 g_signal_connect_swapped(window
, "destroy", G_CALLBACK(g_free
), part
);
645 main(gint argc
, gchar
**argv
)
647 gboolean show_extents
;
651 GtkWidget
*main_window
;
653 _adg_parse_args(&argc
, &argv
, &show_extents
);
654 adg_switch_extents(show_extents
);
656 path
= demo_find_data_file("adg-demo.ui");
658 g_print("adg-demo.ui not found!\n");
662 builder
= gtk_builder_new();
664 gtk_builder_add_from_file(builder
, path
, &error
);
667 g_critical(error
->message
);
672 main_window
= _adg_main_window(builder
);
673 g_object_unref(builder
);
675 gtk_widget_show_all(main_window
);