]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_cb.C
Small fix.
[lyx.git] / src / lyx_cb.C
index 73d595d2f7bae9778cc2813ea64fa63446a5ad36..4f47c56621a9b923f805aaa315a6a97c16341458 100644 (file)
@@ -73,7 +73,6 @@ extern FD_form_figure * fd_form_figure;
 extern FD_form_screen * fd_form_screen;
 extern FD_form_toc * fd_form_toc;
 extern FD_form_ref * fd_form_ref;
-extern FD_LaTeXOptions * fd_latex_options;
 extern FD_form_bullet * fd_form_bullet;
 
 extern BufferView * current_view; // called too many times in this file...
@@ -161,7 +160,7 @@ void ToggleLockedInsetCursor(long x, long y, int asc, int desc);
 int RunLinuxDoc(BufferView *, int, string const &);
 int RunDocBook(int, string const &);
 void MenuWrite(Buffer * buf);
-void MenuWriteAs(Buffer * buffer);
+bool MenuWriteAs(Buffer * buffer);
 void MenuReload(Buffer * buf);
 void MenuLayoutSave();
 
@@ -209,7 +208,7 @@ void MenuWrite(Buffer * buffer)
 
 // should be moved to BufferView.C
 // Half of this func should be in LyXView, the rest in BufferView.
-void MenuWriteAs(Buffer * buffer)
+bool MenuWriteAs(Buffer * buffer)
 {
        // Why do we require BufferView::text to be able to write a
        // document? I see no point in that. (Lgb)
@@ -226,14 +225,21 @@ void MenuWriteAs(Buffer * buffer)
        if (!IsLyXFilename(fname))
                fname += ".lyx";
 
-       fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
-                              OnlyPath(fname),
-                              "*.lyx", 
-                              OnlyFilename(fname));
+       if (buffer->isUnnamed()) {
+               fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
+                                      "",
+                                      "*.lyx", 
+                                      "");
+       } else {
+               fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
+                                      OnlyPath(fname),
+                                      "*.lyx", 
+                                      OnlyFilename(fname));
+       }
        AllowInput(current_view);
 
        if (fname.empty()) {
-               return;
+               return false;
        }
        // Make sure the absolute filename ends with appropriate suffix
        string s = MakeAbsPath(fname);
@@ -245,7 +251,7 @@ void MenuWriteAs(Buffer * buffer)
                if (!AskQuestion(_("Same name as document already has:"),
                                 MakeDisplayPath(s, 50),
                                 _("Save anyway?")))
-                       return;
+                       return false;
                // Falls through to name change and save
        } 
        // No, but do we have another file with this name open?
@@ -263,23 +269,25 @@ void MenuWriteAs(Buffer * buffer)
                                ShowMessage(buffer, _("Document renamed to '"),
                                                MakeDisplayPath(s), _("', but not saved..."));
                        }
-               return;
+               return false;
        } // Check whether the file exists
        else {
                FileInfo myfile(s);
                if (myfile.isOK() && !AskQuestion(_("Document already exists:"), 
                                                  MakeDisplayPath(s, 50),
                                                  _("Replace file?")))
-                       return;
+                       return false;
        }
 
        // Ok, change the name of the buffer
        buffer->fileName(s);
        buffer->markDirty();
+       buffer->setUnnamed(false);
        // And save
        // Small bug: If the save fails, we have irreversible changed the name
        // of the document.
        MenuWrite(buffer);
+       return true;
 }    
 
 
@@ -743,7 +751,7 @@ void MenuMakeLinuxDoc(Buffer * buffer)
        ShowMessage(buffer, _("Building LinuxDoc SGML file `"),
                                          MakeDisplayPath(s),"'...");
        
-       buffer->makeLinuxDocFile(s, 65);
+       buffer->makeLinuxDocFile(s, true);
        buffer->redraw();
        ShowMessage(buffer, _("LinuxDoc SGML file save as"),
                                          MakeDisplayPath(s)); 
@@ -770,7 +778,7 @@ void MenuMakeDocBook(Buffer * buffer)
        ShowMessage(buffer, _("Building DocBook SGML file `"),
                                          MakeDisplayPath(s), "'..."); 
        
-       buffer->makeDocBookFile(s, 65);
+       buffer->makeDocBookFile(s, true);
        buffer->redraw();
        ShowMessage(buffer, _("DocBook SGML file save as"),
                                          MakeDisplayPath(s)); 
@@ -926,15 +934,12 @@ void MenuExport(Buffer * buffer, string const & extyp)
        }
        // HTML
        else if (extyp == "html") {
-               MenuMakeHTML(buffer);
-       }
-       // HTML from linuxdoc
-       else if (extyp == "html-linuxdoc") {
-               MenuMakeHTML_LinuxDoc(buffer);
-       }
-       // HTML from docbook
-       else if (extyp == "html-docbook") {
-               MenuMakeHTML_DocBook(buffer);
+               if (buffer->isLinuxDoc())
+                       MenuMakeHTML_LinuxDoc(buffer);
+               else if (buffer->isDocBook())
+                       MenuMakeHTML_DocBook(buffer);
+               else
+                       MenuMakeHTML(buffer);
        }
        else {
                ShowMessage(buffer, _("Unknown export type: ") + extyp);
@@ -975,8 +980,8 @@ void AutoSave(BufferView * bv)
        if (!bv->available())
                return;
 
-       if (bv->buffer()->isBakClean()
-           || bv->buffer()->isReadonly()) {
+       if (bv->buffer()->isBakClean() ||
+           bv->buffer()->isReadonly() || bv->buffer()->isUnnamed()) {
                // We don't save now, but we'll try again later
                bv->owner()->resetAutosaveTimer();
                return;
@@ -1103,10 +1108,19 @@ void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
        ifs.unsetf(ios::skipws);
        istream_iterator<char> ii(ifs);
        istream_iterator<char> end;
+#if !defined(USE_INCLUDED_STRING) && !defined(STD_STRING_IS_GOOD)
+       // We use this until the compilers get better...
+       vector<char> tmp;
+       copy(ii, end, back_inserter(tmp));
+       string tmpstr(tmp.begin(), tmp.end());
+#else
+       // This is what we want to use and what we will use once the
+       // compilers get good enough. 
        //string tmpstr(ii, end); // yet a reason for using std::string
        // alternate approach to get the file into a string:
        string tmpstr;
        copy(ii, end, back_inserter(tmpstr));
+#endif
        // insert the string
        current_view->hideCursor();
        
@@ -1212,7 +1226,7 @@ int RunLinuxDoc(BufferView * bv, int flag, string const & filename)
        
        if (!bv->available())
                return 0;
-       bv->buffer()->makeLinuxDocFile(name, 0);
+       bv->buffer()->makeLinuxDocFile(name, false);
 
        // CHECK remove this once we have a proper geometry class
 
@@ -1273,7 +1287,7 @@ int RunDocBook(int flag, string const & filename)
        if (!current_view->available())
                return 0;
        
-       current_view->buffer()->makeDocBookFile(name, 0);
+       current_view->buffer()->makeDocBookFile(name, false);
 
        // Shall this code go or should it stay? (Lgb)
        // This code is a placeholder for future implementation. (Jose')
@@ -1405,18 +1419,23 @@ bool UpdateLayoutParagraph()
        }
 
        Buffer * buf = current_view->buffer();
+       LyXText * text = 0;
+       if (current_view->the_locking_inset)
+           text = current_view->the_locking_inset->getLyXText(current_view);
+       if (!text)
+           text = current_view->text;
 
        fl_set_input(fd_form_paragraph->input_labelwidth,
-                    current_view->text->cursor.par()->GetLabelWidthString().c_str());
+                    text->cursor.par()->GetLabelWidthString().c_str());
        fl_set_button(fd_form_paragraph->radio_align_right, 0);
        fl_set_button(fd_form_paragraph->radio_align_left, 0);
        fl_set_button(fd_form_paragraph->radio_align_center, 0);
        fl_set_button(fd_form_paragraph->radio_align_block, 0);
 
-       int align = current_view->text->cursor.par()->GetAlign();
+       int align = text->cursor.par()->GetAlign();
        if (align == LYX_ALIGN_LAYOUT)
                align = textclasslist.Style(buf->params.textclass,
-                                           current_view->text->cursor.par()->GetLayout()).align;
+                                           text->cursor.par()->GetLayout()).align;
         
        switch (align) {
        case LYX_ALIGN_RIGHT:
@@ -1432,20 +1451,41 @@ bool UpdateLayoutParagraph()
                fl_set_button(fd_form_paragraph->radio_align_block, 1);
                break;
        }
-        
+
+#ifndef NEW_INSETS
+       fl_set_button(fd_form_paragraph->check_lines_top,
+                     text->cursor.par()->FirstPhysicalPar()->line_top);
+
+       fl_set_button(fd_form_paragraph->check_lines_bottom,
+                     text->cursor.par()->FirstPhysicalPar()->line_bottom);
+
+       fl_set_button(fd_form_paragraph->check_pagebreaks_top,
+                     text->cursor.par()->FirstPhysicalPar()->pagebreak_top);
+
+       fl_set_button(fd_form_paragraph->check_pagebreaks_bottom,
+                     text->cursor.par()->FirstPhysicalPar()->pagebreak_bottom);
+       fl_set_button(fd_form_paragraph->check_noindent,
+                     text->cursor.par()->FirstPhysicalPar()->noindent);
+#else
        fl_set_button(fd_form_paragraph->check_lines_top,
-                     current_view->text->cursor.par()->FirstPhysicalPar()->line_top);
+                     text->cursor.par()->line_top);
        fl_set_button(fd_form_paragraph->check_lines_bottom,
-                     current_view->text->cursor.par()->FirstPhysicalPar()->line_bottom);
+                     text->cursor.par()->line_bottom);
        fl_set_button(fd_form_paragraph->check_pagebreaks_top,
-                     current_view->text->cursor.par()->FirstPhysicalPar()->pagebreak_top);
+                     text->cursor.par()->pagebreak_top);
        fl_set_button(fd_form_paragraph->check_pagebreaks_bottom,
-                     current_view->text->cursor.par()->FirstPhysicalPar()->pagebreak_bottom);
+                     text->cursor.par()->pagebreak_bottom);
        fl_set_button(fd_form_paragraph->check_noindent,
-                     current_view->text->cursor.par()->FirstPhysicalPar()->noindent);
+                     text->cursor.par()->noindent);
+#endif
        fl_set_input (fd_form_paragraph->input_space_above, "");
-       
-       switch (current_view->text->cursor.par()->FirstPhysicalPar()->added_space_top.kind()) {
+
+#ifndef NEW_INSETS
+       switch (text->cursor.par()->FirstPhysicalPar()->added_space_top.kind()) {
+#else
+       switch (text->cursor.par()->added_space_top.kind()) {
+#endif
+
        case VSpace::NONE:
                fl_set_choice (fd_form_paragraph->choice_space_above, 1);
                break;
@@ -1465,15 +1505,27 @@ bool UpdateLayoutParagraph()
                fl_set_choice (fd_form_paragraph->choice_space_above, 6);
                break;
        case VSpace::LENGTH:
-               fl_set_choice (fd_form_paragraph->choice_space_above, 7); 
+               fl_set_choice (fd_form_paragraph->choice_space_above, 7);
+#ifndef NEW_INSETS
                fl_set_input  (fd_form_paragraph->input_space_above, 
-                              current_view->text->cursor.par()->FirstPhysicalPar()->added_space_top.length().asString().c_str());
+                              text->cursor.par()->FirstPhysicalPar()->added_space_top.length().asString().c_str());
+#else
+               fl_set_input  (fd_form_paragraph->input_space_above, 
+                              text->cursor.par()->added_space_top.length().asString().c_str());
+#endif
                break;
        }
+#ifndef NEW_INSETS
        fl_set_button (fd_form_paragraph->check_space_above,
-                      current_view->text->cursor.par()->FirstPhysicalPar()->added_space_top.keep());
+                      text->cursor.par()->FirstPhysicalPar()->added_space_top.keep());
        fl_set_input (fd_form_paragraph->input_space_below, "");
-       switch (current_view->text->cursor.par()->FirstPhysicalPar()->added_space_bottom.kind()) {
+       switch (text->cursor.par()->FirstPhysicalPar()->added_space_bottom.kind()) {
+#else
+       fl_set_button (fd_form_paragraph->check_space_above,
+                      text->cursor.par()->added_space_top.keep());
+       fl_set_input (fd_form_paragraph->input_space_below, "");
+       switch (text->cursor.par()->added_space_bottom.kind()) {
+#endif
        case VSpace::NONE:
                fl_set_choice (fd_form_paragraph->choice_space_below,
                               1);
@@ -1500,17 +1552,28 @@ bool UpdateLayoutParagraph()
                break;
        case VSpace::LENGTH:
                fl_set_choice (fd_form_paragraph->choice_space_below,
-                              7); 
+                              7);
+#ifndef NEW_INSETS
                fl_set_input  (fd_form_paragraph->input_space_below, 
-                              current_view->text->cursor.par()->FirstPhysicalPar()->added_space_bottom.length().asString().c_str());
+                              text->cursor.par()->FirstPhysicalPar()->added_space_bottom.length().asString().c_str());
                break;
        }
        fl_set_button (fd_form_paragraph->check_space_below,
-                      current_view->text->cursor.par()->FirstPhysicalPar()->added_space_bottom.keep());
+                      text->cursor.par()->FirstPhysicalPar()->added_space_bottom.keep());
 
        fl_set_button(fd_form_paragraph->check_noindent,
-                     current_view->text->cursor.par()->FirstPhysicalPar()->noindent);
+                     text->cursor.par()->FirstPhysicalPar()->noindent);
+#else
+               fl_set_input  (fd_form_paragraph->input_space_below, 
+                              text->cursor.par()->added_space_bottom.length().asString().c_str());
+               break;
+       }
+       fl_set_button (fd_form_paragraph->check_space_below,
+                      text->cursor.par()->added_space_bottom.keep());
 
+       fl_set_button(fd_form_paragraph->check_noindent,
+                     text->cursor.par()->noindent);
+#endif
        if (current_view->buffer()->isReadonly()) {
                DisableParagraphLayout();
        } else {
@@ -1910,7 +1973,7 @@ void MenuLayoutSave()
 
 // This is both GUI and LyXFont dependent. Don't know where to put it. (Asger)
 // Well, it's mostly GUI dependent, so I guess it will stay here. (Asger)
-LyXFont UserFreeFont()
+LyXFont UserFreeFont(BufferParams const & params)
 {
        LyXFont font(LyXFont::ALL_IGNORE);
 
@@ -1992,20 +2055,18 @@ LyXFont UserFreeFont()
        case 11: font.setColor(LColor::inherit); break;
        }
 
-       string language = combo_language2->getline();
-       Languages::iterator lit = languages.find(language);
-       if (lit != languages.end()) 
-               font.setLanguage(&(*lit).second);
-       else
-               font.setLanguage(ignore_language);
-
+       int choice = combo_language2->get();
+       if (choice == 1)
+               font.setLanguage(ignore_language);
+       else if (choice == 2)
+               font.setLanguage(params.language_info);
+       else
+               font.setLanguage(&languages[combo_language2->getline()]);
 
        return font; 
 }
 
 
-
-
 /* callbacks for form form_title */
 extern "C" void TimerCB(FL_OBJECT *, long)
 {
@@ -2133,16 +2194,21 @@ extern "C" void ParagraphApplyCB(FL_OBJECT *, long)
        labelwidthstring = fl_get_input(fd_form_paragraph->input_labelwidth);
        noindent = fl_get_button(fd_form_paragraph->check_noindent);
 
-       current_view->text->SetParagraph(current_view,
-                                        line_top,
-                                        line_bottom,
-                                        pagebreak_top,
-                                        pagebreak_bottom,
-                                        space_top,
-                                        space_bottom,
-                                        align, 
-                                        labelwidthstring,
-                                        noindent);
+       LyXText * text = 0;
+       if (current_view->the_locking_inset)
+           text = current_view->the_locking_inset->getLyXText(current_view);
+       if (!text)
+           text = current_view->text;
+       text->SetParagraph(current_view,
+                          line_top,
+                          line_bottom,
+                          pagebreak_top,
+                          pagebreak_bottom,
+                          space_top,
+                          space_bottom,
+                          align, 
+                          labelwidthstring,
+                          noindent);
        current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        current_view->owner()->getMiniBuffer()->Set(_("Paragraph layout set"));
 }
@@ -2168,7 +2234,7 @@ extern "C" void CharacterApplyCB(FL_OBJECT *, long)
        // we set toggleall locally here, since it should be true for
        // all other uses of ToggleAndShow() (JMarc)
        toggleall = fl_get_button(fd_form_character->check_toggle_all);
-       ToggleAndShow(current_view, UserFreeFont());
+       ToggleAndShow(current_view, UserFreeFont(current_view->buffer()->params));
        current_view->setState();
        toggleall = true;
 }
@@ -2573,11 +2639,13 @@ extern "C" void PreambleOKCB(FL_OBJECT * ob, long data)
 
 /* callbacks for form form_table */
 
-extern "C" void TableApplyCB(FL_OBJECT *, long)
+extern "C"
+void TableApplyCB(FL_OBJECT *, long)
 {
        if (!current_view->available())
                return;
-   
+
+#ifndef NEW_TABULAR
        // check for tables in tables
        if (current_view->text->cursor.par()->table){
                WriteAlert(_("Impossible Operation!"),
@@ -2585,7 +2653,7 @@ extern "C" void TableApplyCB(FL_OBJECT *, long)
                           _("Sorry."));
                return;
        }
+#endif
        current_view->owner()->getMiniBuffer()->Set(_("Inserting table..."));
 
        int ysize = int(fl_get_slider_value(fd_form_table->slider_columns) + 0.5);
@@ -2613,8 +2681,10 @@ extern "C" void TableApplyCB(FL_OBJECT *, long)
        //if (!fl_get_button(fd_form_table->check_latex)){
        // insert the new wysiwy table
        current_view->text->SetLayout(current_view, 0); // standard layout
+#ifndef NEW_INSETS
        if (current_view->text->cursor.par()->footnoteflag == 
            LyXParagraph::NO_FOOTNOTE) {
+#endif
                current_view->text
                        ->SetParagraph(current_view, 0, 0,
                                       0, 0,
@@ -2627,6 +2697,7 @@ extern "C" void TableApplyCB(FL_OBJECT *, long)
                                       LYX_ALIGN_CENTER,
                                       string(),
                                       0);
+#ifndef NEW_INSETS
        } else {
                current_view->text
                        ->SetParagraph(current_view, 0, 0,
@@ -2637,16 +2708,17 @@ extern "C" void TableApplyCB(FL_OBJECT *, long)
                                       string(),
                                       0);
        }
-       
+#endif
+#ifndef NEW_TABULAR
        current_view->text->cursor.par()->table =
                new LyXTable(xsize, ysize);
-
+#endif
        Language const * lang = 
                current_view->text->cursor.par()->getParLanguage(current_view->buffer()->params);
        LyXFont font(LyXFont::ALL_INHERIT, lang);
        for (int i = 0; i < xsize * ysize - 1; ++i) {
-               current_view->text->cursor.par()->InsertChar(0, LyXParagraph::META_NEWLINE);
-               current_view->text->cursor.par()->SetFont(0, font);
+               current_view->text->cursor.par()
+                       ->InsertChar(0, LyXParagraph::META_NEWLINE, font);
        }
        current_view->text->RedoParagraph(current_view);
    
@@ -2658,13 +2730,15 @@ extern "C" void TableApplyCB(FL_OBJECT *, long)
 }
 
 
-extern "C" void TableCancelCB(FL_OBJECT *, long)
+extern "C"
+void TableCancelCB(FL_OBJECT *, long)
 {
        fl_hide_form(fd_form_table->form_table);
 }
 
 
-extern "C" void TableOKCB(FL_OBJECT * ob, long data)
+extern "C"
+void TableOKCB(FL_OBJECT * ob, long data)
 {
        TableApplyCB(ob, data);
        TableCancelCB(ob, data);
@@ -2696,7 +2770,8 @@ void Table()
 
 
 /* callbacks for form form_figure */
-extern "C" void FigureApplyCB(FL_OBJECT *, long)
+extern "C"
+void FigureApplyCB(FL_OBJECT *, long)
 {
        if (!current_view->available())
                return;
@@ -2707,7 +2782,10 @@ extern "C" void FigureApplyCB(FL_OBJECT *, long)
        
        current_view->owner()->getMiniBuffer()->Set(_("Inserting figure..."));
        if (fl_get_button(fd_form_figure->radio_inline)
-           || current_view->text->cursor.par()->table) {
+#ifndef NEW_TABULAR
+           || current_view->text->cursor.par()->table
+#endif
+               ) {
                InsetFig * new_inset = new InsetFig(100, 20, buffer);
                current_view->insertInset(new_inset);
                current_view->owner()->getMiniBuffer()->Set(_("Figure inserted"));
@@ -2734,9 +2812,11 @@ extern "C" void FigureApplyCB(FL_OBJECT *, long)
 
        // The standard layout should always be numer 0;
        current_view->text->SetLayout(current_view, 0);
-       
+
+#ifndef NEW_INSETS
        if (current_view->text->cursor.par()->footnoteflag == 
            LyXParagraph::NO_FOOTNOTE) {
+#endif
                current_view->text->
                        SetParagraph(current_view, 0, 0,
                                     0, 0,
@@ -2746,6 +2826,7 @@ extern "C" void FigureApplyCB(FL_OBJECT *, long)
                                             buffer->params.spacing.getValue(),
                                             LyXLength::CM),
                                     LYX_ALIGN_CENTER, string(), 0);
+#ifndef NEW_INSETS
        } else {
                current_view->text->SetParagraph(current_view, 0, 0,
                                                 0, 0,
@@ -2755,6 +2836,7 @@ extern "C" void FigureApplyCB(FL_OBJECT *, long)
                                                 string(),
                                                 0);
        }
+#endif
        
        current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
       
@@ -2787,6 +2869,7 @@ extern "C" void ScreenApplyCB(FL_OBJECT *, long)
        lyxrc.sans_font_name = fl_get_input(fd_form_screen->input_sans);
        lyxrc.typewriter_font_name = fl_get_input(fd_form_screen->input_typewriter);
        lyxrc.font_norm = fl_get_input(fd_form_screen->input_font_norm);
+       lyxrc.set_font_norm_type();
        lyxrc.zoom = atoi(fl_get_input(fd_form_screen->intinput_size));
        fontloader.update();
 
@@ -2817,24 +2900,6 @@ extern "C" void ScreenOKCB(FL_OBJECT * ob, long data)
 }
 
 
-void LaTeXOptions(BufferView * bv)
-{
-       if (!bv->available())
-               return;
-
-       fl_set_button(fd_latex_options->accents,
-                     int(bv->buffer()->params.allowAccents));
-       
-       if (fd_latex_options->LaTeXOptions->visible) {
-               fl_raise_form(fd_latex_options->LaTeXOptions);
-       } else {
-               fl_show_form(fd_latex_options->LaTeXOptions,
-                            FL_PLACE_MOUSE, FL_FULLBORDER,
-                            _("LaTeX Options"));
-       }
-}
-
-
 // This function runs "configure" and then rereads lyx.defaults to
 // reconfigure the automatic settings.
 void Reconfigure(BufferView * bv)