]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_gui.C
Fix configure bug with gettext
[lyx.git] / src / lyx_gui.C
index c7d3fe9810c5378a123e30856876b4cf1710737b..24dead7b1be23db213f800cdcaf1117ec2e1b9bc 100644 (file)
@@ -4,7 +4,7 @@
  *           LyX, The Document Processor
  *      
  *         Copyright 1995 Matthias Ettrich
- *          Copyright 1995-1999 The LyX Team.
+ *          Copyright 1995-2000 The LyX Team.
  *
  * ====================================================== */
 
 #include "LyXView.h"
 #include "buffer.h"
 #include "lyxserver.h"
-#include "lyxdraw.h"
 #include "lyxrc.h"
 #include "gettext.h"
 #include "lyx_gui_misc.h"
-#include "lyx_cb.h"
 #include "lyxlookup.h"
 #include "bufferlist.h"
+#include "language.h"
 
 #ifdef TWO_COLOR_ICONS
 #include "banner_bw.xbm"
 #include "banner.xpm"
 #endif
 
-FD_form_title *fd_form_title;
-FD_form_paragraph *fd_form_paragraph;
-FD_form_paragraph_extra *fd_form_paragraph_extra;
-FD_form_search *fd_form_search;
-FD_form_character *fd_form_character;
-FD_form_document *fd_form_document;
-FD_form_paper *fd_form_paper;
-FD_form_table_options *fd_form_table_options;
-FD_form_table_extra *fd_form_table_extra;
-FD_form_quotes *fd_form_quotes;
-FD_form_preamble *fd_form_preamble;
-FD_form_table *fd_form_table;
-FD_form_print *fd_form_print;
-FD_form_sendto *fd_form_sendto;
-FD_form_figure *fd_form_figure;
-FD_form_screen *fd_form_screen;
-FD_form_toc *fd_form_toc;
-FD_form_ref *fd_form_ref;
-FD_LaTeXOptions *fd_latex_options; // from latexoptions.h
-FD_LaTeXLog *fd_latex_log; // from latexoptions.h
-Combox *combo_language;
-
-extern LyXServer *lyxserver;
+FD_form_title * fd_form_title;
+FD_form_paragraph * fd_form_paragraph;
+FD_form_paragraph_extra * fd_form_paragraph_extra;
+FD_form_character * fd_form_character;
+FD_form_document * fd_form_document;
+FD_form_paper * fd_form_paper;
+FD_form_table_options * fd_form_table_options;
+FD_form_table_extra * fd_form_table_extra;
+FD_form_quotes * fd_form_quotes;
+FD_form_preamble * fd_form_preamble;
+FD_form_table * fd_form_table;
+FD_form_print * fd_form_print;
+FD_form_sendto * fd_form_sendto;
+FD_form_figure * fd_form_figure;
+FD_form_screen * fd_form_screen;
+FD_form_toc * fd_form_toc;
+FD_form_ref * fd_form_ref;
+FD_LaTeXOptions * fd_latex_options; // from latexoptions.h
+FD_LaTeXLog * fd_latex_log; // from latexoptions.h
+Combox * combo_language;
+
+extern LyXServer * lyxserver;
 extern bool finished;  // flag, that we are quitting the program
 extern BufferList bufferlist;
 
@@ -77,9 +75,6 @@ FL_CMD_OPT cmdopt[] =
        {"-height", "*.height", XrmoptionSepArg, "510"},
        {"-xpos", "*.xpos", XrmoptionSepArg, "-1"},
        {"-ypos", "*.ypos", XrmoptionSepArg, "-1"},
-       {"-Reverse", "*.Reverse", XrmoptionNoArg, "1"},
-       {"-Mono", "*.Mono", XrmoptionNoArg, "1"},
-       {"-FastSelection", "*.FastSelection", XrmoptionNoArg, "1"},
        {"-MathColor", "*.MathColor", XrmoptionSepArg, "blue"},
        {"-MathFrameColor", "*.MathFrameColor", XrmoptionSepArg, "magenta"},
        {"-FootColor", "*.FootColor", XrmoptionSepArg, "red"}, 
@@ -99,9 +94,6 @@ static int width;
 static int height;
 static int xpos;
 static int ypos;
-int       reverse_video;
-int       mono_video;
-int       fast_selection;
 bool      cursor_follows_scrollbar;
 char      math_color[32];
 char      math_frame_color[32];
@@ -121,13 +113,10 @@ char         selection_color[32];
 
 FL_resource res[] =
 {
-       {"width", "widthClass", FL_INT, &width, "690"},
-       {"height", "heightClass", FL_INT, &height, "510"},
-       {"xpos", "xposClass", FL_INT, &xpos, "-1"},
-       {"ypos", "yposClass", FL_INT, &ypos, "-1"},
-       {"Reverse", "reverseClass", FL_INT, &reverse_video, "0"},
-       {"Mono", "monoClass", FL_INT, &mono_video, "0"},
-       {"FastSelection", "selectionClass", FL_INT, &fast_selection, "0"},
+       {"width", "widthClass", FL_INT, &width, "690", 0},
+       {"height", "heightClass", FL_INT, &height, "510", 0},
+       {"xpos", "xposClass", FL_INT, &xpos, "-1", 0},
+       {"ypos", "yposClass", FL_INT, &ypos, "-1", 0},
        {"MathColor", "colorClass", FL_STRING, math_color, "blue", 31},
        {"MathFrameColor", "colorClass", FL_STRING, math_frame_color, "magenta", 31},
        {"FootColor", "colorClass", FL_STRING, foot_color, "red", 31},
@@ -144,7 +133,7 @@ FL_resource res[] =
 };
 
 
-extern "C" int LyX_XErrHandler(Display *display, XErrorEvent *xeev)
+extern "C" int LyX_XErrHandler(Display * display, XErrorEvent * xeev)
 {
 //#warning Please see if you can trigger this!
        // emergency save
@@ -156,13 +145,13 @@ extern "C" int LyX_XErrHandler(Display *display, XErrorEvent *xeev)
        XGetErrorText(display, xeev->error_code, etxt, 512);
        lyxerr << etxt << endl;
        // By doing an abort we get a nice backtrace. (hopefully)
-       abort();
+       lyx::abort();
        return 0; // Solaris CC wants us to return something
 }
 
 
-LyXGUI::LyXGUI(LyX *owner, int *argc, char *argv[], bool GUI)
-       :_owner(owner)
+LyXGUI::LyXGUI(LyX * owner, int * argc, char * argv[], bool GUI)
+       : _owner(owner)
 {
        gui = GUI;
        if (!gui)
@@ -173,7 +162,8 @@ LyXGUI::LyXGUI(LyX *owner, int *argc, char *argv[], bool GUI)
        static const int num_res = sizeof(res)/sizeof(FL_resource);
        fl_initialize(argc, argv, "LyX", cmdopt, num_res);
        fl_get_app_resources(res, num_res);
-       Display *display = fl_get_display();
+
+       Display * display = fl_get_display();
        if (!display) {
                lyxerr << "LyX: unable to access X display, exiting" << endl;
                exit(1);
@@ -186,27 +176,25 @@ LyXGUI::LyXGUI(LyX *owner, int *argc, char *argv[], bool GUI)
        
        // Make sure default screen is not larger than monitor
        if (width == 690 && height == 510) {
-               Screen * scr = (DefaultScreenOfDisplay(fl_get_display()));
-               if (HeightOfScreen(scr)-24<height)
-                       height = HeightOfScreen(scr)-24;
-               if (WidthOfScreen(scr)-8<width)
-                       width = WidthOfScreen(scr)-8;
+               Screen * scr = DefaultScreenOfDisplay(fl_get_display());
+               if (HeightOfScreen(scr) - 24 < height)
+                       height = HeightOfScreen(scr) - 24;
+               if (WidthOfScreen(scr) - 8 < width)
+                       width = WidthOfScreen(scr) - 8;
        }
 
 }
 
 
 // A destructor is always necessary  (asierra-970604)
-LyXGUI::~LyXGUI() {
+LyXGUI::~LyXGUI()
+{
         // Lyxserver was created in this class so should be destroyed
         // here.  asierra-970604
-        if (lyxserver) {
-               delete lyxserver;
-               lyxserver = 0;
-       }
+       delete lyxserver;
+       lyxserver = 0;
 
        CloseLyXLookup();
-
 }
 
 
@@ -239,39 +227,23 @@ void LyXGUI::init()
                return;
 
        create_forms();
-       
+
+       if (lyxrc.font_norm_menu.empty())
+               lyxrc.font_norm_menu = lyxrc.font_norm;
        // Set the font name for popups and menus
-        string menufontname = lyxrc->menu_font_name 
+        string menufontname = lyxrc.menu_font_name 
                               + "-*-*-*-?-*-*-*-*-"  
-                              + lyxrc->font_norm; 
+                              + lyxrc.font_norm_menu;
                // "?" means "scale that font"
-        string popupfontname = lyxrc->popup_font_name 
+        string popupfontname = lyxrc.popup_font_name 
                               + "-*-*-*-?-*-*-*-*-"  
-                              + lyxrc->font_norm; 
-#if FL_REVISION > 85
+                              + lyxrc.font_norm_menu;
+
         if (fl_set_font_name(FL_BOLD_STYLE, menufontname.c_str()) < 0)
-#else
-        int nfonts;
-        char ** list = XListFonts(fl_display, menufontname.c_str(), 
-                                 1, &nfonts);
-        XFreeFontNames(list);
-        if (nfonts > 0)
-                fl_set_font_name(FL_BOLD_STYLE, menufontname.c_str());
-        else
-#endif
                 lyxerr << "Could not set menu font to "
                       << menufontname << endl;
 
-#if FL_REVISION > 85
         if (fl_set_font_name(FL_NORMAL_STYLE, popupfontname.c_str()) < 0)
-#else
-        list = XListFonts(fl_display, popupfontname.c_str(), 
-                         1, &nfonts);
-        XFreeFontNames(list);
-        if (nfonts > 0)
-                fl_set_font_name(FL_NORMAL_STYLE, popupfontname.c_str());
-        else
-#endif
                 lyxerr << "Could not set popup font to "
                       << popupfontname << endl;
 
@@ -289,21 +261,21 @@ void LyXGUI::init()
 
        // the print form
        fl_set_input(fd_form_print->input_printer, 
-                    lyxrc->printer.c_str());   
+                    lyxrc.printer.c_str());    
         
        // the sendto form
-        if (!lyxrc->custom_export_command.empty())
+        if (!lyxrc.custom_export_command.empty())
                 fl_set_input(fd_form_sendto->input_cmd,
-                             lyxrc->custom_export_command.c_str());
-       if (lyxrc->custom_export_format == "lyx")
+                             lyxrc.custom_export_command.c_str());
+       if (lyxrc.custom_export_format == "lyx")
                fl_set_button(fd_form_sendto->radio_ftype_lyx, 1);
-       else if (lyxrc->custom_export_format == "tex")
+       else if (lyxrc.custom_export_format == "tex")
                fl_set_button(fd_form_sendto->radio_ftype_latex, 1);
-       else if (lyxrc->custom_export_format == "dvi")
+       else if (lyxrc.custom_export_format == "dvi")
                fl_set_button(fd_form_sendto->radio_ftype_dvi, 1);
-       else if (lyxrc->custom_export_format == "ps")
+       else if (lyxrc.custom_export_format == "ps")
                fl_set_button(fd_form_sendto->radio_ftype_ps, 1);
-        else if (lyxrc->custom_export_format == "ascii")
+        else if (lyxrc.custom_export_format == "ascii")
                 fl_set_button(fd_form_sendto->radio_ftype_ascii, 1);
 
        // Update parameters.
@@ -314,12 +286,7 @@ void LyXGUI::init()
 
        // in 0.12 the initialisation of the LyXServer must be done here
        // 0.13 it should be moved again...
-       lyxserver = new LyXServer(lyxViews->getLyXFunc(), lyxrc->lyxpipes);
-
-       // This is to make sure we get the selection color
-       getGC(gc_selection);
-       // This is to make sure we set the background_pixels
-       getGC(gc_clear);
+       lyxserver = new LyXServer(lyxViews->getLyXFunc(), lyxrc.lyxpipes);
 }
 
 
@@ -336,43 +303,44 @@ void LyXGUI::create_forms()
        //
 
        // the title form
-       fd_form_title = create_form_form_title();
-       fl_set_form_dblbuffer(fd_form_title->form_title, 1); // use dbl buffer
-       fl_set_form_atclose(fd_form_title->form_title, CancelCloseBoxCB, 0);
-       fl_addto_form(fd_form_title->form_title);
+       if (lyxrc.show_banner) {
+               fd_form_title = create_form_form_title();
+               fl_set_form_dblbuffer(fd_form_title->form_title, 1); // use dbl buffer
+               fl_set_form_atclose(fd_form_title->form_title, CancelCloseBoxCB, 0);
+               fl_addto_form(fd_form_title->form_title);
 #ifdef TWO_COLOR_ICONS
-       FL_OBJECT *obj = fl_add_bitmapbutton(FL_NORMAL_BUTTON, 0, 0, 425, 290, "");
-         fl_set_bitmapbutton_data(obj, banner_bw_width,
-                                  banner_bw_height, banner_bw_bits);
-         fl_set_object_color(obj, FL_WHITE, FL_BLACK);
+               FL_OBJECT *obj = fl_add_bitmapbutton(FL_NORMAL_BUTTON, 0, 0, 425, 290, "");
+               fl_set_bitmapbutton_data(obj, banner_bw_width,
+                                        banner_bw_height, banner_bw_bits);
+               fl_set_object_color(obj, FL_WHITE, FL_BLACK);
 #else
-       FL_OBJECT *obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON, 0, 0, 425, 290, "");
-         fl_set_pixmapbutton_data(obj, (char**)banner);
-#if FL_REVISION > 85
-         fl_set_pixmapbutton_focus_outline(obj, 3);
-#endif
+               FL_OBJECT *obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON, 0, 0, 425, 290, "");
+               fl_set_pixmapbutton_data(obj, const_cast<char **>(banner));
+               
+               fl_set_pixmapbutton_focus_outline(obj, 3);
 #endif
-         fl_set_button_shortcut(obj, "^M ^[", 1);
-         fl_set_object_boxtype(obj, FL_NO_BOX);
-         fl_set_object_callback(obj, TimerCB, 0);
-
-       obj = fl_add_text(FL_NORMAL_TEXT, 248, 265, 170, 16, LYX_VERSION);
-         fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+               fl_set_button_shortcut(obj, "^M ^[", 1);
+               fl_set_object_boxtype(obj, FL_NO_BOX);
+               fl_set_object_callback(obj, TimerCB, 0);
+               
+               obj = fl_add_text(FL_NORMAL_TEXT, 248, 265, 170, 16, LYX_VERSION);
+               fl_set_object_lsize(obj, FL_NORMAL_SIZE);
 #ifdef TWO_COLOR_ICONS
-         fl_set_object_color(obj, FL_WHITE, FL_WHITE);
-         fl_set_object_lcol(obj, FL_BLACK);
+               fl_set_object_color(obj, FL_WHITE, FL_WHITE);
+               fl_set_object_lcol(obj, FL_BLACK);
 #else
 //       fl_set_object_color(obj, FL_WHITE, FL_WHITE);
 //       fl_set_object_lcol(obj, FL_BLACK);
-          fl_mapcolor(FL_FREE_COL2, 0x05, 0x2e, 0x4c);
-          fl_mapcolor(FL_FREE_COL3, 0xe1, 0xd2, 0x9b);
-         fl_set_object_color(obj, FL_FREE_COL2, FL_FREE_COL2);
-         fl_set_object_lcol(obj, FL_FREE_COL3);
+               fl_mapcolor(FL_FREE_COL2, 0x05, 0x2e, 0x4c);
+               fl_mapcolor(FL_FREE_COL3, 0xe1, 0xd2, 0x9b);
+               fl_set_object_color(obj, FL_FREE_COL2, FL_FREE_COL2);
+               fl_set_object_lcol(obj, FL_FREE_COL3);
 #endif
-         fl_set_object_lalign(obj, FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
-         fl_set_object_lstyle(obj, FL_BOLD_STYLE);
-       fl_end_form();
-
+               fl_set_object_lalign(obj, FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+               fl_set_object_lstyle(obj, FL_BOLD_STYLE);
+               fl_end_form();
+       }
+       
        // the paragraph form
        fd_form_paragraph = create_form_form_paragraph();
        fl_set_form_atclose(fd_form_paragraph->form_paragraph,
@@ -397,11 +365,6 @@ void LyXGUI::create_forms()
        fl_set_input_return(fd_form_paragraph_extra->input_pextra_widthp,
                            FL_RETURN_ALWAYS);
 
-       // the search form
-       fd_form_search = create_form_form_search();
-       fl_set_form_atclose(fd_form_search->form_search,
-                           CancelCloseBoxCB, 0);
-
        // the character form
        fd_form_character = create_form_form_character();
        fl_set_form_atclose(fd_form_character->form_character,
@@ -441,28 +404,37 @@ void LyXGUI::create_forms()
        fl_set_counter_precision(fd_form_document->slider_tocdepth, 0);
        fl_addto_form(fd_form_document->form_document);
        combo_language = new Combox(FL_COMBOX_DROPLIST);
-       FL_OBJECT *ob = fd_form_document->choice_language;
-       combo_language->add(ob->x, ob->y, ob->w, ob->h, 200);
+       FL_OBJECT * ob = fd_form_document->choice_language;
+       combo_language->add(ob->x, ob->y, ob->w, ob->h, 250);
        combo_language->shortcut("#G", 1);
        fl_end_form();
+#if 0
        int n; // declared here because DEC cxx does not like multiple
               // declarations of variables in for() loops (JMarc)
-        for (n = 0; tex_babel[n][0]; n++) {
+        for (n = 0; tex_babel[n][0]; ++n) {
            combo_language->addto(tex_babel[n]);
        }
+#else
+       // "default" is not part of the languages array any more.
+       combo_language->addto("default");
+       for(Languages::const_iterator cit = languages.begin();
+           cit != languages.end(); ++cit) {
+               combo_language->addto((*cit).second.lang.c_str());
+       }
+#endif
 
        // not really necessary, but we can do it anyway.
        fl_addto_choice(fd_form_document->choice_fontsize, "default|10|11|12");
-       
-        for (n = 0; tex_fonts[n][0]; n++) {
+       int n;
+        for (n = 0; tex_fonts[n][0]; ++n) {
            fl_addto_choice(fd_form_document->choice_fonts, tex_fonts[n]);
        }
 
        fl_addto_choice(fd_form_document->choice_inputenc,
                        "default|latin1|latin2|latin5"
-                       "|koi8-r|koi8-u|cp866|cp1251");
+                       "|koi8-r|koi8-u|cp866|cp1251|iso88595");
 
-        for (n = 0; tex_graphics[n][0]; n++) {
+        for (n = 0; tex_graphics[n][0]; ++n) {
            fl_addto_choice(fd_form_document->choice_postscript_driver,
                                        tex_graphics[n]);
        }
@@ -600,23 +572,28 @@ void LyXGUI::create_forms()
        // Did we get a valid position?
        if (xpos>= 0 && ypos>= 0) {
                lyxViews->setPosition(xpos, ypos);
-               // show the title form in the middle of the main form
-               fl_set_form_position(fd_form_title->form_title,
-                       abs(xpos + (width/2) - (370 / 2)),
-                       abs(ypos + (height/2) - (290 / 2)));
-               // The use of abs() above is a trick to ensure valid positions
-               main_placement = FL_PLACE_POSITION;
-               title_placement = FL_PLACE_GEOMETRY;
+               if (lyxrc.show_banner) {
+                       // show the title form in the middle of the main form
+                       fl_set_form_position(fd_form_title->form_title,
+                                            abs(xpos + (width/2) - (370 / 2)),
+                                            abs(ypos + (height/2) - (290 / 2)));
+                       title_placement = FL_PLACE_GEOMETRY;
+                       // The use of abs() above is a trick to ensure
+                       // valid positions
+               }
+                       main_placement = FL_PLACE_POSITION;
        }
        lyxViews->show(main_placement, FL_FULLBORDER, "LyX");
-       fl_show_form(fd_form_title->form_title, 
-                    title_placement, FL_NOBORDER, 
-                    _("LyX Banner"));
-       fl_redraw_form(fd_form_title->form_title);
-       fl_raise_form(fd_form_title->form_title);
-
-       // Show the title form at most 7 secs (lowered from 10 secs)
-       fl_set_timer(fd_form_title->timer_title, 7);
+       if (lyxrc.show_banner) {
+               fl_show_form(fd_form_title->form_title, 
+                            title_placement, FL_NOBORDER, 
+                            _("LyX Banner"));
+               fl_redraw_form(fd_form_title->form_title);
+               fl_raise_form(fd_form_title->form_title);
+
+               // Show the title form at most 7 secs (lowered from 10 secs)
+               fl_set_timer(fd_form_title->timer_title, 7);
+       }
 }
 
 
@@ -639,7 +616,7 @@ void LyXGUI::runTime()
 }
 
 
-void LyXGUI::regBuf(Buffer *b)
+void LyXGUI::regBuf(Buffer * b)
 {
-       lyxViews->currentView()->buffer(b);
+       lyxViews->view()->buffer(b);
 }