31 #include <sys/types.h>
39 #include <gdk/gdkkeysyms.h>
58 static const gchar* gerbv_win_title = N_(
"Gerbv — gEDA's Gerber Viewer");
61 extern const char* gerbv_coords_pattern_mils_str;
65 rename_main_window(
const char* filename, GtkWidget* main_win) {
66 GString* win_title = g_string_new(NULL);
67 static GtkWidget* win = NULL;
72 g_assert(win != NULL);
74 if (filename && filename[0] !=
'\0') {
75 gchar* basename = g_path_get_basename(filename);
76 g_string_printf(win_title,
"%s — Gerbv", basename);
79 g_string_printf(win_title,
"%s", _(gerbv_win_title));
82 gtk_window_set_title(GTK_WINDOW(win), win_title->str);
83 g_string_free(win_title, TRUE);
88 set_window_icon(GtkWidget* this_window) {
92 pixmap = gdk_pixmap_create_from_xpm_d(
93 this_window->window, &mask, &this_window->style->bg[GTK_STATE_NORMAL], gerbv_icon_xpm
95 gdk_window_set_icon(this_window->window, NULL, pixmap, mask);
102 interface_load_accels(
void) {
103 gchar* accel_map_filename = g_build_filename(g_get_home_dir(), GERBV_ACCELS_RELPATH, NULL);
104 if (accel_map_filename) {
105 gtk_accel_map_load(accel_map_filename);
106 g_free(accel_map_filename);
112 interface_save_accels(
void) {
113 gchar *accel_map_dirname, *accel_map_filename;
115 accel_map_filename = g_build_filename(g_get_home_dir(), GERBV_ACCELS_RELPATH, NULL);
117 if (!accel_map_filename)
121 accel_map_dirname = g_path_get_dirname(accel_map_filename);
122 g_mkdir_with_parents(accel_map_dirname, S_IRUSR | S_IXUSR | S_IWUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
124 gtk_accel_map_save(accel_map_filename);
126 g_free(accel_map_dirname);
127 g_free(accel_map_filename);
131 request_label_max_size_by_text(GtkWidget* label,
const gchar* str) {
134 gtk_label_set_text(GTK_LABEL(label), str);
137 gtk_widget_set_size_request(label, -1, -1);
138 gtk_widget_size_request(label, &req);
139 gtk_widget_set_size_request(label, req.width, req.height);
140 gtk_label_set_text(GTK_LABEL(label),
"");
144 pixbuf_from_icon(
const icon* icon) {
145 return gdk_pixbuf_new_from_data(
146 icon->data, icon->colorspace, icon->has_alpha, icon->bits_per_sample, icon->width, icon->height,
147 icon->rowstride, NULL, NULL
153 interface_create_gui(
int req_width,
int req_height) {
156 GtkWidget* mainWindow;
160 GtkWidget* menuitem_file;
161 GtkWidget* menuitem_file_menu;
162 GtkWidget* new_project;
167 GtkWidget* save_layer;
168 GtkWidget* save_as_layer;
169 GtkWidget* menuitem_file_export;
170 GtkWidget* menuitem_file_export_menu;
171 GtkWidget *png, *pdf, *svg, *postscript, *geda_pcb;
172 GtkWidget *rs274x, *drill, *idrill, *rs274xm, *drillm;
177 #if GTK_CHECK_VERSION(2, 10, 0)
182 GtkWidget* menuitem_edit;
183 GtkWidget* menuitem_edit_menu;
184 GtkWidget* properties_selected;
185 GtkWidget* delete_selected;
186 GtkWidget *align, *align_layers;
187 GtkWidget* menuitem_view;
188 GtkWidget* menuitem_view_menu;
189 GtkWidget* view_fullscreen;
190 GtkWidget* show_selection_on_invisible;
191 GtkWidget* show_cross_on_drill_holes;
192 GtkWidget* show_toolbar;
193 GtkWidget* show_sidepane;
194 GtkWidget* toggle_layer_visibility_item1;
195 GtkWidget* toggle_layer_visibility_item2;
196 GtkWidget* toggle_layer_visibility_item3;
197 GtkWidget* toggle_layer_visibility_item4;
198 GtkWidget* toggle_layer_visibility_item5;
199 GtkWidget* toggle_layer_visibility_item6;
200 GtkWidget* toggle_layer_visibility_item7;
201 GtkWidget* toggle_layer_visibility_item8;
202 GtkWidget* toggle_layer_visibility_item9;
203 GtkWidget* toggle_layer_visibility_item10;
206 GtkWidget* fit_to_window;
207 GtkWidget* backgroundColor;
208 GtkWidget *menuitem_view_render, *menuitem_view_render_menu;
209 GSList* menu_view_render_group;
210 GtkWidget *render_fast, *render_fast_xor, *render_normal, *render_hq;
211 GtkWidget *menuitem_view_unit, *menuitem_view_unit_menu;
212 GSList* menu_view_unit_group;
213 GtkWidget *unit_mil, *unit_mm, *unit_in;
214 GtkWidget* menuitem_layer;
215 GtkWidget* menuitem_layer_menu;
216 GtkWidget* layer_visibility;
217 GtkWidget* layer_visibility_all_on;
218 GtkWidget* layer_visibility_all_off;
219 GtkWidget* layer_invert;
220 GtkWidget* layer_color;
221 GtkWidget* layer_reload;
222 GtkWidget* layer_edit;
223 GtkWidget* layer_format;
225 GtkWidget* layer_down;
226 GtkWidget* layer_remove;
227 GtkWidget* menuitem_analyze;
228 GtkWidget* menuitem_analyze_menu;
229 GtkWidget* analyze_active_gerbers;
230 GtkWidget* analyze_active_drill;
231 GtkWidget* analyze_benchmark;
233 GtkWidget* menuitem_tools;
234 GtkWidget* menuitem_tools_menu;
235 GtkWidget* toggletoolbutton_pointer;
236 GtkWidget* pointer_tool;
237 GdkPixbuf* pointerpixbuf;
238 GtkWidget* pointerimage;
240 GtkWidget* zoom_tool;
241 GtkWidget* measure_tool;
242 GtkWidget* menuitem_help;
243 GtkWidget* layer_visibility_menu;
244 GtkWidget* layer_visibility_main_menu;
245 GtkWidget* menuitem_help_menu;
248 GtkWidget* bugs_menuitem;
250 GtkWidget* toolbar_hbox;
251 GtkWidget* handlebox;
252 GtkWidget* button_toolbar;
254 GtkWidget* toolbutton_new;
255 GtkWidget* toolbutton_open;
256 GtkWidget* toolbutton_revert;
257 GtkWidget* toolbutton_save;
258 GtkWidget* separatortoolitem1;
259 #if GTK_CHECK_VERSION(2, 10, 0)
260 GtkWidget* toolbutton_print;
261 GtkWidget* separatortoolitem2;
263 GtkWidget* toolbutton_zoom_in;
264 GtkWidget* toolbutton_zoom_out;
265 GtkWidget* toolbutton_zoom_fit;
271 GtkWidget* separatortoolitem4;
272 GtkWidget* toggletoolbutton_pan;
273 GtkWidget* toggletoolbutton_zoom;
274 GtkWidget* toggletoolbutton_measure;
276 GtkWidget* sidepane_vbox;
277 GtkWidget* sidepane_notebook;
280 GtkWidget* render_combobox;
281 GtkWidget* scrolledwindow1;
291 GtkWidget* Layer_label;
293 GtkWidget* messages_scrolledwindow;
294 GtkWidget* message_textview;
295 GtkWidget* clear_messages_button;
296 GtkWidget* Message_label;
298 GtkWidget* main_view_table;
302 GtkWidget* statusbar_label_left;
303 GtkWidget* statusUnitComboBox;
304 GtkWidget* statusbar_label_right;
305 GtkWidget *drawingarea, *hAdjustment, *vAdjustment, *hScrollbar, *vScrollbar;
307 GtkAccelGroup* accel_group;
308 GtkTooltips* tooltips;
311 GdkPixbuf* zoompixbuf;
312 GtkWidget* zoomimage;
313 GdkPixbuf* measurepixbuf;
314 GtkWidget* measureimage;
315 GdkPixbuf* movepixbuf;
316 GtkWidget* moveimage;
318 GtkWidget* tempImage;
320 gchar str_coord[MAX_COORDLEN];
322 const GtkTargetEntry dragTargetEntries[] = {
323 {
"text/uri-list", 0, 1},
326 GSettingsSchema* settings_schema = NULL;
327 const gchar* settings_id =
"org.geda-user.gerbv";
328 screen.settings = NULL;
332 GSettingsSchemaSource* settings_source = g_settings_schema_source_get_default();
333 if (NULL != settings_source) {
334 settings_schema = g_settings_schema_source_lookup(settings_source, settings_id, TRUE);
337 if (NULL != settings_schema) {
338 g_settings_schema_unref(settings_schema);
339 screen.settings = g_settings_new(settings_id);
342 pointerpixbuf = pixbuf_from_icon(&pointer);
343 movepixbuf = pixbuf_from_icon(&move);
344 zoompixbuf = pixbuf_from_icon(&lzoom);
345 measurepixbuf = pixbuf_from_icon(&ruler);
347 tooltips = gtk_tooltips_new();
348 accel_group = gtk_accel_group_new();
350 mainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
351 screen.win.topLevelWindow = mainWindow;
353 vbox1 = gtk_vbox_new(FALSE, 0);
354 gtk_container_add(GTK_CONTAINER(mainWindow), vbox1);
356 menubar1 = gtk_menu_bar_new();
357 gtk_box_pack_start(GTK_BOX(vbox1), menubar1, FALSE, FALSE, 0);
360 mainWindow, GTK_DEST_DEFAULT_ALL, dragTargetEntries, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK
362 gtk_signal_connect(GTK_OBJECT(mainWindow),
"drag-data-received", GTK_SIGNAL_FUNC(callbacks_file_drop_event), NULL);
365 menuitem_file = gtk_menu_item_new_with_mnemonic(_(
"_File"));
366 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_file);
368 menuitem_file_menu = gtk_menu_new();
369 gtk_menu_set_accel_group(GTK_MENU(menuitem_file_menu), accel_group);
370 gtk_menu_set_accel_path(GTK_MENU(menuitem_file_menu), ACCEL_FILE);
371 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_file), menuitem_file_menu);
375 open = gtk_menu_item_new_with_mnemonic(_(
"_Open"));
376 SET_ACCELS(open, ACCEL_FILE_OPEN_LAYER);
377 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), open);
378 gtk_tooltips_set_tip(
380 _(
"Open Gerbv project, Gerber, drill, "
381 "or pick&place files"),
385 save_layer = gtk_menu_item_new_with_mnemonic(_(
"_Save active layer"));
386 screen.win.curFileMenuItem[0] = save_layer;
387 gtk_tooltips_set_tip(tooltips, save_layer, _(
"Save the active layer"), NULL);
388 SET_ACCELS(save_layer, ACCEL_FILE_SAVE_LAYER);
389 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), save_layer);
391 save_as_layer = gtk_menu_item_new_with_mnemonic(_(
"Save active layer _as..."));
392 screen.win.curFileMenuItem[1] = save_as_layer;
393 gtk_tooltips_set_tip(tooltips, save_as_layer, _(
"Save the active layer to a new file"), NULL);
394 SET_ACCELS(save_as_layer, ACCEL_FILE_SAVE_LAYER_AS);
395 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), save_as_layer);
397 revert = gtk_image_menu_item_new_from_stock(GTK_STOCK_REVERT_TO_SAVED, NULL);
399 gtk_menu_item_set_label(GTK_MENU_ITEM(revert), _(
"_Revert all"));
400 screen.win.curFileMenuItem[2] = revert;
401 SET_ACCELS_FROM_STOCK(revert, GTK_STOCK_REVERT_TO_SAVED, ACCEL_FILE_REVERT);
402 gtk_tooltips_set_tip(tooltips, revert, _(
"Reload all layers"), NULL);
403 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), revert);
407 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), gtk_separator_menu_item_new());
409 menuitem_file_export = gtk_menu_item_new_with_mnemonic(_(
"_Export"));
410 screen.win.curFileMenuItem[3] = menuitem_file_export;
411 gtk_tooltips_set_tip(tooltips, menuitem_file_export, _(
"Export to a new format"), NULL);
412 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), menuitem_file_export);
414 menuitem_file_export_menu = gtk_menu_new();
415 gtk_menu_set_accel_group(GTK_MENU(menuitem_file_export_menu), accel_group);
416 gtk_menu_set_accel_path(GTK_MENU(menuitem_file_export_menu), ACCEL_FILE_EXPORT);
417 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_file_export), menuitem_file_export_menu);
419 png = gtk_menu_item_new_with_mnemonic(_(
"P_NG..."));
420 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), png);
421 gtk_tooltips_set_tip(tooltips, png, _(
"Export visible layers to a PNG file"), NULL);
423 pdf = gtk_menu_item_new_with_mnemonic(_(
"P_DF..."));
424 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), pdf);
425 gtk_tooltips_set_tip(tooltips, pdf, _(
"Export visible layers to a PDF file"), NULL);
427 svg = gtk_menu_item_new_with_mnemonic(_(
"_SVG..."));
428 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), svg);
429 gtk_tooltips_set_tip(tooltips, svg, _(
"Export visible layers to a SVG file"), NULL);
431 postscript = gtk_menu_item_new_with_mnemonic(_(
"_PostScript..."));
432 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), postscript);
433 gtk_tooltips_set_tip(tooltips, postscript, _(
"Export visible layers to a PostScript file"), NULL);
436 dxf = gtk_menu_item_new_with_mnemonic(_(
"D_XF..."));
437 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), dxf);
438 gtk_tooltips_set_tip(tooltips, dxf, _(
"Export active layer to a DXF file"), NULL);
441 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), gtk_separator_menu_item_new());
443 rs274x = gtk_menu_item_new_with_mnemonic(_(
"RS-274X (_Gerber)..."));
444 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), rs274x);
445 gtk_tooltips_set_tip(tooltips, rs274x, _(
"Export active layer to a RS-274X (Gerber) file"), NULL);
447 rs274xm = gtk_menu_item_new_with_mnemonic(_(
"RS-274X merge (Gerber)..."));
448 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), rs274xm);
449 gtk_tooltips_set_tip(
451 _(
"Export merged visible Gerber layers to "
452 "a RS-274X (Gerber) file"),
456 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), gtk_separator_menu_item_new());
458 drill = gtk_menu_item_new_with_mnemonic(_(
"_Excellon drill..."));
459 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), drill);
460 gtk_tooltips_set_tip(tooltips, drill, _(
"Export active layer to an Excellon drill file"), NULL);
462 drillm = gtk_menu_item_new_with_mnemonic(_(
"Excellon drill merge..."));
463 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), drillm);
464 gtk_tooltips_set_tip(
466 _(
"Export merged visible drill layers to "
467 "an Excellon drill file"),
471 idrill = gtk_menu_item_new_with_mnemonic(_(
"_ISEL NCP drill..."));
472 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), idrill);
473 gtk_tooltips_set_tip(tooltips, idrill, _(
"Export active layer to an ISEL Automation NCP drill file"), NULL);
475 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), gtk_separator_menu_item_new());
477 geda_pcb = gtk_menu_item_new_with_mnemonic(_(
"gEDA P_CB (beta)..."));
478 gtk_container_add(GTK_CONTAINER(menuitem_file_export_menu), geda_pcb);
479 gtk_tooltips_set_tip(tooltips, geda_pcb, _(
"Export active layer to a gEDA PCB file"), NULL);
483 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), gtk_separator_menu_item_new());
485 new_project = gtk_image_menu_item_new_with_mnemonic(_(
"_New project"));
486 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), new_project);
487 gtk_tooltips_set_tip(tooltips, new_project, _(
"Close all layers and start a new project"), NULL);
488 tempImage = gtk_image_new_from_stock(GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
489 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(new_project), tempImage);
491 save = gtk_image_menu_item_new_with_mnemonic(_(
"Save project"));
492 screen.win.curFileMenuItem[4] = save;
493 gtk_tooltips_set_tip(tooltips, save, _(
"Save the current project"), NULL);
494 tempImage = gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
495 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(save), tempImage);
496 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), save);
498 save_as = gtk_image_menu_item_new_with_mnemonic(_(
"Save project as..."));
499 screen.win.curFileMenuItem[5] = save_as;
500 gtk_tooltips_set_tip(tooltips, save_as, _(
"Save the current project to a new file"), NULL);
501 tempImage = gtk_image_new_from_stock(GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_MENU);
502 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(save_as), tempImage);
503 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), save_as);
507 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), gtk_separator_menu_item_new());
509 #if GTK_CHECK_VERSION(2, 10, 0)
510 if (gtk_stock_lookup(GTK_STOCK_PRINT, &stock)) {
511 gchar
new[] = N_(
"_Print...");
512 stock.label = _(
new);
513 gtk_stock_add(&stock, 1);
516 print = gtk_image_menu_item_new_from_stock(GTK_STOCK_PRINT, NULL);
517 screen.win.curFileMenuItem[6] = print;
518 SET_ACCELS_FROM_STOCK(print, GTK_STOCK_PRINT, ACCEL_FILE_PRINT);
519 gtk_tooltips_set_tip(tooltips, print, _(
"Print the visible layers"), NULL);
520 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), print);
521 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), gtk_separator_menu_item_new());
524 quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
525 SET_ACCELS_FROM_STOCK(quit, GTK_STOCK_QUIT, ACCEL_FILE_QUIT);
526 gtk_tooltips_set_tip(tooltips, quit, _(
"Quit Gerbv"), NULL);
527 gtk_container_add(GTK_CONTAINER(menuitem_file_menu), quit);
530 menuitem_edit = gtk_menu_item_new_with_mnemonic(_(
"_Edit"));
531 screen.win.curEditMenuItem = menuitem_edit;
532 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_edit);
534 menuitem_edit_menu = gtk_menu_new();
535 gtk_menu_set_accel_group(GTK_MENU(menuitem_edit_menu), accel_group);
536 gtk_menu_set_accel_path(GTK_MENU(menuitem_edit_menu), ACCEL_EDIT);
537 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_edit), menuitem_edit_menu);
539 properties_selected = gtk_image_menu_item_new_with_mnemonic(_(
"Display _properties of selected object(s)"));
540 SET_ACCELS_FROM_STOCK(properties_selected, GTK_STOCK_PROPERTIES, ACCEL_EDIT_PROPERTIES);
541 gtk_tooltips_set_tip(tooltips, properties_selected, _(
"Examine the properties of the selected object"), NULL);
542 tempImage = gtk_image_new_from_stock(GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
543 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(properties_selected), tempImage);
544 gtk_container_add(GTK_CONTAINER(menuitem_edit_menu), properties_selected);
546 delete_selected = gtk_image_menu_item_new_with_mnemonic(_(
"_Delete selected object(s)"));
547 SET_ACCELS_FROM_STOCK(delete_selected, GTK_STOCK_REMOVE, ACCEL_EDIT_DELETE);
548 gtk_tooltips_set_tip(tooltips, delete_selected, _(
"Delete selected objects"), NULL);
549 tempImage = gtk_image_new_from_stock(GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
550 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(delete_selected), tempImage);
551 gtk_container_add(GTK_CONTAINER(menuitem_edit_menu), delete_selected);
553 align = gtk_menu_item_new_with_mnemonic(_(
"_Align layers"));
554 screen.win.curEditAlingMenuItem = align;
555 gtk_tooltips_set_tip(tooltips, align, _(
"Align two layers by two selected objects"), NULL);
556 gtk_widget_set_sensitive(align, FALSE);
557 gtk_container_add(GTK_CONTAINER(menuitem_edit_menu), align);
559 align_layers = gtk_menu_new();
560 screen.win.curEditAlingItem[0] = gtk_menu_item_new_with_mnemonic(
"");
561 screen.win.curEditAlingItem[1] = gtk_menu_item_new_with_mnemonic(
"");
562 gtk_menu_item_set_submenu(GTK_MENU_ITEM(align), align_layers);
563 gtk_container_add(GTK_CONTAINER(align_layers), screen.win.curEditAlingItem[0]);
564 gtk_container_add(GTK_CONTAINER(align_layers), screen.win.curEditAlingItem[1]);
568 tempMenuItem = gtk_image_menu_item_new_with_label (_(
"Edit object properties"));
569 gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
570 gtk_tooltips_set_tip (tooltips, tempMenuItem, _(
"Edit the properties of the selected object"), NULL);
571 g_signal_connect ((gpointer) tempMenuItem,
"activate",
572 G_CALLBACK (callbacks_edit_object_properties_clicked), NULL);
574 tempMenuItem = gtk_image_menu_item_new_with_label (_(
"Move object(s)"));
575 gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
576 gtk_tooltips_set_tip (tooltips, tempMenuItem, _(
"Move the selected object(s)"),NULL);
577 g_signal_connect ((gpointer) tempMenuItem,
"activate",
578 G_CALLBACK (callbacks_move_objects_clicked), NULL);
580 tempMenuItem = gtk_image_menu_item_new_with_label (_(
"Reduce area"));
581 gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
582 gtk_tooltips_set_tip (tooltips, tempMenuItem, _(
"Reduce the area of the object (e.g. to prevent component floating)"),NULL);
583 g_signal_connect ((gpointer) tempMenuItem,
"activate",
584 G_CALLBACK (callbacks_reduce_object_area_clicked), NULL);
588 screen.win.drawWindowPopupMenu = menuitem_edit_menu;
591 menuitem_view = gtk_menu_item_new_with_mnemonic(_(
"_View"));
592 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_view);
594 menuitem_view_menu = gtk_menu_new();
595 gtk_menu_set_accel_group(GTK_MENU(menuitem_view_menu), accel_group);
596 gtk_menu_set_accel_path(GTK_MENU(menuitem_view_menu), ACCEL_VIEW);
597 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_view), menuitem_view_menu);
599 view_fullscreen = gtk_check_menu_item_new_with_mnemonic(_(
"Fullscr_een"));
600 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(view_fullscreen), FALSE);
601 gtk_tooltips_set_tip(tooltips, view_fullscreen, _(
"Toggle between fullscreen and normal view"), NULL);
602 SET_ACCELS(view_fullscreen, ACCEL_VIEW_FULLSCREEN);
603 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), view_fullscreen);
605 show_toolbar = gtk_check_menu_item_new_with_mnemonic(_(
"Show _Toolbar"));
606 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_toolbar), TRUE);
607 gtk_tooltips_set_tip(tooltips, show_toolbar, _(
"Toggle visibility of the toolbar"), NULL);
608 SET_ACCELS(show_toolbar, ACCEL_VIEW_TOOLBAR);
609 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), show_toolbar);
611 show_sidepane = gtk_check_menu_item_new_with_mnemonic(_(
"Show _Sidepane"));
612 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_sidepane), TRUE);
613 gtk_tooltips_set_tip(tooltips, show_sidepane, _(
"Toggle visibility of the sidepane"), NULL);
614 SET_ACCELS(show_sidepane, ACCEL_VIEW_SIDEPANE);
615 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), show_sidepane);
617 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), gtk_separator_menu_item_new());
619 layer_visibility_main_menu = gtk_menu_item_new_with_mnemonic(_(
"Toggle layer _visibility"));
620 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), layer_visibility_main_menu);
622 show_selection_on_invisible = gtk_check_menu_item_new_with_mnemonic(_(
"Show all se_lection"));
623 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_selection_on_invisible), FALSE);
624 gtk_tooltips_set_tip(tooltips, show_selection_on_invisible, _(
"Show selected objects on invisible layers"), NULL);
625 SET_ACCELS(show_selection_on_invisible, ACCEL_VIEW_ALL_SELECTION);
626 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), show_selection_on_invisible);
628 show_cross_on_drill_holes = gtk_check_menu_item_new_with_mnemonic(_(
"Show _cross on drill holes"));
629 gtk_tooltips_set_tip(tooltips, show_cross_on_drill_holes, _(
"Show cross on drill holes"), NULL);
630 SET_ACCELS(show_cross_on_drill_holes, ACCEL_VIEW_CROSS_ON_DRILL_HOLES);
631 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), show_cross_on_drill_holes);
632 if (screen.settings) {
634 screen.settings,
"cross-on-drill-holes", show_cross_on_drill_holes,
"active", G_SETTINGS_BIND_DEFAULT
637 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_cross_on_drill_holes));
640 layer_visibility_menu = gtk_menu_new();
641 gtk_menu_set_accel_group(GTK_MENU(layer_visibility_menu), accel_group);
642 gtk_menu_set_accel_path(GTK_MENU(layer_visibility_menu), ACCEL_VIEW_VIS);
643 gtk_menu_item_set_submenu(GTK_MENU_ITEM(layer_visibility_main_menu), layer_visibility_menu);
645 toggle_layer_visibility_item1 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 1"));
646 SET_ACCELS(toggle_layer_visibility_item1, ACCEL_VIEW_VIS_LAYER1);
647 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item1);
649 toggle_layer_visibility_item2 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 2"));
650 SET_ACCELS(toggle_layer_visibility_item2, ACCEL_VIEW_VIS_LAYER2);
651 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item2);
653 toggle_layer_visibility_item3 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 3"));
654 SET_ACCELS(toggle_layer_visibility_item3, ACCEL_VIEW_VIS_LAYER3);
655 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item3);
657 toggle_layer_visibility_item4 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 4"));
658 SET_ACCELS(toggle_layer_visibility_item4, ACCEL_VIEW_VIS_LAYER4);
659 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item4);
661 toggle_layer_visibility_item5 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 5"));
662 SET_ACCELS(toggle_layer_visibility_item5, ACCEL_VIEW_VIS_LAYER5);
663 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item5);
665 toggle_layer_visibility_item6 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 6"));
666 SET_ACCELS(toggle_layer_visibility_item6, ACCEL_VIEW_VIS_LAYER6);
667 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item6);
669 toggle_layer_visibility_item7 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 7"));
670 SET_ACCELS(toggle_layer_visibility_item7, ACCEL_VIEW_VIS_LAYER7);
671 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item7);
673 toggle_layer_visibility_item8 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 8"));
674 SET_ACCELS(toggle_layer_visibility_item8, ACCEL_VIEW_VIS_LAYER8);
675 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item8);
677 toggle_layer_visibility_item9 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 9"));
678 SET_ACCELS(toggle_layer_visibility_item9, ACCEL_VIEW_VIS_LAYER9);
679 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item9);
681 toggle_layer_visibility_item10 = gtk_menu_item_new_with_label(_(
"Toggle visibility of layer 10"));
682 SET_ACCELS(toggle_layer_visibility_item10, ACCEL_VIEW_VIS_LAYER10);
683 gtk_container_add(GTK_CONTAINER(layer_visibility_menu), toggle_layer_visibility_item10);
685 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), gtk_separator_menu_item_new());
687 zoom_in = gtk_image_menu_item_new_from_stock(GTK_STOCK_ZOOM_IN, NULL);
688 SET_ACCELS_FROM_STOCK(zoom_in, GTK_STOCK_ZOOM_IN, ACCEL_VIEW_ZOOM_IN);
689 gtk_tooltips_set_tip(tooltips, zoom_in, _(
"Zoom in"), NULL);
690 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), zoom_in);
692 zoom_out = gtk_image_menu_item_new_from_stock(GTK_STOCK_ZOOM_OUT, NULL);
693 SET_ACCELS_FROM_STOCK(zoom_out, GTK_STOCK_ZOOM_OUT, ACCEL_VIEW_ZOOM_OUT);
694 gtk_tooltips_set_tip(tooltips, zoom_out, _(
"Zoom out"), NULL);
695 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), zoom_out);
697 fit_to_window = gtk_image_menu_item_new_from_stock(GTK_STOCK_ZOOM_FIT, NULL);
698 gtk_tooltips_set_tip(tooltips, fit_to_window, _(
"Zoom to fit all visible layers in the window"), NULL);
699 SET_ACCELS_FROM_STOCK(fit_to_window, GTK_STOCK_ZOOM_FIT, ACCEL_VIEW_ZOOM_FIT);
700 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), fit_to_window);
702 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), gtk_separator_menu_item_new());
704 backgroundColor = gtk_image_menu_item_new_with_mnemonic(_(
"Background color"));
705 gtk_tooltips_set_tip(tooltips, backgroundColor, _(
"Change the background color"), NULL);
706 tempImage = gtk_image_new_from_stock(GTK_STOCK_SELECT_COLOR, GTK_ICON_SIZE_MENU);
707 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(backgroundColor), tempImage);
708 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), backgroundColor);
711 if (screen.settings && !screen.background_is_from_cmdline && !screen.background_is_from_project) {
714 clr = g_settings_get_uint(screen.settings,
"background-color");
723 menuitem_view_render = gtk_menu_item_new_with_mnemonic(_(
"_Rendering"));
724 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), menuitem_view_render);
726 menuitem_view_render_menu = gtk_menu_new();
727 gtk_menu_set_accel_group(GTK_MENU(menuitem_view_render_menu), accel_group);
728 gtk_menu_set_accel_path(GTK_MENU(menuitem_view_render_menu), ACCEL_VIEW_RENDER);
729 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_view_render), menuitem_view_render_menu);
731 menu_view_render_group = NULL;
733 render_fast = gtk_radio_menu_item_new_with_mnemonic(menu_view_render_group, _(
"_Fast"));
734 menu_view_render_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(render_fast));
735 gtk_container_add(GTK_CONTAINER(menuitem_view_render_menu), render_fast);
737 render_fast_xor = gtk_radio_menu_item_new_with_mnemonic(menu_view_render_group, _(
"Fast (_XOR)"));
738 menu_view_render_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(render_fast_xor));
739 gtk_container_add(GTK_CONTAINER(menuitem_view_render_menu), render_fast_xor);
741 render_normal = gtk_radio_menu_item_new_with_mnemonic(menu_view_render_group, _(
"_Normal"));
742 menu_view_render_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(render_normal));
743 gtk_container_add(GTK_CONTAINER(menuitem_view_render_menu), render_normal);
745 render_hq = gtk_radio_menu_item_new_with_mnemonic(menu_view_render_group, _(
"High _Quality"));
746 menu_view_render_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(render_hq));
747 gtk_container_add(GTK_CONTAINER(menuitem_view_render_menu), render_hq);
749 screen.win.menu_view_render_group = malloc(4 *
sizeof(GtkWidget*));
750 if (screen.win.menu_view_render_group == NULL)
751 GERB_FATAL_ERROR(
"malloc for rendering type synchronization failed in %s()", __FUNCTION__);
760 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(render_fast), TRUE);
762 menuitem_view_unit = gtk_menu_item_new_with_mnemonic(_(
"U_nits"));
763 gtk_container_add(GTK_CONTAINER(menuitem_view_menu), menuitem_view_unit);
765 menuitem_view_unit_menu = gtk_menu_new();
766 gtk_menu_set_accel_group(GTK_MENU(menuitem_view_unit_menu), accel_group);
767 gtk_menu_set_accel_path(GTK_MENU(menuitem_view_unit_menu), ACCEL_VIEW_UNITS);
768 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_view_unit), menuitem_view_unit_menu);
770 menu_view_unit_group = NULL;
772 unit_mil = gtk_radio_menu_item_new_with_mnemonic(menu_view_unit_group, _(
"mi_l"));
773 menu_view_unit_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(unit_mil));
774 gtk_container_add(GTK_CONTAINER(menuitem_view_unit_menu), unit_mil);
776 unit_mm = gtk_radio_menu_item_new_with_mnemonic(menu_view_unit_group, _(
"_mm"));
777 menu_view_unit_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(unit_mm));
778 gtk_container_add(GTK_CONTAINER(menuitem_view_unit_menu), unit_mm);
780 unit_in = gtk_radio_menu_item_new_with_mnemonic(menu_view_unit_group, _(
"_in"));
781 menu_view_unit_group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(unit_in));
782 gtk_container_add(GTK_CONTAINER(menuitem_view_unit_menu), unit_in);
784 screen.win.menu_view_unit_group = malloc(3 *
sizeof(GtkWidget*));
785 if (screen.win.menu_view_unit_group == NULL)
786 GERB_FATAL_ERROR(
"malloc for display unit synchronization failed in %s()", __FUNCTION__);
788 screen.win.menu_view_unit_group[GERBV_MILS] = GTK_CHECK_MENU_ITEM(unit_mil);
789 screen.win.menu_view_unit_group[GERBV_MMS] = GTK_CHECK_MENU_ITEM(unit_mm);
790 screen.win.menu_view_unit_group[GERBV_INS] = GTK_CHECK_MENU_ITEM(unit_in);
794 menuitem_layer = gtk_menu_item_new_with_mnemonic(_(
"_Layer"));
795 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_layer);
797 menuitem_layer_menu = gtk_menu_new();
798 gtk_menu_set_accel_group(GTK_MENU(menuitem_layer_menu), accel_group);
799 gtk_menu_set_accel_path(GTK_MENU(menuitem_layer_menu), ACCEL_LAYER);
800 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_layer), menuitem_layer_menu);
802 layer_visibility = gtk_menu_item_new_with_mnemonic(_(
"Toggle _visibility"));
803 gtk_tooltips_set_tip(tooltips, layer_visibility, _(
"Toggles the visibility of the active layer"), NULL);
804 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_visibility);
806 layer_visibility_all_on = gtk_image_menu_item_new_with_mnemonic(_(
"All o_n"));
807 SET_ACCELS(layer_visibility_all_on, ACCEL_LAYER_ALL_ON);
808 gtk_tooltips_set_tip(tooltips, layer_visibility_all_on, _(
"Turn on visibility of all layers"), NULL);
809 tempImage = gtk_image_new_from_stock(GTK_STOCK_YES, GTK_ICON_SIZE_MENU);
810 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_visibility_all_on), tempImage);
811 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_visibility_all_on);
813 layer_visibility_all_off = gtk_image_menu_item_new_with_mnemonic(_(
"All _off"));
814 SET_ACCELS(layer_visibility_all_off, ACCEL_LAYER_ALL_OFF);
815 gtk_tooltips_set_tip(tooltips, layer_visibility_all_off, _(
"Turn off visibility of all layers"), NULL);
816 tempImage = gtk_image_new_from_stock(GTK_STOCK_NO, GTK_ICON_SIZE_MENU);
817 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_visibility_all_off), tempImage);
818 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_visibility_all_off);
820 layer_invert = gtk_menu_item_new_with_mnemonic(_(
"_Invert color"));
821 gtk_tooltips_set_tip(tooltips, layer_invert, _(
"Invert the display polarity of the active layer"), NULL);
822 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_invert);
824 layer_color = gtk_image_menu_item_new_with_mnemonic(_(
"_Change color"));
825 SET_ACCELS(layer_color, ACCEL_LAYER_COLOR);
826 gtk_tooltips_set_tip(tooltips, layer_color, _(
"Change the display color of the active layer"), NULL);
827 tempImage = gtk_image_new_from_stock(GTK_STOCK_SELECT_COLOR, GTK_ICON_SIZE_MENU);
828 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_color), tempImage);
829 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_color);
831 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), gtk_separator_menu_item_new());
833 layer_reload = gtk_image_menu_item_new_with_mnemonic(_(
"_Reload layer"));
834 gtk_tooltips_set_tip(tooltips, layer_reload, _(
"Reload the active layer from disk"), NULL);
835 tempImage = gtk_image_new_from_stock(GTK_STOCK_REVERT_TO_SAVED, GTK_ICON_SIZE_MENU);
836 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_reload), tempImage);
837 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_reload);
839 layer_edit = gtk_image_menu_item_new_with_mnemonic(_(
"_Edit layer"));
840 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_edit);
841 gtk_tooltips_set_tip(tooltips, layer_edit, _(
"Translate, scale, rotate or mirror the active layer"), NULL);
842 tempImage = gtk_image_new_from_stock(GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
843 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_edit), tempImage);
845 layer_format = gtk_image_menu_item_new_with_mnemonic(_(
"Edit file _format"));
846 gtk_tooltips_set_tip(
847 tooltips, layer_format,
848 _(
"View and edit the numerical format used to parse "
852 tempImage = gtk_image_new_from_stock(GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
853 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_format), tempImage);
854 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_format);
856 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), gtk_separator_menu_item_new());
858 layer_up = gtk_image_menu_item_new_with_mnemonic(_(
"Move u_p"));
859 gtk_tooltips_set_tip(tooltips, layer_up, _(
"Move the active layer one step up"), NULL);
860 tempImage = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU);
861 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_up), tempImage);
862 SET_ACCELS(layer_up, ACCEL_LAYER_UP);
863 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_up);
865 layer_down = gtk_image_menu_item_new_with_mnemonic(_(
"Move dow_n"));
866 gtk_tooltips_set_tip(tooltips, layer_down, _(
"Move the active layer one step down"), NULL);
867 tempImage = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU);
868 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_down), tempImage);
869 SET_ACCELS(layer_down, ACCEL_LAYER_DOWN);
870 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_down);
872 layer_remove = gtk_image_menu_item_new_with_mnemonic(_(
"_Delete"));
873 gtk_tooltips_set_tip(tooltips, layer_remove, _(
"Remove the active layer"), NULL);
874 tempImage = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
875 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(layer_remove), tempImage);
876 SET_ACCELS(layer_remove, ACCEL_LAYER_DELETE);
877 gtk_container_add(GTK_CONTAINER(menuitem_layer_menu), layer_remove);
880 screen.win.curLayerMenuItem = menuitem_layer;
883 screen.win.layerTreePopupMenu = menuitem_layer_menu;
886 menuitem_analyze = gtk_menu_item_new_with_mnemonic(_(
"_Analyze"));
887 screen.win.curAnalyzeMenuItem = menuitem_analyze;
888 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_analyze);
890 screen.selectionInfo.selectedNodeArray = selection_new_array();
892 menuitem_analyze_menu = gtk_menu_new();
893 gtk_menu_set_accel_group(GTK_MENU(menuitem_analyze_menu), accel_group);
894 gtk_menu_set_accel_path(GTK_MENU(menuitem_analyze_menu), ACCEL_ANAL);
895 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_analyze), menuitem_analyze_menu);
897 analyze_active_gerbers = gtk_menu_item_new_with_mnemonic(_(
"Analyze visible _Gerber layers"));
898 gtk_tooltips_set_tip(
899 tooltips, analyze_active_gerbers,
900 _(
"Examine a detailed analysis of the contents "
901 "of all visible Gerber layers"),
904 gtk_container_add(GTK_CONTAINER(menuitem_analyze_menu), analyze_active_gerbers);
906 analyze_active_drill = gtk_menu_item_new_with_mnemonic(_(
"Analyze visible _drill layers"));
907 gtk_tooltips_set_tip(
908 tooltips, analyze_active_drill,
909 _(
"Examine a detailed analysis of the contents "
910 "of all visible drill layers"),
913 gtk_container_add(GTK_CONTAINER(menuitem_analyze_menu), analyze_active_drill);
915 analyze_benchmark = gtk_menu_item_new_with_mnemonic(_(
"_Benchmark"));
916 gtk_tooltips_set_tip(
917 tooltips, analyze_benchmark,
918 _(
"Benchmark different rendering methods. Will make "
919 "the application unresponsive for 1 minute!"),
922 gtk_container_add(GTK_CONTAINER(menuitem_analyze_menu), gtk_separator_menu_item_new());
923 gtk_container_add(GTK_CONTAINER(menuitem_analyze_menu), analyze_benchmark);
930 menuitem_tools = gtk_menu_item_new_with_mnemonic(_(
"_Tools"));
931 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_tools);
933 menuitem_tools_menu = gtk_menu_new();
934 gtk_menu_set_accel_group(GTK_MENU(menuitem_tools_menu), accel_group);
935 gtk_menu_set_accel_path(GTK_MENU(menuitem_tools_menu), ACCEL_TOOLS);
936 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_tools), menuitem_tools_menu);
937 pointer_tool = gtk_image_menu_item_new_with_mnemonic(_(
"_Pointer Tool"));
938 tempImage = gtk_image_new_from_pixbuf(pointerpixbuf);
939 gtk_image_menu_item_set_image((GtkImageMenuItem*)pointer_tool, tempImage);
940 SET_ACCELS(pointer_tool, ACCEL_TOOLS_POINTER);
941 gtk_container_add(GTK_CONTAINER(menuitem_tools_menu), pointer_tool);
942 gtk_tooltips_set_tip(tooltips, pointer_tool, _(
"Select objects on the screen"), NULL);
943 pan_tool = gtk_image_menu_item_new_with_mnemonic(_(
"Pa_n Tool"));
944 tempImage = gtk_image_new_from_pixbuf(movepixbuf);
945 gtk_image_menu_item_set_image((GtkImageMenuItem*)pan_tool, tempImage);
946 SET_ACCELS(pan_tool, ACCEL_TOOLS_PAN);
947 gtk_container_add(GTK_CONTAINER(menuitem_tools_menu), pan_tool);
948 gtk_tooltips_set_tip(tooltips, pan_tool, _(
"Pan by left clicking and dragging"), NULL);
950 zoom_tool = gtk_image_menu_item_new_with_mnemonic(_(
"_Zoom Tool"));
951 tempImage = gtk_image_new_from_pixbuf(zoompixbuf);
952 gtk_image_menu_item_set_image((GtkImageMenuItem*)zoom_tool, tempImage);
953 SET_ACCELS(zoom_tool, ACCEL_TOOLS_ZOOM);
954 gtk_container_add(GTK_CONTAINER(menuitem_tools_menu), zoom_tool);
955 gtk_tooltips_set_tip(tooltips, zoom_tool, _(
"Zoom by left clicking or dragging"), NULL);
957 measure_tool = gtk_image_menu_item_new_with_mnemonic(_(
"_Measure Tool"));
958 tempImage = gtk_image_new_from_pixbuf(measurepixbuf);
959 gtk_image_menu_item_set_image((GtkImageMenuItem*)measure_tool, tempImage);
960 SET_ACCELS(measure_tool, ACCEL_TOOLS_MEASURE);
961 gtk_container_add(GTK_CONTAINER(menuitem_tools_menu), measure_tool);
962 gtk_tooltips_set_tip(tooltips, measure_tool, _(
"Measure distances on the screen"), NULL);
964 menuitem_help = gtk_menu_item_new_with_mnemonic(_(
"_Help"));
965 gtk_container_add(GTK_CONTAINER(menubar1), menuitem_help);
967 menuitem_help_menu = gtk_menu_new();
968 gtk_menu_set_accel_group(GTK_MENU(menuitem_help_menu), accel_group);
969 gtk_menu_set_accel_path(GTK_MENU(menuitem_help_menu), ACCEL_HELP);
970 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_help), menuitem_help_menu);
978 about = gtk_image_menu_item_new_with_mnemonic(_(
"_About Gerbv..."));
979 gtk_container_add(GTK_CONTAINER(menuitem_help_menu), about);
980 gtk_tooltips_set_tip(tooltips, about, _(
"View information about Gerbv"), NULL);
981 image34 = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_MENU);
982 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(about), image34);
984 bugs_menuitem = gtk_image_menu_item_new_with_mnemonic(_(
"Known _bugs in this version..."));
985 tempImage = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_MENU);
986 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(bugs_menuitem), tempImage);
987 gtk_tooltips_set_tip(tooltips, bugs_menuitem, _(
"View list of known Gerbv bugs"), NULL);
988 gtk_container_add(GTK_CONTAINER(menuitem_help_menu), bugs_menuitem);
991 toolbar_hbox = gtk_hbox_new(FALSE, 0);
992 gtk_box_pack_start(GTK_BOX(vbox1), toolbar_hbox, FALSE, FALSE, 0);
994 handlebox = gtk_handle_box_new();
996 gtk_box_pack_start(GTK_BOX(toolbar_hbox), handlebox, TRUE, TRUE, 0);
998 button_toolbar = gtk_toolbar_new();
999 gtk_widget_set_size_request(button_toolbar, 500, -1);
1000 gtk_container_add(GTK_CONTAINER(handlebox), button_toolbar);
1001 gtk_toolbar_set_style(GTK_TOOLBAR(button_toolbar), GTK_TOOLBAR_ICONS);
1004 toolbutton_new = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_NEW);
1005 gtk_tooltips_set_tip(tooltips, toolbutton_new, _(
"Close all layers and start a new project"), NULL);
1006 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_new);
1008 toolbutton_open = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
1009 gtk_tooltips_set_tip(
1010 tooltips, toolbutton_open,
1011 _(
"Open Gerbv project, Gerber, drill, "
1012 "or pick&place files"),
1015 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_open);
1017 toolbutton_revert = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_REVERT_TO_SAVED);
1018 gtk_tooltips_set_tip(tooltips, toolbutton_revert, _(
"Reload all layers in project"), NULL);
1019 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_revert);
1021 toolbutton_save = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
1022 gtk_tooltips_set_tip(tooltips, toolbutton_save, _(
"Save the current project"), NULL);
1023 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_save);
1025 separatortoolitem1 = (GtkWidget*)gtk_separator_tool_item_new();
1026 gtk_container_add(GTK_CONTAINER(button_toolbar), separatortoolitem1);
1027 #if GTK_CHECK_VERSION(2, 10, 0)
1028 toolbutton_print = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_PRINT);
1029 gtk_tooltips_set_tip(tooltips, toolbutton_print, _(
"Print the visible layers"), NULL);
1030 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_print);
1032 separatortoolitem2 = (GtkWidget*)gtk_separator_tool_item_new();
1033 gtk_container_add(GTK_CONTAINER(button_toolbar), separatortoolitem2);
1035 toolbutton_zoom_in = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
1036 gtk_tooltips_set_tip(tooltips, toolbutton_zoom_in, _(
"Zoom in"), NULL);
1037 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_zoom_in);
1039 toolbutton_zoom_out = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
1040 gtk_tooltips_set_tip(tooltips, toolbutton_zoom_out, _(
"Zoom out"), NULL);
1041 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_zoom_out);
1043 toolbutton_zoom_fit = (GtkWidget*)gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);
1044 gtk_tooltips_set_tip(tooltips, toolbutton_zoom_fit, _(
"Zoom to fit all visible layers in the window"), NULL);
1045 gtk_container_add(GTK_CONTAINER(button_toolbar), toolbutton_zoom_fit);
1062 separatortoolitem4 = (GtkWidget*)gtk_separator_tool_item_new();
1063 gtk_container_add(GTK_CONTAINER(button_toolbar), separatortoolitem4);
1064 toggletoolbutton_pointer = (GtkWidget*)gtk_toggle_tool_button_new();
1065 pointerimage = gtk_image_new_from_pixbuf(pointerpixbuf);
1066 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_pointer), pointerimage);
1067 gtk_tooltips_set_tip(tooltips, toggletoolbutton_pointer, _(
"Select objects on the screen"), NULL);
1068 gtk_container_add(GTK_CONTAINER(button_toolbar), toggletoolbutton_pointer);
1069 toggletoolbutton_pan = (GtkWidget*)gtk_toggle_tool_button_new();
1070 moveimage = gtk_image_new_from_pixbuf(movepixbuf);
1071 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_pan), moveimage);
1072 gtk_tooltips_set_tip(tooltips, toggletoolbutton_pan, _(
"Pan by left clicking and dragging"), NULL);
1073 gtk_container_add(GTK_CONTAINER(button_toolbar), toggletoolbutton_pan);
1075 toggletoolbutton_zoom = (GtkWidget*)gtk_toggle_tool_button_new();
1076 zoomimage = gtk_image_new_from_pixbuf(zoompixbuf);
1077 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_zoom), zoomimage);
1078 gtk_tooltips_set_tip(tooltips, toggletoolbutton_zoom, _(
"Zoom by left clicking or dragging"), NULL);
1079 gtk_container_add(GTK_CONTAINER(button_toolbar), toggletoolbutton_zoom);
1081 toggletoolbutton_measure = (GtkWidget*)gtk_toggle_tool_button_new();
1082 measureimage = gtk_image_new_from_pixbuf(measurepixbuf);
1083 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_measure), measureimage);
1084 gtk_tooltips_set_tip(tooltips, toggletoolbutton_measure, _(
"Measure distances on the screen"), NULL);
1085 gtk_container_add(GTK_CONTAINER(button_toolbar), toggletoolbutton_measure);
1087 hpaned1 = gtk_hpaned_new();
1088 gtk_box_pack_start(GTK_BOX(vbox1), hpaned1, TRUE, TRUE, 0);
1089 gtk_paned_set_position(GTK_PANED(hpaned1), 225);
1091 sidepane_vbox = gtk_vbox_new(FALSE, 0);
1092 gtk_widget_set_size_request(sidepane_vbox, 150, -1);
1094 gtk_paned_pack1(GTK_PANED(hpaned1), sidepane_vbox, FALSE, FALSE);
1095 gtk_container_set_border_width(GTK_CONTAINER(sidepane_vbox), 5);
1097 sidepane_notebook = gtk_notebook_new();
1098 gtk_widget_set_size_request(sidepane_notebook, 100, -1);
1099 gtk_box_pack_start(GTK_BOX(sidepane_vbox), sidepane_notebook, TRUE, TRUE, 0);
1101 vbox10 = gtk_vbox_new(FALSE, 3);
1102 gtk_container_add(GTK_CONTAINER(sidepane_notebook), vbox10);
1103 gtk_widget_set_size_request(vbox10, 82, -1);
1104 gtk_container_set_border_width(GTK_CONTAINER(vbox10), 4);
1106 hbox4 = gtk_hbox_new(FALSE, 0);
1107 gtk_box_pack_start(GTK_BOX(vbox10), hbox4, FALSE, FALSE, 0);
1109 render_combobox = gtk_combo_box_new_text();
1110 gtk_box_pack_start(GTK_BOX(hbox4), render_combobox, TRUE, TRUE, 0);
1111 gtk_tooltips_set_tip(tooltips, render_combobox, _(
"Rendering type"), NULL);
1113 gtk_combo_box_append_text(GTK_COMBO_BOX(render_combobox), _(
"Fast"));
1114 gtk_combo_box_append_text(GTK_COMBO_BOX(render_combobox), _(
"Fast, with XOR"));
1115 gtk_combo_box_append_text(GTK_COMBO_BOX(render_combobox), _(
"Normal"));
1116 gtk_combo_box_append_text(GTK_COMBO_BOX(render_combobox), _(
"High quality"));
1118 if (screen.settings) {
1119 g_settings_bind(screen.settings,
"visual-rendering-type", render_combobox,
"active", G_SETTINGS_BIND_DEFAULT);
1122 screenRenderInfo.
renderType = gtk_combo_box_get_active(GTK_COMBO_BOX(render_combobox));
1124 gtk_check_menu_item_set_active(screen.win.menu_view_render_group[screenRenderInfo.
renderType], TRUE);
1127 gtk_combo_box_set_active(GTK_COMBO_BOX(render_combobox), screenRenderInfo.
renderType);
1130 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1131 gtk_box_pack_start(GTK_BOX(vbox10), scrolledwindow1, TRUE, TRUE, 0);
1132 gtk_container_set_border_width(GTK_CONTAINER(scrolledwindow1), 2);
1133 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1134 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow1), GTK_SHADOW_IN);
1136 hbox1 = gtk_hbox_new(TRUE, 0);
1137 gtk_box_pack_start(GTK_BOX(vbox10), hbox1, FALSE, FALSE, 0);
1139 button4 = gtk_button_new();
1140 gtk_box_pack_start(GTK_BOX(hbox1), button4, FALSE, TRUE, 0);
1142 image8 = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
1143 gtk_container_add(GTK_CONTAINER(button4), image8);
1144 gtk_tooltips_set_tip(
1146 _(
"Open Gerbv project, Gerber, drill, "
1147 "or pick&place files"),
1151 button5 = gtk_button_new();
1152 gtk_box_pack_start(GTK_BOX(hbox1), button5, FALSE, TRUE, 0);
1154 image9 = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_BUTTON);
1155 gtk_container_add(GTK_CONTAINER(button5), image9);
1156 gtk_tooltips_set_tip(tooltips, button5, _(
"Move the active layer one step down"), NULL);
1158 button6 = gtk_button_new();
1159 gtk_box_pack_start(GTK_BOX(hbox1), button6, FALSE, TRUE, 0);
1161 image10 = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_BUTTON);
1162 gtk_container_add(GTK_CONTAINER(button6), image10);
1163 gtk_tooltips_set_tip(tooltips, button6, _(
"Move the active layer one step up"), NULL);
1165 button7 = gtk_button_new();
1166 gtk_box_pack_start(GTK_BOX(hbox1), button7, FALSE, TRUE, 0);
1168 image11 = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_BUTTON);
1169 gtk_container_add(GTK_CONTAINER(button7), image11);
1170 gtk_tooltips_set_tip(tooltips, button7, _(
"Remove the active layer"), NULL);
1172 Layer_label = gtk_label_new(_(
"Layers"));
1173 gtk_notebook_set_tab_label(
1174 GTK_NOTEBOOK(sidepane_notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(sidepane_notebook), 0), Layer_label
1177 vbox11 = gtk_vbox_new(FALSE, 2);
1178 gtk_container_add(GTK_CONTAINER(sidepane_notebook), vbox11);
1179 gtk_container_set_border_width(GTK_CONTAINER(vbox11), 3);
1181 messages_scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
1182 gtk_box_pack_start(GTK_BOX(vbox11), messages_scrolledwindow, TRUE, TRUE, 0);
1183 gtk_scrolled_window_set_policy(
1184 GTK_SCROLLED_WINDOW(messages_scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC
1187 message_textview = gtk_text_view_new();
1188 gtk_container_add(GTK_CONTAINER(messages_scrolledwindow), message_textview);
1189 gtk_text_view_set_editable(GTK_TEXT_VIEW(message_textview), FALSE);
1190 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(message_textview), GTK_WRAP_WORD);
1191 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(message_textview), FALSE);
1193 clear_messages_button = gtk_button_new_from_stock(GTK_STOCK_CLEAR);
1194 gtk_tooltips_set_tip(tooltips, clear_messages_button, _(
"Clear all messages and accumulated sum"), NULL);
1195 gtk_box_pack_start(GTK_BOX(vbox11), clear_messages_button, FALSE, FALSE, 0);
1197 Message_label = gtk_label_new(_(
"Messages"));
1198 gtk_notebook_set_tab_label(
1199 GTK_NOTEBOOK(sidepane_notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(sidepane_notebook), 1), Message_label
1202 vbox2 = gtk_vbox_new(FALSE, 4);
1203 gtk_paned_pack2(GTK_PANED(hpaned1), vbox2, TRUE, FALSE);
1204 gtk_container_set_border_width(GTK_CONTAINER(vbox2), 4);
1206 main_view_table = gtk_table_new(3, 3, FALSE);
1207 gtk_box_pack_start(GTK_BOX(vbox2), main_view_table, TRUE, TRUE, 0);
1209 hRuler = gtk_hruler_new();
1211 GTK_TABLE(main_view_table), hRuler, 1, 2, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
1212 (GtkAttachOptions)(GTK_FILL), 0, 0
1214 gtk_ruler_set_range(GTK_RULER(hRuler), 0, 100, 8.56051, 1000);
1216 vRuler = gtk_vruler_new();
1218 GTK_TABLE(main_view_table), vRuler, 0, 1, 1, 2, (GtkAttachOptions)(GTK_FILL),
1219 (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0
1221 gtk_ruler_set_range(GTK_RULER(vRuler), 0, 100, 8.37341, 1000);
1223 drawingarea = gtk_drawing_area_new();
1225 GTK_TABLE(main_view_table), drawingarea, 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL),
1226 (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0
1229 hAdjustment = (GtkWidget*)gtk_adjustment_new(0.0, -1000.0, 1000.0, 1000.0, 1000.0, 500.0);
1230 vAdjustment = (GtkWidget*)gtk_adjustment_new(0.0, -1000.0, 1000.0, 1000.0, 1000.0, 500.0);
1232 hScrollbar = gtk_hscrollbar_new(GTK_ADJUSTMENT(hAdjustment));
1234 GTK_TABLE(main_view_table), hScrollbar, 1, 2, 2, 3, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL),
1238 vScrollbar = gtk_vscrollbar_new(GTK_ADJUSTMENT(vAdjustment));
1240 GTK_TABLE(main_view_table), vScrollbar, 2, 3, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL),
1244 hbox5 = gtk_hbox_new(FALSE, 10);
1245 gtk_box_pack_start(GTK_BOX(vbox2), hbox5, FALSE, FALSE, 0);
1247 statusbar_label_left = gtk_label_new(
"");
1248 gtk_box_pack_start(GTK_BOX(hbox5), statusbar_label_left, FALSE, FALSE, 0);
1249 gtk_label_set_justify(GTK_LABEL(statusbar_label_left), GTK_JUSTIFY_CENTER);
1251 statusUnitComboBox = gtk_combo_box_new_text();
1252 gtk_box_pack_start(GTK_BOX(hbox5), statusUnitComboBox, FALSE, FALSE, 0);
1253 gtk_combo_box_append_text(GTK_COMBO_BOX(statusUnitComboBox), _(
"mil"));
1254 gtk_combo_box_append_text(GTK_COMBO_BOX(statusUnitComboBox), _(
"mm"));
1255 gtk_combo_box_append_text(GTK_COMBO_BOX(statusUnitComboBox), _(
"in"));
1256 screen.win.statusUnitComboBox = statusUnitComboBox;
1259 int screen_unit_orig = screen.unit;
1262 gtk_combo_box_set_active(GTK_COMBO_BOX(statusUnitComboBox), screen_unit_orig);
1264 callbacks_statusbar_unit_combo_box_changed(GTK_COMBO_BOX(statusUnitComboBox), GINT_TO_POINTER(TRUE));
1267 if (screen.settings) {
1268 g_settings_bind(screen.settings,
"visual-unit", statusUnitComboBox,
"active", G_SETTINGS_BIND_DEFAULT);
1270 callbacks_statusbar_unit_combo_box_changed(GTK_COMBO_BOX(statusUnitComboBox), GINT_TO_POINTER(TRUE));
1274 if (screen.unit_is_from_cmdline) {
1275 gtk_combo_box_set_active(GTK_COMBO_BOX(statusUnitComboBox), screen_unit_orig);
1277 callbacks_statusbar_unit_combo_box_changed(GTK_COMBO_BOX(statusUnitComboBox), GINT_TO_POINTER(TRUE));
1280 statusbar_label_right = gtk_label_new(
"");
1281 gtk_box_pack_start(GTK_BOX(hbox5), statusbar_label_right, TRUE, TRUE, 0);
1282 gtk_label_set_ellipsize(GTK_LABEL(statusbar_label_right), PANGO_ELLIPSIZE_END);
1283 gtk_misc_set_alignment(GTK_MISC(statusbar_label_right), 0, 0.5);
1292 g_signal_connect((gpointer)revert,
"activate", G_CALLBACK(callbacks_revert_activate), NULL);
1293 g_signal_connect((gpointer)save_layer,
"activate", G_CALLBACK(callbacks_save_layer_activate), NULL);
1295 (gpointer)save_as_layer,
"activate", G_CALLBACK(callbacks_generic_save_activate),
1296 (gpointer)CALLBACKS_SAVE_LAYER_AS
1298 g_signal_connect((gpointer)save,
"activate", G_CALLBACK(callbacks_save_project_activate), NULL);
1300 (gpointer)save_as,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_PROJECT_AS
1303 (gpointer)png,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_PNG
1307 (gpointer)pdf,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_PDF
1310 (gpointer)svg,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_SVG
1313 (gpointer)postscript,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_PS
1316 (gpointer)geda_pcb,
"activate", G_CALLBACK(callbacks_generic_save_activate),
1317 (gpointer)CALLBACKS_SAVE_FILE_GEDA_PCB
1321 (gpointer)dxf,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_DXF
1325 (gpointer)rs274x,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_RS274X
1328 (gpointer)drill,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_DRILL
1331 (gpointer)idrill,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_IDRILL
1334 (gpointer)rs274xm,
"activate", G_CALLBACK(callbacks_generic_save_activate),
1335 (gpointer)CALLBACKS_SAVE_FILE_RS274XM
1338 (gpointer)drillm,
"activate", G_CALLBACK(callbacks_generic_save_activate), (gpointer)CALLBACKS_SAVE_FILE_DRILLM
1341 #if GTK_CHECK_VERSION(2, 10, 0)
1342 g_signal_connect((gpointer)print,
"activate", G_CALLBACK(callbacks_print_activate), NULL);
1347 g_signal_connect((gpointer)delete_selected,
"activate", G_CALLBACK(callbacks_delete_objects_clicked), NULL);
1349 (gpointer)properties_selected,
"activate", G_CALLBACK(callbacks_display_object_properties_clicked), NULL
1362 (gpointer)view_fullscreen,
"activate", G_CALLBACK(callbacks_fullscreen_toggled), GINT_TO_POINTER(0)
1364 g_signal_connect((gpointer)show_toolbar,
"toggled", G_CALLBACK(callbacks_show_toolbar_toggled), toolbar_hbox);
1365 g_signal_connect((gpointer)show_sidepane,
"toggled", G_CALLBACK(callbacks_show_sidepane_toggled), sidepane_vbox);
1367 (gpointer)show_selection_on_invisible,
"toggled", G_CALLBACK(callbacks_show_selection_on_invisible), NULL
1370 (gpointer)show_cross_on_drill_holes,
"toggled", G_CALLBACK(callbacks_show_cross_on_drill_holes), NULL
1412 g_signal_connect((gpointer)zoom_in,
"activate", G_CALLBACK(callbacks_zoom_in_activate), NULL);
1413 g_signal_connect((gpointer)zoom_out,
"activate", G_CALLBACK(callbacks_zoom_out_activate), NULL);
1414 g_signal_connect((gpointer)fit_to_window,
"activate", G_CALLBACK(callbacks_fit_to_window_activate), NULL);
1416 (gpointer)backgroundColor,
"activate", G_CALLBACK(callbacks_change_background_color_clicked), NULL
1419 (gpointer)unit_mil,
"activate", G_CALLBACK(callbacks_viewmenu_units_changed), GINT_TO_POINTER(GERBV_MILS)
1422 (gpointer)unit_mm,
"activate", G_CALLBACK(callbacks_viewmenu_units_changed), GINT_TO_POINTER(GERBV_MMS)
1425 (gpointer)unit_in,
"activate", G_CALLBACK(callbacks_viewmenu_units_changed), GINT_TO_POINTER(GERBV_INS)
1431 GINT_TO_POINTER(LAYER_SELECTED)
1435 GINT_TO_POINTER(LAYER_ALL_ON)
1439 GINT_TO_POINTER(LAYER_ALL_OFF)
1441 g_signal_connect((gpointer)layer_invert,
"activate", G_CALLBACK(callbacks_invert_layer_clicked), NULL);
1442 g_signal_connect((gpointer)layer_color,
"activate", G_CALLBACK(callbacks_change_layer_color_clicked), NULL);
1443 g_signal_connect((gpointer)layer_reload,
"activate", G_CALLBACK(callbacks_reload_layer_clicked), NULL);
1444 g_signal_connect((gpointer)layer_edit,
"activate", G_CALLBACK(callbacks_change_layer_edit_clicked), NULL);
1445 g_signal_connect((gpointer)layer_format,
"activate", G_CALLBACK(callbacks_change_layer_format_clicked), NULL);
1446 g_signal_connect((gpointer)layer_remove,
"activate", G_CALLBACK(callbacks_remove_layer_button_clicked), NULL);
1447 g_signal_connect((gpointer)layer_up,
"activate", G_CALLBACK(callbacks_move_layer_up_menu_activate), NULL);
1448 g_signal_connect((gpointer)layer_down,
"activate", G_CALLBACK(callbacks_move_layer_down_menu_activate), NULL);
1457 g_signal_connect((gpointer)analyze_benchmark,
"activate", G_CALLBACK(callbacks_benchmark_clicked), NULL);
1466 g_signal_connect((gpointer)pointer_tool,
"activate", G_CALLBACK(callbacks_change_tool), (gpointer)0);
1467 g_signal_connect((gpointer)pan_tool,
"activate", G_CALLBACK(callbacks_change_tool), (gpointer)1);
1468 g_signal_connect((gpointer)zoom_tool,
"activate", G_CALLBACK(callbacks_change_tool), (gpointer)2);
1469 g_signal_connect((gpointer)measure_tool,
"activate", G_CALLBACK(callbacks_change_tool), (gpointer)3);
1483 g_signal_connect((gpointer)toolbutton_save,
"clicked", G_CALLBACK(callbacks_save_project_activate), NULL);
1485 g_signal_connect((gpointer)toolbutton_revert,
"clicked", G_CALLBACK(callbacks_revert_activate), NULL);
1487 (gpointer)clear_messages_button,
"clicked", G_CALLBACK(callbacks_clear_messages_button_clicked), NULL
1489 #if GTK_CHECK_VERSION(2, 10, 0)
1490 g_signal_connect((gpointer)toolbutton_print,
"clicked", G_CALLBACK(callbacks_print_activate), NULL);
1492 g_signal_connect((gpointer)toolbutton_zoom_in,
"clicked", G_CALLBACK(callbacks_zoom_in_activate), NULL);
1493 g_signal_connect((gpointer)toolbutton_zoom_out,
"clicked", G_CALLBACK(callbacks_zoom_out_activate), NULL);
1494 g_signal_connect((gpointer)toolbutton_zoom_fit,
"clicked", G_CALLBACK(callbacks_fit_to_window_activate), NULL);
1495 g_signal_connect((gpointer)toggletoolbutton_pointer,
"clicked", G_CALLBACK(callbacks_change_tool), (gpointer)0);
1496 g_signal_connect((gpointer)toggletoolbutton_pan,
"clicked", G_CALLBACK(callbacks_change_tool), (gpointer)1);
1497 g_signal_connect((gpointer)toggletoolbutton_zoom,
"clicked", G_CALLBACK(callbacks_change_tool), (gpointer)2);
1498 g_signal_connect((gpointer)toggletoolbutton_measure,
"clicked", G_CALLBACK(callbacks_change_tool), (gpointer)3);
1501 (gpointer)statusUnitComboBox,
"changed", G_CALLBACK(callbacks_statusbar_unit_combo_box_changed), NULL
1504 g_signal_connect((gpointer)button4,
"clicked", G_CALLBACK(callbacks_add_layer_button_clicked), NULL);
1505 g_signal_connect((gpointer)button7,
"clicked", G_CALLBACK(callbacks_remove_layer_button_clicked), NULL);
1506 g_signal_connect((gpointer)button5,
"clicked", G_CALLBACK(callbacks_move_layer_down_button_clicked), NULL);
1507 g_signal_connect((gpointer)button6,
"clicked", G_CALLBACK(callbacks_move_layer_up_button_clicked), NULL);
1509 g_signal_connect((gpointer)hAdjustment,
"value-changed", G_CALLBACK(callbacks_hadjustment_value_changed), NULL);
1510 g_signal_connect((gpointer)vAdjustment,
"value-changed", G_CALLBACK(callbacks_vadjustment_value_changed), NULL);
1511 g_signal_connect((gpointer)hScrollbar,
"button-press-event", G_CALLBACK(callbacks_scrollbar_button_pressed), NULL);
1513 (gpointer)hScrollbar,
"button-release-event", G_CALLBACK(callbacks_scrollbar_button_released), NULL
1515 g_signal_connect((gpointer)vScrollbar,
"button-press-event", G_CALLBACK(callbacks_scrollbar_button_pressed), NULL);
1517 (gpointer)vScrollbar,
"button-release-event", G_CALLBACK(callbacks_scrollbar_button_released), NULL
1520 gtk_window_add_accel_group(GTK_WINDOW(mainWindow), accel_group);
1522 GtkListStore* list_store;
1524 list_store = gtk_list_store_new(4, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
1528 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
1529 GtkCellRenderer* renderer;
1530 GtkTreeViewColumn* column;
1532 renderer = gtk_cell_renderer_toggle_new();
1533 column = gtk_tree_view_column_new_with_attributes(
"Visible", renderer,
"active", 0, NULL);
1534 gtk_tree_view_column_set_min_width((GtkTreeViewColumn*)column, 25);
1535 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
1537 renderer = gtk_cell_renderer_pixbuf_new();
1538 column = gtk_tree_view_column_new_with_attributes(
"Color", renderer,
"pixbuf", 1, NULL);
1539 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
1541 renderer = gtk_cell_renderer_text_new();
1542 g_object_set(G_OBJECT(renderer),
"foreground",
"red",
"xalign", 0.5,
"family",
"Times",
"size-points", 12.0, NULL);
1543 column = gtk_tree_view_column_new_with_attributes(
"Modified", renderer,
"text", 3, NULL);
1544 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
1545 gtk_tree_view_column_set_min_width((GtkTreeViewColumn*)column, 20);
1547 renderer = gtk_cell_renderer_text_new();
1548 column = gtk_tree_view_column_new_with_attributes(
"Name", renderer,
"markup", 2, NULL);
1549 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
1551 gtk_tree_view_set_headers_visible((GtkTreeView*)tree, FALSE);
1552 gtk_signal_connect(GTK_OBJECT(tree),
"key-press-event", GTK_SIGNAL_FUNC(callbacks_layer_tree_key_press), NULL);
1554 GTK_OBJECT(tree),
"button-press-event", GTK_SIGNAL_FUNC(callbacks_layer_tree_button_press), NULL
1556 gtk_container_add(GTK_CONTAINER(scrolledwindow1), tree);
1558 GtkTreeSelection* selection;
1559 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
1560 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
1561 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tree), FALSE);
1562 gtk_tree_view_set_reorderable(GTK_TREE_VIEW(tree), TRUE);
1564 g_signal_connect(G_OBJECT(list_store),
"row-inserted", G_CALLBACK(callbacks_layer_tree_row_inserted), NULL);
1566 gtk_widget_grab_focus(tree);
1571 GTK_OBJECT(drawingarea),
"expose_event", GTK_SIGNAL_FUNC(callbacks_drawingarea_expose_event), NULL
1574 GTK_OBJECT(drawingarea),
"configure_event", GTK_SIGNAL_FUNC(callbacks_drawingarea_configure_event), NULL
1577 GTK_OBJECT(drawingarea),
"motion_notify_event", GTK_SIGNAL_FUNC(callbacks_drawingarea_motion_notify_event), NULL
1580 GTK_OBJECT(drawingarea),
"button_press_event", GTK_SIGNAL_FUNC(callbacks_drawingarea_button_press_event), NULL
1583 GTK_OBJECT(drawingarea),
"button_release_event", GTK_SIGNAL_FUNC(callbacks_drawingarea_button_release_event),
1586 gtk_signal_connect_after(
1587 GTK_OBJECT(mainWindow),
"key_press_event", GTK_SIGNAL_FUNC(callbacks_window_key_press_event), NULL
1589 gtk_signal_connect_after(
1590 GTK_OBJECT(mainWindow),
"key_release_event", GTK_SIGNAL_FUNC(callbacks_window_key_release_event), NULL
1592 gtk_signal_connect_after(
1593 GTK_OBJECT(mainWindow),
"scroll_event", GTK_SIGNAL_FUNC(callbacks_window_scroll_event), NULL
1595 gtk_signal_connect_after(GTK_OBJECT(mainWindow),
"delete_event", GTK_SIGNAL_FUNC(
callbacks_quit_activate), NULL);
1597 gtk_widget_set_events(
1598 drawingarea, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK
1599 | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_POINTER_MOTION_MASK
1600 | GDK_POINTER_MOTION_HINT_MASK | GDK_SCROLL_MASK
1607 GdkColor zoom_outline_color = { 0, 50000, 50000, 50000 };
1608 GdkColor dist_measure_color = { 0, 60000, 30000, 65000 };
1609 GdkColor selection_color = { 0, 65000, 65000, 65000 };
1611 screen.zoom_outline_color = zoom_outline_color;
1612 screen.dist_measure_color = dist_measure_color;
1613 screen.selection_color = selection_color;
1615 screen.length_sum = 0;
1617 screen.drawing_area = drawingarea;
1618 screen.win.hAdjustment = hAdjustment;
1619 screen.win.vAdjustment = vAdjustment;
1620 screen.win.hRuler = hRuler;
1621 screen.win.vRuler = vRuler;
1622 screen.win.sidepane_notebook = sidepane_notebook;
1623 screen.win.sidepaneRenderComboBox = GTK_COMBO_BOX(render_combobox);
1624 screen.win.toolButtonPointer = toggletoolbutton_pointer;
1625 screen.win.toolButtonPan = toggletoolbutton_pan;
1626 screen.win.toolButtonZoom = toggletoolbutton_zoom;
1627 screen.win.toolButtonMeasure = toggletoolbutton_measure;
1630 gtk_tooltips_enable(tooltips);
1636 if (req_width != -1 && req_height != -1) {
1638 height = req_height;
1643 screen = gdk_screen_get_default();
1644 nmonitors = gdk_screen_get_n_monitors(screen);
1646 width = gdk_screen_get_width(screen) * 3 / 4 / nmonitors;
1647 height = gdk_screen_get_height(screen) * 3 / 4 / nmonitors;
1650 gtk_window_set_default_size(GTK_WINDOW(mainWindow), width, height);
1653 if (screen.settings && req_width == -1 && req_height == -1) {
1659 var = g_settings_get_value(screen.settings,
"window-size");
1660 xy = g_variant_get_fixed_array(var, &num,
sizeof(*xy));
1662 gtk_window_set_default_size(GTK_WINDOW(mainWindow), xy[0], xy[1]);
1663 g_variant_unref(var);
1665 var = g_settings_get_value(screen.settings,
"window-position");
1666 xy = g_variant_get_fixed_array(var, &num,
sizeof(*xy));
1668 gtk_window_move(GTK_WINDOW(mainWindow), xy[0], xy[1]);
1669 g_variant_unref(var);
1671 is_max = g_settings_get_boolean(screen.settings,
"window-maximized");
1673 gtk_window_maximize(GTK_WINDOW(mainWindow));
1676 g_object_set(G_OBJECT(gtk_settings_get_default()),
"gtk-can-change-accels", TRUE, NULL);
1677 interface_load_accels();
1679 gtk_widget_show_all(mainWindow);
1681 screen.win.messageTextView = message_textview;
1682 screen.win.statusMessageLeft = statusbar_label_left;
1683 screen.win.statusMessageRight = statusbar_label_right;
1684 screen.win.layerTree = tree;
1685 screen.win.treeIsUpdating = FALSE;
1689 str_coord, MAX_COORDLEN, _(gerbv_coords_pattern_mils_str),
1690 COORD2MILS(-screenRenderInfo.
displayWidth / 2.0 / GERBV_SCALE_MIN),
1691 COORD2MILS(-screenRenderInfo.
displayHeight / 2.0 / GERBV_SCALE_MIN)
1694 request_label_max_size_by_text(screen.win.statusMessageLeft, str_coord);
1696 callbacks_change_tool(NULL, (gpointer)0);
1697 rename_main_window(
"", mainWindow);
1699 set_window_icon(mainWindow);
1700 callbacks_update_layer_tree();
1704 NULL, G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION | G_LOG_LEVEL_MASK, callbacks_handle_log_messages, NULL
1708 extern GArray* log_array_tmp;
1709 struct log_struct log_item;
1711 for (guint i = 0; i < log_array_tmp->len; i++) {
1712 log_item = g_array_index(log_array_tmp,
struct log_struct, i);
1713 callbacks_handle_log_messages(log_item.domain, log_item.level, log_item.message, NULL);
1714 g_free(log_item.domain);
1715 g_free(log_item.message);
1717 g_array_free(log_array_tmp, TRUE);
1722 (gpointer)render_fast,
"activate", G_CALLBACK(callbacks_viewmenu_rendertype_changed),
1726 (gpointer)render_fast_xor,
"activate", G_CALLBACK(callbacks_viewmenu_rendertype_changed),
1730 (gpointer)render_normal,
"activate", G_CALLBACK(callbacks_viewmenu_rendertype_changed),
1734 (gpointer)render_hq,
"activate", G_CALLBACK(callbacks_viewmenu_rendertype_changed),
1738 (gpointer)render_combobox,
"changed", G_CALLBACK(callbacks_sidepane_render_type_combo_box_changed), NULL
1741 interface_save_accels();
1746 interface_set_render_type(
int t) {
1755 if (!screen.win.sidepaneRenderComboBox)
1758 gtk_combo_box_set_active(GTK_COMBO_BOX(screen.win.sidepaneRenderComboBox), t);
1759 gtk_check_menu_item_set_active(screen.win.menu_view_render_group[t], TRUE);
1773 const gchar* primaryText,
const gchar* secondaryText, gboolean show_checkbox, gboolean* ask_to_show_again,
1774 const gchar* true_button_label,
const gchar* false_button_label
1782 GtkWidget* dialog_vbox1;
1786 GtkWidget* checkbox = NULL;
1787 GtkWidget* dialog_action_area1;
1788 GtkWidget *true_button, *false_button;
1789 gboolean returnVal = FALSE;
1791 dialog1 = gtk_dialog_new();
1792 gtk_window_set_title(GTK_WINDOW(dialog1), _(
"Gerbv Alert"));
1793 gtk_container_set_border_width(GTK_CONTAINER(dialog1), 6);
1794 gtk_window_set_resizable(GTK_WINDOW(dialog1), FALSE);
1795 gtk_window_set_type_hint(GTK_WINDOW(dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
1796 gtk_dialog_set_has_separator(GTK_DIALOG(dialog1), FALSE);
1798 dialog_vbox1 = GTK_DIALOG(dialog1)->vbox;
1800 hbox1 = gtk_hbox_new(FALSE, 12);
1801 gtk_box_pack_start(GTK_BOX(dialog_vbox1), hbox1, TRUE, TRUE, 0);
1802 gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6);
1804 image1 = gtk_image_new_from_icon_name(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
1805 gtk_box_pack_start(GTK_BOX(hbox1), image1, TRUE, TRUE, 0);
1806 gtk_misc_set_alignment(GTK_MISC(image1), 0.5, 0);
1808 gchar* labelMessage = g_strconcat(
1809 "<span weight=\"bold\" size=\"larger\">", _(primaryText),
"</span>\n<span/>\n", _(secondaryText), NULL
1811 label1 = gtk_label_new(labelMessage);
1812 g_free(labelMessage);
1813 GtkWidget* vbox9 = gtk_vbox_new(FALSE, 0);
1814 gtk_box_pack_start(GTK_BOX(vbox9), label1, FALSE, FALSE, 0);
1815 gtk_box_pack_start(GTK_BOX(hbox1), vbox9, FALSE, FALSE, 0);
1816 gtk_label_set_use_markup(GTK_LABEL(label1), TRUE);
1817 gtk_label_set_line_wrap(GTK_LABEL(label1), TRUE);
1821 GtkWidget* hbox2 = gtk_hbox_new(FALSE, 12);
1822 if (show_checkbox) {
1823 GtkWidget* label3 = gtk_label_new(
" ");
1825 checkbox = gtk_check_button_new_with_label(_(
"Do not show this dialog again."));
1826 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), FALSE);
1827 gtk_box_pack_start(GTK_BOX(hbox2), label3, FALSE, FALSE, 0);
1828 gtk_box_pack_start(GTK_BOX(hbox2), checkbox, FALSE, FALSE, 0);
1830 gtk_box_pack_start(GTK_BOX(vbox9), hbox2, FALSE, FALSE, 12);
1832 dialog_action_area1 = GTK_DIALOG(dialog1)->action_area;
1833 gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area1), GTK_BUTTONBOX_END);
1835 if (false_button_label) {
1836 false_button = gtk_button_new_from_stock(false_button_label);
1837 gtk_dialog_add_action_widget(GTK_DIALOG(dialog1), false_button, GTK_RESPONSE_CANCEL);
1838 GTK_WIDGET_SET_FLAGS(false_button, GTK_CAN_DEFAULT);
1839 gtk_widget_grab_default(false_button);
1840 gtk_widget_grab_focus(false_button);
1843 if (true_button_label) {
1844 true_button = gtk_button_new_from_stock(true_button_label);
1845 gtk_dialog_add_action_widget(GTK_DIALOG(dialog1), true_button, GTK_RESPONSE_OK);
1846 GTK_WIDGET_SET_FLAGS(true_button, GTK_CAN_DEFAULT);
1849 gtk_widget_show_all(dialog1);
1851 if (gtk_dialog_run((GtkDialog*)dialog1) == GTK_RESPONSE_OK) {
1853 if ((show_checkbox == TRUE) && (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)) == TRUE)
1854 && (ask_to_show_again != NULL)) {
1857 *ask_to_show_again = FALSE;
1861 gtk_widget_destroy(dialog1);
1867 interface_reopen_question_callback_select_all(GtkWidget* checkbox, gpointer user_data) {
1870 if (gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON(checkbox)))
1871 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), TRUE);
1873 gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbox), FALSE);
1875 for (GSList* cb = user_data; cb; cb = cb->next) {
1876 gtk_toggle_button_set_active(cb->data, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)));
1880 struct interface_reopen_question_struct {
1881 GtkWidget* set_all_checkbox;
1882 GSList* checkbox_list;
1886 interface_reopen_question_callback_checkbox(GtkWidget* checkbox, gpointer user_data) {
1887 struct interface_reopen_question_struct* st = user_data;
1888 gboolean all_set = TRUE, all_clear = TRUE;
1890 if (st->set_all_checkbox == NULL)
1893 for (GSList* cb = st->checkbox_list; cb; cb = cb->next) {
1894 if (gtk_toggle_button_get_active(cb->data))
1900 gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(st->set_all_checkbox), FALSE);
1903 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(st->set_all_checkbox), TRUE);
1905 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(st->set_all_checkbox), FALSE);
1907 gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(st->set_all_checkbox), TRUE);
1912 interface_reopen_question_add_filename_checkboxes(
1913 GSList* fns, GSList* fns_is_mod, GSList* fns_cnt, GSList* fns_lay_num, GtkWidget* box
1915 GtkWidget *scrl_win, *vbox;
1916 GSList* checkboxes = NULL;
1918 scrl_win = gtk_scrolled_window_new(NULL, NULL);
1919 gtk_box_pack_start(GTK_BOX(box), scrl_win, TRUE, TRUE, 0);
1920 gtk_container_set_border_width(GTK_CONTAINER(scrl_win), 2);
1921 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrl_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1923 vbox = gtk_vbox_new(FALSE, 2);
1924 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrl_win), vbox);
1926 for (
unsigned int i = 0; i < g_slist_length(fns); i++) {
1928 GString* g_str = g_string_new(NULL);
1929 gchar* bn = g_path_get_basename(g_slist_nth_data(fns, i));
1930 int cnt = GPOINTER_TO_INT(g_slist_nth_data(fns_cnt, i));
1931 int lay_num = 1 + GPOINTER_TO_INT(g_slist_nth_data(fns_lay_num, i));
1933 if (GPOINTER_TO_INT(g_slist_nth_data(fns_is_mod, i))) {
1939 "<b>%d</b> *<i>%s</i> (<b>changed</b>, %d layer)",
1940 "<b>%d</b> *<i>%s</i> (<b>changed</b>, %d layers)", cnt
1945 g_string_printf(g_str, _(
"<b>%d</b> *<i>%s</i> (<b>changed</b>)"), lay_num, bn);
1950 g_str, ngettext(
"<b>%d</b> %s (%d layer)",
"<b>%d</b> %s (%d layers)", cnt), lay_num, bn, cnt
1953 g_string_printf(g_str, _(
"<b>%d</b> %s"), lay_num, bn);
1957 cb = gtk_check_button_new_with_label(
"");
1958 gtk_label_set_markup(GTK_LABEL(gtk_bin_get_child(GTK_BIN(cb))), g_str->str);
1959 g_string_free(g_str, TRUE);
1960 checkboxes = g_slist_append(checkboxes, cb);
1961 gtk_box_pack_start(GTK_BOX(vbox), cb, FALSE, FALSE, 0);
1978 GtkWidget * hbox, *vbox_main, *image, *selectAllCheckBox = NULL;
1979 GSList* fnCheckButtons = NULL;
1980 GtkWidget * label, *reloadButton, *openAsNewButton;
1981 struct interface_reopen_question_struct checkboxes_struct;
1982 GString* g_str = g_string_new(NULL);
1986 fns_len = g_slist_length(fns);
1988 return GTK_RESPONSE_NONE;
1990 dialog = GTK_DIALOG(gtk_dialog_new());
1991 gtk_window_set_title(GTK_WINDOW(dialog), _(
"Gerbv — Reload Files"));
1992 gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
1993 gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
1994 gtk_dialog_set_has_separator(dialog, FALSE);
1996 hbox = gtk_hbox_new(FALSE, 12);
1997 gtk_box_pack_start(GTK_BOX(dialog->vbox), hbox, TRUE, TRUE, 0);
1998 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
2000 image = gtk_image_new_from_icon_name(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
2001 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
2002 gtk_misc_set_alignment(GTK_MISC(image), 0, 0);
2004 vbox_main = gtk_vbox_new(FALSE, 0);
2005 gtk_box_pack_start(GTK_BOX(hbox), vbox_main, TRUE, TRUE, 0);
2007 g_string_printf(g_str,
"<span size=\"larger\">");
2008 g_string_append_printf(
2010 ngettext(
"%u file is already loaded from directory",
"%u files are already loaded from directory", fns_len),
2013 g_string_append_printf(g_str,
"</span>\n\"%s\"", g_path_get_dirname(fns->data));
2016 label = gtk_label_new(g_str->str);
2017 gtk_box_pack_start(GTK_BOX(vbox_main), label, FALSE, FALSE, 0);
2018 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
2019 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
2020 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
2021 gtk_label_set_selectable(GTK_LABEL(label), TRUE);
2022 g_string_free(g_str, TRUE);
2025 interface_reopen_question_add_filename_checkboxes(fns, fns_is_mod, fns_cnt, fns_lay_num, vbox_main);
2029 selectAllCheckBox = gtk_check_button_new_with_mnemonic(_(
"Select _all"));
2032 (gpointer)selectAllCheckBox,
"toggled", G_CALLBACK(interface_reopen_question_callback_select_all),
2036 gtk_box_pack_start(GTK_BOX(vbox_main), selectAllCheckBox, FALSE, FALSE, 0);
2041 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(selectAllCheckBox), TRUE);
2044 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fnCheckButtons->data), TRUE);
2047 checkboxes_struct.checkbox_list = fnCheckButtons;
2048 checkboxes_struct.set_all_checkbox = selectAllCheckBox;
2051 for (GSList* cb = checkboxes_struct.checkbox_list; cb; cb = cb->next) {
2053 (gpointer)cb->data,
"toggled", G_CALLBACK(interface_reopen_question_callback_checkbox), &checkboxes_struct
2057 gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog->action_area), GTK_BUTTONBOX_END);
2059 reloadButton = gtk_button_new_with_mnemonic(_(
"_Reload"));
2060 gtk_widget_set_tooltip_text(reloadButton, _(
"Reload layers with selected files"));
2061 gtk_dialog_add_action_widget(dialog, reloadButton, GTK_RESPONSE_YES);
2062 GTK_WIDGET_SET_FLAGS(reloadButton, GTK_CAN_DEFAULT);
2064 openAsNewButton = gtk_button_new_with_mnemonic(_(
"Add as _new"));
2065 gtk_widget_set_tooltip_text(openAsNewButton, _(
"Add selected files as new layers"));
2066 gtk_dialog_add_action_widget(dialog, openAsNewButton, GTK_RESPONSE_OK);
2068 gtk_dialog_add_action_widget(dialog, gtk_button_new_from_stock(GTK_STOCK_CANCEL), GTK_RESPONSE_CANCEL);
2070 gtk_widget_show_all(GTK_WIDGET(dialog));
2072 ret = gtk_dialog_run(dialog);
2075 for (GSList *cb = fnCheckButtons, *fn = fns; cb && fn; cb = cb->next, fn = fn->next) {
2076 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb->data)))
2080 g_slist_free_full(fnCheckButtons, (GDestroyNotify)gtk_widget_destroy);
2081 gtk_widget_destroy(GTK_WIDGET(dialog));
2094 gchar* primaryText, gchar* secondaryText, gboolean show_checkbox, gboolean* ask_to_show_again
2101 GtkWidget* dialog_vbox1;
2105 GtkWidget* checkbox = NULL;
2106 GtkWidget* dialog_action_area1;
2107 GtkWidget* okbutton1;
2109 dialog1 = gtk_dialog_new();
2110 gtk_container_set_border_width(GTK_CONTAINER(dialog1), 6);
2111 gtk_window_set_resizable(GTK_WINDOW(dialog1), FALSE);
2112 gtk_window_set_type_hint(GTK_WINDOW(dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
2113 gtk_dialog_set_has_separator(GTK_DIALOG(dialog1), FALSE);
2115 dialog_vbox1 = GTK_DIALOG(dialog1)->vbox;
2117 hbox1 = gtk_hbox_new(FALSE, 12);
2118 gtk_box_pack_start(GTK_BOX(dialog_vbox1), hbox1, TRUE, TRUE, 0);
2119 gtk_container_set_border_width(GTK_CONTAINER(hbox1), 6);
2121 image1 = gtk_image_new_from_icon_name(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
2122 gtk_box_pack_start(GTK_BOX(hbox1), image1, TRUE, TRUE, 0);
2123 gtk_misc_set_alignment(GTK_MISC(image1), 0.5, 0);
2125 gchar* labelMessage = g_strconcat(
2126 "<span weight=\"bold\" size=\"larger\">", _(primaryText),
"</span>\n<span/>\n", _(secondaryText), NULL
2128 label1 = gtk_label_new(labelMessage);
2129 g_free(labelMessage);
2131 GtkWidget* vbox9 = gtk_vbox_new(FALSE, 0);
2132 gtk_box_pack_start(GTK_BOX(vbox9), label1, FALSE, FALSE, 0);
2133 gtk_label_set_use_markup(GTK_LABEL(label1), TRUE);
2134 gtk_label_set_line_wrap(GTK_LABEL(label1), TRUE);
2135 gtk_box_pack_start(GTK_BOX(hbox1), vbox9, FALSE, FALSE, 0);
2137 GtkWidget* hbox2 = gtk_hbox_new(FALSE, 12);
2138 if (show_checkbox) {
2139 GtkWidget* label3 = gtk_label_new(
" ");
2141 checkbox = gtk_check_button_new_with_label(_(
"Do not show this dialog again."));
2142 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), FALSE);
2143 gtk_box_pack_start(GTK_BOX(hbox2), label3, FALSE, FALSE, 0);
2144 gtk_box_pack_start(GTK_BOX(hbox2), checkbox, FALSE, FALSE, 0);
2146 gtk_box_pack_start(GTK_BOX(vbox9), hbox2, FALSE, FALSE, 12);
2148 dialog_action_area1 = GTK_DIALOG(dialog1)->action_area;
2149 gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area1), GTK_BUTTONBOX_END);
2151 okbutton1 = gtk_button_new_from_stock(GTK_STOCK_OK);
2152 gtk_dialog_add_action_widget(GTK_DIALOG(dialog1), okbutton1, GTK_RESPONSE_OK);
2153 GTK_WIDGET_SET_FLAGS(okbutton1, GTK_CAN_DEFAULT);
2155 gtk_widget_show_all(dialog1);
2158 if ((show_checkbox == TRUE) && (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)) == TRUE)
2159 && (ask_to_show_again != NULL)) {
2162 *ask_to_show_again = FALSE;
2165 gtk_dialog_run(GTK_DIALOG(dialog1));
2166 gtk_widget_destroy(dialog1);
2171 static int focused_widget_num = 0;
2174 focus_in_event_callback(
int* widget_num) {
2175 focused_widget_num = *widget_num;
2182 GtkWidget * check1, *check2, *check3, *tempWidget, *tempWidget2, *tableWidget;
2183 GtkWidget * spin1, *spin2, *spin3, *spin4, *spin5;
2193 GtkWidget** focus_widgets[] = { &spin1, &spin2, &spin3, &spin4, &spin5, &check1, &check2, NULL };
2194 int focus_nums[G_N_ELEMENTS(focus_widgets)];
2197 dialog = gtk_dialog_new_with_buttons(
2198 _(
"Edit layer"), GTK_WINDOW(screen.win.topLevelWindow), GTK_DIALOG_DESTROY_WITH_PARENT, _(
"Apply to _active"),
2201 _(
"Apply to _visible"), GTK_RESPONSE_YES, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL
2204 gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
2205 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
2206 gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
2207 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
2209 tableWidget = gtk_table_new(16, 3, FALSE);
2210 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), tableWidget, FALSE, FALSE, 0);
2212 tempWidget = gtk_label_new(NULL);
2213 gtk_label_set_markup(GTK_LABEL(tempWidget), _(
"<span weight=\"bold\">Translation</span>"));
2214 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2215 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 5);
2217 tempWidget = gtk_label_new(
"");
2218 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
2219 gdouble translateX, translateY;
2222 tempWidget = gtk_label_new(_(
"X (mils):"));
2223 tempWidget2 = gtk_label_new(_(
"Y (mils):"));
2224 translateX = trans->translateX * 1000;
2225 translateY = trans->translateY * 1000;
2226 }
else if (screen.unit == (gerbv_gui_unit_t)GERBV_MMS) {
2227 tempWidget = gtk_label_new(_(
"X (mm):"));
2228 tempWidget2 = gtk_label_new(_(
"Y (mm):"));
2229 translateX = trans->translateX * 25.4;
2230 translateY = trans->translateY * 25.4;
2232 tempWidget = gtk_label_new(_(
"X (inches):"));
2233 tempWidget2 = gtk_label_new(_(
"Y (inches):"));
2234 translateX = trans->translateX;
2235 translateY = trans->translateY;
2238 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2239 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 1, 2, 1, 2, GTK_FILL, 0, 5, 0);
2240 gtk_misc_set_alignment(GTK_MISC(tempWidget2), 0.0, 0.5);
2241 gtk_table_attach((GtkTable*)tableWidget, tempWidget2, 1, 2, 2, 3, GTK_FILL, 0, 5, 0);
2242 adj = (GtkAdjustment*)gtk_adjustment_new(translateX, -1000000, 1000000, 1, 10, 0.0);
2243 spin1 = (GtkWidget*)gtk_spin_button_new(adj, 0.1, 4);
2244 gtk_table_attach((GtkTable*)tableWidget, spin1, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
2245 adj = (GtkAdjustment*)gtk_adjustment_new(translateY, -1000000, 1000000, 1, 10, 0.0);
2246 spin2 = (GtkWidget*)gtk_spin_button_new(adj, 0.1, 4);
2247 gtk_table_attach((GtkTable*)tableWidget, spin2, 2, 3, 2, 3, GTK_FILL, 0, 0, 0);
2249 gtk_table_set_row_spacing((GtkTable*)tableWidget, 3, 8);
2250 tempWidget = gtk_label_new(NULL);
2251 gtk_label_set_markup(GTK_LABEL(tempWidget), _(
"<span weight=\"bold\">Scale</span>"));
2252 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2253 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 0, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 0, 5);
2255 tempWidget = gtk_label_new(_(
"X direction:"));
2256 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2257 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 1, 2, 5, 6, GTK_FILL, 0, 5, 0);
2258 tempWidget = gtk_label_new(_(
"Y direction:"));
2259 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2260 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 1, 2, 6, 7, GTK_FILL, 0, 5, 0);
2261 adj = (GtkAdjustment*)gtk_adjustment_new(trans->scaleX, -1000000, 1000000, 1, 10, 0.0);
2262 spin3 = (GtkWidget*)gtk_spin_button_new(adj, 1, 3);
2263 gtk_table_attach((GtkTable*)tableWidget, spin3, 2, 3, 5, 6, GTK_FILL, 0, 0, 0);
2264 adj = (GtkAdjustment*)gtk_adjustment_new(trans->scaleY, -1000000, 1000000, 1, 10, 0.0);
2265 spin4 = (GtkWidget*)gtk_spin_button_new(adj, 1, 3);
2266 gtk_table_attach((GtkTable*)tableWidget, spin4, 2, 3, 6, 7, GTK_FILL, 0, 0, 0);
2268 check3 = gtk_check_button_new_with_label(
"Maintain aspect ratio");
2269 gtk_toggle_button_set_active((GtkToggleButton*)check3, TRUE);
2270 gtk_table_attach((GtkTable*)tableWidget, check3, 2, 3, 7, 8, GTK_FILL, 0, 0, 0);
2272 gtk_table_set_row_spacing((GtkTable*)tableWidget, 8, 8);
2274 tempWidget = gtk_label_new(NULL);
2275 gtk_label_set_markup(GTK_LABEL(tempWidget), _(
"<span weight=\"bold\">Rotation</span>"));
2276 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2277 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 0, 2, 9, 10, GTK_EXPAND | GTK_FILL, 0, 0, 5);
2279 tempWidget = gtk_label_new(_(
"Rotation (degrees):"));
2280 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2281 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 1, 2, 10, 11, GTK_FILL, 0, 5, 0);
2282 spin5 = gtk_combo_box_new_text();
2283 gtk_combo_box_append_text(GTK_COMBO_BOX(spin5), _(
"None"));
2284 gtk_combo_box_append_text(GTK_COMBO_BOX(spin5), _(
"90 deg CCW"));
2285 gtk_combo_box_append_text(GTK_COMBO_BOX(spin5), _(
"180 deg CCW"));
2286 gtk_combo_box_append_text(GTK_COMBO_BOX(spin5), _(
"270 deg CCW"));
2287 gdouble rot_deg = RAD2DEG(trans->rotation);
2288 if (rot_deg < 135 && rot_deg >= 45)
2289 gtk_combo_box_set_active(GTK_COMBO_BOX(spin5), 1);
2290 else if (rot_deg < 225 && rot_deg >= 135)
2291 gtk_combo_box_set_active(GTK_COMBO_BOX(spin5), 2);
2292 else if (rot_deg < 315 && rot_deg >= 225)
2293 gtk_combo_box_set_active(GTK_COMBO_BOX(spin5), 3);
2295 gtk_combo_box_set_active(GTK_COMBO_BOX(spin5), 0);
2297 adj = (GtkAdjustment *) gtk_adjustment_new (RAD2DEG(trans->rotation), -1000000, 1000000,
2299 spin5 = (GtkWidget *) gtk_spin_button_new (adj, 0, 3);
2302 gtk_table_attach((GtkTable*)tableWidget, spin5, 2, 3, 10, 11, GTK_FILL, 0, 0, 0);
2304 gtk_table_set_row_spacing((GtkTable*)tableWidget, 10, 8);
2305 tempWidget = gtk_label_new(NULL);
2306 gtk_label_set_markup(GTK_LABEL(tempWidget), _(
"<span weight=\"bold\">Mirroring</span>"));
2307 gtk_misc_set_alignment(GTK_MISC(tempWidget), 0.0, 0.5);
2308 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 0, 2, 11, 12, GTK_EXPAND | GTK_FILL, 0, 0, 5);
2310 tempWidget = gtk_label_new(_(
"About X axis:"));
2311 gtk_misc_set_alignment(GTK_MISC(tempWidget), 1.0, 0.5);
2312 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 1, 2, 12, 13, GTK_FILL, 0, 5, 0);
2313 check1 = (GtkWidget*)gtk_check_button_new();
2314 gtk_toggle_button_set_active((GtkToggleButton*)check1, trans->mirrorAroundX);
2315 gtk_table_attach((GtkTable*)tableWidget, check1, 2, 3, 12, 13, 0, 0, 0, 2);
2317 tempWidget = gtk_label_new(_(
"About Y axis:"));
2318 gtk_misc_set_alignment(GTK_MISC(tempWidget), 1.0, 0.5);
2319 gtk_table_attach((GtkTable*)tableWidget, tempWidget, 1, 2, 13, 14, GTK_FILL, 0, 5, 0);
2320 check2 = (GtkWidget*)gtk_check_button_new();
2321 gtk_toggle_button_set_active((GtkToggleButton*)check2, trans->mirrorAroundY);
2322 gtk_table_attach((GtkTable*)tableWidget, check2, 2, 3, 13, 14, 0, 0, 0, 2);
2324 for (i = 0; focus_widgets[i] != NULL; i++) {
2326 if (i == focused_widget_num) {
2327 gtk_widget_grab_focus(*focus_widgets[i]);
2332 g_signal_connect_swapped(
2333 (gpointer)(*focus_widgets[i]),
"focus-in-event", G_CALLBACK(focus_in_event_callback),
2334 (gpointer)(focus_nums + i)
2338 g_signal_connect(GTK_OBJECT(spin1),
"value_changed", GTK_SIGNAL_FUNC(callbacks_live_edit), spin1);
2339 g_signal_connect(GTK_OBJECT(spin2),
"value_changed", GTK_SIGNAL_FUNC(callbacks_live_edit), spin2);
2340 g_signal_connect(GTK_OBJECT(spin3),
"value_changed", GTK_SIGNAL_FUNC(callbacks_live_edit), spin3);
2341 g_signal_connect(GTK_OBJECT(spin4),
"value_changed", GTK_SIGNAL_FUNC(callbacks_live_edit), spin4);
2342 g_signal_connect(GTK_OBJECT(spin5),
"changed", GTK_SIGNAL_FUNC(callbacks_live_edit), spin5);
2343 g_signal_connect(GTK_OBJECT(check1),
"toggled", GTK_SIGNAL_FUNC(callbacks_live_edit), check1);
2344 g_signal_connect(GTK_OBJECT(check2),
"toggled", GTK_SIGNAL_FUNC(callbacks_live_edit), check2);
2346 gtk_table_set_row_spacing((GtkTable*)tableWidget, 14, 8);
2347 gtk_widget_show_all(dialog);
2348 gint result = GTK_RESPONSE_APPLY;
2352 while (result == GTK_RESPONSE_APPLY || result == GTK_RESPONSE_YES) {
2353 result = gtk_dialog_run(GTK_DIALOG(dialog));
2354 if (result != GTK_RESPONSE_CLOSE) {
2357 trans->translateX = gtk_spin_button_get_value((GtkSpinButton*)spin1) / 1000;
2358 trans->translateY = gtk_spin_button_get_value((GtkSpinButton*)spin2) / 1000;
2359 }
else if (screen.unit == (gerbv_gui_unit_t)GERBV_MMS) {
2360 trans->translateX = gtk_spin_button_get_value((GtkSpinButton*)spin1) / 25.4;
2361 trans->translateY = gtk_spin_button_get_value((GtkSpinButton*)spin2) / 25.4;
2363 trans->translateX = gtk_spin_button_get_value((GtkSpinButton*)spin1);
2364 trans->translateY = gtk_spin_button_get_value((GtkSpinButton*)spin2);
2368 if (gtk_toggle_button_get_active((GtkToggleButton*)check3)) {
2369 if (trans->scaleX != gtk_spin_button_get_value((GtkSpinButton*)spin3)) {
2370 gtk_spin_button_set_value((GtkSpinButton*)spin4, gtk_spin_button_get_value((GtkSpinButton*)spin3));
2373 if (trans->scaleY != gtk_spin_button_get_value((GtkSpinButton*)spin4)) {
2374 gtk_spin_button_set_value((GtkSpinButton*)spin3, gtk_spin_button_get_value((GtkSpinButton*)spin4));
2378 trans->scaleX = gtk_spin_button_get_value((GtkSpinButton*)spin3);
2379 trans->scaleY = gtk_spin_button_get_value((GtkSpinButton*)spin4);
2380 gint rotationIndex = gtk_combo_box_get_active((GtkComboBox*)spin5);
2382 if (rotationIndex == 0)
2383 trans->rotation = 0;
2384 else if (rotationIndex == 1)
2385 trans->rotation = M_PI_2;
2386 else if (rotationIndex == 2)
2387 trans->rotation = M_PI;
2388 else if (rotationIndex == 3)
2389 trans->rotation = M_PI + M_PI_2;
2391 trans->mirrorAroundX = gtk_toggle_button_get_active((GtkToggleButton*)check1);
2392 trans->mirrorAroundY = gtk_toggle_button_get_active((GtkToggleButton*)check2);
2394 if (result == GTK_RESPONSE_APPLY) {
2396 *transforms[0] = *trans;
2397 }
else if (result == GTK_RESPONSE_YES) {
2400 while (transforms[i] != NULL) {
2401 *transforms[i++] = *trans;
2405 render_refresh_rendered_image_on_screen();
2406 callbacks_update_layer_tree();
2411 if (result == GTK_RESPONSE_CANCEL) {
2413 *transform = startTransform;
2417 gtk_widget_destroy(dialog);
void callbacks_bugs_activate(GtkMenuItem *menuitem, gpointer user_data)
The help -> bugs menu item was selected.
gboolean callbacks_quit_activate(GtkMenuItem *menuitem, gpointer user_data)
The file -> quit menu item was selected or the user requested the main window to be closed by other m...
void callbacks_open_activate(GtkMenuItem *menuitem, gpointer user_data)
The file -> open action was selected.
void callbacks_align_files_from_sel_clicked(GtkMenuItem *menu_item, gpointer user_data)
The edit -> align layers menu item was selected.
void callbacks_analyze_active_drill_activate(GtkMenuItem *menuitem, gpointer user_data)
The analyze -> analyze drill file menu item was selected.
void callbacks_analyze_active_gerbers_activate(GtkMenuItem *menuitem, gpointer user_data)
The analyze -> analyze Gerbers menu item was selected.
void callbacks_about_activate(GtkMenuItem *menuitem, gpointer user_data)
The help -> about menu item was selected.
void callbacks_new_project_activate(GtkMenuItem *menuitem, gpointer user_data)
The file -> new menu item was selected.
void callbacks_toggle_layer_visibility_activate(GtkMenuItem *menuitem, gpointer user_data)
View/"Toggle visibility layer X" or Current layer/"Toggle visibility" menu item was activated.
Header info for the GUI callback functions.
Header info for the cairo rendering functions and the related selection calculating functions.
The main header file for the libgerbv library.
@ GERBV_RENDER_TYPE_CAIRO_HIGH_QUALITY
@ GERBV_RENDER_TYPE_GDK_XOR
@ GERBV_RENDER_TYPE_CAIRO_NORMAL
Contains the xpm data for the gerbv application icon.
int interface_reopen_question(GSList *fns, GSList *fns_is_mod, GSList *fns_cnt, GSList *fns_lay_num)
This dialog box shows a text message with three buttons in the case if the file to be open was alread...
void interface_show_alert_dialog(gchar *primaryText, gchar *secondaryText, gboolean show_checkbox, gboolean *ask_to_show_again)
This dialog box shows a textmessage and one button: "OK".
gboolean interface_get_alert_dialog_response(const gchar *primaryText, const gchar *secondaryText, gboolean show_checkbox, gboolean *ask_to_show_again, const gchar *true_button_label, const gchar *false_button_label)
This dialog box shows a message and two buttons: "True" and "False".
Header info for the GUI building functions for Gerber Viewer.
gerbv_project_t * mainProject
Global state variable to keep track of what's happening on the screen.
Header info for common structs and functions used for the GUI application.
Header info for the rendering support functions for gerbv.
Header info for the selection support functions for libgerbv.
gboolean show_cross_on_drill_holes
gerbv_render_types_t renderType