31 #include <sys/types.h>
39 #include <gdk/gdkkeysyms.h>
55 #define DPRINTF(...) do { if (DEBUG) printf(__VA_ARGS__); } while (0)
57 static const gchar *gerbv_win_title = N_(
"Gerbv — gEDA's Gerber Viewer");
60 extern const char *gerbv_coords_pattern_mils_str;
64 rename_main_window(
char const* 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_filename_display_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)
93 pixmap = gdk_pixmap_create_from_xpm_d (this_window->window, &mask,
94 &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)
104 gchar *accel_map_filename = g_build_filename (g_get_home_dir(), GERBV_ACCELS_RELPATH, NULL);
105 if (accel_map_filename) {
106 gtk_accel_map_load (accel_map_filename);
107 g_free (accel_map_filename);
113 interface_save_accels (
void)
115 gchar *accel_map_dirname, *accel_map_filename;
118 g_build_filename (g_get_home_dir(), GERBV_ACCELS_RELPATH, NULL);
120 if (!accel_map_filename)
124 accel_map_dirname = g_path_get_dirname (accel_map_filename);
125 g_mkdir_with_parents (accel_map_dirname,
126 S_IRUSR | S_IXUSR | S_IWUSR |
130 gtk_accel_map_save (accel_map_filename);
132 g_free (accel_map_dirname);
133 g_free (accel_map_filename);
137 request_label_max_size_by_text (GtkWidget *label,
const gchar *str)
141 gtk_label_set_text (GTK_LABEL (label), str);
144 gtk_widget_set_size_request (label, -1, -1);
145 gtk_widget_size_request (label, &req);
146 gtk_widget_set_size_request (label, req.width, req.height);
147 gtk_label_set_text (GTK_LABEL (label),
"");
150 GdkPixbuf *pixbuf_from_icon(
const icon *icon)
152 return gdk_pixbuf_new_from_data(icon->data,
155 icon->bits_per_sample,
164 interface_create_gui (
int req_width,
int req_height)
168 GtkWidget *mainWindow;
172 GtkWidget *menuitem_file;
173 GtkWidget *menuitem_file_menu;
174 GtkWidget *new_project;
179 GtkWidget *save_layer;
180 GtkWidget *save_as_layer;
181 GtkWidget *menuitem_file_export;
182 GtkWidget *menuitem_file_export_menu;
183 GtkWidget *png, *pdf, *svg, *postscript, *geda_pcb;
184 GtkWidget *rs274x, *drill, *idrill, *rs274xm, *drillm;
187 #if GTK_CHECK_VERSION(2,10,0)
192 GtkWidget *menuitem_edit;
193 GtkWidget *menuitem_edit_menu;
194 GtkWidget *properties_selected;
195 GtkWidget *delete_selected;
196 GtkWidget *align, *align_layers;
197 GtkWidget *menuitem_view;
198 GtkWidget *menuitem_view_menu;
199 GtkWidget *view_fullscreen;
200 GtkWidget *show_selection_on_invisible;
201 GtkWidget *show_cross_on_drill_holes;
202 GtkWidget *show_toolbar;
203 GtkWidget *show_sidepane;
204 GtkWidget *toggle_layer_visibility_item1;
205 GtkWidget *toggle_layer_visibility_item2;
206 GtkWidget *toggle_layer_visibility_item3;
207 GtkWidget *toggle_layer_visibility_item4;
208 GtkWidget *toggle_layer_visibility_item5;
209 GtkWidget *toggle_layer_visibility_item6;
210 GtkWidget *toggle_layer_visibility_item7;
211 GtkWidget *toggle_layer_visibility_item8;
212 GtkWidget *toggle_layer_visibility_item9;
213 GtkWidget *toggle_layer_visibility_item10;
216 GtkWidget *fit_to_window;
217 GtkWidget *backgroundColor;
218 GtkWidget *menuitem_view_render, *menuitem_view_render_menu;
219 GSList *menu_view_render_group;
220 GtkWidget *render_fast, *render_fast_xor, *render_normal, *render_hq;
221 GtkWidget *menuitem_view_unit, *menuitem_view_unit_menu;
222 GSList *menu_view_unit_group;
223 GtkWidget *unit_mil, *unit_mm, *unit_in;
224 GtkWidget *menuitem_layer;
225 GtkWidget *menuitem_layer_menu;
226 GtkWidget *layer_visibility;
227 GtkWidget *layer_visibility_all_on;
228 GtkWidget *layer_visibility_all_off;
229 GtkWidget *layer_invert;
230 GtkWidget *layer_color;
231 GtkWidget *layer_reload;
232 GtkWidget *layer_edit;
233 GtkWidget *layer_format;
235 GtkWidget *layer_down;
236 GtkWidget *layer_remove;
237 GtkWidget *menuitem_analyze;
238 GtkWidget *menuitem_analyze_menu;
239 GtkWidget *analyze_active_gerbers;
240 GtkWidget *analyze_active_drill;
241 GtkWidget *analyze_benchmark;
243 GtkWidget *menuitem_tools;
244 GtkWidget *menuitem_tools_menu;
245 GtkWidget *toggletoolbutton_pointer;
246 GtkWidget *pointer_tool;
247 GdkPixbuf *pointerpixbuf;
248 GtkWidget *pointerimage;
250 GtkWidget *zoom_tool;
251 GtkWidget *measure_tool;
252 GtkWidget *menuitem_help;
253 GtkWidget *layer_visibility_menu;
254 GtkWidget *layer_visibility_main_menu;
255 GtkWidget *menuitem_help_menu;
258 GtkWidget *bugs_menuitem;
260 GtkWidget *toolbar_hbox;
261 GtkWidget *handlebox;
262 GtkWidget *button_toolbar;
264 GtkWidget *toolbutton_new;
265 GtkWidget *toolbutton_open;
266 GtkWidget *toolbutton_revert;
267 GtkWidget *toolbutton_save;
268 GtkWidget *separatortoolitem1;
269 #if GTK_CHECK_VERSION(2,10,0)
270 GtkWidget *toolbutton_print;
271 GtkWidget *separatortoolitem2;
273 GtkWidget *toolbutton_zoom_in;
274 GtkWidget *toolbutton_zoom_out;
275 GtkWidget *toolbutton_zoom_fit;
281 GtkWidget *separatortoolitem4;
282 GtkWidget *toggletoolbutton_pan;
283 GtkWidget *toggletoolbutton_zoom;
284 GtkWidget *toggletoolbutton_measure;
286 GtkWidget *sidepane_vbox;
287 GtkWidget *sidepane_notebook;
290 GtkWidget *render_combobox;
291 GtkWidget *scrolledwindow1;
301 GtkWidget *Layer_label;
303 GtkWidget *messages_scrolledwindow;
304 GtkWidget *message_textview;
305 GtkWidget *clear_messages_button;
306 GtkWidget *Message_label;
308 GtkWidget *main_view_table;
312 GtkWidget *statusbar_label_left;
313 GtkWidget *statusUnitComboBox;
314 GtkWidget *statusbar_label_right;
315 GtkWidget *drawingarea, *hAdjustment, *vAdjustment, *hScrollbar, *vScrollbar;
317 GtkAccelGroup *accel_group;
318 GtkTooltips *tooltips;
321 GdkPixbuf *zoompixbuf;
322 GtkWidget *zoomimage;
323 GdkPixbuf *measurepixbuf;
324 GtkWidget *measureimage;
325 GdkPixbuf *movepixbuf;
326 GtkWidget *moveimage;
328 GtkWidget *tempImage;
330 gchar str_coord[MAX_COORDLEN];
332 const GtkTargetEntry dragTargetEntries[] = {
333 {
"text/uri-list", 0, 1 },
336 GSettingsSchema *settings_schema = NULL;
337 const gchar *settings_id =
"org.geda-user.gerbv";
338 screen.settings = NULL;
342 GSettingsSchemaSource *settings_source = g_settings_schema_source_get_default();
343 if (NULL != settings_source) {
344 settings_schema = g_settings_schema_source_lookup(
349 if (NULL != settings_schema) {
350 g_settings_schema_unref(settings_schema);
351 screen.settings = g_settings_new(settings_id);
354 pointerpixbuf = pixbuf_from_icon(&pointer);
355 movepixbuf = pixbuf_from_icon(&move);
356 zoompixbuf = pixbuf_from_icon(&lzoom);
357 measurepixbuf = pixbuf_from_icon(&ruler);
359 tooltips = gtk_tooltips_new();
360 accel_group = gtk_accel_group_new ();
362 mainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
363 screen.win.topLevelWindow = mainWindow;
365 vbox1 = gtk_vbox_new (FALSE, 0);
366 gtk_container_add (GTK_CONTAINER (mainWindow), vbox1);
368 menubar1 = gtk_menu_bar_new ();
369 gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
371 gtk_drag_dest_set (mainWindow, GTK_DEST_DEFAULT_ALL, dragTargetEntries,
372 1, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
373 gtk_signal_connect (GTK_OBJECT(mainWindow),
"drag-data-received",
374 GTK_SIGNAL_FUNC(callbacks_file_drop_event), NULL);
377 menuitem_file = gtk_menu_item_new_with_mnemonic (_(
"_File"));
378 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_file);
380 menuitem_file_menu = gtk_menu_new ();
381 gtk_menu_set_accel_group (GTK_MENU(menuitem_file_menu), accel_group);
382 gtk_menu_set_accel_path (GTK_MENU(menuitem_file_menu), ACCEL_FILE);
383 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_file), menuitem_file_menu);
387 open = gtk_menu_item_new_with_mnemonic (_(
"_Open"));
388 SET_ACCELS (open, ACCEL_FILE_OPEN_LAYER);
389 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), open);
390 gtk_tooltips_set_tip (tooltips, open,
391 _(
"Open Gerbv project, Gerber, drill, "
392 "or pick&place files"), NULL);
394 save_layer = gtk_menu_item_new_with_mnemonic (_(
"_Save active layer"));
395 screen.win.curFileMenuItem[0] = save_layer;
396 gtk_tooltips_set_tip (tooltips, save_layer, _(
"Save the active layer"), NULL);
397 SET_ACCELS (save_layer, ACCEL_FILE_SAVE_LAYER);
398 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save_layer);
400 save_as_layer = gtk_menu_item_new_with_mnemonic (_(
"Save active layer _as..."));
401 screen.win.curFileMenuItem[1] = save_as_layer;
402 gtk_tooltips_set_tip (tooltips, save_as_layer, _(
"Save the active layer to a new file"), NULL);
403 SET_ACCELS (save_as_layer, ACCEL_FILE_SAVE_LAYER_AS);
404 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save_as_layer);
406 revert = gtk_image_menu_item_new_from_stock (GTK_STOCK_REVERT_TO_SAVED, NULL);
408 gtk_menu_item_set_label (GTK_MENU_ITEM (revert), _(
"_Revert all"));
409 screen.win.curFileMenuItem[2] = revert;
410 SET_ACCELS_FROM_STOCK (revert, GTK_STOCK_REVERT_TO_SAVED, ACCEL_FILE_REVERT);
411 gtk_tooltips_set_tip (tooltips, revert, _(
"Reload all layers"), NULL);
412 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), revert);
416 gtk_container_add (GTK_CONTAINER (menuitem_file_menu),
417 gtk_separator_menu_item_new ());
419 menuitem_file_export = gtk_menu_item_new_with_mnemonic (_(
"_Export"));
420 screen.win.curFileMenuItem[3] = menuitem_file_export;
421 gtk_tooltips_set_tip (tooltips, menuitem_file_export,
422 _(
"Export to a new format"), NULL);
423 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), menuitem_file_export);
425 menuitem_file_export_menu = gtk_menu_new ();
426 gtk_menu_set_accel_group (GTK_MENU(menuitem_file_export_menu), accel_group);
427 gtk_menu_set_accel_path (GTK_MENU(menuitem_file_export_menu), ACCEL_FILE_EXPORT);
428 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_file_export), menuitem_file_export_menu);
430 png = gtk_menu_item_new_with_mnemonic (_(
"P_NG..."));
431 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), png);
432 gtk_tooltips_set_tip (tooltips, png, _(
"Export visible layers to a PNG file"), NULL);
434 pdf = gtk_menu_item_new_with_mnemonic (_(
"P_DF..."));
435 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), pdf);
436 gtk_tooltips_set_tip (tooltips, pdf, _(
"Export visible layers to a PDF file"), NULL);
438 svg = gtk_menu_item_new_with_mnemonic (_(
"_SVG..."));
439 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), svg);
440 gtk_tooltips_set_tip (tooltips, svg, _(
"Export visible layers to a SVG file"), NULL);
442 postscript = gtk_menu_item_new_with_mnemonic (_(
"_PostScript..."));
443 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), postscript);
444 gtk_tooltips_set_tip (tooltips, postscript, _(
"Export visible layers to a PostScript file"), NULL);
446 dxf = gtk_menu_item_new_with_mnemonic (_(
"D_XF..."));
447 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), dxf);
448 gtk_tooltips_set_tip (tooltips, dxf,
449 _(
"Export active layer to a DXF file"), NULL);
451 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu),
452 gtk_separator_menu_item_new ());
454 rs274x = gtk_menu_item_new_with_mnemonic (_(
"RS-274X (_Gerber)..."));
455 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), rs274x);
456 gtk_tooltips_set_tip (tooltips, rs274x,
457 _(
"Export active layer to a RS-274X (Gerber) file"), NULL);
459 rs274xm = gtk_menu_item_new_with_mnemonic (_(
"RS-274X merge (Gerber)..."));
460 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), rs274xm);
461 gtk_tooltips_set_tip (tooltips, rs274xm,
462 _(
"Export merged visible Gerber layers to "
463 "a RS-274X (Gerber) file"), NULL);
465 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu),
466 gtk_separator_menu_item_new ());
468 drill = gtk_menu_item_new_with_mnemonic (_(
"_Excellon drill..."));
469 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), drill);
470 gtk_tooltips_set_tip (tooltips, drill,
471 _(
"Export active layer to an Excellon drill file"), NULL);
473 drillm = gtk_menu_item_new_with_mnemonic (_(
"Excellon drill merge..."));
474 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), drillm);
475 gtk_tooltips_set_tip (tooltips, drillm,
476 _(
"Export merged visible drill layers to "
477 "an Excellon drill file"), NULL);
479 idrill = gtk_menu_item_new_with_mnemonic (_(
"_ISEL NCP drill..."));
480 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), idrill);
481 gtk_tooltips_set_tip (tooltips, idrill,
482 _(
"Export active layer to an ISEL Automation NCP drill file"),
485 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu),
486 gtk_separator_menu_item_new ());
488 geda_pcb = gtk_menu_item_new_with_mnemonic (_(
"gEDA P_CB (beta)..."));
489 gtk_container_add (GTK_CONTAINER (menuitem_file_export_menu), geda_pcb);
490 gtk_tooltips_set_tip (tooltips, geda_pcb,
491 _(
"Export active layer to a gEDA PCB file"), NULL);
495 gtk_container_add (GTK_CONTAINER (menuitem_file_menu),
496 gtk_separator_menu_item_new ());
498 new_project = gtk_image_menu_item_new_with_mnemonic (_(
"_New project"));
499 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), new_project);
500 gtk_tooltips_set_tip (tooltips, new_project, _(
"Close all layers and start a new project"), NULL);
501 tempImage = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
502 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new_project), tempImage);
504 save = gtk_image_menu_item_new_with_mnemonic (_(
"Save project"));
505 screen.win.curFileMenuItem[4] = save;
506 gtk_tooltips_set_tip (tooltips, save, _(
"Save the current project"), NULL);
507 tempImage = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
508 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save), tempImage);
509 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save);
511 save_as = gtk_image_menu_item_new_with_mnemonic (_(
"Save project as..."));
512 screen.win.curFileMenuItem[5] = save_as;
513 gtk_tooltips_set_tip (tooltips, save_as, _(
"Save the current project to a new file"), NULL);
514 tempImage = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_MENU);
515 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save_as), tempImage);
516 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save_as);
520 gtk_container_add (GTK_CONTAINER (menuitem_file_menu),
521 gtk_separator_menu_item_new ());
523 #if GTK_CHECK_VERSION(2,10,0)
524 if (gtk_stock_lookup(GTK_STOCK_PRINT, &stock)) {
525 gchar
new[] = N_(
"_Print...");
526 stock.label = _(
new);
527 gtk_stock_add(&stock, 1);
530 print = gtk_image_menu_item_new_from_stock (GTK_STOCK_PRINT, NULL);
531 screen.win.curFileMenuItem[6] = print;
532 SET_ACCELS_FROM_STOCK (print, GTK_STOCK_PRINT, ACCEL_FILE_PRINT);
533 gtk_tooltips_set_tip (tooltips, print, _(
"Print the visible layers"), NULL);
534 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), print);
535 gtk_container_add (GTK_CONTAINER (menuitem_file_menu),
536 gtk_separator_menu_item_new ());
539 quit = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
540 SET_ACCELS_FROM_STOCK (quit, GTK_STOCK_QUIT, ACCEL_FILE_QUIT);
541 gtk_tooltips_set_tip (tooltips, quit, _(
"Quit Gerbv"), NULL);
542 gtk_container_add (GTK_CONTAINER (menuitem_file_menu), quit);
545 menuitem_edit = gtk_menu_item_new_with_mnemonic (_(
"_Edit"));
546 screen.win.curEditMenuItem = menuitem_edit;
547 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_edit);
549 menuitem_edit_menu = gtk_menu_new ();
550 gtk_menu_set_accel_group (GTK_MENU(menuitem_edit_menu), accel_group);
551 gtk_menu_set_accel_path (GTK_MENU(menuitem_edit_menu), ACCEL_EDIT);
552 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_edit), menuitem_edit_menu);
554 properties_selected = gtk_image_menu_item_new_with_mnemonic (_(
"Display _properties of selected object(s)"));
555 SET_ACCELS_FROM_STOCK (properties_selected, GTK_STOCK_PROPERTIES, ACCEL_EDIT_PROPERTIES);
556 gtk_tooltips_set_tip (tooltips, properties_selected, _(
"Examine the properties of the selected object"), NULL);
557 tempImage = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
558 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (properties_selected), tempImage);
559 gtk_container_add (GTK_CONTAINER (menuitem_edit_menu), properties_selected);
561 delete_selected = gtk_image_menu_item_new_with_mnemonic (_(
"_Delete selected object(s)"));
562 SET_ACCELS_FROM_STOCK (delete_selected, GTK_STOCK_REMOVE, ACCEL_EDIT_DELETE);
563 gtk_tooltips_set_tip (tooltips, delete_selected, _(
"Delete selected objects"), NULL);
564 tempImage = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
565 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (delete_selected), tempImage);
566 gtk_container_add (GTK_CONTAINER (menuitem_edit_menu), delete_selected);
568 align = gtk_menu_item_new_with_mnemonic (_(
"_Align layers"));
569 screen.win.curEditAlingMenuItem = align;
570 gtk_tooltips_set_tip (tooltips, align,
571 _(
"Align two layers by two selected objects"), NULL);
572 gtk_widget_set_sensitive (align, FALSE);
573 gtk_container_add (GTK_CONTAINER (menuitem_edit_menu), align);
575 align_layers = gtk_menu_new ();
576 screen.win.curEditAlingItem[0] = gtk_menu_item_new_with_mnemonic (
"");
577 screen.win.curEditAlingItem[1] = gtk_menu_item_new_with_mnemonic (
"");
578 gtk_menu_item_set_submenu (GTK_MENU_ITEM (align), align_layers);
579 gtk_container_add (GTK_CONTAINER (align_layers),
580 screen.win.curEditAlingItem[0]);
581 gtk_container_add (GTK_CONTAINER (align_layers),
582 screen.win.curEditAlingItem[1]);
586 tempMenuItem = gtk_image_menu_item_new_with_label (_(
"Edit object properties"));
587 gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
588 gtk_tooltips_set_tip (tooltips, tempMenuItem, _(
"Edit the properties of the selected object"), NULL);
589 g_signal_connect ((gpointer) tempMenuItem,
"activate",
590 G_CALLBACK (callbacks_edit_object_properties_clicked), NULL);
592 tempMenuItem = gtk_image_menu_item_new_with_label (_(
"Move object(s)"));
593 gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
594 gtk_tooltips_set_tip (tooltips, tempMenuItem, _(
"Move the selected object(s)"),NULL);
595 g_signal_connect ((gpointer) tempMenuItem,
"activate",
596 G_CALLBACK (callbacks_move_objects_clicked), NULL);
598 tempMenuItem = gtk_image_menu_item_new_with_label (_(
"Reduce area"));
599 gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
600 gtk_tooltips_set_tip (tooltips, tempMenuItem, _(
"Reduce the area of the object (e.g. to prevent component floating)"),NULL);
601 g_signal_connect ((gpointer) tempMenuItem,
"activate",
602 G_CALLBACK (callbacks_reduce_object_area_clicked), NULL);
606 screen.win.drawWindowPopupMenu = menuitem_edit_menu;
609 menuitem_view = gtk_menu_item_new_with_mnemonic (_(
"_View"));
610 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_view);
612 menuitem_view_menu = gtk_menu_new ();
613 gtk_menu_set_accel_group (GTK_MENU(menuitem_view_menu), accel_group);
614 gtk_menu_set_accel_path (GTK_MENU(menuitem_view_menu), ACCEL_VIEW);
615 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_view), menuitem_view_menu);
617 view_fullscreen = gtk_check_menu_item_new_with_mnemonic (_(
"Fullscr_een"));
618 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (view_fullscreen), FALSE);
619 gtk_tooltips_set_tip (tooltips, view_fullscreen, _(
"Toggle between fullscreen and normal view"), NULL);
620 SET_ACCELS (view_fullscreen, ACCEL_VIEW_FULLSCREEN);
621 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), view_fullscreen);
623 show_toolbar = gtk_check_menu_item_new_with_mnemonic (_(
"Show _Toolbar"));
624 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_toolbar), TRUE);
625 gtk_tooltips_set_tip (tooltips, show_toolbar, _(
"Toggle visibility of the toolbar"), NULL);
626 SET_ACCELS (show_toolbar, ACCEL_VIEW_TOOLBAR);
627 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), show_toolbar);
629 show_sidepane = gtk_check_menu_item_new_with_mnemonic (_(
"Show _Sidepane"));
630 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_sidepane), TRUE);
631 gtk_tooltips_set_tip (tooltips, show_sidepane, _(
"Toggle visibility of the sidepane"), NULL);
632 SET_ACCELS (show_sidepane, ACCEL_VIEW_SIDEPANE);
633 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), show_sidepane);
635 gtk_container_add (GTK_CONTAINER (menuitem_view_menu),
636 gtk_separator_menu_item_new ());
638 layer_visibility_main_menu = gtk_menu_item_new_with_mnemonic (_(
"Toggle layer _visibility"));
639 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), layer_visibility_main_menu);
641 show_selection_on_invisible = gtk_check_menu_item_new_with_mnemonic (_(
"Show all se_lection"));
642 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_selection_on_invisible), FALSE);
643 gtk_tooltips_set_tip (tooltips, show_selection_on_invisible, _(
"Show selected objects on invisible layers"), NULL);
644 SET_ACCELS (show_selection_on_invisible, ACCEL_VIEW_ALL_SELECTION);
645 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), show_selection_on_invisible);
647 show_cross_on_drill_holes = gtk_check_menu_item_new_with_mnemonic (_(
"Show _cross on drill holes"));
648 gtk_tooltips_set_tip (tooltips, show_cross_on_drill_holes,
649 _(
"Show cross on drill holes"), NULL);
650 SET_ACCELS (show_cross_on_drill_holes, ACCEL_VIEW_CROSS_ON_DRILL_HOLES);
651 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), show_cross_on_drill_holes);
652 if (screen.settings) {
653 g_settings_bind (screen.settings,
"cross-on-drill-holes",
654 show_cross_on_drill_holes,
"active",
655 G_SETTINGS_BIND_DEFAULT);
657 gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (
658 show_cross_on_drill_holes));
661 layer_visibility_menu = gtk_menu_new ();
662 gtk_menu_set_accel_group (GTK_MENU(layer_visibility_menu), accel_group);
663 gtk_menu_set_accel_path (GTK_MENU(layer_visibility_menu), ACCEL_VIEW_VIS);
664 gtk_menu_item_set_submenu (GTK_MENU_ITEM (layer_visibility_main_menu), layer_visibility_menu);
666 toggle_layer_visibility_item1 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 1"));
667 SET_ACCELS (toggle_layer_visibility_item1, ACCEL_VIEW_VIS_LAYER1);
668 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item1);
670 toggle_layer_visibility_item2 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 2"));
671 SET_ACCELS (toggle_layer_visibility_item2, ACCEL_VIEW_VIS_LAYER2);
672 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item2);
674 toggle_layer_visibility_item3 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 3"));
675 SET_ACCELS (toggle_layer_visibility_item3, ACCEL_VIEW_VIS_LAYER3);
676 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item3);
678 toggle_layer_visibility_item4 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 4"));
679 SET_ACCELS (toggle_layer_visibility_item4, ACCEL_VIEW_VIS_LAYER4);
680 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item4);
682 toggle_layer_visibility_item5 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 5"));
683 SET_ACCELS (toggle_layer_visibility_item5, ACCEL_VIEW_VIS_LAYER5);
684 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item5);
686 toggle_layer_visibility_item6 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 6"));
687 SET_ACCELS (toggle_layer_visibility_item6, ACCEL_VIEW_VIS_LAYER6);
688 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item6);
690 toggle_layer_visibility_item7 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 7"));
691 SET_ACCELS (toggle_layer_visibility_item7, ACCEL_VIEW_VIS_LAYER7);
692 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item7);
694 toggle_layer_visibility_item8 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 8"));
695 SET_ACCELS (toggle_layer_visibility_item8, ACCEL_VIEW_VIS_LAYER8);
696 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item8);
698 toggle_layer_visibility_item9 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 9"));
699 SET_ACCELS (toggle_layer_visibility_item9, ACCEL_VIEW_VIS_LAYER9);
700 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item9);
702 toggle_layer_visibility_item10 = gtk_menu_item_new_with_label (_(
"Toggle visibility of layer 10"));
703 SET_ACCELS (toggle_layer_visibility_item10, ACCEL_VIEW_VIS_LAYER10);
704 gtk_container_add (GTK_CONTAINER (layer_visibility_menu), toggle_layer_visibility_item10);
706 gtk_container_add (GTK_CONTAINER (menuitem_view_menu),
707 gtk_separator_menu_item_new ());
709 zoom_in = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_IN, NULL);
710 SET_ACCELS_FROM_STOCK (zoom_in, GTK_STOCK_ZOOM_IN, ACCEL_VIEW_ZOOM_IN);
711 gtk_tooltips_set_tip (tooltips, zoom_in, _(
"Zoom in"), NULL);
712 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), zoom_in);
714 zoom_out = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_OUT, NULL);
715 SET_ACCELS_FROM_STOCK (zoom_out, GTK_STOCK_ZOOM_OUT, ACCEL_VIEW_ZOOM_OUT);
716 gtk_tooltips_set_tip (tooltips, zoom_out, _(
"Zoom out"), NULL);
717 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), zoom_out);
719 fit_to_window = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_FIT, NULL);
720 gtk_tooltips_set_tip (tooltips, fit_to_window, _(
"Zoom to fit all visible layers in the window"), NULL);
721 SET_ACCELS_FROM_STOCK (fit_to_window, GTK_STOCK_ZOOM_FIT, ACCEL_VIEW_ZOOM_FIT);
722 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), fit_to_window);
724 gtk_container_add (GTK_CONTAINER (menuitem_view_menu),
725 gtk_separator_menu_item_new ());
727 backgroundColor = gtk_image_menu_item_new_with_mnemonic (_(
"Background color"));
728 gtk_tooltips_set_tip (tooltips, backgroundColor, _(
"Change the background color"), NULL);
729 tempImage = gtk_image_new_from_stock (GTK_STOCK_SELECT_COLOR, GTK_ICON_SIZE_MENU);
730 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (backgroundColor), tempImage);
731 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), backgroundColor);
735 && !screen.background_is_from_cmdline
736 && !screen.background_is_from_project) {
739 clr = g_settings_get_uint (screen.settings,
"background-color");
748 menuitem_view_render = gtk_menu_item_new_with_mnemonic (_(
"_Rendering"));
749 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), menuitem_view_render);
751 menuitem_view_render_menu = gtk_menu_new ();
752 gtk_menu_set_accel_group (GTK_MENU(menuitem_view_render_menu), accel_group);
753 gtk_menu_set_accel_path (GTK_MENU(menuitem_view_render_menu), ACCEL_VIEW_RENDER);
754 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_view_render), menuitem_view_render_menu);
756 menu_view_render_group = NULL;
758 render_fast = gtk_radio_menu_item_new_with_mnemonic (menu_view_render_group, _(
"_Fast"));
759 menu_view_render_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (render_fast));
760 gtk_container_add (GTK_CONTAINER (menuitem_view_render_menu), render_fast);
762 render_fast_xor = gtk_radio_menu_item_new_with_mnemonic (menu_view_render_group, _(
"Fast (_XOR)"));
763 menu_view_render_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (render_fast_xor));
764 gtk_container_add (GTK_CONTAINER (menuitem_view_render_menu), render_fast_xor);
766 render_normal = gtk_radio_menu_item_new_with_mnemonic (menu_view_render_group, _(
"_Normal"));
767 menu_view_render_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (render_normal));
768 gtk_container_add (GTK_CONTAINER (menuitem_view_render_menu), render_normal);
770 render_hq = gtk_radio_menu_item_new_with_mnemonic (menu_view_render_group, _(
"High _Quality"));
771 menu_view_render_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (render_hq));
772 gtk_container_add (GTK_CONTAINER (menuitem_view_render_menu), render_hq);
774 screen.win.menu_view_render_group = malloc(4*
sizeof(GtkWidget *));
775 if(screen.win.menu_view_render_group == NULL)
776 GERB_FATAL_ERROR(
"malloc for rendering type synchronization failed in %s()", __FUNCTION__);
785 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (render_fast), TRUE);
787 menuitem_view_unit = gtk_menu_item_new_with_mnemonic (_(
"U_nits"));
788 gtk_container_add (GTK_CONTAINER (menuitem_view_menu), menuitem_view_unit);
790 menuitem_view_unit_menu = gtk_menu_new ();
791 gtk_menu_set_accel_group (GTK_MENU(menuitem_view_unit_menu), accel_group);
792 gtk_menu_set_accel_path (GTK_MENU(menuitem_view_unit_menu), ACCEL_VIEW_UNITS);
793 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_view_unit), menuitem_view_unit_menu);
795 menu_view_unit_group = NULL;
797 unit_mil = gtk_radio_menu_item_new_with_mnemonic (menu_view_unit_group, _(
"mi_l"));
798 menu_view_unit_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (unit_mil));
799 gtk_container_add (GTK_CONTAINER (menuitem_view_unit_menu), unit_mil);
801 unit_mm = gtk_radio_menu_item_new_with_mnemonic (menu_view_unit_group, _(
"_mm"));
802 menu_view_unit_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (unit_mm));
803 gtk_container_add (GTK_CONTAINER (menuitem_view_unit_menu), unit_mm);
805 unit_in = gtk_radio_menu_item_new_with_mnemonic (menu_view_unit_group, _(
"_in"));
806 menu_view_unit_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (unit_in));
807 gtk_container_add (GTK_CONTAINER (menuitem_view_unit_menu), unit_in);
809 screen.win.menu_view_unit_group = malloc(3*
sizeof(GtkWidget *));
810 if(screen.win.menu_view_unit_group == NULL)
811 GERB_FATAL_ERROR(
"malloc for display unit synchronization failed in %s()", __FUNCTION__);
813 screen.win.menu_view_unit_group[GERBV_MILS] = GTK_CHECK_MENU_ITEM(unit_mil);
814 screen.win.menu_view_unit_group[GERBV_MMS] = GTK_CHECK_MENU_ITEM(unit_mm);
815 screen.win.menu_view_unit_group[GERBV_INS] = GTK_CHECK_MENU_ITEM(unit_in);
819 menuitem_layer = gtk_menu_item_new_with_mnemonic (_(
"_Layer"));
820 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_layer);
822 menuitem_layer_menu = gtk_menu_new ();
823 gtk_menu_set_accel_group (GTK_MENU (menuitem_layer_menu), accel_group);
824 gtk_menu_set_accel_path (GTK_MENU (menuitem_layer_menu), ACCEL_LAYER);
825 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_layer), menuitem_layer_menu);
827 layer_visibility = gtk_menu_item_new_with_mnemonic (_(
"Toggle _visibility"));
828 gtk_tooltips_set_tip (tooltips, layer_visibility,
829 _(
"Toggles the visibility of the active layer"), NULL);
830 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_visibility);
832 layer_visibility_all_on = gtk_image_menu_item_new_with_mnemonic (_(
"All o_n"));
833 SET_ACCELS (layer_visibility_all_on, ACCEL_LAYER_ALL_ON);
834 gtk_tooltips_set_tip (tooltips, layer_visibility_all_on, _(
"Turn on visibility of all layers"), NULL);
835 tempImage = gtk_image_new_from_stock (GTK_STOCK_YES, GTK_ICON_SIZE_MENU);
836 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_visibility_all_on), tempImage);
837 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_visibility_all_on);
839 layer_visibility_all_off = gtk_image_menu_item_new_with_mnemonic (_(
"All _off"));
840 SET_ACCELS (layer_visibility_all_off, ACCEL_LAYER_ALL_OFF);
841 gtk_tooltips_set_tip (tooltips, layer_visibility_all_off, _(
"Turn off visibility of all layers"), NULL);
842 tempImage = gtk_image_new_from_stock (GTK_STOCK_NO, GTK_ICON_SIZE_MENU);
843 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_visibility_all_off), tempImage);
844 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_visibility_all_off);
846 layer_invert = gtk_menu_item_new_with_mnemonic (_(
"_Invert color"));
847 gtk_tooltips_set_tip (tooltips, layer_invert,
848 _(
"Invert the display polarity of the active layer"), NULL);
849 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_invert);
851 layer_color = gtk_image_menu_item_new_with_mnemonic (_(
"_Change color"));
852 SET_ACCELS (layer_color, ACCEL_LAYER_COLOR);
853 gtk_tooltips_set_tip (tooltips, layer_color,
854 _(
"Change the display color of the active layer"), NULL);
855 tempImage = gtk_image_new_from_stock (GTK_STOCK_SELECT_COLOR, GTK_ICON_SIZE_MENU);
856 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_color), tempImage);
857 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_color);
859 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu),
860 gtk_separator_menu_item_new ());
862 layer_reload = gtk_image_menu_item_new_with_mnemonic (_(
"_Reload layer"));
863 gtk_tooltips_set_tip (tooltips, layer_reload,
864 _(
"Reload the active layer from disk"), NULL);
865 tempImage = gtk_image_new_from_stock (GTK_STOCK_REVERT_TO_SAVED, GTK_ICON_SIZE_MENU);
866 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_reload), tempImage);
867 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_reload);
869 layer_edit = gtk_image_menu_item_new_with_mnemonic (_(
"_Edit layer"));
870 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_edit);
871 gtk_tooltips_set_tip (tooltips, layer_edit,
872 _(
"Translate, scale, rotate or mirror the active layer"), NULL);
873 tempImage = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
874 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_edit), tempImage);
876 layer_format = gtk_image_menu_item_new_with_mnemonic (_(
"Edit file _format"));
877 gtk_tooltips_set_tip (tooltips, layer_format,
878 _(
"View and edit the numerical format used to parse "
879 "the active layer"), NULL);
880 tempImage = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
881 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_format), tempImage);
882 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_format);
884 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu),
885 gtk_separator_menu_item_new ());
887 layer_up = gtk_image_menu_item_new_with_mnemonic (_(
"Move u_p"));
888 gtk_tooltips_set_tip (tooltips, layer_up,
889 _(
"Move the active layer one step up"), NULL);
890 tempImage = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU);
891 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_up), tempImage);
892 SET_ACCELS (layer_up, ACCEL_LAYER_UP);
893 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_up);
895 layer_down = gtk_image_menu_item_new_with_mnemonic (_(
"Move dow_n"));
896 gtk_tooltips_set_tip (tooltips, layer_down,
897 _(
"Move the active layer one step down"), NULL);
898 tempImage = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU);
899 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_down), tempImage);
900 SET_ACCELS (layer_down, ACCEL_LAYER_DOWN);
901 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_down);
903 layer_remove = gtk_image_menu_item_new_with_mnemonic (_(
"_Delete"));
904 gtk_tooltips_set_tip (tooltips, layer_remove,
905 _(
"Remove the active layer"), NULL);
906 tempImage = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
907 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (layer_remove), tempImage);
908 SET_ACCELS (layer_remove, ACCEL_LAYER_DELETE);
909 gtk_container_add (GTK_CONTAINER (menuitem_layer_menu), layer_remove);
912 screen.win.curLayerMenuItem = menuitem_layer;
915 screen.win.layerTreePopupMenu = menuitem_layer_menu;
918 menuitem_analyze = gtk_menu_item_new_with_mnemonic (_(
"_Analyze"));
919 screen.win.curAnalyzeMenuItem = menuitem_analyze;
920 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_analyze);
922 screen.selectionInfo.selectedNodeArray = selection_new_array ();
924 menuitem_analyze_menu = gtk_menu_new ();
925 gtk_menu_set_accel_group (GTK_MENU(menuitem_analyze_menu), accel_group);
926 gtk_menu_set_accel_path (GTK_MENU(menuitem_analyze_menu), ACCEL_ANAL);
927 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_analyze), menuitem_analyze_menu);
929 analyze_active_gerbers = gtk_menu_item_new_with_mnemonic (
930 _(
"Analyze visible _Gerber layers"));
931 gtk_tooltips_set_tip (tooltips, analyze_active_gerbers,
932 _(
"Examine a detailed analysis of the contents "
933 "of all visible Gerber layers"), NULL);
934 gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu),
935 analyze_active_gerbers);
937 analyze_active_drill = gtk_menu_item_new_with_mnemonic (
938 _(
"Analyze visible _drill layers"));
939 gtk_tooltips_set_tip (tooltips, analyze_active_drill,
940 _(
"Examine a detailed analysis of the contents "
941 "of all visible drill layers"), NULL);
942 gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu),
943 analyze_active_drill);
945 analyze_benchmark = gtk_menu_item_new_with_mnemonic (_(
"_Benchmark"));
946 gtk_tooltips_set_tip (tooltips, analyze_benchmark,
947 _(
"Benchmark different rendering methods. Will make "
948 "the application unresponsive for 1 minute!"), NULL);
949 gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu),
950 gtk_separator_menu_item_new ());
951 gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu),
959 menuitem_tools = gtk_menu_item_new_with_mnemonic (_(
"_Tools"));
960 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_tools);
962 menuitem_tools_menu = gtk_menu_new ();
963 gtk_menu_set_accel_group (GTK_MENU(menuitem_tools_menu), accel_group);
964 gtk_menu_set_accel_path (GTK_MENU(menuitem_tools_menu), ACCEL_TOOLS);
965 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_tools), menuitem_tools_menu);
966 pointer_tool = gtk_image_menu_item_new_with_mnemonic (_(
"_Pointer Tool"));
967 tempImage = gtk_image_new_from_pixbuf (pointerpixbuf);
968 gtk_image_menu_item_set_image ((GtkImageMenuItem *)pointer_tool, tempImage);
969 SET_ACCELS (pointer_tool, ACCEL_TOOLS_POINTER);
970 gtk_container_add (GTK_CONTAINER (menuitem_tools_menu), pointer_tool);
971 gtk_tooltips_set_tip (tooltips, pointer_tool, _(
"Select objects on the screen"), NULL);
972 pan_tool = gtk_image_menu_item_new_with_mnemonic (_(
"Pa_n Tool"));
973 tempImage = gtk_image_new_from_pixbuf (movepixbuf);
974 gtk_image_menu_item_set_image ((GtkImageMenuItem *)pan_tool, tempImage);
975 SET_ACCELS (pan_tool, ACCEL_TOOLS_PAN);
976 gtk_container_add (GTK_CONTAINER (menuitem_tools_menu), pan_tool);
977 gtk_tooltips_set_tip (tooltips, pan_tool, _(
"Pan by left clicking and dragging"), NULL);
979 zoom_tool = gtk_image_menu_item_new_with_mnemonic (_(
"_Zoom Tool"));
980 tempImage = gtk_image_new_from_pixbuf (zoompixbuf);
981 gtk_image_menu_item_set_image ((GtkImageMenuItem *)zoom_tool, tempImage);
982 SET_ACCELS (zoom_tool, ACCEL_TOOLS_ZOOM);
983 gtk_container_add (GTK_CONTAINER (menuitem_tools_menu), zoom_tool);
984 gtk_tooltips_set_tip (tooltips, zoom_tool, _(
"Zoom by left clicking or dragging"), NULL);
986 measure_tool = gtk_image_menu_item_new_with_mnemonic (_(
"_Measure Tool"));
987 tempImage = gtk_image_new_from_pixbuf (measurepixbuf);
988 gtk_image_menu_item_set_image ((GtkImageMenuItem *)measure_tool, tempImage);
989 SET_ACCELS (measure_tool, ACCEL_TOOLS_MEASURE);
990 gtk_container_add (GTK_CONTAINER (menuitem_tools_menu), measure_tool);
991 gtk_tooltips_set_tip (tooltips, measure_tool, _(
"Measure distances on the screen"), NULL);
993 menuitem_help = gtk_menu_item_new_with_mnemonic (_(
"_Help"));
994 gtk_container_add (GTK_CONTAINER (menubar1), menuitem_help);
996 menuitem_help_menu = gtk_menu_new ();
997 gtk_menu_set_accel_group (GTK_MENU(menuitem_help_menu), accel_group);
998 gtk_menu_set_accel_path (GTK_MENU(menuitem_help_menu), ACCEL_HELP);
999 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_help), menuitem_help_menu);
1007 about = gtk_image_menu_item_new_with_mnemonic (_(
"_About Gerbv..."));
1008 gtk_container_add (GTK_CONTAINER (menuitem_help_menu), about);
1009 gtk_tooltips_set_tip (tooltips, about, _(
"View information about Gerbv"), NULL);
1010 image34 = gtk_image_new_from_stock (GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_MENU);
1011 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about), image34);
1013 bugs_menuitem = gtk_image_menu_item_new_with_mnemonic (_(
"Known _bugs in this version..."));
1014 tempImage = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_MENU);
1015 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (bugs_menuitem), tempImage);
1016 gtk_tooltips_set_tip (tooltips, bugs_menuitem, _(
"View list of known Gerbv bugs"), NULL);
1017 gtk_container_add (GTK_CONTAINER (menuitem_help_menu), bugs_menuitem);
1020 toolbar_hbox = gtk_hbox_new (FALSE, 0);
1021 gtk_box_pack_start (GTK_BOX (vbox1), toolbar_hbox, FALSE, FALSE, 0);
1023 handlebox = gtk_handle_box_new ();
1025 gtk_box_pack_start (GTK_BOX (toolbar_hbox), handlebox, TRUE, TRUE, 0);
1027 button_toolbar = gtk_toolbar_new ();
1028 gtk_widget_set_size_request (button_toolbar, 500, -1);
1029 gtk_container_add (GTK_CONTAINER (handlebox), button_toolbar);
1030 gtk_toolbar_set_style (GTK_TOOLBAR (button_toolbar), GTK_TOOLBAR_ICONS);
1033 toolbutton_new = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
1034 gtk_tooltips_set_tip (tooltips, toolbutton_new, _(
"Close all layers and start a new project"), NULL);
1035 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_new);
1037 toolbutton_open = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);
1038 gtk_tooltips_set_tip (tooltips, toolbutton_open,
1039 _(
"Open Gerbv project, Gerber, drill, "
1040 "or pick&place files"), NULL);
1041 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_open);
1043 toolbutton_revert = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_REVERT_TO_SAVED);
1044 gtk_tooltips_set_tip (tooltips, toolbutton_revert, _(
"Reload all layers in project"), NULL);
1045 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_revert);
1047 toolbutton_save = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_SAVE);
1048 gtk_tooltips_set_tip (tooltips, toolbutton_save, _(
"Save the current project"), NULL);
1049 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_save);
1051 separatortoolitem1 = (GtkWidget*) gtk_separator_tool_item_new ();
1052 gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem1);
1053 #if GTK_CHECK_VERSION(2,10,0)
1054 toolbutton_print = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_PRINT);
1055 gtk_tooltips_set_tip (tooltips, toolbutton_print, _(
"Print the visible layers"), NULL);
1056 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_print);
1058 separatortoolitem2 = (GtkWidget*) gtk_separator_tool_item_new ();
1059 gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem2);
1061 toolbutton_zoom_in = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_IN);
1062 gtk_tooltips_set_tip (tooltips, toolbutton_zoom_in, _(
"Zoom in"), NULL);
1063 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_zoom_in);
1065 toolbutton_zoom_out = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_OUT);
1066 gtk_tooltips_set_tip (tooltips, toolbutton_zoom_out, _(
"Zoom out"), NULL);
1067 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_zoom_out);
1069 toolbutton_zoom_fit = (GtkWidget*) gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_FIT);
1070 gtk_tooltips_set_tip (tooltips, toolbutton_zoom_fit, _(
"Zoom to fit all visible layers in the window"), NULL);
1071 gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_zoom_fit);
1088 separatortoolitem4 = (GtkWidget*) gtk_separator_tool_item_new ();
1089 gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem4);
1090 toggletoolbutton_pointer = (GtkWidget*) gtk_toggle_tool_button_new();
1091 pointerimage = gtk_image_new_from_pixbuf(pointerpixbuf);
1092 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_pointer),
1094 gtk_tooltips_set_tip (tooltips, toggletoolbutton_pointer, _(
"Select objects on the screen"), NULL);
1095 gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_pointer);
1096 toggletoolbutton_pan = (GtkWidget*) gtk_toggle_tool_button_new();
1097 moveimage = gtk_image_new_from_pixbuf(movepixbuf);
1098 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_pan),
1100 gtk_tooltips_set_tip (tooltips, toggletoolbutton_pan, _(
"Pan by left clicking and dragging"), NULL);
1101 gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_pan);
1104 toggletoolbutton_zoom = (GtkWidget*) gtk_toggle_tool_button_new();
1105 zoomimage = gtk_image_new_from_pixbuf(zoompixbuf);
1106 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_zoom),
1108 gtk_tooltips_set_tip (tooltips, toggletoolbutton_zoom, _(
"Zoom by left clicking or dragging"), NULL);
1109 gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_zoom);
1111 toggletoolbutton_measure = (GtkWidget*) gtk_toggle_tool_button_new();
1112 measureimage = gtk_image_new_from_pixbuf(measurepixbuf);
1113 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_measure),
1115 gtk_tooltips_set_tip (tooltips, toggletoolbutton_measure, _(
"Measure distances on the screen"), NULL);
1116 gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_measure);
1118 hpaned1 = gtk_hpaned_new ();
1119 gtk_box_pack_start (GTK_BOX (vbox1), hpaned1, TRUE, TRUE, 0);
1120 gtk_paned_set_position (GTK_PANED (hpaned1), 225);
1122 sidepane_vbox = gtk_vbox_new (FALSE, 0);
1123 gtk_widget_set_size_request (sidepane_vbox, 150, -1);
1125 gtk_paned_pack1 (GTK_PANED (hpaned1), sidepane_vbox, FALSE, FALSE);
1126 gtk_container_set_border_width (GTK_CONTAINER (sidepane_vbox), 5);
1128 sidepane_notebook = gtk_notebook_new ();
1129 gtk_widget_set_size_request (sidepane_notebook, 100, -1);
1130 gtk_box_pack_start (GTK_BOX (sidepane_vbox), sidepane_notebook, TRUE, TRUE, 0);
1132 vbox10 = gtk_vbox_new (FALSE, 3);
1133 gtk_container_add (GTK_CONTAINER (sidepane_notebook), vbox10);
1134 gtk_widget_set_size_request (vbox10, 82, -1);
1135 gtk_container_set_border_width (GTK_CONTAINER (vbox10), 4);
1137 hbox4 = gtk_hbox_new (FALSE, 0);
1138 gtk_box_pack_start (GTK_BOX (vbox10), hbox4, FALSE, FALSE, 0);
1140 render_combobox = gtk_combo_box_new_text ();
1141 gtk_box_pack_start (GTK_BOX (hbox4), render_combobox, TRUE, TRUE, 0);
1142 gtk_tooltips_set_tip (tooltips, render_combobox,
1143 _(
"Rendering type"), NULL);
1145 gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _(
"Fast"));
1146 gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _(
"Fast, with XOR"));
1147 gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _(
"Normal"));
1148 gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _(
"High quality"));
1150 if (screen.settings) {
1151 g_settings_bind (screen.settings,
"visual-rendering-type",
1152 render_combobox,
"active",
1153 G_SETTINGS_BIND_DEFAULT);
1157 gtk_combo_box_get_active (
1158 GTK_COMBO_BOX (render_combobox));
1159 if ((
unsigned int)screenRenderInfo.
renderType <
1161 gtk_check_menu_item_set_active (
1162 screen.win.menu_view_render_group[
1167 gtk_combo_box_set_active (GTK_COMBO_BOX(render_combobox),
1171 scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
1172 gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow1, TRUE, TRUE, 0);
1173 gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow1), 2);
1174 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1),
1175 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1176 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1),
1179 hbox1 = gtk_hbox_new (TRUE, 0);
1180 gtk_box_pack_start (GTK_BOX (vbox10), hbox1, FALSE, FALSE, 0);
1182 button4 = gtk_button_new ();
1183 gtk_box_pack_start (GTK_BOX (hbox1), button4, FALSE, TRUE, 0);
1185 image8 = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
1186 gtk_container_add (GTK_CONTAINER (button4), image8);
1187 gtk_tooltips_set_tip (tooltips, button4,
1188 _(
"Open Gerbv project, Gerber, drill, "
1189 "or pick&place files"), NULL);
1191 button5 = gtk_button_new ();
1192 gtk_box_pack_start (GTK_BOX (hbox1), button5, FALSE, TRUE, 0);
1194 image9 = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_BUTTON);
1195 gtk_container_add (GTK_CONTAINER (button5), image9);
1196 gtk_tooltips_set_tip (tooltips, button5,
1197 _(
"Move the active layer one step down"), NULL);
1199 button6 = gtk_button_new ();
1200 gtk_box_pack_start (GTK_BOX (hbox1), button6, FALSE, TRUE, 0);
1202 image10 = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_BUTTON);
1203 gtk_container_add (GTK_CONTAINER (button6), image10);
1204 gtk_tooltips_set_tip (tooltips, button6,
1205 _(
"Move the active layer one step up"), NULL);
1207 button7 = gtk_button_new ();
1208 gtk_box_pack_start (GTK_BOX (hbox1), button7, FALSE, TRUE, 0);
1210 image11 = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_BUTTON);
1211 gtk_container_add (GTK_CONTAINER (button7), image11);
1212 gtk_tooltips_set_tip (tooltips, button7,
1213 _(
"Remove the active layer"), NULL);
1215 Layer_label = gtk_label_new (_(
"Layers"));
1216 gtk_notebook_set_tab_label (GTK_NOTEBOOK (sidepane_notebook),
1217 gtk_notebook_get_nth_page (GTK_NOTEBOOK (sidepane_notebook), 0),
1220 vbox11 = gtk_vbox_new (FALSE, 2);
1221 gtk_container_add (GTK_CONTAINER (sidepane_notebook), vbox11);
1222 gtk_container_set_border_width (GTK_CONTAINER (vbox11), 3);
1224 messages_scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
1225 gtk_box_pack_start (GTK_BOX (vbox11), messages_scrolledwindow, TRUE, TRUE, 0);
1226 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (messages_scrolledwindow),
1227 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1229 message_textview = gtk_text_view_new ();
1230 gtk_container_add (GTK_CONTAINER (messages_scrolledwindow), message_textview);
1231 gtk_text_view_set_editable (GTK_TEXT_VIEW (message_textview), FALSE);
1232 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (message_textview), GTK_WRAP_WORD);
1233 gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (message_textview), FALSE);
1235 clear_messages_button = gtk_button_new_from_stock (GTK_STOCK_CLEAR);
1236 gtk_tooltips_set_tip (tooltips, clear_messages_button,
1237 _(
"Clear all messages and accumulated sum"), NULL);
1238 gtk_box_pack_start (GTK_BOX (vbox11), clear_messages_button, FALSE, FALSE, 0);
1240 Message_label = gtk_label_new (_(
"Messages"));
1241 gtk_notebook_set_tab_label (GTK_NOTEBOOK (sidepane_notebook),
1242 gtk_notebook_get_nth_page (GTK_NOTEBOOK (sidepane_notebook), 1),
1245 vbox2 = gtk_vbox_new (FALSE, 4);
1246 gtk_paned_pack2 (GTK_PANED (hpaned1), vbox2, TRUE, FALSE);
1247 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 4);
1249 main_view_table = gtk_table_new (3, 3, FALSE);
1250 gtk_box_pack_start (GTK_BOX (vbox2), main_view_table, TRUE, TRUE, 0);
1252 hRuler = gtk_hruler_new ();
1253 gtk_table_attach (GTK_TABLE (main_view_table), hRuler, 1, 2, 0, 1,
1254 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1255 (GtkAttachOptions) (GTK_FILL), 0, 0);
1256 gtk_ruler_set_range (GTK_RULER (hRuler), 0, 100, 8.56051, 1000);
1258 vRuler = gtk_vruler_new ();
1259 gtk_table_attach (GTK_TABLE (main_view_table), vRuler, 0, 1, 1, 2,
1260 (GtkAttachOptions) (GTK_FILL),
1261 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1262 gtk_ruler_set_range (GTK_RULER (vRuler), 0, 100, 8.37341, 1000);
1264 drawingarea = gtk_drawing_area_new();
1265 gtk_table_attach (GTK_TABLE (main_view_table), drawingarea, 1, 2, 1, 2,
1266 (GtkAttachOptions) (GTK_FILL),
1267 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1269 hAdjustment = (GtkWidget *) gtk_adjustment_new (0.0, -1000.0, 1000.0, 1000.0, 1000.0, 500.0);
1270 vAdjustment = (GtkWidget *) gtk_adjustment_new (0.0, -1000.0, 1000.0, 1000.0, 1000.0, 500.0);
1272 hScrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (hAdjustment));
1273 gtk_table_attach (GTK_TABLE (main_view_table), hScrollbar, 1, 2, 2, 3,
1274 (GtkAttachOptions) (GTK_FILL),
1275 (GtkAttachOptions) (GTK_FILL), 0, 0);
1277 vScrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (vAdjustment));
1278 gtk_table_attach (GTK_TABLE (main_view_table), vScrollbar, 2, 3, 1, 2,
1279 (GtkAttachOptions) (GTK_FILL),
1280 (GtkAttachOptions) (GTK_FILL), 0, 0);
1282 hbox5 = gtk_hbox_new (FALSE, 10);
1283 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1285 statusbar_label_left = gtk_label_new (
"");
1286 gtk_box_pack_start (GTK_BOX (hbox5), statusbar_label_left, FALSE, FALSE, 0);
1287 gtk_label_set_justify (GTK_LABEL (statusbar_label_left), GTK_JUSTIFY_CENTER);
1289 statusUnitComboBox = gtk_combo_box_new_text ();
1290 gtk_box_pack_start (GTK_BOX (hbox5), statusUnitComboBox, FALSE, FALSE, 0);
1291 gtk_combo_box_append_text (GTK_COMBO_BOX (statusUnitComboBox), _(
"mil"));
1292 gtk_combo_box_append_text (GTK_COMBO_BOX (statusUnitComboBox), _(
"mm"));
1293 gtk_combo_box_append_text (GTK_COMBO_BOX (statusUnitComboBox), _(
"in"));
1294 screen.win.statusUnitComboBox = statusUnitComboBox;
1297 int screen_unit_orig = screen.unit;
1300 gtk_combo_box_set_active (GTK_COMBO_BOX (statusUnitComboBox),
1303 callbacks_statusbar_unit_combo_box_changed (
1304 GTK_COMBO_BOX (statusUnitComboBox),
1305 GINT_TO_POINTER (TRUE));
1308 if (screen.settings) {
1309 g_settings_bind (screen.settings,
"visual-unit",
1310 statusUnitComboBox,
"active",
1311 G_SETTINGS_BIND_DEFAULT);
1313 callbacks_statusbar_unit_combo_box_changed (
1314 GTK_COMBO_BOX (statusUnitComboBox),
1315 GINT_TO_POINTER (TRUE));
1319 if (screen.unit_is_from_cmdline) {
1320 gtk_combo_box_set_active (GTK_COMBO_BOX (statusUnitComboBox),
1323 callbacks_statusbar_unit_combo_box_changed (
1324 GTK_COMBO_BOX (statusUnitComboBox),
1325 GINT_TO_POINTER (TRUE));
1328 statusbar_label_right = gtk_label_new (
"");
1329 gtk_box_pack_start (GTK_BOX (hbox5), statusbar_label_right, TRUE, TRUE, 0);
1330 gtk_label_set_ellipsize (GTK_LABEL (statusbar_label_right), PANGO_ELLIPSIZE_END);
1331 gtk_misc_set_alignment (GTK_MISC (statusbar_label_right), 0, 0.5);
1338 g_signal_connect ((gpointer) new_project,
"activate",
1341 g_signal_connect ((gpointer) open,
"activate",
1344 g_signal_connect ((gpointer) revert,
"activate",
1345 G_CALLBACK (callbacks_revert_activate),
1347 g_signal_connect ((gpointer) save_layer,
"activate",
1348 G_CALLBACK (callbacks_save_layer_activate),
1350 g_signal_connect ((gpointer) save_as_layer,
"activate",
1351 G_CALLBACK (callbacks_generic_save_activate),
1352 (gpointer) CALLBACKS_SAVE_LAYER_AS);
1353 g_signal_connect ((gpointer) save,
"activate",
1354 G_CALLBACK (callbacks_save_project_activate),
1356 g_signal_connect ((gpointer) save_as,
"activate",
1357 G_CALLBACK (callbacks_generic_save_activate),
1358 (gpointer) CALLBACKS_SAVE_PROJECT_AS);
1359 g_signal_connect ((gpointer) png,
"activate",
1360 G_CALLBACK (callbacks_generic_save_activate),
1361 (gpointer) CALLBACKS_SAVE_FILE_PNG);
1363 g_signal_connect ((gpointer) pdf,
"activate",
1364 G_CALLBACK (callbacks_generic_save_activate),
1365 (gpointer) CALLBACKS_SAVE_FILE_PDF);
1366 g_signal_connect ((gpointer) svg,
"activate",
1367 G_CALLBACK (callbacks_generic_save_activate),
1368 (gpointer) CALLBACKS_SAVE_FILE_SVG);
1369 g_signal_connect ((gpointer) postscript,
"activate",
1370 G_CALLBACK (callbacks_generic_save_activate),
1371 (gpointer) CALLBACKS_SAVE_FILE_PS);
1372 g_signal_connect ((gpointer) geda_pcb,
"activate",
1373 G_CALLBACK (callbacks_generic_save_activate),
1374 (gpointer) CALLBACKS_SAVE_FILE_GEDA_PCB);
1375 g_signal_connect ((gpointer) dxf,
"activate",
1376 G_CALLBACK (callbacks_generic_save_activate),
1377 (gpointer) CALLBACKS_SAVE_FILE_DXF);
1378 g_signal_connect ((gpointer) rs274x,
"activate",
1379 G_CALLBACK (callbacks_generic_save_activate),
1380 (gpointer) CALLBACKS_SAVE_FILE_RS274X);
1381 g_signal_connect ((gpointer) drill,
"activate",
1382 G_CALLBACK (callbacks_generic_save_activate),
1383 (gpointer) CALLBACKS_SAVE_FILE_DRILL);
1384 g_signal_connect ((gpointer) idrill,
"activate",
1385 G_CALLBACK (callbacks_generic_save_activate),
1386 (gpointer) CALLBACKS_SAVE_FILE_IDRILL);
1387 g_signal_connect ((gpointer) rs274xm,
"activate",
1388 G_CALLBACK (callbacks_generic_save_activate),
1389 (gpointer) CALLBACKS_SAVE_FILE_RS274XM);
1390 g_signal_connect ((gpointer) drillm,
"activate",
1391 G_CALLBACK (callbacks_generic_save_activate),
1392 (gpointer) CALLBACKS_SAVE_FILE_DRILLM);
1394 #if GTK_CHECK_VERSION(2,10,0)
1395 g_signal_connect ((gpointer) print,
"activate",
1396 G_CALLBACK (callbacks_print_activate),
1399 g_signal_connect ((gpointer) quit,
"activate",
1404 g_signal_connect ((gpointer) delete_selected,
"activate",
1405 G_CALLBACK (callbacks_delete_objects_clicked),
1407 g_signal_connect ((gpointer) properties_selected,
"activate",
1408 G_CALLBACK (callbacks_display_object_properties_clicked),
1410 g_signal_connect ((gpointer) screen.win.curEditAlingItem[0],
"activate",
1412 GINT_TO_POINTER(0));
1413 g_signal_connect ((gpointer) screen.win.curEditAlingItem[1],
"activate",
1415 GINT_TO_POINTER(1));
1418 g_signal_connect ((gpointer) view_fullscreen,
"activate",
1419 G_CALLBACK (callbacks_fullscreen_toggled),
1420 GINT_TO_POINTER(0));
1421 g_signal_connect ((gpointer) show_toolbar,
"toggled",
1422 G_CALLBACK (callbacks_show_toolbar_toggled),
1424 g_signal_connect ((gpointer) show_sidepane,
"toggled",
1425 G_CALLBACK (callbacks_show_sidepane_toggled),
1427 g_signal_connect ((gpointer) show_selection_on_invisible,
"toggled",
1428 G_CALLBACK (callbacks_show_selection_on_invisible),
1430 g_signal_connect ((gpointer) show_cross_on_drill_holes,
"toggled",
1431 G_CALLBACK (callbacks_show_cross_on_drill_holes),
1433 g_signal_connect ((gpointer) toggle_layer_visibility_item1,
"activate",
1435 GINT_TO_POINTER(0));
1436 g_signal_connect ((gpointer) toggle_layer_visibility_item2,
"activate",
1438 GINT_TO_POINTER(1));
1439 g_signal_connect ((gpointer) toggle_layer_visibility_item3,
"activate",
1441 GINT_TO_POINTER(2));
1442 g_signal_connect ((gpointer) toggle_layer_visibility_item4,
"activate",
1444 GINT_TO_POINTER(3));
1445 g_signal_connect ((gpointer) toggle_layer_visibility_item5,
"activate",
1447 GINT_TO_POINTER(4));
1448 g_signal_connect ((gpointer) toggle_layer_visibility_item6,
"activate",
1450 GINT_TO_POINTER(5));
1451 g_signal_connect ((gpointer) toggle_layer_visibility_item7,
"activate",
1453 GINT_TO_POINTER(6));
1454 g_signal_connect ((gpointer) toggle_layer_visibility_item8,
"activate",
1456 GINT_TO_POINTER(7));
1457 g_signal_connect ((gpointer) toggle_layer_visibility_item9,
"activate",
1459 GINT_TO_POINTER(8));
1460 g_signal_connect ((gpointer) toggle_layer_visibility_item10,
"activate",
1462 GINT_TO_POINTER(9));
1463 g_signal_connect ((gpointer) zoom_in,
"activate",
1464 G_CALLBACK (callbacks_zoom_in_activate),
1466 g_signal_connect ((gpointer) zoom_out,
"activate",
1467 G_CALLBACK (callbacks_zoom_out_activate),
1469 g_signal_connect ((gpointer) fit_to_window,
"activate",
1470 G_CALLBACK (callbacks_fit_to_window_activate),
1472 g_signal_connect ((gpointer) backgroundColor,
"activate",
1473 G_CALLBACK (callbacks_change_background_color_clicked),
1475 g_signal_connect ((gpointer) unit_mil,
"activate",
1476 G_CALLBACK (callbacks_viewmenu_units_changed),
1477 GINT_TO_POINTER(GERBV_MILS));
1478 g_signal_connect ((gpointer) unit_mm,
"activate",
1479 G_CALLBACK (callbacks_viewmenu_units_changed),
1480 GINT_TO_POINTER(GERBV_MMS));
1481 g_signal_connect ((gpointer) unit_in,
"activate",
1482 G_CALLBACK (callbacks_viewmenu_units_changed),
1483 GINT_TO_POINTER(GERBV_INS));
1486 g_signal_connect ((gpointer) layer_visibility,
"activate",
1488 GINT_TO_POINTER (LAYER_SELECTED));
1489 g_signal_connect ((gpointer) layer_visibility_all_on,
"activate",
1491 GINT_TO_POINTER (LAYER_ALL_ON));
1492 g_signal_connect ((gpointer) layer_visibility_all_off,
"activate",
1494 GINT_TO_POINTER (LAYER_ALL_OFF));
1495 g_signal_connect ((gpointer) layer_invert,
"activate", G_CALLBACK (callbacks_invert_layer_clicked), NULL);
1496 g_signal_connect ((gpointer) layer_color,
"activate", G_CALLBACK (callbacks_change_layer_color_clicked), NULL);
1497 g_signal_connect ((gpointer) layer_reload,
"activate", G_CALLBACK (callbacks_reload_layer_clicked), NULL);
1498 g_signal_connect ((gpointer) layer_edit,
"activate", G_CALLBACK (callbacks_change_layer_edit_clicked), NULL);
1499 g_signal_connect ((gpointer) layer_format,
"activate", G_CALLBACK (callbacks_change_layer_format_clicked), NULL);
1500 g_signal_connect ((gpointer) layer_remove,
"activate", G_CALLBACK (callbacks_remove_layer_button_clicked), NULL);
1501 g_signal_connect ((gpointer) layer_up,
"activate", G_CALLBACK (callbacks_move_layer_up_menu_activate), NULL);
1502 g_signal_connect ((gpointer) layer_down,
"activate", G_CALLBACK (callbacks_move_layer_down_menu_activate), NULL);
1505 g_signal_connect ((gpointer) analyze_active_gerbers,
"activate",
1508 g_signal_connect ((gpointer) analyze_active_drill,
"activate",
1511 g_signal_connect ((gpointer) analyze_benchmark,
"activate",
1512 G_CALLBACK (callbacks_benchmark_clicked),
1523 g_signal_connect ((gpointer) pointer_tool,
"activate",
1524 G_CALLBACK (callbacks_change_tool), (gpointer) 0);
1525 g_signal_connect ((gpointer) pan_tool,
"activate",
1526 G_CALLBACK (callbacks_change_tool), (gpointer) 1);
1527 g_signal_connect ((gpointer) zoom_tool,
"activate",
1528 G_CALLBACK (callbacks_change_tool), (gpointer) 2);
1529 g_signal_connect ((gpointer) measure_tool,
"activate",
1530 G_CALLBACK (callbacks_change_tool), (gpointer) 3);
1538 g_signal_connect ((gpointer) about,
"activate",
1542 g_signal_connect ((gpointer) bugs_menuitem,
"activate",
1547 g_signal_connect ((gpointer) toolbutton_new,
"clicked",
1550 g_signal_connect ((gpointer) toolbutton_save,
"clicked",
1551 G_CALLBACK (callbacks_save_project_activate),
1553 g_signal_connect ((gpointer) toolbutton_open,
"clicked",
1556 g_signal_connect ((gpointer) toolbutton_revert,
"clicked",
1557 G_CALLBACK (callbacks_revert_activate),
1559 g_signal_connect ((gpointer) clear_messages_button,
"clicked",
1560 G_CALLBACK (callbacks_clear_messages_button_clicked),
1562 #if GTK_CHECK_VERSION(2,10,0)
1563 g_signal_connect ((gpointer) toolbutton_print,
"clicked",
1564 G_CALLBACK (callbacks_print_activate),
1567 g_signal_connect ((gpointer) toolbutton_zoom_in,
"clicked",
1568 G_CALLBACK (callbacks_zoom_in_activate),
1570 g_signal_connect ((gpointer) toolbutton_zoom_out,
"clicked",
1571 G_CALLBACK (callbacks_zoom_out_activate),
1573 g_signal_connect ((gpointer) toolbutton_zoom_fit,
"clicked",
1574 G_CALLBACK (callbacks_fit_to_window_activate),
1576 g_signal_connect ((gpointer) toggletoolbutton_pointer,
"clicked",
1577 G_CALLBACK (callbacks_change_tool), (gpointer) 0);
1578 g_signal_connect ((gpointer) toggletoolbutton_pan,
"clicked",
1579 G_CALLBACK (callbacks_change_tool), (gpointer) 1);
1580 g_signal_connect ((gpointer) toggletoolbutton_zoom,
"clicked",
1581 G_CALLBACK (callbacks_change_tool), (gpointer) 2);
1582 g_signal_connect ((gpointer) toggletoolbutton_measure,
"clicked",
1583 G_CALLBACK (callbacks_change_tool), (gpointer) 3);
1585 g_signal_connect ((gpointer) statusUnitComboBox,
"changed",
1586 G_CALLBACK (callbacks_statusbar_unit_combo_box_changed),
1589 g_signal_connect ((gpointer) button4,
"clicked",
1590 G_CALLBACK (callbacks_add_layer_button_clicked), NULL);
1591 g_signal_connect ((gpointer) button7,
"clicked",
1592 G_CALLBACK (callbacks_remove_layer_button_clicked), NULL);
1593 g_signal_connect ((gpointer) button5,
"clicked",
1594 G_CALLBACK (callbacks_move_layer_down_button_clicked), NULL);
1595 g_signal_connect ((gpointer) button6,
"clicked",
1596 G_CALLBACK (callbacks_move_layer_up_button_clicked), NULL);
1598 g_signal_connect ((gpointer) hAdjustment,
"value-changed",
1599 G_CALLBACK (callbacks_hadjustment_value_changed), NULL);
1600 g_signal_connect ((gpointer) vAdjustment,
"value-changed",
1601 G_CALLBACK (callbacks_vadjustment_value_changed), NULL);
1602 g_signal_connect ((gpointer) hScrollbar,
"button-press-event",
1603 G_CALLBACK (callbacks_scrollbar_button_pressed), NULL);
1604 g_signal_connect ((gpointer) hScrollbar,
"button-release-event",
1605 G_CALLBACK (callbacks_scrollbar_button_released), NULL);
1606 g_signal_connect ((gpointer) vScrollbar,
"button-press-event",
1607 G_CALLBACK (callbacks_scrollbar_button_pressed), NULL);
1608 g_signal_connect ((gpointer) vScrollbar,
"button-release-event",
1609 G_CALLBACK (callbacks_scrollbar_button_released), NULL);
1611 gtk_window_add_accel_group (GTK_WINDOW (mainWindow), accel_group);
1613 GtkListStore *list_store;
1615 list_store = gtk_list_store_new (4, G_TYPE_BOOLEAN,
1616 GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
1620 tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
1621 GtkCellRenderer *renderer;
1622 GtkTreeViewColumn *column;
1624 renderer = gtk_cell_renderer_toggle_new ();
1625 column = gtk_tree_view_column_new_with_attributes (
"Visible",
1629 gtk_tree_view_column_set_min_width ((GtkTreeViewColumn *)column, 25);
1630 gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
1632 renderer = gtk_cell_renderer_pixbuf_new ();
1633 column = gtk_tree_view_column_new_with_attributes (
"Color",
1636 gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
1638 renderer = gtk_cell_renderer_text_new ();
1639 g_object_set (G_OBJECT (renderer),
"foreground",
"red",
"xalign", 0.5,
1640 "family",
"Serif",
"size-points", 12.0, NULL);
1641 column = gtk_tree_view_column_new_with_attributes (
"Modified",
1645 gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
1646 gtk_tree_view_column_set_min_width ((GtkTreeViewColumn *)column,20);
1648 renderer = gtk_cell_renderer_text_new ();
1649 column = gtk_tree_view_column_new_with_attributes (
"Name",
1653 gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
1655 gtk_tree_view_set_headers_visible ((GtkTreeView *)tree, FALSE);
1656 gtk_signal_connect(GTK_OBJECT(tree),
"key-press-event",
1657 GTK_SIGNAL_FUNC(callbacks_layer_tree_key_press), NULL);
1658 gtk_signal_connect(GTK_OBJECT(tree),
"button-press-event",
1659 GTK_SIGNAL_FUNC(callbacks_layer_tree_button_press), NULL);
1660 gtk_container_add (GTK_CONTAINER (scrolledwindow1), tree);
1662 GtkTreeSelection *selection;
1663 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
1664 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
1665 gtk_tree_view_set_enable_search (GTK_TREE_VIEW (tree), FALSE);
1666 gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree), TRUE);
1668 g_signal_connect (G_OBJECT(list_store),
"row-inserted",
1669 G_CALLBACK (callbacks_layer_tree_row_inserted), NULL);
1671 gtk_widget_grab_focus (tree);
1675 gtk_signal_connect(GTK_OBJECT(drawingarea),
"expose_event",
1676 GTK_SIGNAL_FUNC(callbacks_drawingarea_expose_event), NULL);
1677 gtk_signal_connect(GTK_OBJECT(drawingarea),
"configure_event",
1678 GTK_SIGNAL_FUNC(callbacks_drawingarea_configure_event), NULL);
1679 gtk_signal_connect(GTK_OBJECT(drawingarea),
"motion_notify_event",
1680 GTK_SIGNAL_FUNC(callbacks_drawingarea_motion_notify_event), NULL);
1681 gtk_signal_connect(GTK_OBJECT(drawingarea),
"button_press_event",
1682 GTK_SIGNAL_FUNC(callbacks_drawingarea_button_press_event), NULL);
1683 gtk_signal_connect(GTK_OBJECT(drawingarea),
"button_release_event",
1685 gtk_signal_connect_after(GTK_OBJECT(mainWindow),
"key_press_event",
1686 GTK_SIGNAL_FUNC(callbacks_window_key_press_event), NULL);
1687 gtk_signal_connect_after(GTK_OBJECT(mainWindow),
"key_release_event",
1688 GTK_SIGNAL_FUNC(callbacks_window_key_release_event), NULL);
1689 gtk_signal_connect_after(GTK_OBJECT(mainWindow),
"scroll_event",
1690 GTK_SIGNAL_FUNC(callbacks_window_scroll_event), NULL);
1691 gtk_signal_connect_after(GTK_OBJECT(mainWindow),
"delete_event",
1694 gtk_widget_set_events(drawingarea, GDK_EXPOSURE_MASK
1695 | GDK_LEAVE_NOTIFY_MASK
1696 | GDK_ENTER_NOTIFY_MASK
1697 | GDK_BUTTON_PRESS_MASK
1698 | GDK_BUTTON_RELEASE_MASK
1699 | GDK_KEY_PRESS_MASK
1700 | GDK_KEY_RELEASE_MASK
1701 | GDK_POINTER_MOTION_MASK
1702 | GDK_POINTER_MOTION_HINT_MASK
1710 GdkColor zoom_outline_color = {0, 50000, 50000, 50000};
1711 GdkColor dist_measure_color = {0, 60000, 30000, 65000};
1712 GdkColor selection_color = {0, 65000, 65000, 65000};
1714 screen.zoom_outline_color = zoom_outline_color;
1715 screen.dist_measure_color = dist_measure_color;
1716 screen.selection_color = selection_color;
1718 screen.length_sum = 0;
1720 screen.drawing_area = drawingarea;
1721 screen.win.hAdjustment = hAdjustment;
1722 screen.win.vAdjustment = vAdjustment;
1723 screen.win.hRuler = hRuler;
1724 screen.win.vRuler = vRuler;
1725 screen.win.sidepane_notebook = sidepane_notebook;
1726 screen.win.sidepaneRenderComboBox = GTK_COMBO_BOX(render_combobox);
1727 screen.win.toolButtonPointer = toggletoolbutton_pointer;
1728 screen.win.toolButtonPan = toggletoolbutton_pan;
1729 screen.win.toolButtonZoom = toggletoolbutton_zoom;
1730 screen.win.toolButtonMeasure = toggletoolbutton_measure;
1733 gtk_tooltips_enable (tooltips);
1739 if (req_width != -1 && req_height != -1) {
1741 height = req_height;
1746 screen = gdk_screen_get_default();
1747 nmonitors = gdk_screen_get_n_monitors(screen);
1749 width = gdk_screen_get_width(screen) * 3/4 / nmonitors;
1750 height = gdk_screen_get_height(screen) * 3/4;
1753 gtk_window_set_default_size(GTK_WINDOW(mainWindow), width, height);
1756 if (screen.settings && req_width == -1 && req_height == -1) {
1762 var = g_settings_get_value (screen.settings,
"window-size");
1763 xy = g_variant_get_fixed_array (var, &num,
sizeof (*xy));
1765 gtk_window_set_default_size (GTK_WINDOW (mainWindow),
1767 g_variant_unref (var);
1769 var = g_settings_get_value (screen.settings,
"window-position");
1770 xy = g_variant_get_fixed_array (var, &num,
sizeof (*xy));
1772 gtk_window_move (GTK_WINDOW (mainWindow), xy[0], xy[1]);
1773 g_variant_unref (var);
1775 is_max = g_settings_get_boolean (
1776 screen.settings,
"window-maximized");
1778 gtk_window_maximize (GTK_WINDOW (mainWindow));
1781 g_object_set (G_OBJECT(gtk_settings_get_default()),
1782 "gtk-can-change-accels", TRUE, NULL);
1783 interface_load_accels ();
1785 gtk_widget_show_all (mainWindow);
1787 screen.win.messageTextView = message_textview;
1788 screen.win.statusMessageLeft = statusbar_label_left;
1789 screen.win.statusMessageRight = statusbar_label_right;
1790 screen.win.layerTree = tree;
1791 screen.win.treeIsUpdating = FALSE;
1794 utf8_snprintf (str_coord, MAX_COORDLEN, _(gerbv_coords_pattern_mils_str),
1795 COORD2MILS (-screenRenderInfo.
displayWidth/2.0/GERBV_SCALE_MIN),
1796 COORD2MILS (-screenRenderInfo.
displayHeight/2.0/GERBV_SCALE_MIN));
1798 request_label_max_size_by_text (screen.win.statusMessageLeft, str_coord);
1800 callbacks_change_tool (NULL, (gpointer) 0);
1801 rename_main_window(
"",mainWindow);
1803 set_window_icon (mainWindow);
1804 callbacks_update_layer_tree ();
1807 g_log_set_handler (NULL,
1808 G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION | G_LOG_LEVEL_MASK,
1809 callbacks_handle_log_messages, NULL);
1812 extern GArray *log_array_tmp;
1813 struct log_struct log_item;
1815 for (guint i = 0; i < log_array_tmp->len; i++) {
1816 log_item = g_array_index (log_array_tmp,
struct log_struct, i);
1817 callbacks_handle_log_messages (log_item.domain, log_item.level,
1818 log_item.message, NULL);
1819 g_free(log_item.domain);
1820 g_free(log_item.message);
1822 g_array_free (log_array_tmp, TRUE);
1826 g_signal_connect ((gpointer) render_fast,
"activate",
1827 G_CALLBACK (callbacks_viewmenu_rendertype_changed),
1829 g_signal_connect ((gpointer) render_fast_xor,
"activate",
1830 G_CALLBACK (callbacks_viewmenu_rendertype_changed),
1832 g_signal_connect ((gpointer) render_normal,
"activate",
1833 G_CALLBACK (callbacks_viewmenu_rendertype_changed),
1835 g_signal_connect ((gpointer) render_hq,
"activate",
1836 G_CALLBACK (callbacks_viewmenu_rendertype_changed),
1838 g_signal_connect ((gpointer) render_combobox,
"changed",
1839 G_CALLBACK (callbacks_sidepane_render_type_combo_box_changed),
1842 interface_save_accels ();
1847 interface_set_render_type (
int t)
1857 if (!screen.win.sidepaneRenderComboBox)
1860 gtk_combo_box_set_active (GTK_COMBO_BOX (screen.win.sidepaneRenderComboBox), t);
1861 gtk_check_menu_item_set_active (screen.win.menu_view_render_group[t], TRUE);
1875 const gchar *secondaryText,
1876 gboolean show_checkbox,
1877 gboolean *ask_to_show_again,
1878 const gchar *true_button_label,
1879 const gchar *false_button_label)
1886 GtkWidget *dialog_vbox1;
1890 GtkWidget *checkbox=NULL;
1891 GtkWidget *dialog_action_area1;
1892 GtkWidget *true_button, *false_button;
1893 gboolean returnVal = FALSE;
1895 dialog1 = gtk_dialog_new ();
1896 gtk_window_set_title (GTK_WINDOW (dialog1), _(
"Gerbv Alert"));
1897 gtk_container_set_border_width (GTK_CONTAINER (dialog1), 6);
1898 gtk_window_set_resizable (GTK_WINDOW (dialog1), FALSE);
1899 gtk_window_set_type_hint (GTK_WINDOW (dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
1900 gtk_dialog_set_has_separator (GTK_DIALOG (dialog1), FALSE);
1902 dialog_vbox1 = GTK_DIALOG (dialog1)->vbox;
1904 hbox1 = gtk_hbox_new (FALSE, 12);
1905 gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0);
1906 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6);
1908 image1 = gtk_image_new_from_icon_name (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
1909 gtk_box_pack_start (GTK_BOX (hbox1), image1, TRUE, TRUE, 0);
1910 gtk_misc_set_alignment (GTK_MISC (image1), 0.5, 0);
1912 gchar *labelMessage = g_strconcat (
"<span weight=\"bold\" size=\"larger\">", _(primaryText),
1913 "</span>\n<span/>\n", _(secondaryText), NULL);
1914 label1 = gtk_label_new (labelMessage);
1915 g_free (labelMessage);
1916 GtkWidget *vbox9 = gtk_vbox_new (FALSE, 0);
1917 gtk_box_pack_start (GTK_BOX (vbox9), label1, FALSE, FALSE, 0);
1918 gtk_box_pack_start (GTK_BOX (hbox1), vbox9, FALSE, FALSE, 0);
1919 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
1920 gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE);
1924 GtkWidget *hbox2 = gtk_hbox_new (FALSE, 12);
1925 if (show_checkbox) {
1926 GtkWidget *label3 = gtk_label_new (
" ");
1928 checkbox = gtk_check_button_new_with_label(_(
"Do not show this dialog again."));
1929 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbox), FALSE);
1930 gtk_box_pack_start (GTK_BOX (hbox2), label3, FALSE, FALSE, 0);
1931 gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0);
1933 gtk_box_pack_start (GTK_BOX (vbox9), hbox2, FALSE, FALSE, 12);
1935 dialog_action_area1 = GTK_DIALOG (dialog1)->action_area;
1936 gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
1938 if (false_button_label) {
1939 false_button = gtk_button_new_from_stock (false_button_label);
1940 gtk_dialog_add_action_widget (GTK_DIALOG (dialog1),
1941 false_button, GTK_RESPONSE_CANCEL);
1942 GTK_WIDGET_SET_FLAGS (false_button, GTK_CAN_DEFAULT);
1943 gtk_widget_grab_default (false_button);
1944 gtk_widget_grab_focus (false_button);
1947 if (true_button_label) {
1948 true_button = gtk_button_new_from_stock (true_button_label);
1949 gtk_dialog_add_action_widget (GTK_DIALOG (dialog1),
1950 true_button, GTK_RESPONSE_OK);
1951 GTK_WIDGET_SET_FLAGS (true_button, GTK_CAN_DEFAULT);
1954 gtk_widget_show_all (dialog1);
1956 if (gtk_dialog_run ((GtkDialog*)dialog1) == GTK_RESPONSE_OK) {
1958 if ((show_checkbox == TRUE) &&
1959 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)) == TRUE) &&
1960 (ask_to_show_again != NULL) ) {
1963 *ask_to_show_again = FALSE;
1967 gtk_widget_destroy (dialog1);
1973 interface_reopen_question_callback_select_all (GtkWidget *checkbox,
1978 if (gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (checkbox)))
1979 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE);
1981 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (checkbox), FALSE);
1983 for (GSList *cb = user_data; cb; cb = cb->next) {
1984 gtk_toggle_button_set_active (cb->data,
1985 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox)));
1989 struct interface_reopen_question_struct {
1990 GtkWidget *set_all_checkbox;
1991 GSList *checkbox_list;
1995 interface_reopen_question_callback_checkbox(GtkWidget *checkbox,
1998 struct interface_reopen_question_struct *st = user_data;
1999 gboolean all_set = TRUE, all_clear = TRUE;
2001 if (st->set_all_checkbox == NULL)
2004 for (GSList *cb = st->checkbox_list; cb; cb = cb->next) {
2005 if (gtk_toggle_button_get_active(cb->data))
2011 gtk_toggle_button_set_inconsistent (
2012 GTK_TOGGLE_BUTTON (st->set_all_checkbox), FALSE);
2015 gtk_toggle_button_set_active (
2016 GTK_TOGGLE_BUTTON (st->set_all_checkbox), TRUE);
2018 gtk_toggle_button_set_active (
2019 GTK_TOGGLE_BUTTON (st->set_all_checkbox), FALSE);
2021 gtk_toggle_button_set_inconsistent (
2022 GTK_TOGGLE_BUTTON (st->set_all_checkbox), TRUE);
2027 interface_reopen_question_add_filename_checkboxes (
2028 GSList *fns, GSList *fns_is_mod,
2029 GSList *fns_cnt, GSList *fns_lay_num, GtkWidget *box)
2031 GtkWidget *scrl_win, *vbox;
2032 GSList *checkboxes = NULL;
2034 scrl_win = gtk_scrolled_window_new (NULL, NULL);
2035 gtk_box_pack_start (GTK_BOX (box), scrl_win, TRUE, TRUE, 0);
2036 gtk_container_set_border_width (GTK_CONTAINER (scrl_win), 2);
2037 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrl_win),
2038 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2040 vbox = gtk_vbox_new (FALSE, 2);
2041 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrl_win), vbox);
2043 for (
unsigned int i = 0; i < g_slist_length (fns); i++) {
2045 GString *g_str = g_string_new (NULL);
2046 gchar *bn = g_path_get_basename (g_slist_nth_data (fns, i));
2047 int cnt = GPOINTER_TO_INT (g_slist_nth_data (fns_cnt, i));
2048 int lay_num = 1 + GPOINTER_TO_INT (g_slist_nth_data (fns_lay_num, i));
2050 if (GPOINTER_TO_INT (g_slist_nth_data (fns_is_mod, i))) {
2053 g_string_printf (g_str, ngettext(
2054 "<b>%d</b> *<i>%s</i> (<b>changed</b>, %d layer)",
2055 "<b>%d</b> *<i>%s</i> (<b>changed</b>, %d layers)", cnt),
2058 g_string_printf (g_str, _(
"<b>%d</b> *<i>%s</i> (<b>changed</b>)"),
2063 g_string_printf (g_str, ngettext(
2064 "<b>%d</b> %s (%d layer)",
2065 "<b>%d</b> %s (%d layers)", cnt), lay_num, bn, cnt);
2067 g_string_printf (g_str, _(
"<b>%d</b> %s"), lay_num, bn);
2071 cb = gtk_check_button_new_with_label (
"");
2072 gtk_label_set_markup (GTK_LABEL (gtk_bin_get_child (GTK_BIN (cb))),
2074 g_string_free (g_str, TRUE);
2075 checkboxes = g_slist_append (checkboxes, cb);
2076 gtk_box_pack_start (GTK_BOX (vbox), cb, FALSE, FALSE, 0);
2093 GSList *fns_cnt, GSList *fns_lay_num)
2096 GtkWidget *hbox, *vbox_main, *image,
2097 *selectAllCheckBox = NULL;
2098 GSList *fnCheckButtons = NULL;
2099 GtkWidget *label, *reloadButton, *openAsNewButton;
2100 struct interface_reopen_question_struct checkboxes_struct;
2101 GString *g_str = g_string_new (NULL);
2105 fns_len = g_slist_length (fns);
2107 return GTK_RESPONSE_NONE;
2109 dialog = GTK_DIALOG (gtk_dialog_new());
2110 gtk_window_set_title (GTK_WINDOW (dialog), _(
"Gerbv — Reload Files"));
2111 gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
2112 gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
2113 gtk_dialog_set_has_separator (dialog, FALSE);
2115 hbox = gtk_hbox_new (FALSE, 12);
2116 gtk_box_pack_start (GTK_BOX (dialog->vbox), hbox, TRUE, TRUE, 0);
2117 gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
2119 image = gtk_image_new_from_icon_name (GTK_STOCK_DIALOG_WARNING,
2120 GTK_ICON_SIZE_DIALOG);
2121 gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
2122 gtk_misc_set_alignment (GTK_MISC (image), 0, 0);
2124 vbox_main = gtk_vbox_new (FALSE, 0);
2125 gtk_box_pack_start (GTK_BOX (hbox), vbox_main, TRUE, TRUE, 0);
2127 g_string_printf (g_str,
"<span size=\"larger\">");
2128 g_string_append_printf (g_str, ngettext(
2129 "%u file is already loaded from directory",
2130 "%u files are already loaded from directory",
2132 g_string_append_printf (g_str,
"</span>\n\"%s\"",
2133 g_path_get_dirname (fns->data));
2136 label = gtk_label_new (g_str->str);
2137 gtk_box_pack_start (GTK_BOX (vbox_main), label, FALSE, FALSE, 0);
2138 gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
2139 gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
2140 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2141 gtk_label_set_selectable (GTK_LABEL (label), TRUE);
2142 g_string_free (g_str, TRUE);
2144 fnCheckButtons = interface_reopen_question_add_filename_checkboxes (
2146 fns_cnt, fns_lay_num, vbox_main);
2151 gtk_check_button_new_with_mnemonic (_(
"Select _all"));
2153 g_signal_connect ((gpointer) selectAllCheckBox,
"toggled",
2154 G_CALLBACK (interface_reopen_question_callback_select_all),
2157 gtk_box_pack_start (GTK_BOX(vbox_main), selectAllCheckBox, FALSE, FALSE, 0);
2162 gtk_toggle_button_set_active (
2163 GTK_TOGGLE_BUTTON(selectAllCheckBox), TRUE);
2166 gtk_toggle_button_set_active (
2167 GTK_TOGGLE_BUTTON(fnCheckButtons->data), TRUE);
2170 checkboxes_struct.checkbox_list = fnCheckButtons;
2171 checkboxes_struct.set_all_checkbox = selectAllCheckBox;
2174 for (GSList *cb = checkboxes_struct.checkbox_list; cb; cb = cb->next) {
2175 g_signal_connect ((gpointer) cb->data,
"toggled",
2176 G_CALLBACK (interface_reopen_question_callback_checkbox),
2177 &checkboxes_struct);
2180 gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog->action_area),
2183 reloadButton = gtk_button_new_with_mnemonic (_(
"_Reload"));
2184 gtk_widget_set_tooltip_text (reloadButton,
2185 _(
"Reload layers with selected files"));
2186 gtk_dialog_add_action_widget (dialog, reloadButton, GTK_RESPONSE_YES);
2187 GTK_WIDGET_SET_FLAGS (reloadButton, GTK_CAN_DEFAULT);
2189 openAsNewButton = gtk_button_new_with_mnemonic (_(
"Add as _new"));
2190 gtk_widget_set_tooltip_text (openAsNewButton,
2191 _(
"Add selected files as new layers"));
2192 gtk_dialog_add_action_widget (dialog, openAsNewButton, GTK_RESPONSE_OK);
2194 gtk_dialog_add_action_widget (dialog,
2195 gtk_button_new_from_stock (GTK_STOCK_CANCEL), GTK_RESPONSE_CANCEL);
2197 gtk_widget_show_all (GTK_WIDGET(dialog));
2199 ret = gtk_dialog_run (dialog);
2202 for (GSList *cb = fnCheckButtons, *fn = fns;
2203 cb && fn; cb = cb->next, fn = fn->next) {
2204 if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cb->data)))
2208 g_slist_free_full (fnCheckButtons, (GDestroyNotify)gtk_widget_destroy);
2209 gtk_widget_destroy (GTK_WIDGET(dialog));
2223 gboolean show_checkbox, gboolean *ask_to_show_again )
2229 GtkWidget *dialog_vbox1;
2233 GtkWidget *checkbox=NULL;
2234 GtkWidget *dialog_action_area1;
2235 GtkWidget *okbutton1;
2237 dialog1 = gtk_dialog_new ();
2238 gtk_container_set_border_width (GTK_CONTAINER (dialog1), 6);
2239 gtk_window_set_resizable (GTK_WINDOW (dialog1), FALSE);
2240 gtk_window_set_type_hint (GTK_WINDOW (dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
2241 gtk_dialog_set_has_separator (GTK_DIALOG (dialog1), FALSE);
2243 dialog_vbox1 = GTK_DIALOG (dialog1)->vbox;
2245 hbox1 = gtk_hbox_new (FALSE, 12);
2246 gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0);
2247 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6);
2249 image1 = gtk_image_new_from_icon_name (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
2250 gtk_box_pack_start (GTK_BOX (hbox1), image1, TRUE, TRUE, 0);
2251 gtk_misc_set_alignment (GTK_MISC (image1), 0.5, 0);
2253 gchar *labelMessage = g_strconcat (
"<span weight=\"bold\" size=\"larger\">", _(primaryText),
2254 "</span>\n<span/>\n", _(secondaryText), NULL);
2255 label1 = gtk_label_new (labelMessage);
2256 g_free (labelMessage);
2258 GtkWidget *vbox9 = gtk_vbox_new (FALSE, 0);
2259 gtk_box_pack_start (GTK_BOX (vbox9), label1, FALSE, FALSE, 0);
2260 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
2261 gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE);
2262 gtk_box_pack_start (GTK_BOX (hbox1), vbox9, FALSE, FALSE, 0);
2264 GtkWidget *hbox2 = gtk_hbox_new (FALSE, 12);
2265 if (show_checkbox) {
2266 GtkWidget *label3 = gtk_label_new (
" ");
2268 checkbox = gtk_check_button_new_with_label(_(
"Do not show this dialog again."));
2269 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbox), FALSE);
2270 gtk_box_pack_start (GTK_BOX (hbox2), label3, FALSE, FALSE, 0);
2271 gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0);
2273 gtk_box_pack_start (GTK_BOX (vbox9), hbox2, FALSE, FALSE, 12);
2275 dialog_action_area1 = GTK_DIALOG (dialog1)->action_area;
2276 gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
2278 okbutton1 = gtk_button_new_from_stock (GTK_STOCK_OK);
2279 gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), okbutton1, GTK_RESPONSE_OK);
2280 GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
2282 gtk_widget_show_all (dialog1);
2285 if ((show_checkbox == TRUE) &&
2286 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)) == TRUE) &&
2287 (ask_to_show_again != NULL) ) {
2290 *ask_to_show_again = FALSE;
2293 gtk_dialog_run (GTK_DIALOG(dialog1));
2294 gtk_widget_destroy (dialog1);
2299 static int focused_widget_num = 0;
2302 focus_in_event_callback (
int *widget_num)
2304 focused_widget_num = *widget_num;
2310 gerbv_gui_unit_t screenUnit) {
2312 GtkWidget *check1,*check2,*check3,*tempWidget,*tempWidget2,*tableWidget;
2313 GtkWidget *spin1,*spin2,*spin3,*spin4,*spin5;
2318 *trans = &trans_init;
2324 GtkWidget **focus_widgets[] = {&spin1, &spin2, &spin3, &spin4, &spin5, &check1, &check2, NULL};
2325 int focus_nums[G_N_ELEMENTS(focus_widgets)];
2328 dialog = gtk_dialog_new_with_buttons (_(
"Edit layer"),
2329 GTK_WINDOW (screen.win.topLevelWindow),
2330 GTK_DIALOG_DESTROY_WITH_PARENT,
2331 _(
"Apply to _active"), GTK_RESPONSE_APPLY,
2333 _(
"Apply to _visible"), GTK_RESPONSE_YES,
2334 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
2337 gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
2338 gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
2339 gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
2340 gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
2342 tableWidget = gtk_table_new (16,3,FALSE);
2343 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), tableWidget, FALSE, FALSE, 0);
2345 tempWidget = gtk_label_new (NULL);
2346 gtk_label_set_markup (GTK_LABEL (tempWidget), _(
"<span weight=\"bold\">Translation</span>"));
2347 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2348 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,0,2,0,1,GTK_EXPAND|GTK_FILL,0,0,5);
2350 tempWidget = gtk_label_new (
"");
2351 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,0,1,1,2,GTK_EXPAND|GTK_FILL,0,0,0);
2352 gdouble translateX, translateY;
2354 if (screenUnit == GERBV_MILS) {
2355 tempWidget = gtk_label_new (_(
"X (mils):"));
2356 tempWidget2 = gtk_label_new (_(
"Y (mils):"));
2357 translateX = trans->translateX * 1000;
2358 translateY = trans->translateY * 1000;
2360 else if (screen.unit == GERBV_MMS) {
2361 tempWidget = gtk_label_new (_(
"X (mm):"));
2362 tempWidget2 = gtk_label_new (_(
"Y (mm):"));
2363 translateX = trans->translateX * 25.4;
2364 translateY = trans->translateY * 25.4;
2367 tempWidget = gtk_label_new (_(
"X (inches):"));
2368 tempWidget2 = gtk_label_new (_(
"Y (inches):"));
2369 translateX = trans->translateX;
2370 translateY = trans->translateY;
2373 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2374 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,1,2,1,2,GTK_FILL,0,5,0);
2375 gtk_misc_set_alignment (GTK_MISC (tempWidget2), 0.0, 0.5);
2376 gtk_table_attach ((GtkTable *) tableWidget, tempWidget2,1,2,2,3,GTK_FILL,0,5,0);
2377 adj = (GtkAdjustment *) gtk_adjustment_new (translateX, -1000000, 1000000, 1, 10, 0.0);
2378 spin1 = (GtkWidget *) gtk_spin_button_new (adj, 0.1, 4);
2379 gtk_table_attach ((GtkTable *) tableWidget, spin1,2,3,1,2,GTK_FILL,0,0,0);
2380 adj = (GtkAdjustment *) gtk_adjustment_new (translateY, -1000000, 1000000, 1, 10, 0.0);
2381 spin2 = (GtkWidget *) gtk_spin_button_new (adj, 0.1, 4);
2382 gtk_table_attach ((GtkTable *) tableWidget, spin2,2,3,2,3,GTK_FILL,0,0,0);
2384 gtk_table_set_row_spacing ((GtkTable *) tableWidget, 3, 8);
2385 tempWidget = gtk_label_new (NULL);
2386 gtk_label_set_markup (GTK_LABEL (tempWidget), _(
"<span weight=\"bold\">Scale</span>"));
2387 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2388 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,0,2,4,5,GTK_EXPAND|GTK_FILL,0,0,5);
2390 tempWidget = gtk_label_new (_(
"X direction:"));
2391 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2392 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,1,2,5,6,GTK_FILL,0,5,0);
2393 tempWidget = gtk_label_new (_(
"Y direction:"));
2394 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2395 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,1,2,6,7,GTK_FILL,0,5,0);
2396 adj = (GtkAdjustment *) gtk_adjustment_new (trans->scaleX, -1000000, 1000000, 1, 10, 0.0);
2397 spin3 = (GtkWidget *) gtk_spin_button_new (adj, 1, 3);
2398 gtk_table_attach ((GtkTable *) tableWidget, spin3,2,3,5,6,GTK_FILL,0,0,0);
2399 adj = (GtkAdjustment *) gtk_adjustment_new (trans->scaleY, -1000000, 1000000, 1, 10, 0.0);
2400 spin4 = (GtkWidget *) gtk_spin_button_new (adj, 1, 3);
2401 gtk_table_attach ((GtkTable *) tableWidget, spin4,2,3,6,7,GTK_FILL,0,0,0);
2403 check3 = gtk_check_button_new_with_label(
"Maintain aspect ratio");
2404 gtk_toggle_button_set_active((GtkToggleButton *) check3, TRUE);
2405 gtk_table_attach((GtkTable *)tableWidget, check3, 2, 3, 7, 8, GTK_FILL, 0, 0, 0);
2407 gtk_table_set_row_spacing ((GtkTable *) tableWidget, 8, 8);
2409 tempWidget = gtk_label_new (NULL);
2410 gtk_label_set_markup (GTK_LABEL (tempWidget), _(
"<span weight=\"bold\">Rotation</span>"));
2411 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2412 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,0,2,9,10,GTK_EXPAND|GTK_FILL,0,0,5);
2414 tempWidget = gtk_label_new (_(
"Rotation (degrees):"));
2415 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2416 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,1,2,10,11,GTK_FILL,0,5,0);
2417 spin5 = gtk_combo_box_new_text();
2418 gtk_combo_box_append_text (GTK_COMBO_BOX(spin5), _(
"None"));
2419 gtk_combo_box_append_text (GTK_COMBO_BOX(spin5), _(
"90 deg CCW"));
2420 gtk_combo_box_append_text (GTK_COMBO_BOX(spin5), _(
"180 deg CCW"));
2421 gtk_combo_box_append_text (GTK_COMBO_BOX(spin5), _(
"270 deg CCW"));
2422 gdouble rot_deg = RAD2DEG(trans->rotation);
2423 if (rot_deg < 135 && rot_deg >= 45)
2424 gtk_combo_box_set_active (GTK_COMBO_BOX(spin5), 1);
2425 else if (rot_deg < 225 && rot_deg >= 135)
2426 gtk_combo_box_set_active (GTK_COMBO_BOX(spin5), 2);
2427 else if (rot_deg < 315 && rot_deg >= 225)
2428 gtk_combo_box_set_active (GTK_COMBO_BOX(spin5), 3);
2430 gtk_combo_box_set_active (GTK_COMBO_BOX(spin5), 0);
2432 adj = (GtkAdjustment *) gtk_adjustment_new (RAD2DEG(trans->rotation), -1000000, 1000000,
2434 spin5 = (GtkWidget *) gtk_spin_button_new (adj, 0, 3);
2437 gtk_table_attach ((GtkTable *) tableWidget, spin5,2,3,10,11,GTK_FILL,0,0,0);
2439 gtk_table_set_row_spacing ((GtkTable *) tableWidget, 10, 8);
2440 tempWidget = gtk_label_new (NULL);
2441 gtk_label_set_markup (GTK_LABEL (tempWidget), _(
"<span weight=\"bold\">Mirroring</span>"));
2442 gtk_misc_set_alignment (GTK_MISC (tempWidget), 0.0, 0.5);
2443 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,0,2,11,12,GTK_EXPAND|GTK_FILL,0,0,5);
2445 tempWidget = gtk_label_new (_(
"About X axis:"));
2446 gtk_misc_set_alignment (GTK_MISC (tempWidget), 1.0, 0.5);
2447 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,1,2,12,13,GTK_FILL,0,5,0);
2448 check1 = (GtkWidget *) gtk_check_button_new ();
2449 gtk_toggle_button_set_active ((GtkToggleButton *) check1, trans->mirrorAroundX);
2450 gtk_table_attach ((GtkTable *) tableWidget, check1,2,3,12,13,0,0,0,2);
2452 tempWidget = gtk_label_new (_(
"About Y axis:"));
2453 gtk_misc_set_alignment (GTK_MISC (tempWidget), 1.0, 0.5);
2454 gtk_table_attach ((GtkTable *) tableWidget, tempWidget,1,2,13,14,GTK_FILL,0,5,0);
2455 check2 = (GtkWidget *) gtk_check_button_new ();
2456 gtk_toggle_button_set_active ((GtkToggleButton *) check2, trans->mirrorAroundY);
2457 gtk_table_attach ((GtkTable *) tableWidget, check2,2,3,13,14,0,0,0,2);
2459 for (i = 0; focus_widgets[i] != NULL; i++) {
2461 if (i == focused_widget_num) {
2462 gtk_widget_grab_focus (*focus_widgets[i]);
2467 g_signal_connect_swapped ((gpointer)(*focus_widgets[i]),
"focus-in-event",
2468 G_CALLBACK (focus_in_event_callback), (gpointer)(focus_nums + i));
2471 g_signal_connect(GTK_OBJECT(spin1),
"value_changed",
2472 GTK_SIGNAL_FUNC(callbacks_live_edit), spin1);
2473 g_signal_connect(GTK_OBJECT(spin2),
"value_changed",
2474 GTK_SIGNAL_FUNC(callbacks_live_edit), spin2);
2475 g_signal_connect(GTK_OBJECT(spin3),
"value_changed",
2476 GTK_SIGNAL_FUNC(callbacks_live_edit), spin3);
2477 g_signal_connect(GTK_OBJECT(spin4),
"value_changed",
2478 GTK_SIGNAL_FUNC(callbacks_live_edit), spin4);
2479 g_signal_connect(GTK_OBJECT(spin5),
"changed",
2480 GTK_SIGNAL_FUNC(callbacks_live_edit), spin5);
2481 g_signal_connect(GTK_OBJECT(check1),
"toggled",
2482 GTK_SIGNAL_FUNC(callbacks_live_edit), check1);
2483 g_signal_connect(GTK_OBJECT(check2),
"toggled",
2484 GTK_SIGNAL_FUNC(callbacks_live_edit), check2);
2486 gtk_table_set_row_spacing ((GtkTable *) tableWidget, 14, 8);
2487 gtk_widget_show_all (dialog);
2488 gint result = GTK_RESPONSE_APPLY;
2492 while (result == GTK_RESPONSE_APPLY || result == GTK_RESPONSE_YES) {
2493 result = gtk_dialog_run (GTK_DIALOG(dialog));
2494 if (result != GTK_RESPONSE_CLOSE) {
2496 if (screenUnit == GERBV_MILS) {
2497 trans->translateX = gtk_spin_button_get_value ((GtkSpinButton *) spin1)/
2499 trans->translateY = gtk_spin_button_get_value ((GtkSpinButton *) spin2)/
2501 }
else if (screen.unit == GERBV_MMS) {
2502 trans->translateX = gtk_spin_button_get_value ((GtkSpinButton *) spin1)/
2504 trans->translateY = gtk_spin_button_get_value ((GtkSpinButton *) spin2)/
2507 trans->translateX = gtk_spin_button_get_value ((GtkSpinButton *) spin1);
2508 trans->translateY = gtk_spin_button_get_value ((GtkSpinButton *) spin2);
2512 if (gtk_toggle_button_get_active((GtkToggleButton *) check3)){
2513 if (trans->scaleX != gtk_spin_button_get_value ((GtkSpinButton *)spin3)){
2514 gtk_spin_button_set_value((GtkSpinButton *)spin4,
2515 gtk_spin_button_get_value ((GtkSpinButton *)spin3));
2518 if (trans->scaleY != gtk_spin_button_get_value ((GtkSpinButton *)spin4)){
2519 gtk_spin_button_set_value((GtkSpinButton *)spin3,
2520 gtk_spin_button_get_value ((GtkSpinButton *)spin4));
2524 trans->scaleX = gtk_spin_button_get_value ((GtkSpinButton *)spin3);
2525 trans->scaleY = gtk_spin_button_get_value ((GtkSpinButton *)spin4);
2526 gint rotationIndex = gtk_combo_box_get_active ((GtkComboBox *)spin5);
2528 if (rotationIndex == 0)
2529 trans->rotation = 0;
2530 else if (rotationIndex == 1)
2531 trans->rotation = M_PI_2;
2532 else if (rotationIndex == 2)
2533 trans->rotation = M_PI;
2534 else if (rotationIndex == 3)
2535 trans->rotation = M_PI + M_PI_2;
2537 trans->mirrorAroundX = gtk_toggle_button_get_active ((GtkToggleButton *) check1);
2538 trans->mirrorAroundY = gtk_toggle_button_get_active ((GtkToggleButton *) check2);
2540 if (result == GTK_RESPONSE_APPLY) {
2542 *transforms[0] = *trans;
2543 }
else if (result == GTK_RESPONSE_YES) {
2546 while (transforms[i] != NULL) {
2547 *transforms[i++] = *trans;
2551 render_refresh_rendered_image_on_screen ();
2552 callbacks_update_layer_tree ();
2557 if (result == GTK_RESPONSE_CANCEL) {
2559 *transform = startTransform;
2563 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.
gboolean callbacks_drawingarea_button_release_event(GtkWidget *widget, GdkEventButton *event)
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