]> git.lyx.org Git - lyx.git/blobdiff - src/LyXFunc.cpp
I'll find a solution for the 'dirList problem', Abdel.
[lyx.git] / src / LyXFunc.cpp
index 704c970ed2af93f1f4b1e9dd4c11f230a4acf6c3..7e9fe5a3da425b63634ebefa84e7716dd9695cc8 100644 (file)
 #include "Converter.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
-#include "debug.h"
+#include "support/debug.h"
 #include "DispatchResult.h"
 #include "Encoding.h"
 #include "ErrorList.h"
 #include "Format.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
-#include "gettext.h"
+#include "support/gettext.h"
 #include "InsetIterator.h"
 #include "Intl.h"
 #include "KeyMap.h"
@@ -93,8 +93,6 @@
 #include "support/convert.h"
 #include "support/os.h"
 
-#include <boost/current_function.hpp>
-
 #include <sstream>
 
 using std::endl;
@@ -185,7 +183,7 @@ bool import(LyXView * lv, FileName const & filename,
                }
                updateLabels(*buf);
                lv->setBuffer(buf);
-               lv->errors("Parse");
+               buf->errors("Parse");
        } else {
                Buffer * const b = newFile(lyxfile.absFilename(), string(), true);
                if (b)
@@ -197,7 +195,8 @@ bool import(LyXView * lv, FileName const & filename,
                        : changeExtension(filename.absFilename(),
                                          formats.extension(loader_format));
                lv->view()->insertPlaintextFile(filename2, as_paragraphs);
-               lv->dispatch(FuncRequest(LFUN_MARK_OFF));
+               theLyXFunc().setLyXView(lv);
+               lyx::dispatch(FuncRequest(LFUN_MARK_OFF));
        }
 
        // we are done
@@ -411,8 +410,7 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state)
        cancel_meta_seq.reset();
 
        FuncRequest func = cancel_meta_seq.addkey(keysym, state);
-       LYXERR(Debug::KEY, BOOST_CURRENT_FUNCTION
-                          << " action first set to [" << func.action << ']');
+       LYXERR(Debug::KEY, "action first set to [" << func.action << ']');
 
        // When not cancel or meta-fake, do the normal lookup.
        // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards.
@@ -420,8 +418,7 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state)
        if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_PREFIX)) {
                // remove Caps Lock and Mod2 as a modifiers
                func = keyseq.addkey(keysym, (state | meta_fake_bit));
-               LYXERR(Debug::KEY, BOOST_CURRENT_FUNCTION
-                       << "action now set to [" << func.action << ']');
+               LYXERR(Debug::KEY, "action now set to [" << func.action << ']');
        }
 
        // Dont remove this unless you know what you are doing.
@@ -431,9 +428,8 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state)
        if (func.action == LFUN_NOACTION)
                func = FuncRequest(LFUN_COMMAND_PREFIX);
 
-       LYXERR(Debug::KEY, BOOST_CURRENT_FUNCTION
-               << " Key [action=" << func.action << "]["
-               << to_utf8(keyseq.print(KeySequence::Portable)) << ']');
+       LYXERR(Debug::KEY, " Key [action=" << func.action << "]["
+               << keyseq.print(KeySequence::Portable) << ']');
 
        // already here we know if it any point in going further
        // why not return already here if action == -1 and
@@ -535,6 +531,12 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        bool enable = true;
        switch (cmd.action) {
 
+       case LFUN_WINDOW_CLOSE:
+               if (theApp())
+                       return theApp()->getStatus(cmd);
+               enable = false;
+               break;
+
        case LFUN_DIALOG_TOGGLE:
        case LFUN_DIALOG_SHOW:
        case LFUN_DIALOG_UPDATE:
@@ -632,10 +634,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
                enable = LyX::ref().session().bookmarks().size() > 0;
                break;
 
-       case LFUN_WINDOW_CLOSE:
-               enable = theApp()->viewCount() > 0;
-               break;
-
        // this one is difficult to get right. As a half-baked
        // solution, we consider only the first action of the sequence
        case LFUN_COMMAND_SEQUENCE: {
@@ -844,22 +842,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                setErrorMessage(flag.message());
        } else {
                switch (action) {
-               // Let lyx_view_ dispatch its own actions.
-               case LFUN_COMMAND_EXECUTE:
-               case LFUN_DROP_LAYOUTS_CHOICE:
-               case LFUN_MENU_OPEN:
-               case LFUN_TOOLBAR_TOGGLE:
-               case LFUN_DIALOG_UPDATE:
-               case LFUN_DIALOG_TOGGLE:
-               case LFUN_DIALOG_DISCONNECT_INSET:
-               case LFUN_DIALOG_HIDE:
-               case LFUN_DIALOG_SHOW:
-               case LFUN_INSET_APPLY:
-                       BOOST_ASSERT(lyx_view_);
-                       lyx_view_->dispatch(cmd);
-                       if (lyx_view_->view())
-                               updateFlags = lyx_view_->view()->cursor().result().update();
-                       break;
 
                case LFUN_WORD_FIND_FORWARD:
                case LFUN_WORD_FIND_BACKWARD: {
@@ -961,7 +943,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                        if (!b->isClean()) {
                                                if (!b->isUnnamed()) {
                                                        b->menuWrite();
-                                                       lyxerr[Debug::ACTION] << "Saved " << b->absFileName() << endl;
+                                                       LYXERR(Debug::ACTION, "Saved " << b->absFileName());
                                                } else
                                                        b->writeAs();
                                        }
@@ -1178,14 +1160,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        doImport(argument);
                        break;
 
-               case LFUN_LYX_QUIT:
-                       // quitting is triggered by the gui code
-                       // (leaving the event loop).
-                       lyx_view_->message(from_utf8(N_("Exiting.")));
-                       if (theBufferList().quitWriteAll())
-                               theApp()->closeAllViews();
-                       break;
-
                case LFUN_BUFFER_AUTO_SAVE:
                        lyx_view_->buffer()->autoSave();
                        break;
@@ -1215,7 +1189,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        if (buf) {
                                updateLabels(*buf);
                                lyx_view_->setBuffer(buf);
-                               lyx_view_->errors("Parse");
+                               buf->errors("Parse");
                        }
                        updateFlags = Update::None;
                        break;
@@ -1268,23 +1242,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
 
                // --- buffers ----------------------------------------
-               case LFUN_BUFFER_SWITCH:
-                       BOOST_ASSERT(lyx_view_);
-                       lyx_view_->setBuffer(theBufferList().getBuffer(argument));
-                       updateFlags = Update::None;
-                       break;
-
-               case LFUN_BUFFER_NEXT:
-                       BOOST_ASSERT(lyx_view_);
-                       lyx_view_->setBuffer(theBufferList().next(lyx_view_->buffer()));
-                       updateFlags = Update::None;
-                       break;
-
-               case LFUN_BUFFER_PREVIOUS:
-                       BOOST_ASSERT(lyx_view_);
-                       lyx_view_->setBuffer(theBufferList().previous(lyx_view_->buffer()));
-                       updateFlags = Update::None;
-                       break;
 
                case LFUN_FILE_NEW: {
                        BOOST_ASSERT(lyx_view_);
@@ -1350,7 +1307,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        lyx_view_->setBuffer(buf);
                        view()->setCursorFromRow(row);
                        if (loaded)
-                               lyx_view_->errors("Parse");
+                               buf->errors("Parse");
                        updateFlags = Update::FitCursor;
                        break;
                }
@@ -1497,11 +1454,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                // Set the parent name of the child document.
                                // This makes insertion of citations and references in the child work,
                                // when the target is in the parent or another child document.
-                               child->setParentName(parent->absFileName());
+                               child->setParent(parent);
                                updateLabels(*child->masterBuffer());
                                lyx_view_->setBuffer(child);
                                if (parsed)
-                                       lyx_view_->errors("Parse");
+                                       child->errors("Parse");
                        }
 
                        // If a screen update is required (in case where auto_open is false), 
@@ -1592,15 +1549,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
                }
 
-               case LFUN_SCREEN_FONT_UPDATE:
-                       BOOST_ASSERT(lyx_view_);
-                       // handle the screen font changes.
-                       theFontLoader().update();
-                       /// FIXME: only the current view will be updated. the Gui
-                       /// class is able to furnish the list of views.
-                       updateFlags = Update::Force;
-                       break;
-
                case LFUN_SET_COLOR: {
                        string lyx_name;
                        string const x11_name = split(argument, lyx_name, ' ');
@@ -1853,22 +1801,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
                }
 
-               case LFUN_WINDOW_NEW:
-                       LyX::ref().newLyXView();
-                       break;
-
-               case LFUN_WINDOW_CLOSE:
-                       BOOST_ASSERT(lyx_view_);
-                       BOOST_ASSERT(theApp());
-                       // update bookmark pit of the current buffer before window close
-                       for (size_t i = 0; i < LyX::ref().session().bookmarks().size(); ++i)
-                               gotoBookmark(i+1, false, false);
-                       // ask the user for saving changes or cancel quit
-                       if (!theBufferList().quitWriteAll())
-                               break;
-                       lyx_view_->close();
-                       return;
-
                case LFUN_BOOKMARK_GOTO:
                        // go to bookmark, open unopened file and switch to buffer if necessary
                        gotoBookmark(convert<unsigned int>(to_utf8(cmd.argument())), true, true);
@@ -1879,10 +1811,29 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
 
                default: {
+                       BOOST_ASSERT(theApp());
+                       // Let the frontend dispatch its own actions.
+                       if (theApp()->dispatch(cmd))
+                               // Nothing more to do.
+                               return;
+
+                       // Let the current LyXView dispatch its own actions.
                        BOOST_ASSERT(lyx_view_);
+                       if (lyx_view_->dispatch(cmd)) {
+                               if (lyx_view_->view())
+                                       updateFlags = lyx_view_->view()->cursor().result().update();
+                               break;
+                       }
+
+                       // FIXME: Probably a good idea to inverse the Cursor and BufferView
+                       // dispatching.
+
+                       // Let the current Cursor dispatch its own actions.
+                       BOOST_ASSERT(lyx_view_->view());
                        view()->cursor().dispatch(cmd);
                        updateFlags = view()->cursor().result().update();
                        if (!view()->cursor().result().dispatched())
+                               // Let the current BufferView dispatch its own actions.
                                updateFlags = view()->dispatch(cmd);
                        break;
                }
@@ -1903,9 +1854,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
 
                        //Do we have a selection?
                        theSelection().haveSelection(view()->cursor().selection());
-
-                       if (view()->cursor().inTexted()) {
-                       }
                }
        }
        if (!quitting && lyx_view_) {
@@ -1980,7 +1928,7 @@ void LyXFunc::menuNew(string const & name, bool fromTemplate)
                filename = addName(lyxrc.document_path,
                            "newfile" + convert<string>(++newfile_number) + ".lyx");
                while (theBufferList().exists(filename) ||
-                      FileName(filename).isReadable()) {
+                      FileName(filename).isReadableFile()) {
                        ++newfile_number;
                        filename = addName(lyxrc.document_path,
                                           "newfile" +  convert<string>(newfile_number) +
@@ -2102,7 +2050,7 @@ void LyXFunc::open(string const & fname)
        if (buf) {
                updateLabels(*buf);
                lyx_view_->setBuffer(buf);
-               lyx_view_->errors("Parse");
+               buf->errors("Parse");
                str2 = bformat(_("Document %1$s opened."), disp_fn);
        } else {
                str2 = bformat(_("Could not open document %1$s"), disp_fn);
@@ -2217,7 +2165,7 @@ void LyXFunc::reloadBuffer()
        if (buf) {
                updateLabels(*buf);
                lyx_view_->setBuffer(buf);
-               lyx_view_->errors("Parse");
+               buf->errors("Parse");
                str = bformat(_("Document %1$s reloaded."), disp_fn);
        } else {
                str = bformat(_("Could not reload document %1$s"), disp_fn);
@@ -2339,6 +2287,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                                support::package().document_dir() = FileName(lyxrc.document_path);
                }
        case LyXRC::RC_ESC_CHARS:
+       case LyXRC::RC_EXAMPLEPATH:
        case LyXRC::RC_FONT_ENCODING:
        case LyXRC::RC_FORMAT:
        case LyXRC::RC_INDEX_COMMAND: