interface.c

Go to the documentation of this file.
00001 /*
00002  * gEDA - GNU Electronic Design Automation
00003  * This file is a part of gerbv.
00004  *
00005  *   Copyright (C) 2000-2003 Stefan Petersen (spe@stacken.kth.se)
00006  *
00007  * $Id$
00008  *
00009  * This program is free software; you can redistribute it and/or modify
00010  * it under the terms of the GNU General Public License as published by
00011  * the Free Software Foundation; either version 2 of the License, or
00012  * (at your option) any later version.s
00013  *
00014  * This program is distributed in the hope that it toowill be useful,
00015  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  * GNU General Public License for more details.
00018  *
00019  * You should have received a copy of the GNU General Public License
00020  * along with this program; if not, write to the Free Software
00021  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
00022  */
00023 
00029 #ifdef HAVE_CONFIG_H
00030 #  include <config.h>
00031 #endif
00032 
00033 #include <sys/types.h>
00034 #include <sys/stat.h>
00035 #include <unistd.h>
00036 #include <string.h>
00037 #include <stdio.h>
00038 
00039 #include <gdk/gdkkeysyms.h>
00040 #include <gtk/gtk.h>
00041 
00042 #include "gerbv.h"
00043 #include "main.h"
00044 #include "callbacks.h"
00045 #include "interface.h"
00046 #include "render.h"
00047 
00048 #ifdef RENDER_USING_GDK
00049   #include "draw-gdk.h"
00050 #else
00051   #include "draw.h"
00052 #endif
00053 
00054 #include "gerbv_icon.h"
00055 #include "icons.h"
00056 extern gerbv_render_info_t screenRenderInfo;
00057 
00058 static        GtkWidget *render_combobox;
00059 
00060 #define WIN_TITLE "Gerbv -- gEDA's Gerber Viewer"
00061 #define _(String) (String)
00062 
00063 /* ---------------------------------------------- */
00064 void
00065 rename_main_window(char const* filename, GtkWidget *main_win)
00066 {
00067        GString *win_title=g_string_new(NULL);
00068        static GtkWidget *win=NULL;
00069 
00070        if( main_win != NULL )
00071        win = main_win;
00072 
00073        g_assert(win != NULL);
00074 
00075        g_string_printf (win_title,"%s version %s: %s", WIN_TITLE, VERSION, filename);
00076        gtk_window_set_title(GTK_WINDOW(win), win_title->str);
00077        g_string_free(win_title,TRUE);                    
00078 }
00079 
00080 /* ---------------------------------------------- */
00081 void
00082 set_window_icon (GtkWidget * this_window)
00083 {
00084        GdkPixmap *pixmap;
00085        GdkBitmap *mask;
00086 
00087        pixmap = gdk_pixmap_create_from_xpm_d (this_window->window, &mask,
00088               &this_window->style->bg[GTK_STATE_NORMAL], gerbv_icon_xpm);
00089        gdk_window_set_icon (this_window->window, NULL, pixmap, mask);
00090 
00091        return;
00092 }
00093 
00094 /* ---------------------------------------------- */
00095 void
00096 interface_create_gui (int req_width, int req_height)
00097 {
00098        GtkWidget *mainWindow;
00099        GtkWidget *vbox1;
00100        GtkWidget *menubar1;
00101 
00102        GtkWidget *menuitem_file;
00103        GtkWidget *menuitem_file_menu;
00104        GtkWidget *new;
00105        GtkWidget *open_project;
00106        GtkWidget *image33;
00107        GtkWidget *open_layer;
00108        GtkWidget *revert;
00109        GtkWidget *save;
00110        GtkWidget *save_as;
00111        GtkWidget *save_layer;
00112        GtkWidget *save_as_layer;
00113        GtkWidget *separatormenuitem1;
00114        GtkWidget *export;
00115        GtkWidget *export_menu;
00116        GtkWidget *png;
00117        GtkWidget *separator1;
00118        GtkWidget *quit;
00119 
00120        GtkWidget *menuitem_edit;
00121        GtkWidget *menuitem_edit_menu;
00122        GtkWidget *delete_selected;
00123 
00124        GtkWidget *menuitem_view;
00125        GtkWidget *menuitem_view_menu;
00126        GtkWidget *zoom_in;
00127        GtkWidget *zoom_out;
00128        GtkWidget *separator5;
00129        GtkWidget *fit_to_window;
00130        GtkWidget *menuitem_analyze;
00131        GtkWidget *menuitem_analyze_menu;
00132        GtkWidget *analyze_active_gerbers;
00133        GtkWidget *analyze_active_drill;
00134        GtkWidget *analyze_display_selected_obj_props;
00135        /*
00136        GtkWidget *control_gerber_options;
00137        */
00138        GtkWidget *menubar_tools;
00139        GtkWidget *menubar_tools_menu;
00140 #ifndef RENDER_USING_GDK
00141        GtkWidget *toggletoolbutton_pointer;
00142        GtkWidget *pointer_tool;
00143        GdkPixbuf *pointerpixbuf;
00144        GtkWidget *pointerimage;
00145 #endif
00146        GtkWidget *pan_tool;
00147        GtkWidget *zoom_tool;
00148        GtkWidget *measure_tool;
00149        GtkWidget *menuitem10;
00150        GtkWidget *menuitem10_menu;
00151        /*GtkWidget *online_manual;*/
00152        GtkWidget *about;
00153        GtkWidget *image34;
00154        GtkWidget *toolbar_hbox;
00155        GtkWidget *handlebox;
00156        GtkWidget *button_toolbar;
00157        GtkIconSize tmp_toolbar_icon_size;
00158        GtkWidget *toolbutton_new;
00159        GtkWidget *toolbutton_open;
00160        GtkWidget *toolbutton_revert;
00161        GtkWidget *toolbutton_save;
00162        GtkWidget *separatortoolitem1;
00163 #ifndef RENDER_USING_GDK
00164 #if GTK_CHECK_VERSION(2,10,0)
00165        GtkWidget *print;
00166        GtkWidget *toolbutton_print;
00167        GtkWidget *separator2;
00168        GtkWidget *separatortoolitem2;
00169 #endif
00170 #endif
00171        GtkWidget *toolbutton_zoom_in;
00172        GtkWidget *toolbutton_zoom_out;
00173        GtkWidget *toolbutton_zoom_fit;
00174        /* Implement these tool buttons later when we have icons */
00175 /*     GtkWidget *separatortoolitem3; */
00176 /*     GtkWidget *toolbutton_analyze; */
00177 /*     GtkWidget *toolbutton_validate;*/
00178 /*     GtkWidget *toolbutton_control; */
00179        GtkWidget *separatortoolitem4;
00180        GtkWidget *toggletoolbutton_pan;
00181        GtkWidget *toggletoolbutton_zoom;
00182        GtkWidget *toggletoolbutton_measure;
00183        GtkWidget *hpaned1;
00184        GtkWidget *sidepane_vbox;
00185        GtkWidget *sidepane_notebook;
00186        GtkWidget *vbox10;
00187        GtkWidget *hbox4;
00188        GtkWidget *label1;
00189        GtkWidget *scrolledwindow1;
00190        GtkWidget *hbox1;
00191        GtkWidget *button4;
00192        GtkWidget *image8;
00193        GtkWidget *button5;
00194        GtkWidget *image9;
00195        GtkWidget *button6;
00196        GtkWidget *image10;
00197        GtkWidget *button7;
00198        GtkWidget *image11;
00199        GtkWidget *Layer_label;
00200        GtkWidget *vbox11;
00201        GtkWidget *messages_scrolledwindow;
00202        GtkWidget *message_textview;
00203        GtkWidget *clear_messages_button;
00204        GtkWidget *Message_label;
00205        GtkWidget *vbox2;
00206        GtkWidget *main_view_table;
00207        GtkWidget *hRuler;
00208        GtkWidget *vRuler;
00209        GtkWidget *hbox5;
00210        GtkWidget *statusbar_label_left;
00211        GtkWidget *combobox2;
00212        GtkWidget *statusbar_label_right;
00213        GtkWidget *drawingarea, *hAdjustment, *vAdjustment, *hScrollbar, *vScrollbar;
00214        
00215        GtkAccelGroup *accel_group;
00216        GtkTooltips *tooltips;
00217 
00218        /* Inline icons */
00219        GdkPixbuf *zoompixbuf;
00220        GtkWidget *zoomimage;
00221        GdkPixbuf *measurepixbuf;
00222        GtkWidget *measureimage;
00223        GdkPixbuf *movepixbuf;
00224        GtkWidget *moveimage;
00225 
00226        GtkWidget *tempImage;
00227        GtkWidget *tempMenuItem;
00228        
00229        GtkStockItem item;
00230 #ifndef RENDER_USING_GDK
00231        pointerpixbuf = gdk_pixbuf_new_from_inline(-1, pointer, FALSE, NULL);
00232 #endif
00233        movepixbuf = gdk_pixbuf_new_from_inline(-1, move, FALSE, NULL);
00234        zoompixbuf = gdk_pixbuf_new_from_inline(-1, lzoom, FALSE, NULL);
00235        measurepixbuf = gdk_pixbuf_new_from_inline(-1, ruler, FALSE, NULL);
00236        
00237        tooltips = gtk_tooltips_new();
00238 
00239        accel_group = gtk_accel_group_new ();
00240 
00241        mainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
00242        gtk_window_set_title (GTK_WINDOW (mainWindow), _("Gerbv -- gEDA's Gerber Viewer"));
00243 
00244        vbox1 = gtk_vbox_new (FALSE, 0);
00245        gtk_container_add (GTK_CONTAINER (mainWindow), vbox1);
00246 
00247        menubar1 = gtk_menu_bar_new ();
00248        gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
00249 
00250        menuitem_file = gtk_menu_item_new_with_mnemonic (_("_File"));
00251        gtk_container_add (GTK_CONTAINER (menubar1), menuitem_file);
00252 
00253        menuitem_file_menu = gtk_menu_new ();
00254        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_file), menuitem_file_menu);
00255 
00256        new = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group);
00257        gtk_tooltips_set_tip (tooltips, new, "Close all layers and start a new project", NULL);
00258        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), new);
00259        gtk_widget_add_accelerator (new, "activate", accel_group,
00260                                GDK_n, (GdkModifierType) GDK_CONTROL_MASK,
00261                                GTK_ACCEL_VISIBLE);
00262 
00263        open_layer = gtk_menu_item_new_with_mnemonic (_("Open _Layer(s)..."));
00264        
00265        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), open_layer);
00266        gtk_tooltips_set_tip (tooltips, open_layer, "Open Gerber, drill, or pick and place file(s)", NULL);
00267 
00268        revert = gtk_image_menu_item_new_from_stock ("gtk-revert-to-saved", accel_group);
00269        gtk_tooltips_set_tip (tooltips, revert, "Reload all layers", NULL);
00270        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), revert);
00271 
00272        if (gtk_stock_lookup("gtk-save", &item)) {
00273            gchar new_save[] = "_Save active layer"; 
00274            item.label = new_save;
00275            gtk_stock_add(&item, 1);
00276        }
00277        save_layer = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group);
00278        gtk_tooltips_set_tip (tooltips, save_layer, "Save the active layer", NULL);
00279        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save_layer);
00280        
00281        if (gtk_stock_lookup("gtk-save-as", &item)) {
00282            gchar new_saveas[] = "Save active layer _As..."; 
00283            item.label = new_saveas;
00284            gtk_stock_add(&item, 1);
00285        }
00286        save_as_layer = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group);
00287        gtk_tooltips_set_tip (tooltips, save_as_layer, "Save the active layer to a new file", NULL);
00288        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save_as_layer);
00289        
00290        separator1 = gtk_separator_menu_item_new ();
00291        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), separator1);
00292        gtk_widget_set_sensitive (separator1, FALSE);
00293 
00294        open_project = gtk_image_menu_item_new_with_mnemonic (_("_Open Project..."));
00295        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), open_project);
00296        gtk_tooltips_set_tip (tooltips, open_project, "Open an existing Gerbv project", NULL);
00297        image33 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
00298        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open_project), image33);
00299 
00300        
00301        save = gtk_image_menu_item_new_with_mnemonic ("Save Project");
00302        gtk_tooltips_set_tip (tooltips, save, "Save the current project", NULL);
00303        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save);
00304 
00305        if (gtk_stock_lookup("gtk-save-as", &item)) {
00306            gchar new[] = "Save Project as..."; 
00307            item.label = new;
00308            gtk_stock_add(&item, 1);
00309        }
00310        
00311        save_as = gtk_image_menu_item_new_with_mnemonic ("Save Project As...");
00312        gtk_tooltips_set_tip (tooltips, save_as, "Save the current project to a new file", NULL);
00313        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), save_as);
00314        
00315        separatormenuitem1 = gtk_separator_menu_item_new ();
00316        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), separatormenuitem1);
00317        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
00318 
00319        export = gtk_menu_item_new_with_mnemonic (_("_Export"));
00320        gtk_tooltips_set_tip (tooltips, export, "Export all visible layers to a new format", NULL);
00321        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), export);
00322 
00323        export_menu = gtk_menu_new ();
00324        gtk_menu_item_set_submenu (GTK_MENU_ITEM (export), export_menu);
00325 
00326        png = gtk_menu_item_new_with_mnemonic (_("PNG..."));
00327        gtk_container_add (GTK_CONTAINER (export_menu), png);
00328        gtk_tooltips_set_tip (tooltips, png, _("Export project to a PNG file..."), NULL);
00329 
00330        GtkWidget *rs274x,*drill;
00331 #ifndef RENDER_USING_GDK
00332        GtkWidget *pdf;
00333        GtkWidget *svg;
00334        GtkWidget *postscript;
00335        
00336        pdf = gtk_menu_item_new_with_mnemonic (_("PDF..."));
00337        gtk_container_add (GTK_CONTAINER (export_menu), pdf);
00338        gtk_tooltips_set_tip (tooltips, pdf, _("Export project to a PDF file..."), NULL);
00339 
00340        svg = gtk_menu_item_new_with_mnemonic (_("SVG..."));
00341        gtk_container_add (GTK_CONTAINER (export_menu), svg);
00342        gtk_tooltips_set_tip (tooltips, svg, _("Export project to a SVG file"), NULL);
00343        
00344        postscript = gtk_menu_item_new_with_mnemonic (_("PostScript..."));
00345        gtk_container_add (GTK_CONTAINER (export_menu), postscript);
00346        gtk_tooltips_set_tip (tooltips, postscript, _("Export project to a PostScript file"), NULL);
00347 #endif
00348        rs274x = gtk_menu_item_new_with_mnemonic (_("RS-274X (Gerber)..."));
00349        gtk_container_add (GTK_CONTAINER (export_menu), rs274x);
00350        gtk_tooltips_set_tip (tooltips, rs274x, _("Export layer to a RS-274X (Gerber) file"), NULL);
00351        
00352        drill = gtk_menu_item_new_with_mnemonic (_("Excellon drill..."));
00353        gtk_container_add (GTK_CONTAINER (export_menu), drill);
00354        gtk_tooltips_set_tip (tooltips, drill, _("Export layer to an Excellon drill file"), NULL);
00355        
00356        separator1 = gtk_separator_menu_item_new ();
00357        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), separator1);
00358        gtk_widget_set_sensitive (separator1, FALSE);
00359 #ifndef RENDER_USING_GDK
00360 #if GTK_CHECK_VERSION(2,10,0)
00361        if (gtk_stock_lookup("gtk-print", &item)) {
00362            gchar new[] = "_Print..."; 
00363            item.label = new;
00364            gtk_stock_add(&item, 1);
00365        }
00366 
00367        print = gtk_image_menu_item_new_from_stock ("gtk-print", accel_group);
00368        gtk_tooltips_set_tip (tooltips, print, "Print the visible layers", NULL);
00369        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), print);
00370 
00371        separator2 = gtk_separator_menu_item_new ();
00372        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), separator2);
00373        gtk_widget_set_sensitive (separator2, FALSE);
00374 #endif
00375 #endif
00376        quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
00377        gtk_tooltips_set_tip (tooltips, quit, "Quit Gerbv", NULL);
00378        gtk_container_add (GTK_CONTAINER (menuitem_file_menu), quit);
00379 
00380        /* --- Next menu item --- */
00381        menuitem_edit = gtk_menu_item_new_with_mnemonic (_("_Edit"));
00382        gtk_container_add (GTK_CONTAINER (menubar1), menuitem_edit);
00383 
00384        menuitem_edit_menu = gtk_menu_new ();
00385        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_edit), menuitem_edit_menu);
00386 
00387        delete_selected = gtk_image_menu_item_new_with_mnemonic (_("_Delete selected object(s)"));
00388        gtk_tooltips_set_tip (tooltips, delete_selected, 
00389                            "Delete selected objects", NULL);
00390        tempImage = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
00391        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (delete_selected), tempImage);
00392        gtk_container_add (GTK_CONTAINER (menuitem_edit_menu), delete_selected);
00393 
00394 
00395        /* --- Next menu item --- */
00396        menuitem_view = gtk_menu_item_new_with_mnemonic (_("_View"));
00397        gtk_container_add (GTK_CONTAINER (menubar1), menuitem_view);
00398 
00399        menuitem_view_menu = gtk_menu_new ();
00400        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_view), menuitem_view_menu);
00401 
00402        zoom_in = gtk_image_menu_item_new_from_stock ("gtk-zoom-in", accel_group);
00403        gtk_tooltips_set_tip (tooltips, zoom_in, "Zoom in", NULL);
00404        gtk_container_add (GTK_CONTAINER (menuitem_view_menu), zoom_in);
00405 
00406        zoom_out = gtk_image_menu_item_new_from_stock ("gtk-zoom-out", accel_group);
00407        gtk_tooltips_set_tip (tooltips, zoom_out, "Zoom out", NULL);
00408        gtk_container_add (GTK_CONTAINER (menuitem_view_menu), zoom_out);
00409 
00410        separator5 = gtk_separator_menu_item_new ();
00411        gtk_container_add (GTK_CONTAINER (menuitem_view_menu), separator5);
00412        gtk_widget_set_sensitive (separator5, FALSE);
00413 
00414        fit_to_window = gtk_image_menu_item_new_from_stock ("gtk-zoom-fit", accel_group);
00415        gtk_tooltips_set_tip (tooltips, fit_to_window, "Zoom to fit all visible layers in the window", NULL);
00416        gtk_container_add (GTK_CONTAINER (menuitem_view_menu), fit_to_window);
00417 
00418        menuitem_analyze = gtk_menu_item_new_with_mnemonic (_("_Analyze"));
00419        gtk_container_add (GTK_CONTAINER (menubar1), menuitem_analyze);
00420 
00421        menuitem_analyze_menu = gtk_menu_new ();
00422        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem_analyze), menuitem_analyze_menu);
00423 
00424        analyze_active_gerbers = gtk_menu_item_new_with_mnemonic (_("_Analyze visible Gerber layers"));
00425        gtk_tooltips_set_tip (tooltips, analyze_active_gerbers, 
00426                            "Examine a detailed anaylsis of the contents of all visible Gerber layers", NULL);
00427        gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu), analyze_active_gerbers);
00428 
00429        analyze_active_drill = gtk_menu_item_new_with_mnemonic (_("_Analyze visible drill layers"));
00430        gtk_tooltips_set_tip (tooltips, analyze_active_drill, 
00431                            "Examine a detailed anaylsis of the contents of all visible drill layers", NULL);
00432        gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu), analyze_active_drill);
00433 
00434        analyze_display_selected_obj_props = gtk_menu_item_new_with_mnemonic (_("_Display selected object(s) properties"));
00435        gtk_tooltips_set_tip (tooltips, analyze_display_selected_obj_props, 
00436                            "Show the properties of the selected object(s).", NULL);
00437        gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu), analyze_display_selected_obj_props);
00438 
00439        /* Wait and add in for 2.1??
00440        control_gerber_options = gtk_menu_item_new_with_mnemonic (_("Control Gerber options..."));
00441        gtk_tooltips_set_tip (tooltips, control_gerber_options, "Set which Gerber features should be displayed", NULL);
00442        gtk_container_add (GTK_CONTAINER (menuitem_analyze_menu), control_gerber_options);
00443        */
00444        menubar_tools = gtk_menu_item_new_with_mnemonic (_("_Tools"));
00445        gtk_container_add (GTK_CONTAINER (menubar1), menubar_tools);
00446 
00447        menubar_tools_menu = gtk_menu_new ();
00448        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menubar_tools), menubar_tools_menu);
00449 #ifndef RENDER_USING_GDK
00450        pointer_tool = gtk_image_menu_item_new_with_mnemonic (_("_Pointer Tool"));
00451        /*
00452        GtkWidget *tempImage = gtk_image_new_from_pixbuf (pointerpixbuf);
00453        gtk_image_menu_item_set_image ((GtkImageMenuItem *)pointer_tool, tempImage);
00454        */
00455        gtk_container_add (GTK_CONTAINER (menubar_tools_menu), pointer_tool);
00456        gtk_tooltips_set_tip (tooltips, pointer_tool, "Select objects on the screen", NULL);
00457        gtk_widget_add_accelerator (pointer_tool, "activate", accel_group,
00458                                GDK_F1, (GdkModifierType) 0,
00459                                GTK_ACCEL_VISIBLE);
00460 #endif
00461        pan_tool = gtk_image_menu_item_new_with_mnemonic ("Pa_n Tool");
00462        /*
00463        tempImage = gtk_image_new_from_pixbuf (movepixbuf);
00464        gtk_image_menu_item_set_image ((GtkImageMenuItem *)pan_tool, tempImage);
00465        */
00466        gtk_container_add (GTK_CONTAINER (menubar_tools_menu), pan_tool);
00467        gtk_tooltips_set_tip (tooltips, pan_tool, "Pan by left clicking and dragging", NULL);
00468        gtk_widget_add_accelerator (pan_tool, "activate", accel_group,
00469                                GDK_F2, (GdkModifierType) 0,
00470                                GTK_ACCEL_VISIBLE);
00471 
00472        zoom_tool = gtk_image_menu_item_new_with_mnemonic (_("_Zoom Tool"));
00473        /*
00474        tempImage = gtk_image_new_from_pixbuf (zoompixbuf);
00475        gtk_image_menu_item_set_image ((GtkImageMenuItem *)zoom_tool, tempImage);
00476        */
00477        gtk_container_add (GTK_CONTAINER (menubar_tools_menu), zoom_tool);
00478        gtk_tooltips_set_tip (tooltips, zoom_tool, "Zoom by left clicking or dragging", NULL);
00479        gtk_widget_add_accelerator (zoom_tool, "activate", accel_group,
00480                                GDK_F3, (GdkModifierType) 0,
00481                                GTK_ACCEL_VISIBLE);
00482 
00483        measure_tool = gtk_image_menu_item_new_with_mnemonic (_("_Measure Tool"));
00484        /*
00485        tempImage = gtk_image_new_from_pixbuf (measurepixbuf);
00486        gtk_image_menu_item_set_image ((GtkImageMenuItem *)measure_tool, tempImage);
00487        */
00488        gtk_container_add (GTK_CONTAINER (menubar_tools_menu), measure_tool);
00489        gtk_tooltips_set_tip (tooltips, measure_tool, "Measure distances on the screen", NULL);
00490        gtk_widget_add_accelerator (measure_tool, "activate", accel_group,
00491                                GDK_F4, (GdkModifierType) 0,
00492                                GTK_ACCEL_VISIBLE);
00493 
00494        menuitem10 = gtk_menu_item_new_with_mnemonic (_("_Help"));
00495        gtk_container_add (GTK_CONTAINER (menubar1), menuitem10);
00496 
00497        menuitem10_menu = gtk_menu_new ();
00498        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem10), menuitem10_menu);
00499        /* Not ready for 2.0
00500        online_manual = gtk_menu_item_new_with_mnemonic (_("_Online Manual..."));
00501        gtk_container_add (GTK_CONTAINER (menuitem10_menu), online_manual);
00502        gtk_tooltips_set_tip (tooltips, online_manual, "View the online help documentation", NULL);
00503        */
00504        about = gtk_image_menu_item_new_with_mnemonic (_("_About Gerbv..."));
00505        gtk_container_add (GTK_CONTAINER (menuitem10_menu), about);
00506        gtk_tooltips_set_tip (tooltips, about, "View information about this software", NULL);
00507 
00508        image34 = gtk_image_new_from_stock ("gtk-dialog-info", GTK_ICON_SIZE_MENU);
00509        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about), image34);
00510 
00511        toolbar_hbox = gtk_hbox_new (FALSE, 0);
00512        gtk_box_pack_start (GTK_BOX (vbox1), toolbar_hbox, FALSE, FALSE, 0);
00513 
00514        handlebox = gtk_handle_box_new ();
00515        
00516        gtk_box_pack_start (GTK_BOX (toolbar_hbox), handlebox, TRUE, TRUE, 0);
00517 
00518        button_toolbar = gtk_toolbar_new ();
00519        gtk_widget_set_size_request (button_toolbar, 500, -1);
00520        gtk_container_add (GTK_CONTAINER (handlebox), button_toolbar);
00521        gtk_toolbar_set_style (GTK_TOOLBAR (button_toolbar), GTK_TOOLBAR_ICONS);
00522        tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (button_toolbar));
00523 
00524        toolbutton_new = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-new");
00525        gtk_tooltips_set_tip (tooltips, toolbutton_new, "Close all layers and start a new project", NULL);
00526        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_new);
00527 
00528        toolbutton_open = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-open");
00529        gtk_tooltips_set_tip (tooltips, toolbutton_open, "Open Gerber, drill, or pick and place file(s)", NULL);
00530        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_open);
00531 
00532        toolbutton_revert = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-revert-to-saved");
00533        gtk_tooltips_set_tip (tooltips, toolbutton_revert, "Reload all layers", NULL);
00534        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_revert);
00535 
00536        toolbutton_save = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-save");
00537        gtk_tooltips_set_tip (tooltips, toolbutton_save, "Save the current project", NULL);
00538        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_save);
00539 
00540        separatortoolitem1 = (GtkWidget*) gtk_separator_tool_item_new ();
00541        gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem1);
00542 #ifndef RENDER_USING_GDK
00543 #if GTK_CHECK_VERSION(2,10,0)
00544        toolbutton_print = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-print");
00545        gtk_tooltips_set_tip (tooltips, toolbutton_print, "Print the visible layers", NULL);
00546        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_print);
00547 
00548        separatortoolitem2 = (GtkWidget*) gtk_separator_tool_item_new ();
00549        gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem2);
00550 #endif
00551 #endif
00552        toolbutton_zoom_in = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-in");
00553        gtk_tooltips_set_tip (tooltips, toolbutton_zoom_in, "Zoom in", NULL);
00554        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_zoom_in);
00555 
00556        toolbutton_zoom_out = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-out");
00557        gtk_tooltips_set_tip (tooltips, toolbutton_zoom_out, "Zoom out", NULL);
00558        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_zoom_out);
00559 
00560        toolbutton_zoom_fit = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-fit");
00561        gtk_tooltips_set_tip (tooltips, toolbutton_zoom_fit, "Zoom to fit all visible layers in the window", NULL);
00562        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_zoom_fit);
00563 
00564 /* Turn these on later when we have icons for these buttons */
00565 /*
00566        separatortoolitem3 = (GtkWidget*) gtk_separator_tool_item_new ();
00567        gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem3);
00568 
00569        toolbutton_analyze = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-apply");
00570        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_analyze);
00571 
00572        toolbutton_validate = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-apply");
00573        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_validate);
00574 
00575        toolbutton_control = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-apply");
00576        gtk_container_add (GTK_CONTAINER (button_toolbar), toolbutton_control);
00577 */
00578 
00579        separatortoolitem4 = (GtkWidget*) gtk_separator_tool_item_new ();
00580        gtk_container_add (GTK_CONTAINER (button_toolbar), separatortoolitem4);
00581 #ifndef RENDER_USING_GDK
00582        toggletoolbutton_pointer = (GtkWidget*) gtk_toggle_tool_button_new();
00583        pointerimage = gtk_image_new_from_pixbuf(pointerpixbuf);
00584        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_pointer),
00585                                    pointerimage);
00586        gtk_tooltips_set_tip (tooltips, toggletoolbutton_pointer, "Select objects on the screen", NULL);  
00587        gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_pointer);
00588 #endif 
00589        toggletoolbutton_pan = (GtkWidget*) gtk_toggle_tool_button_new();
00590        moveimage = gtk_image_new_from_pixbuf(movepixbuf);
00591        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_pan),
00592                                    moveimage);
00593        gtk_tooltips_set_tip (tooltips, toggletoolbutton_pan, "Pan by left clicking and dragging", NULL);
00594        gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_pan);
00595        
00596 
00597        toggletoolbutton_zoom = (GtkWidget*) gtk_toggle_tool_button_new();
00598        zoomimage = gtk_image_new_from_pixbuf(zoompixbuf);
00599        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_zoom),
00600                                    zoomimage);
00601        gtk_tooltips_set_tip (tooltips, toggletoolbutton_zoom, "Zoom by left clicking or dragging", NULL);
00602        gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_zoom);
00603 
00604        toggletoolbutton_measure = (GtkWidget*) gtk_toggle_tool_button_new();
00605        measureimage = gtk_image_new_from_pixbuf(measurepixbuf);
00606        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toggletoolbutton_measure),
00607                                    measureimage);
00608        gtk_tooltips_set_tip (tooltips, toggletoolbutton_measure, "Measure distances on the screen", NULL);
00609        gtk_container_add (GTK_CONTAINER (button_toolbar), toggletoolbutton_measure);
00610        
00611        hpaned1 = gtk_hpaned_new ();
00612        gtk_box_pack_start (GTK_BOX (vbox1), hpaned1, TRUE, TRUE, 0);
00613        gtk_paned_set_position (GTK_PANED (hpaned1), 225);
00614 
00615        sidepane_vbox = gtk_vbox_new (FALSE, 0);
00616        gtk_widget_set_size_request (sidepane_vbox, 150, -1);
00617        
00618        gtk_paned_pack1 (GTK_PANED (hpaned1), sidepane_vbox, TRUE, FALSE);
00619        gtk_container_set_border_width (GTK_CONTAINER (sidepane_vbox), 5);
00620 
00621        sidepane_notebook = gtk_notebook_new ();
00622        gtk_widget_set_size_request (sidepane_notebook, 100, -1);
00623        gtk_box_pack_start (GTK_BOX (sidepane_vbox), sidepane_notebook, TRUE, TRUE, 0);
00624 
00625        vbox10 = gtk_vbox_new (FALSE, 3);
00626        gtk_container_add (GTK_CONTAINER (sidepane_notebook), vbox10);
00627        gtk_widget_set_size_request (vbox10, 82, -1);
00628        gtk_container_set_border_width (GTK_CONTAINER (vbox10), 4);
00629 
00630        hbox4 = gtk_hbox_new (FALSE, 0);
00631        gtk_box_pack_start (GTK_BOX (vbox10), hbox4, FALSE, FALSE, 0);
00632 
00633        label1 = gtk_label_new (_("Rendering: "));
00634        gtk_box_pack_start (GTK_BOX (hbox4), label1, FALSE, FALSE, 0);
00635 
00636        render_combobox = gtk_combo_box_new_text ();
00637        gtk_box_pack_start (GTK_BOX (hbox4), render_combobox, TRUE, TRUE, 0);
00638 #ifdef RENDER_USING_GDK
00639        gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _("Normal"));
00640        gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _("XOR"));
00641        if (screenRenderInfo.renderType < 2)
00642            gtk_combo_box_set_active (GTK_COMBO_BOX (render_combobox), screenRenderInfo.renderType);
00643 #else
00644        gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _("Fast"));
00645        gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _("Fast, with XOR"));
00646        gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _("Normal"));
00647        gtk_combo_box_append_text (GTK_COMBO_BOX (render_combobox), _("High quality"));
00648        if (screenRenderInfo.renderType < 4)
00649            gtk_combo_box_set_active (GTK_COMBO_BOX (render_combobox), screenRenderInfo.renderType);
00650 #endif
00651        scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
00652        gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow1, TRUE, TRUE, 0);
00653        gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow1), 2);
00654        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), 
00655                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
00656        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), 
00657                                         GTK_SHADOW_IN);
00658 
00659        hbox1 = gtk_hbox_new (TRUE, 0);
00660        gtk_box_pack_start (GTK_BOX (vbox10), hbox1, FALSE, FALSE, 0);
00661 
00662        button4 = gtk_button_new ();
00663        gtk_box_pack_start (GTK_BOX (hbox1), button4, FALSE, TRUE, 0);
00664 
00665        image8 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_BUTTON);
00666        gtk_container_add (GTK_CONTAINER (button4), image8);
00667 
00668        button5 = gtk_button_new ();
00669        gtk_box_pack_start (GTK_BOX (hbox1), button5, FALSE, TRUE, 0);
00670 
00671        image9 = gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_BUTTON);
00672        gtk_container_add (GTK_CONTAINER (button5), image9);
00673 
00674        button6 = gtk_button_new ();
00675        gtk_box_pack_start (GTK_BOX (hbox1), button6, FALSE, TRUE, 0);
00676 
00677        image10 = gtk_image_new_from_stock ("gtk-go-up", GTK_ICON_SIZE_BUTTON);
00678        gtk_container_add (GTK_CONTAINER (button6), image10);
00679 
00680        button7 = gtk_button_new ();
00681        gtk_box_pack_start (GTK_BOX (hbox1), button7, FALSE, TRUE, 0);
00682 
00683        image11 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_BUTTON);
00684        gtk_container_add (GTK_CONTAINER (button7), image11);
00685 
00686        Layer_label = gtk_label_new (_("Layers"));
00687        gtk_notebook_set_tab_label (GTK_NOTEBOOK (sidepane_notebook), 
00688                                 gtk_notebook_get_nth_page (GTK_NOTEBOOK (sidepane_notebook), 0), 
00689                                 Layer_label);
00690 
00691        vbox11 = gtk_vbox_new (FALSE, 2);
00692        gtk_container_add (GTK_CONTAINER (sidepane_notebook), vbox11);
00693        gtk_container_set_border_width (GTK_CONTAINER (vbox11), 3);
00694 
00695        messages_scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
00696        gtk_box_pack_start (GTK_BOX (vbox11), messages_scrolledwindow, TRUE, TRUE, 0);
00697        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (messages_scrolledwindow), 
00698                                    GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
00699 
00700        message_textview = gtk_text_view_new ();
00701        gtk_container_add (GTK_CONTAINER (messages_scrolledwindow), message_textview);
00702        gtk_text_view_set_editable (GTK_TEXT_VIEW (message_textview), FALSE);
00703        gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (message_textview), GTK_WRAP_WORD);
00704        gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (message_textview), FALSE);
00705 
00706        clear_messages_button = gtk_button_new_from_stock ("gtk-clear");
00707        gtk_box_pack_start (GTK_BOX (vbox11), clear_messages_button, FALSE, FALSE, 0);
00708 
00709        Message_label = gtk_label_new (_("Messages"));
00710        gtk_notebook_set_tab_label (GTK_NOTEBOOK (sidepane_notebook), 
00711                                 gtk_notebook_get_nth_page (GTK_NOTEBOOK (sidepane_notebook), 1), 
00712                                 Message_label);
00713 
00714        vbox2 = gtk_vbox_new (FALSE, 4);
00715        gtk_paned_pack2 (GTK_PANED (hpaned1), vbox2, TRUE, FALSE);
00716        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 4);
00717        
00718        main_view_table = gtk_table_new (3, 3, FALSE);
00719        gtk_box_pack_start (GTK_BOX (vbox2), main_view_table, TRUE, TRUE, 0);
00720 
00721        hRuler = gtk_hruler_new ();
00722        gtk_table_attach (GTK_TABLE (main_view_table), hRuler, 1, 2, 0, 1,
00723                          (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
00724                          (GtkAttachOptions) (GTK_FILL), 0, 0);
00725        gtk_ruler_set_range (GTK_RULER (hRuler), 0, 100, 8.56051, 1000);
00726 
00727        vRuler = gtk_vruler_new ();
00728        gtk_table_attach (GTK_TABLE (main_view_table), vRuler, 0, 1, 1, 2,
00729                          (GtkAttachOptions) (GTK_FILL),
00730                          (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
00731        gtk_ruler_set_range (GTK_RULER (vRuler), 0, 100, 8.37341, 1000);
00732 
00733        drawingarea = gtk_drawing_area_new();
00734        gtk_table_attach (GTK_TABLE (main_view_table), drawingarea, 1, 2, 1, 2,
00735                          (GtkAttachOptions) (GTK_FILL),
00736                          (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
00737        
00738        hAdjustment = (GtkWidget *) gtk_adjustment_new (0.0, -1000.0, 1000.0, 1000.0, 1000.0, 500.0);
00739        vAdjustment = (GtkWidget *) gtk_adjustment_new (0.0, -1000.0, 1000.0, 1000.0, 1000.0, 500.0);
00740        
00741        hScrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (hAdjustment));
00742        gtk_table_attach (GTK_TABLE (main_view_table), hScrollbar, 1, 2, 2, 3,
00743                          (GtkAttachOptions) (GTK_FILL),
00744                          (GtkAttachOptions) (GTK_FILL), 0, 0);
00745                          
00746        vScrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (vAdjustment));
00747        gtk_table_attach (GTK_TABLE (main_view_table), vScrollbar, 2, 3, 1, 2,
00748                          (GtkAttachOptions) (GTK_FILL),
00749                          (GtkAttachOptions) (GTK_FILL), 0, 0);
00750                          
00751        GtkWidget *frame1 = gtk_frame_new (NULL);
00752        gtk_box_pack_start (GTK_BOX (vbox2), frame1, FALSE, FALSE, 0);
00753        
00754        hbox5 = gtk_hbox_new (FALSE, 10);
00755        gtk_container_add (GTK_CONTAINER(frame1), hbox5);
00756 
00757        statusbar_label_left = gtk_label_new (_("(   0.0,  0.0 )"));
00758        gtk_box_pack_start (GTK_BOX (hbox5), statusbar_label_left, FALSE, FALSE, 0);
00759        gtk_widget_set_size_request (statusbar_label_left, 130, -1);
00760        gtk_label_set_justify ((GtkLabel *) statusbar_label_left, GTK_JUSTIFY_RIGHT);
00761        
00762        combobox2 = gtk_combo_box_new_text ();
00763        gtk_box_pack_start (GTK_BOX (hbox5), combobox2, FALSE, FALSE, 0);
00764        gtk_combo_box_append_text (GTK_COMBO_BOX (combobox2), _("mil"));
00765        gtk_combo_box_append_text (GTK_COMBO_BOX (combobox2), _("mm"));
00766        gtk_combo_box_append_text (GTK_COMBO_BOX (combobox2), _("in"));
00767 
00768        statusbar_label_right = gtk_label_new (_(""));
00769        gtk_box_pack_start (GTK_BOX (hbox5), statusbar_label_right, TRUE, TRUE, 0);
00770        gtk_label_set_ellipsize ((GtkLabel *)statusbar_label_right, PANGO_ELLIPSIZE_END);
00771        gtk_misc_set_alignment (GTK_MISC (statusbar_label_right), 0, 0.5);
00772 
00773 
00774 
00775     /*
00776      *  Connect signals to widgets
00777      */
00778 
00779        /* --- File menu --- */
00780        g_signal_connect ((gpointer) new, "activate",
00781                          G_CALLBACK (callbacks_new_activate),
00782                          NULL);
00783        g_signal_connect ((gpointer) open_project, "activate",
00784                          G_CALLBACK (callbacks_open_project_activate),
00785                          NULL);
00786        g_signal_connect ((gpointer) open_layer, "activate",
00787                          G_CALLBACK (callbacks_open_layer_activate),
00788                          NULL);
00789        g_signal_connect ((gpointer) revert, "activate",
00790                          G_CALLBACK (callbacks_revert_activate),
00791                          NULL);
00792        g_signal_connect ((gpointer) save_layer, "activate",
00793                          G_CALLBACK (callbacks_save_layer_activate),
00794                          NULL);
00795        g_signal_connect ((gpointer) save_as_layer, "activate",
00796                          G_CALLBACK (callbacks_generic_save_activate),
00797                          (gpointer) CALLBACKS_SAVE_LAYER_AS);
00798        g_signal_connect ((gpointer) save, "activate",
00799                          G_CALLBACK (callbacks_save_project_activate),
00800                          NULL);
00801        g_signal_connect ((gpointer) save_as, "activate",
00802                          G_CALLBACK (callbacks_generic_save_activate),
00803                          (gpointer) CALLBACKS_SAVE_PROJECT_AS);
00804 #ifdef EXPORT_PNG
00805        g_signal_connect ((gpointer) png, "activate",
00806                          G_CALLBACK (callbacks_generic_save_activate),
00807                         (gpointer)  CALLBACKS_SAVE_FILE_PNG);
00808 #endif
00809 
00810 #ifndef RENDER_USING_GDK
00811        g_signal_connect ((gpointer) pdf, "activate",
00812                         G_CALLBACK (callbacks_generic_save_activate),
00813                          (gpointer) CALLBACKS_SAVE_FILE_PDF);
00814        g_signal_connect ((gpointer) svg, "activate",
00815                          G_CALLBACK (callbacks_generic_save_activate),
00816                          (gpointer) CALLBACKS_SAVE_FILE_SVG);
00817        g_signal_connect ((gpointer) postscript, "activate",
00818                          G_CALLBACK (callbacks_generic_save_activate),
00819                          (gpointer) CALLBACKS_SAVE_FILE_PS);
00820        g_signal_connect ((gpointer) rs274x, "activate",
00821                          G_CALLBACK (callbacks_generic_save_activate),
00822                          (gpointer) CALLBACKS_SAVE_FILE_RS274X);
00823        g_signal_connect ((gpointer) drill, "activate",
00824                          G_CALLBACK (callbacks_generic_save_activate),
00825                          (gpointer) CALLBACKS_SAVE_FILE_DRILL);
00826 
00827 #if GTK_CHECK_VERSION(2,10,0)
00828        g_signal_connect ((gpointer) print, "activate",
00829                          G_CALLBACK (callbacks_print_activate),
00830                          NULL);
00831 #endif
00832 #endif
00833        g_signal_connect ((gpointer) quit, "activate",
00834                          G_CALLBACK (callbacks_quit_activate),
00835                          NULL);
00836 
00837        /* --- Edit menu --- */
00838        g_signal_connect ((gpointer) delete_selected, "activate",
00839                          G_CALLBACK (callbacks_delete_objects_clicked),
00840                          NULL);
00841 
00842        /* --- View menu --- */
00843        g_signal_connect ((gpointer) zoom_in, "activate",
00844                          G_CALLBACK (callbacks_zoom_in_activate),
00845                          NULL);
00846        g_signal_connect ((gpointer) zoom_out, "activate",
00847                          G_CALLBACK (callbacks_zoom_out_activate),
00848                          NULL);
00849        g_signal_connect ((gpointer) fit_to_window, "activate",
00850                          G_CALLBACK (callbacks_fit_to_window_activate),
00851                          NULL);
00852 
00853        /* --- Analyze menu --- */
00854        g_signal_connect ((gpointer) analyze_active_gerbers, "activate",
00855                          G_CALLBACK (callbacks_analyze_active_gerbers_activate),
00856                          NULL);
00857        g_signal_connect ((gpointer) analyze_active_drill, "activate",
00858                          G_CALLBACK (callbacks_analyze_active_drill_activate),
00859                          NULL);
00860        g_signal_connect ((gpointer) analyze_display_selected_obj_props, "activate",
00861                          G_CALLBACK (callbacks_display_object_properties_clicked),
00862                          NULL);
00863 
00864 
00865        /* Wait for 2.1
00866        g_signal_connect ((gpointer) control_gerber_options, "activate",
00867                          G_CALLBACK (callbacks_control_gerber_options_activate),
00868                          NULL);
00869        */
00870 
00871        /* --- Tools menu --- */
00872 #ifndef RENDER_USING_GDK
00873        g_signal_connect ((gpointer) pointer_tool, "activate",
00874                          G_CALLBACK (callbacks_change_tool), (gpointer) 0);
00875 #endif
00876        g_signal_connect ((gpointer) pan_tool, "activate",
00877                          G_CALLBACK (callbacks_change_tool), (gpointer) 1);
00878        g_signal_connect ((gpointer) zoom_tool, "activate",
00879                          G_CALLBACK (callbacks_change_tool), (gpointer) 2);
00880        g_signal_connect ((gpointer) measure_tool, "activate",
00881                          G_CALLBACK (callbacks_change_tool), (gpointer) 3);
00882 
00883        /* --- Help menu --- */
00884        /*
00885        g_signal_connect ((gpointer) online_manual, "activate",
00886                          G_CALLBACK (callbacks_online_manual_activate),
00887                          NULL);
00888        */
00889        g_signal_connect ((gpointer) about, "activate",
00890                          G_CALLBACK (callbacks_about_activate),
00891                          NULL);
00892 
00893        /* End of Glade generated code */
00894        g_signal_connect ((gpointer) toolbutton_new, "clicked",
00895                          G_CALLBACK (callbacks_new_activate),
00896                          NULL);
00897        g_signal_connect ((gpointer) toolbutton_save, "clicked",
00898                          G_CALLBACK (callbacks_save_layer_activate),
00899                          NULL);
00900        g_signal_connect ((gpointer) toolbutton_open, "clicked",
00901                          G_CALLBACK (callbacks_open_layer_activate),
00902                          NULL);
00903        g_signal_connect ((gpointer) toolbutton_revert, "clicked",
00904                          G_CALLBACK (callbacks_revert_activate),
00905                          NULL);
00906        g_signal_connect ((gpointer) clear_messages_button, "clicked",
00907                          G_CALLBACK (callbacks_clear_messages_button_clicked),
00908                          NULL);
00909 #ifndef RENDER_USING_GDK
00910 #if GTK_CHECK_VERSION(2,10,0)
00911        g_signal_connect ((gpointer) toolbutton_print, "clicked",
00912                          G_CALLBACK (callbacks_print_activate),
00913                          NULL);
00914 #endif
00915 #endif
00916        g_signal_connect ((gpointer) toolbutton_zoom_in, "clicked",
00917                          G_CALLBACK (callbacks_zoom_in_activate),
00918                          NULL);
00919        g_signal_connect ((gpointer) toolbutton_zoom_out, "clicked",
00920                          G_CALLBACK (callbacks_zoom_out_activate),
00921                          NULL);
00922        g_signal_connect ((gpointer) toolbutton_zoom_fit, "clicked",
00923                          G_CALLBACK (callbacks_fit_to_window_activate),
00924                          NULL);
00925 #ifndef RENDER_USING_GDK
00926        g_signal_connect ((gpointer) toggletoolbutton_pointer, "clicked",
00927                          G_CALLBACK (callbacks_change_tool), (gpointer) 0);
00928 #endif
00929        g_signal_connect ((gpointer) toggletoolbutton_pan, "clicked",
00930                          G_CALLBACK (callbacks_change_tool), (gpointer) 1);
00931        g_signal_connect ((gpointer) toggletoolbutton_zoom, "clicked",
00932                          G_CALLBACK (callbacks_change_tool), (gpointer) 2);
00933        g_signal_connect ((gpointer) toggletoolbutton_measure, "clicked",
00934                          G_CALLBACK (callbacks_change_tool), (gpointer) 3);
00935 
00936        g_signal_connect ((gpointer) combobox2, "changed",
00937                          G_CALLBACK (callbacks_statusbar_unit_combo_box_changed),
00938                          NULL);
00939                          
00940        g_signal_connect ((gpointer) button4, "clicked",
00941                          G_CALLBACK (callbacks_add_layer_button_clicked), NULL);
00942        g_signal_connect ((gpointer) button7, "clicked",
00943                          G_CALLBACK (callbacks_remove_layer_button_clicked), NULL);
00944        g_signal_connect ((gpointer) button5, "clicked",
00945                          G_CALLBACK (callbacks_move_layer_down_button_clicked), NULL);
00946        g_signal_connect ((gpointer) button6, "clicked",
00947                          G_CALLBACK (callbacks_move_layer_up_clicked), NULL);
00948 
00949        g_signal_connect ((gpointer) hAdjustment, "value-changed",
00950                          G_CALLBACK (callbacks_hadjustment_value_changed), NULL);
00951        g_signal_connect ((gpointer) vAdjustment, "value-changed",
00952                          G_CALLBACK (callbacks_vadjustment_value_changed), NULL);
00953        g_signal_connect ((gpointer) hScrollbar, "button-press-event",
00954                          G_CALLBACK (callbacks_scrollbar_button_pressed), NULL);                 
00955        g_signal_connect ((gpointer) hScrollbar, "button-release-event",
00956                          G_CALLBACK (callbacks_scrollbar_button_released), NULL);
00957        g_signal_connect ((gpointer) vScrollbar, "button-press-event",
00958                          G_CALLBACK (callbacks_scrollbar_button_pressed), NULL);                 
00959        g_signal_connect ((gpointer) vScrollbar, "button-release-event",
00960                          G_CALLBACK (callbacks_scrollbar_button_released), NULL);               
00961        
00962 
00963        if (screen.unit == GERBV_MILS)
00964               gtk_combo_box_set_active (GTK_COMBO_BOX (combobox2), 0);
00965        else if (screen.unit == GERBV_MMS)
00966               gtk_combo_box_set_active (GTK_COMBO_BOX (combobox2), 1);
00967        else
00968               gtk_combo_box_set_active (GTK_COMBO_BOX (combobox2), 2);
00969           
00970        gint width, height;
00971               
00972        gtk_window_add_accel_group (GTK_WINDOW (mainWindow), accel_group);
00973 
00974        GtkListStore *list_store;
00975 
00976        list_store = gtk_list_store_new (4,       G_TYPE_BOOLEAN,
00977               GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
00978               
00979        GtkWidget *tree;
00980 
00981        tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
00982        GtkCellRenderer *renderer;
00983        GtkTreeViewColumn *column;
00984 
00985        renderer = gtk_cell_renderer_toggle_new ();
00986        column = gtk_tree_view_column_new_with_attributes ("Visible",
00987                                                        renderer,
00988                                                        "active", 0,
00989                                                        NULL);
00990        gtk_tree_view_column_set_min_width  ((GtkTreeViewColumn *)column,25);
00991        gtk_signal_connect(GTK_OBJECT(renderer), "toggled",
00992                      GTK_SIGNAL_FUNC(callbacks_layer_tree_visibility_button_toggled), NULL);
00993                      
00994        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
00995 
00996        renderer = gtk_cell_renderer_pixbuf_new ();
00997        column = gtk_tree_view_column_new_with_attributes ("Color",
00998                                                        renderer,
00999                                                        "pixbuf", 1, NULL);
01000        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
01001 
01002        renderer = gtk_cell_renderer_text_new ();
01003        g_object_set (G_OBJECT (renderer), "foreground", "red", "xalign", 0.5,
01004                      "family", "Times", "size-points", 12.0, NULL);
01005        column = gtk_tree_view_column_new_with_attributes ("Modified",
01006                                                        renderer,
01007                                                        "text", 3,
01008                                                        NULL);
01009        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
01010        gtk_tree_view_column_set_min_width  ((GtkTreeViewColumn *)column,20);
01011        
01012        renderer = gtk_cell_renderer_text_new ();
01013        column = gtk_tree_view_column_new_with_attributes ("Name",
01014                                                        renderer,
01015                                                        "markup", 2,
01016                                                        NULL);
01017        gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
01018 
01019        gtk_tree_view_set_headers_visible   ((GtkTreeView *)tree, FALSE);
01020        gtk_signal_connect(GTK_OBJECT(tree), "button-press-event",
01021               GTK_SIGNAL_FUNC(callbacks_layer_tree_button_press), NULL);
01022        gtk_container_add (GTK_CONTAINER (scrolledwindow1), tree);
01023        
01024        GtkTreeSelection *selection;
01025        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
01026        gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
01027        gtk_tree_view_set_enable_search (GTK_TREE_VIEW (tree), FALSE);
01028        gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree), TRUE);
01029 
01030        g_signal_connect (G_OBJECT(list_store), "row-inserted",
01031                        G_CALLBACK (callbacks_layer_tree_row_inserted), NULL);
01032        /* steal the focus to the tree to make sure none of the buttons are focused */
01033        gtk_widget_grab_focus (tree);                    
01034        /*
01035        * Connect all events on drawing area 
01036        */    
01037        gtk_signal_connect(GTK_OBJECT(drawingarea), "expose_event",
01038                      GTK_SIGNAL_FUNC(callbacks_drawingarea_expose_event), NULL);
01039        gtk_signal_connect(GTK_OBJECT(drawingarea),"configure_event",
01040                      GTK_SIGNAL_FUNC(callbacks_drawingarea_configure_event), NULL);
01041        gtk_signal_connect(GTK_OBJECT(drawingarea), "motion_notify_event",
01042                      GTK_SIGNAL_FUNC(callbacks_drawingarea_motion_notify_event), NULL);
01043        gtk_signal_connect(GTK_OBJECT(drawingarea), "button_press_event",
01044                      GTK_SIGNAL_FUNC(callbacks_drawingarea_button_press_event), NULL);
01045        gtk_signal_connect(GTK_OBJECT(drawingarea), "button_release_event",
01046                      GTK_SIGNAL_FUNC(callbacks_drawingarea_button_release_event), NULL);
01047        gtk_signal_connect_after(GTK_OBJECT(mainWindow), "key_press_event",
01048                      GTK_SIGNAL_FUNC(callbacks_window_key_press_event), NULL);
01049        gtk_signal_connect_after(GTK_OBJECT(mainWindow), "key_release_event",
01050                      GTK_SIGNAL_FUNC(callbacks_window_key_release_event), NULL);
01051        gtk_signal_connect_after(GTK_OBJECT(mainWindow), "scroll_event",
01052                      GTK_SIGNAL_FUNC(callbacks_window_scroll_event), NULL);
01053        gtk_signal_connect_after(GTK_OBJECT(mainWindow), "delete_event",
01054                      GTK_SIGNAL_FUNC(callbacks_quit_activate), NULL);       
01055        
01056        gtk_widget_set_events(drawingarea, GDK_EXPOSURE_MASK
01057                        | GDK_LEAVE_NOTIFY_MASK
01058                        | GDK_ENTER_NOTIFY_MASK
01059                        | GDK_BUTTON_PRESS_MASK
01060                        | GDK_BUTTON_RELEASE_MASK
01061                        | GDK_KEY_PRESS_MASK
01062                        | GDK_KEY_RELEASE_MASK
01063                        | GDK_POINTER_MOTION_MASK
01064                        | GDK_POINTER_MOTION_HINT_MASK
01065                        | GDK_SCROLL_MASK
01066                        );
01067 
01068        /*
01069        * Set gtk error log handler
01070        */
01071 #if !defined (__MINGW32__)     
01072        g_log_set_handler (NULL, 
01073                      G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION | G_LOG_LEVEL_MASK, 
01074                      callbacks_handle_log_messages, NULL); 
01075 #endif     
01076   
01077        /*
01078         * Setup some GTK+ defaults.
01079         * These should really be somewhere else.
01080         */
01081        GdkColor zoom_outline_color = {0, 50000, 50000, 50000};
01082        GdkColor dist_measure_color = {0, 60000, 30000, 65000};       
01083        GdkColor selection_color = {0, 65000, 65000, 65000};
01084        
01085        screen.zoom_outline_color = zoom_outline_color;
01086        screen.dist_measure_color = dist_measure_color;
01087        screen.selection_color = selection_color;
01088 
01089        screen.drawing_area = drawingarea;
01090        screen.win.hAdjustment = hAdjustment;
01091        screen.win.vAdjustment = vAdjustment;
01092        screen.win.hRuler = hRuler;
01093        screen.win.vRuler = vRuler; 
01094        screen.win.sidepane_notebook = sidepane_notebook;
01095 #ifndef RENDER_USING_GDK
01096        screen.win.toolButtonPointer = toggletoolbutton_pointer;
01097 #endif
01098        screen.win.toolButtonPan = toggletoolbutton_pan;
01099        screen.win.toolButtonZoom = toggletoolbutton_zoom;
01100        screen.win.toolButtonMeasure = toggletoolbutton_measure;
01101        
01102        /* Create right click popup menu for layer tree */
01103        screen.win.layerTreePopupMenu = gtk_menu_new ();
01104        tempMenuItem = gtk_image_menu_item_new_with_label ("Invert layer color");
01105        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01106        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Invert the display polarity of the layer", NULL);
01107        g_signal_connect ((gpointer) tempMenuItem, "activate",
01108                          G_CALLBACK (callbacks_invert_layer_clicked), NULL);
01109                          
01110        tempMenuItem = gtk_image_menu_item_new_with_label ("Change color");
01111        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01112        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Change the display color of the layer", NULL);
01113        g_signal_connect ((gpointer) tempMenuItem, "activate",
01114                          G_CALLBACK (callbacks_change_layer_color_clicked), NULL);
01115                          
01116        tempMenuItem = gtk_image_menu_item_new_with_label ("Reload layer");
01117        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01118        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Reload the layer from disk", 
01119                            NULL);
01120        g_signal_connect ((gpointer) tempMenuItem, "activate",
01121                          G_CALLBACK (callbacks_reload_layer_clicked), NULL);
01122 
01123        tempMenuItem = gtk_image_menu_item_new_with_label ("Edit file format");
01124        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01125        gtk_tooltips_set_tip (tooltips, tempMenuItem, "View and edit the numerical format used to parse this layer", 
01126                            NULL);
01127        g_signal_connect ((gpointer) tempMenuItem, "activate",
01128                          G_CALLBACK (callbacks_change_layer_format_clicked), NULL);
01129 
01130        tempMenuItem = gtk_image_menu_item_new_with_label ("Add layer");
01131        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01132        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Open a new layer and insert it here", NULL);
01133        tempImage = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
01134        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (tempMenuItem), tempImage);
01135        g_signal_connect ((gpointer) tempMenuItem, "activate",
01136                          G_CALLBACK (callbacks_add_layer_button_clicked), NULL);
01137                          
01138        tempMenuItem = gtk_image_menu_item_new_with_label ("Move layer down");
01139        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01140        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Move the layer down one in the layer list", NULL);
01141        tempImage = gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_MENU);
01142        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (tempMenuItem), tempImage);
01143        g_signal_connect ((gpointer) tempMenuItem, "activate",
01144                          G_CALLBACK (callbacks_move_layer_down_button_clicked), NULL);
01145                             
01146        tempMenuItem = gtk_image_menu_item_new_with_label ("Move layer up");
01147        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01148        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Move the layer up one in the layer list", NULL);
01149        tempImage = gtk_image_new_from_stock ("gtk-go-up", GTK_ICON_SIZE_MENU);
01150        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (tempMenuItem), tempImage);
01151        g_signal_connect ((gpointer) tempMenuItem, "activate",
01152                          G_CALLBACK (callbacks_move_layer_up_clicked), NULL);
01153                             
01154        tempMenuItem = gtk_image_menu_item_new_with_label ("Delete layer");
01155        gtk_menu_shell_append ((GtkMenuShell *)screen.win.layerTreePopupMenu, tempMenuItem);
01156        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Remove this layer", NULL);
01157        tempImage = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
01158        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (tempMenuItem), tempImage);
01159        g_signal_connect ((gpointer) tempMenuItem, "activate",
01160                          G_CALLBACK (callbacks_remove_layer_button_clicked), NULL);
01161                          
01162        gtk_widget_show_all (screen.win.layerTreePopupMenu);
01163        
01164        /* Create right click popup menu for draw window */
01165        screen.win.drawWindowPopupMenu = gtk_menu_new ();
01166        tempMenuItem = gtk_image_menu_item_new_with_label ("Display object properties");
01167        gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
01168        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Examine the properties of the selected object", NULL);
01169        tempImage = gtk_image_new_from_stock ("gtk-info", GTK_ICON_SIZE_MENU);
01170        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (tempMenuItem), tempImage);
01171        g_signal_connect ((gpointer) tempMenuItem, "activate",
01172                          G_CALLBACK (callbacks_display_object_properties_clicked), NULL);
01173                          
01174        /*   Include these after they are coded.
01175        tempMenuItem = gtk_image_menu_item_new_with_label ("Edit object properties");
01176        gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
01177        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Edit the properties of the selected object", NULL);
01178        g_signal_connect ((gpointer) tempMenuItem, "activate",
01179                          G_CALLBACK (callbacks_edit_object_properties_clicked), NULL);
01180 
01181        tempMenuItem = gtk_image_menu_item_new_with_label ("Move object(s)");
01182        gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
01183        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Move the selected object(s)",NULL);
01184        g_signal_connect ((gpointer) tempMenuItem, "activate",
01185                          G_CALLBACK (callbacks_move_objects_clicked), NULL);
01186       
01187         tempMenuItem = gtk_image_menu_item_new_with_label ("Reduce area");
01188        gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
01189        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Reduce the area of the object (e.g. to prevent component floating)",NULL);
01190        g_signal_connect ((gpointer) tempMenuItem, "activate",
01191                          G_CALLBACK (callbacks_reduce_object_area_clicked), NULL);
01192        */
01193                         
01194        tempMenuItem = gtk_image_menu_item_new_with_label ("Delete selected objects");
01195        gtk_menu_shell_append ((GtkMenuShell *)screen.win.drawWindowPopupMenu, tempMenuItem);
01196        gtk_tooltips_set_tip (tooltips, tempMenuItem, "Delete the selected object(s)",NULL);
01197        tempImage = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
01198        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (tempMenuItem), tempImage);
01199        g_signal_connect ((gpointer) tempMenuItem, "activate",
01200                          G_CALLBACK (callbacks_delete_objects_clicked), NULL);
01201 
01202        gtk_widget_show_all (screen.win.drawWindowPopupMenu);
01203        
01204        /* make sure tooltips show on gtk <2.12 systems */
01205        gtk_tooltips_enable (tooltips);    
01206        /* 
01207        * Good defaults according to Ales. Gives aspect ratio of 1.3333...
01208        */
01209        if ((req_width != -1) && (req_height != -1)) {
01210               width = req_width;
01211               height = req_height;
01212               } 
01213        else {
01214               GdkScreen *screen;
01215               int nmonitors;
01216 
01217               screen = gdk_screen_get_default();
01218               nmonitors = gdk_screen_get_n_monitors(screen);
01219 
01220               width = gdk_screen_get_width(screen) * 3/4 / nmonitors;
01221               height = gdk_screen_get_height(screen) * 3/4 / nmonitors;
01222        }
01223 
01224        gtk_window_set_default_size((GtkWindow *)mainWindow, width, height);
01225        
01226        gtk_widget_show_all (mainWindow);
01227        screen.win.topLevelWindow = mainWindow;
01228        screen.win.messageTextView = message_textview;
01229        screen.win.statusMessageLeft = statusbar_label_left;
01230        screen.win.statusMessageRight = statusbar_label_right;
01231        screen.win.statusUnitComboBox = combobox2;
01232        screen.win.layerTree = tree;
01233        screen.win.treeIsUpdating = FALSE;
01234 
01235        screen.selectionInfo.selectedNodeArray = g_array_new (FALSE,
01236                      FALSE, sizeof(gerbv_selection_item_t));
01237        /* Make pointer tool default */
01238        callbacks_change_tool (NULL, (gpointer) 0);
01239 
01240        rename_main_window("",mainWindow);
01241 
01242        set_window_icon (mainWindow);
01243        callbacks_update_layer_tree ();
01244 
01245        /* connect this signal as late as possible to avoid triggering it before
01246           the gui is drawn */
01247        g_signal_connect ((gpointer) render_combobox, "changed",
01248                          G_CALLBACK (callbacks_sidepane_render_type_combo_box_changed),
01249                          NULL);
01250        gtk_main();
01251 }
01252 
01253 /* ----------------------------------------------------  */
01254 void 
01255 interface_set_render_type (int t)
01256 {
01257 #ifdef RENDER_USING_GDK
01258     if (t >= 2)
01259 #else
01260     if (t >= 4)
01261 #endif
01262        return;
01263     
01264     screenRenderInfo.renderType = t;
01265 
01266     /* make sure the interface is already up before calling
01267      * gtk_combo_box_set_active()
01268      */
01269     if (render_combobox)
01270        gtk_combo_box_set_active (GTK_COMBO_BOX (render_combobox), t);
01271 }
01272 
01273 /* ----------------------------------------------------  */
01282 gboolean
01283 interface_get_alert_dialog_response (gchar *primaryText, gchar *secondaryText, 
01284                                  gboolean show_checkbox, gboolean *ask_to_show_again )
01285      /* This fcn returns TRUE if the user presses the OK button,
01286        otherwise it returns FALSE. */
01287 {
01288   /* Set show_checkbox = TRUE to show "do not show this again" checkbox. */
01289   /* Point ask_to_show_again to the variable to set to not show the checkbox. */
01290   GtkWidget *dialog1;
01291   GtkWidget *dialog_vbox1;
01292   GtkWidget *hbox1;
01293   GtkWidget *image1;
01294   GtkWidget *label1;
01295   GtkWidget *checkbox=NULL;
01296   GtkWidget *dialog_action_area1;
01297   GtkWidget *cancelbutton1;
01298   GtkWidget *okbutton1;
01299   gboolean returnVal = FALSE;
01300 
01301   dialog1 = gtk_dialog_new ();
01302   gtk_container_set_border_width (GTK_CONTAINER (dialog1), 6);
01303   gtk_window_set_resizable (GTK_WINDOW (dialog1), FALSE);
01304   gtk_window_set_type_hint (GTK_WINDOW (dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
01305   gtk_dialog_set_has_separator (GTK_DIALOG (dialog1), FALSE);
01306 
01307   dialog_vbox1 = GTK_DIALOG (dialog1)->vbox;
01308 
01309   hbox1 = gtk_hbox_new (FALSE, 12);
01310   gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0);
01311   gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6);
01312 
01313   image1 = gtk_image_new_from_icon_name ("gtk-dialog-warning", GTK_ICON_SIZE_DIALOG);
01314   gtk_box_pack_start (GTK_BOX (hbox1), image1, TRUE, TRUE, 0);
01315   gtk_misc_set_alignment (GTK_MISC (image1), 0.5, 0);
01316 
01317   gchar *labelMessage = g_strconcat ("<span weight=\"bold\" size=\"larger\">",primaryText,
01318               "</span>\n<span/>\n",secondaryText,NULL);
01319   label1 = gtk_label_new (labelMessage);
01320   g_free (labelMessage);
01321   GtkWidget *vbox9 = gtk_vbox_new (FALSE, 0);
01322   gtk_box_pack_start (GTK_BOX (vbox9), label1, FALSE, FALSE, 0);
01323   gtk_box_pack_start (GTK_BOX (hbox1), vbox9, FALSE, FALSE, 0);
01324   gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
01325   gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE);
01326 
01327   // even with no checkbox, this extra hbox gives the recommended 24 px space between the
01328   //   label and the buttons
01329   GtkWidget *hbox2 = gtk_hbox_new (FALSE, 12);
01330   if (show_checkbox) {
01331     GtkWidget *label3 = gtk_label_new ("    ");
01332 
01333     checkbox =  gtk_check_button_new_with_label("Do not show this dialog again.");
01334     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbox), FALSE);
01335     gtk_box_pack_start (GTK_BOX (hbox2), label3, FALSE, FALSE, 0);
01336     gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0);
01337   }
01338   gtk_box_pack_start (GTK_BOX (vbox9), hbox2, FALSE, FALSE, 12);
01339   
01340   dialog_action_area1 = GTK_DIALOG (dialog1)->action_area;
01341   gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
01342 
01343   cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
01344   gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), cancelbutton1, GTK_RESPONSE_CANCEL);
01345   GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
01346   gtk_widget_grab_default (cancelbutton1);
01347   gtk_widget_grab_focus (cancelbutton1);
01348 
01349   okbutton1 = gtk_button_new_from_stock ("gtk-ok");
01350   gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), okbutton1, GTK_RESPONSE_OK);
01351   GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
01352 
01353   gtk_widget_show_all (dialog1);
01354 
01355   if (gtk_dialog_run ((GtkDialog*)dialog1) == GTK_RESPONSE_OK) {
01356     /* check to see if user clicked on "do not show again" box */
01357     if ((show_checkbox == TRUE) &&
01358        (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)) == TRUE)) {
01359       /* The user clicked the "do not show again box".  Set corresponding
01360        * flag to FALSE. */
01361       *ask_to_show_again = FALSE;
01362     }
01363     returnVal = TRUE;
01364   }
01365   gtk_widget_destroy (dialog1);
01366               
01367   return returnVal;
01368 }
01369 
01370 
01371 
01372 /* ----------------------------------------------------  */
01378 void
01379 interface_show_alert_dialog (gchar *primaryText, gchar *secondaryText, 
01380                           gboolean show_checkbox, gboolean *ask_to_show_again )
01381      /* This fcn tells the user something, and only displays "OK" */
01382 {
01383   /* Set show_checkbox = TRUE to show "do not show this again" checkbox. */
01384   /* Point ask_to_show_again to the variable to set to not show the checkbox. */
01385   GtkWidget *dialog1;
01386   GtkWidget *dialog_vbox1;
01387   GtkWidget *hbox1;
01388   GtkWidget *image1;
01389   GtkWidget *label1;
01390   GtkWidget *checkbox=NULL;
01391   GtkWidget *dialog_action_area1;
01392   GtkWidget *okbutton1;
01393 
01394   dialog1 = gtk_dialog_new ();
01395   gtk_container_set_border_width (GTK_CONTAINER (dialog1), 6);
01396   gtk_window_set_resizable (GTK_WINDOW (dialog1), FALSE);
01397   gtk_window_set_type_hint (GTK_WINDOW (dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
01398   gtk_dialog_set_has_separator (GTK_DIALOG (dialog1), FALSE);
01399 
01400   dialog_vbox1 = GTK_DIALOG (dialog1)->vbox;
01401 
01402   hbox1 = gtk_hbox_new (FALSE, 12);
01403   gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0);
01404   gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6);
01405 
01406   image1 = gtk_image_new_from_icon_name ("gtk-dialog-warning", GTK_ICON_SIZE_DIALOG);
01407   gtk_box_pack_start (GTK_BOX (hbox1), image1, TRUE, TRUE, 0);
01408   gtk_misc_set_alignment (GTK_MISC (image1), 0.5, 0);
01409 
01410   gchar *labelMessage = g_strconcat ("<span weight=\"bold\" size=\"larger\">",primaryText,
01411               "</span>\n<span/>\n",secondaryText,NULL);
01412   label1 = gtk_label_new (labelMessage);
01413   g_free (labelMessage);
01414   
01415   GtkWidget *vbox9 = gtk_vbox_new (FALSE, 0);
01416   gtk_box_pack_start (GTK_BOX (vbox9), label1, FALSE, FALSE, 0);
01417   gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
01418   gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE);
01419   gtk_box_pack_start (GTK_BOX (hbox1), vbox9, FALSE, FALSE, 0);
01420   
01421   GtkWidget *hbox2 = gtk_hbox_new (FALSE, 12);
01422   if (show_checkbox) {
01423     GtkWidget *label3 = gtk_label_new ("    ");
01424 
01425     checkbox =  gtk_check_button_new_with_label("Do not show this dialog again.");
01426     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbox), FALSE);
01427     gtk_box_pack_start (GTK_BOX (hbox2), label3, FALSE, FALSE, 0);
01428     gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0);
01429   }
01430   gtk_box_pack_start (GTK_BOX (vbox9), hbox2, FALSE, FALSE, 12);
01431   
01432   dialog_action_area1 = GTK_DIALOG (dialog1)->action_area;
01433   gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
01434 
01435   okbutton1 = gtk_button_new_from_stock ("gtk-ok");
01436   gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), okbutton1, GTK_RESPONSE_OK);
01437   GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
01438 
01439   gtk_widget_show_all (dialog1);
01440 
01441   /* check to see if user clicked on "do not show again" box */
01442   if ((show_checkbox == TRUE) &&
01443       (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)) == TRUE)) {
01444     /* The user clicked the "do not show again box".  Set corresponding
01445      * flag to FALSE. */
01446     *ask_to_show_again = FALSE;
01447   }
01448 
01449   gtk_dialog_run (GTK_DIALOG(dialog1));
01450   gtk_widget_destroy (dialog1);
01451               
01452   return;
01453 }
01454 
01455 
01456 

Generated on Tue Aug 19 00:14:49 2008 for gerbv by  doxygen 1.5.6