]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_cb.C
Herbert's patch, part 1
[lyx.git] / src / lyx_cb.C
index 1763bb328c9767c4da1a087186dbe77fc04d1980..1306b2bddf820c18679e0b00ff5d432af49597ff 100644 (file)
@@ -4,7 +4,7 @@
  *           LyX, The Document Processor
  *      
  *         Copyright 1995 Matthias Ettrich,
  *           LyX, The Document Processor
  *      
  *         Copyright 1995 Matthias Ettrich,
- *          Copyright 1995-2000 The LyX Team.
+ *          Copyright 1995-2001 The LyX Team.
  *
  * ====================================================== */
 
  *
  * ====================================================== */
 
 #include <utility> 
 #include <iostream>
 
 #include <utility> 
 #include <iostream>
 
-#include FORMS_H_LOCATION
-#include "lyx.h"
-#include "lyx_main.h"
 #include "lyx_cb.h"
 #include "lyx_cb.h"
-#include "insets/insetlabel.h"
-#include "insets/figinset.h"
-#include "lyxfunc.h"
-#include "minibuffer.h"
-#include "combox.h"
-#include "bufferlist.h"
-#include "frontends/FileDialog.h"
 #include "lyx_gui_misc.h"
 #include "lyx_gui_misc.h"
-#include "LyXView.h"
-#include "lastfiles.h"
+#include "lyx_main.h"
+#include "buffer.h"
+#include "bufferlist.h"
 #include "bufferview_funcs.h"
 #include "bufferview_funcs.h"
+#include "debug.h"
+#include "lastfiles.h"
+#include "LyXView.h"
+#include "lyxrc.h"
+#include "lyxtext.h"
+#include "frontends/FileDialog.h"
+#include "frontends/GUIRunTime.h"
+#include "insets/insetlabel.h"
 #include "support/FileInfo.h"
 #include "support/FileInfo.h"
-#include "support/syscall.h"
 #include "support/filetools.h"
 #include "support/path.h"
 #include "support/filetools.h"
 #include "support/path.h"
-#include "lyxrc.h"
-#include "lyxtext.h"
+#include "support/syscall.h"
+#include "support/lstrings.h"
+#include "gettext.h"
+#include "BufferView.h"
 
 
+using std::vector;
 using std::ifstream;
 using std::copy;
 using std::ifstream;
 using std::copy;
-using std::back_inserter;
 using std::endl;
 using std::endl;
-using std::cout;
 using std::ios;
 using std::ios;
+using std::back_inserter;
 using std::istream_iterator;
 using std::pair;
 using std::make_pair;
 using std::istream_iterator;
 using std::pair;
 using std::make_pair;
-using std::vector;
-using std::sort;
-using std::equal;
 
 extern BufferList bufferlist;
 
 extern BufferList bufferlist;
-extern void show_symbols_form();
-extern FD_form_figure * fd_form_figure;
-
-extern BufferView * current_view; // called too many times in this file...
-
-extern void DeleteSimpleCutBuffer(); /* for the cleanup when exiting */
-
-extern void MenuSendto();
-
 // this should be static, but I need it in buffer.C
 bool quitting; // flag, that we are quitting the program
 extern bool finished; // all cleanup done just let it run through now.
 
 // this should be static, but I need it in buffer.C
 bool quitting; // flag, that we are quitting the program
 extern bool finished; // all cleanup done just let it run through now.
 
-char ascii_type; /* for selection notify callbacks */
-
-bool scrolling = false;
-
 /* 
    This is the inset locking stuff needed for mathed --------------------
 
 /* 
    This is the inset locking stuff needed for mathed --------------------
 
@@ -81,15 +65,15 @@ bool scrolling = false;
 
    During the lock, all button and keyboard events will be modified
    and send to the inset through the following inset-features. Note that
 
    During the lock, all button and keyboard events will be modified
    and send to the inset through the following inset-features. Note that
-   Inset::InsetUnlock will be called from inside UnlockInset. It is meant
+   Inset::insetUnlock will be called from inside UnlockInset. It is meant
    to contain the code for restoring the menus and things like this.
 
    
    to contain the code for restoring the menus and things like this.
 
    
-   virtual void InsetButtonPress(int x, int y, int button);
-   virtual void InsetButtonRelease(int x, int y, int button);
-   virtual void InsetKeyPress(XKeyEvent *ev);
-   virtual void InsetMotionNotify(int x, int y, int state);
-   virtual void InsetUnlock();
+   virtual void insetButtonPress(int x, int y, int button);
+   virtual void insetButtonRelease(int x, int y, int button);
+   virtual void insetKeyPress(XKeyEvent *ev);
+   virtual void insetMotionNotify(int x, int y, int state);
+   virtual void insetUnlock();
 
    If a inset wishes any redraw and/or update it just has to call
    UpdateInset(this).
 
    If a inset wishes any redraw and/or update it just has to call
    UpdateInset(this).
@@ -131,12 +115,12 @@ void ToggleLockedInsetCursor(int x, int y, int asc, int desc);
 void ShowMessage(Buffer const * buf,
                 string const & msg1,
                 string const & msg2,
 void ShowMessage(Buffer const * buf,
                 string const & msg1,
                 string const & msg2,
-                string const & msg3, int delay)
+                string const & msg3)
 {
 {
-       if (lyxrc.use_gui)
-               buf->getUser()->owner()->getMiniBuffer()->Set(msg1, msg2,
-                                                             msg3, delay);
-       else
+       if (lyxrc.use_gui) {
+               string const str = msg1 + ' ' + msg2 + ' ' + msg3;
+               buf->getUser()->owner()->message(str);
+       else
                lyxerr << msg1 << msg2 << msg3 << endl;
 }
 
                lyxerr << msg1 << msg2 << msg3 << endl;
 }
 
@@ -152,7 +136,7 @@ void ShowMessage(Buffer const * buf,
 bool MenuWrite(BufferView * bv, Buffer * buffer)
 {
        // FIXME: needed ?
 bool MenuWrite(BufferView * bv, Buffer * buffer)
 {
        // FIXME: needed ?
-       XFlush(fl_get_display());
+       XFlush(GUIRunTime::x11Display());
  
        if (!buffer->save()) {
                string const fname = buffer->fileName();
  
        if (!buffer->save()) {
                string const fname = buffer->fileName();
@@ -179,15 +163,21 @@ bool WriteAs(BufferView * bv, Buffer * buffer, string const & filename)
 
        if (filename.empty()) {
 
 
        if (filename.empty()) {
 
-               FileDialog fileDlg(bv->owner(), _("Choose a filename to save document as"),
+               FileDialog fileDlg(bv->owner(),
+                                  _("Choose a filename to save document as"),
                        LFUN_WRITEAS,
                        LFUN_WRITEAS,
-                       make_pair(string(_("Documents")), string(lyxrc.document_path)),
-                       make_pair(string(_("Templates")), string(lyxrc.template_path)));
+                       make_pair(string(_("Documents")),
+                                 string(lyxrc.document_path)),
+                       make_pair(string(_("Templates")),
+                                 string(lyxrc.template_path)));
 
                if (!IsLyXFilename(fname))
                        fname += ".lyx";
 
 
                if (!IsLyXFilename(fname))
                        fname += ".lyx";
 
-               FileDialog::Result result = fileDlg.Select(OnlyPath(fname), _("*.lyx|LyX Documents (*.lyx)"), OnlyFilename(fname));
+               FileDialog::Result result =
+                       fileDlg.Select(OnlyPath(fname),
+                                      _("*.lyx|LyX Documents (*.lyx)"),
+                                      OnlyFilename(fname));
 
                if (result.first == FileDialog::Later)
                        return false;
 
                if (result.first == FileDialog::Later)
                        return false;
@@ -204,7 +194,6 @@ bool WriteAs(BufferView * bv, Buffer * buffer, string const & filename)
        } else
                fname = filename;
 
        } else
                fname = filename;
 
-
        // Same name as we have already?
        if (!buffer->isUnnamed() && fname == oldname) {
                if (!AskQuestion(_("Same name as document already has:"),
        // Same name as we have already?
        if (!buffer->isUnnamed() && fname == oldname) {
                if (!AskQuestion(_("Same name as document already has:"),
@@ -290,10 +279,10 @@ int MenuRunChktex(Buffer * buffer)
 
 void QuitLyX()
 {
 
 void QuitLyX()
 {
-       lyxerr.debug() << "Running QuitLyX." << endl;
+       lyxerr[Debug::INFO] << "Running QuitLyX." << endl;
 
        if (lyxrc.use_gui) {
 
        if (lyxrc.use_gui) {
-               if (!bufferlist.QwriteAll())
+               if (!bufferlist.qwriteAll())
                        return;
 
                lastfiles->writeFile(lyxrc.lastfiles);
                        return;
 
                lastfiles->writeFile(lyxrc.lastfiles);
@@ -307,7 +296,7 @@ void QuitLyX()
        bufferlist.closeAll();
 
        // do any other cleanup procedures now
        bufferlist.closeAll();
 
        // do any other cleanup procedures now
-       lyxerr.debug() << "Deleting tmp dir " << system_tempdir << endl;
+       lyxerr[Debug::INFO] << "Deleting tmp dir " << system_tempdir << endl;
 
        DestroyLyXTmpDir(system_tempdir);
 
 
        DestroyLyXTmpDir(system_tempdir);
 
@@ -329,7 +318,7 @@ void AutoSave(BufferView * bv)
                return;
        }
 
                return;
        }
 
-       bv->owner()->getMiniBuffer()->Set(_("Autosaving current document..."));
+       bv->owner()->message(_("Autosaving current document..."));
        
        // create autosave filename
        string fname =  OnlyPath(bv->buffer()->fileName());
        
        // create autosave filename
        string fname =  OnlyPath(bv->buffer()->fileName());
@@ -369,7 +358,7 @@ void AutoSave(BufferView * bv)
                                // It is dangerous to do this in the child,
                                // but safe in the parent, so...
                                if (pid == -1)
                                // It is dangerous to do this in the child,
                                // but safe in the parent, so...
                                if (pid == -1)
-                                       bv->owner()->getMiniBuffer()->Set(_("Autosave Failed!"));
+                                       bv->owner()->message(_("Autosave Failed!"));
                        }
                }
                if (pid == 0) { // we are the child so...
                        }
                }
                if (pid == 0) { // we are the child so...
@@ -403,9 +392,9 @@ Buffer * NewLyxFile(string const & filename)
                tmpname = split(tmpname, ':');
        }
 #endif
                tmpname = split(tmpname, ':');
        }
 #endif
-       lyxerr.debug() << "Arg is " << filename
-                      << "\nName is " << name
-                      << "\nTemplate is " << tmpname << endl;
+       lyxerr[Debug::INFO] << "Arg is " << filename
+                           << "\nName is " << name
+                           << "\nTemplate is " << tmpname << endl;
 
        // find a free buffer 
        Buffer * tmpbuf = bufferlist.newFile(name, tmpname);
 
        // find a free buffer 
        Buffer * tmpbuf = bufferlist.newFile(name, tmpname);
@@ -475,9 +464,9 @@ void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
        // clear the selection
        bv->beforeChange(bv->text);
        if (!asParagraph)
        // clear the selection
        bv->beforeChange(bv->text);
        if (!asParagraph)
-               bv->text->InsertStringA(bv, tmpstr);
+               bv->text->insertStringAsLines(bv, tmpstr);
        else
        else
-               bv->text->InsertStringB(bv, tmpstr);
+               bv->text->insertStringAsParagraphs(bv, tmpstr);
        bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 
        bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 
@@ -485,27 +474,18 @@ void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
 void MenuInsertLabel(BufferView * bv, string const & arg)
 {
        string label(arg);
 void MenuInsertLabel(BufferView * bv, string const & arg)
 {
        string label(arg);
-       ProhibitInput(bv);
+       bv->owner()->prohibitInput();
        if (label.empty()) {
        if (label.empty()) {
-#ifndef NEW_INSETS
-               LyXParagraph * par =
-                       bv->text->cursor.par()->FirstPhysicalPar();
-#else
-               LyXParagraph * par = bv->text->cursor.par();
-#endif
+               Paragraph * par = bv->text->cursor.par();
                LyXLayout const * layout =
                        &textclasslist.Style(bv->buffer()->params.textclass,
                LyXLayout const * layout =
                        &textclasslist.Style(bv->buffer()->params.textclass,
-                                            par->GetLayout());
+                                            par->getLayout());
 
 
-               if (layout->latextype == LATEX_PARAGRAPH && par->previous) {
-#ifndef NEW_INSETS
-                       LyXParagraph * par2 = par->previous->FirstPhysicalPar();
-#else
-                       LyXParagraph * par2 = par->previous;
-#endif
+               if (layout->latextype == LATEX_PARAGRAPH && par->previous()) {
+                       Paragraph * par2 = par->previous();
                        LyXLayout const * layout2 =
                                &textclasslist.Style(bv->buffer()->params.textclass,
                        LyXLayout const * layout2 =
                                &textclasslist.Style(bv->buffer()->params.textclass,
-                                                    par2->GetLayout());
+                                                    par2->getLayout());
                        if (layout2->latextype != LATEX_PARAGRAPH) {
                                par = par2;
                                layout = layout2;
                        if (layout2->latextype != LATEX_PARAGRAPH) {
                                par = par2;
                                layout = layout2;
@@ -514,30 +494,12 @@ void MenuInsertLabel(BufferView * bv, string const & arg)
                string text = layout->latexname().substr(0, 3);
                if (layout->latexname() == "theorem")
                        text = "thm"; // Create a correct prefix for prettyref
                string text = layout->latexname().substr(0, 3);
                if (layout->latexname() == "theorem")
                        text = "thm"; // Create a correct prefix for prettyref
-#ifndef NEW_INSETS
-               if (par->footnoteflag==LyXParagraph::OPEN_FOOTNOTE)
-                       switch (par->footnotekind) {
-                       case LyXParagraph::FIG:
-                       case LyXParagraph::WIDE_FIG:
-                               text = "fig";
-                               break;
-                       case LyXParagraph::TAB:
-                       case LyXParagraph::WIDE_TAB:
-                               text = "tab";
-                               break;
-                       case LyXParagraph::ALGORITHM:
-                               text = "alg";
-                               break;
-                       case LyXParagraph::FOOTNOTE:    
-                       case LyXParagraph::MARGIN:
-                               break;
-                       }
-#endif
+
                text += ":";
                if (layout->latextype == LATEX_PARAGRAPH ||
                    lyxrc.label_init_length < 0)
                        text.erase();
                text += ":";
                if (layout->latextype == LATEX_PARAGRAPH ||
                    lyxrc.label_init_length < 0)
                        text.erase();
-               string par_text = par->String(bv->buffer(), false);
+               string par_text = par->asString(bv->buffer(), false);
                for (int i = 0; i < lyxrc.label_init_length; ++i) {
                        if (par_text.empty())
                                break;
                for (int i = 0; i < lyxrc.label_init_length; ++i) {
                        if (par_text.empty())
                                break;
@@ -560,7 +522,7 @@ void MenuInsertLabel(BufferView * bv, string const & arg)
                InsetLabel * inset = new InsetLabel( p );
                bv->insertInset( inset );
        }
                InsetLabel * inset = new InsetLabel( p );
                bv->insertInset( inset );
        }
-       AllowInput(bv);
+       bv->owner()->allowInput();
 }
 
 
 }
 
 
@@ -576,120 +538,18 @@ void MenuLayoutSave(BufferView * bv)
 }
 
 
 }
 
 
-void Figure()
-{
-       if (fd_form_figure->form_figure->visible) {
-               fl_raise_form(fd_form_figure->form_figure);
-       } else {
-               fl_show_form(fd_form_figure->form_figure,
-                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_TRANSIENT,
-                            _("Insert Figure"));
-       }
-}
-
-
-/* callbacks for form form_figure */
-extern "C"
-void FigureApplyCB(FL_OBJECT *, long)
-{
-       if (!current_view->available())
-               return;
-
-       Buffer * buffer = current_view->buffer();
-       if (buffer->isReadonly()) // paranoia
-               return;
-       
-       current_view->owner()->getMiniBuffer()->Set(_("Inserting figure..."));
-       if (fl_get_button(fd_form_figure->radio_inline)) {
-               InsetFig * new_inset = new InsetFig(100, 20, *buffer);
-               current_view->insertInset(new_inset);
-               current_view->owner()->getMiniBuffer()->Set(_("Figure inserted"));
-               new_inset->Edit(current_view, 0, 0, 0);
-               return;
-       }
-       
-       current_view->hideCursor();
-       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR);
-       current_view->beforeChange(current_view->text);
-      
-       current_view->text->SetCursorParUndo(current_view->buffer()); 
-       current_view->text->FreezeUndo();
-
-       current_view->text->BreakParagraph(current_view);
-       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-      
-       if (current_view->text->cursor.par()->Last()) {
-               current_view->text->CursorLeft(current_view);
-        
-               current_view->text->BreakParagraph(current_view);
-               current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-       }
-
-       // 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,
-                                    VSpace (0.3 * buffer->params.spacing.getValue(),
-                                            LyXLength::CM),
-                                    VSpace (0.3 *
-                                            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,
-                                                VSpace(VSpace::NONE),
-                                                VSpace(VSpace::NONE),
-                                                LYX_ALIGN_CENTER, 
-                                                string(),
-                                                0);
-       }
-#endif
-       
-       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-      
-       Inset * new_inset = new InsetFig(100, 100, *buffer);
-       current_view->insertInset(new_inset);
-       new_inset->Edit(current_view, 0, 0, 0);
-       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR);
-       current_view->owner()->getMiniBuffer()->Set(_("Figure inserted"));
-       current_view->text->UnFreezeUndo();
-       current_view->setState();
-}
-
-
-extern "C" void FigureCancelCB(FL_OBJECT *, long)
-{
-       fl_hide_form(fd_form_figure->form_figure);
-}
-
-
-extern "C" void FigureOKCB(FL_OBJECT * ob, long data)
-{
-       FigureApplyCB(ob, data);
-       FigureCancelCB(ob, data);
-}
-
-
 // This function runs "configure" and then rereads lyx.defaults to
 // reconfigure the automatic settings.
 void Reconfigure(BufferView * bv)
 {
 // This function runs "configure" and then rereads lyx.defaults to
 // reconfigure the automatic settings.
 void Reconfigure(BufferView * bv)
 {
-       bv->owner()->getMiniBuffer()->Set(_("Running configure..."));
+       bv->owner()->message(_("Running configure..."));
 
        // Run configure in user lyx directory
        Path p(user_lyxdir);
        Systemcalls one(Systemcalls::System, 
                        AddName(system_lyxdir, "configure"));
        p.pop();
 
        // Run configure in user lyx directory
        Path p(user_lyxdir);
        Systemcalls one(Systemcalls::System, 
                        AddName(system_lyxdir, "configure"));
        p.pop();
-       bv->owner()->getMiniBuffer()->Set(_("Reloading configuration..."));
+       bv->owner()->message(_("Reloading configuration..."));
        lyxrc.read(LibFileSearch(string(), "lyxrc.defaults"));
        WriteAlert(_("The system has been reconfigured."), 
                   _("You need to restart LyX to make use of any"),
        lyxrc.read(LibFileSearch(string(), "lyxrc.defaults"));
        WriteAlert(_("The system has been reconfigured."), 
                   _("You need to restart LyX to make use of any"),