]> git.lyx.org Git - lyx.git/blobdiff - src/LyXFunc.cpp
Add support for listings package. Two listings command \lstinline, \lstinputlisting...
[lyx.git] / src / LyXFunc.cpp
index c1355cc70a33176c1e28f5137ea0964e4c8e06cf..fc1eb74a040bf994115fc51e185fa94095147ee5 100644 (file)
 #include "Color.h"
 #include "Session.h"
 #include "LyX.h"
-#include "lyx_cb.h"
+#include "callback.h"
 #include "LyXAction.h"
 #include "lyxfind.h"
 #include "Lexer.h"
 #include "LyXRC.h"
 #include "Row.h"
-#include "LyXServer.h"
-#include "LyXTextClassList.h"
+#include "Server.h"
+#include "TextClassList.h"
 #include "LyXVC.h"
 #include "Paragraph.h"
 #include "ParIterator.h"
@@ -67,6 +67,7 @@
 #include "insets/InsetERT.h"
 #include "insets/InsetExternal.h"
 #include "insets/InsetFloat.h"
+#include "insets/InsetListings.h"
 #include "insets/InsetGraphics.h"
 #include "insets/InsetInclude.h"
 #include "insets/InsetNote.h"
 #include "insets/InsetWrap.h"
 
 #include "frontends/Application.h"
-#include "frontends/Alert.h"
+#include "frontends/alert.h"
 #include "frontends/Dialogs.h"
 #include "frontends/FileDialog.h"
 #include "frontends/FontLoader.h"
 #include "frontends/Gui.h"
-#include "frontends/LyXKeySym.h"
+#include "frontends/KeySymbol.h"
 #include "frontends/LyXView.h"
 #include "frontends/Menubar.h"
 #include "frontends/Toolbars.h"
@@ -209,8 +210,8 @@ LyXFunc::LyXFunc()
 
 void LyXFunc::initKeySequences(KeyMap * kb)
 {
-       keyseq.reset(new kb_sequence(kb, kb));
-       cancel_meta_seq.reset(new kb_sequence(kb, kb));
+       keyseq.reset(new KeySequence(kb, kb));
+       cancel_meta_seq.reset(new KeySequence(kb, kb));
 }
 
 
@@ -275,7 +276,7 @@ void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer)
 }
 
 
-void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state)
+void LyXFunc::processKeySym(KeySymbolPtr keysym, key_modifier::state state)
 {
        LYXERR(Debug::KEY) << "KeySym is " << keysym->getSymbolName() << endl;
 
@@ -467,7 +468,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
                break;
 
        case LFUN_LAYOUT_TABULAR:
-               enable = cur.innerInsetOfType(InsetBase::TABULAR_CODE);
+               enable = cur.innerInsetOfType(Inset::TABULAR_CODE);
                break;
 
        case LFUN_LAYOUT:
@@ -496,29 +497,32 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
                enable = false;
                if (!cur)
                        break;
-               InsetBase::Code code = cur.inset().lyxCode();
+               Inset::Code code = cur.inset().lyxCode();
                switch (code) {
-                       case InsetBase::TABULAR_CODE:
+                       case Inset::TABULAR_CODE:
                                enable = cmd.argument() == "tabular";
                                break;
-                       case InsetBase::ERT_CODE:
+                       case Inset::ERT_CODE:
                                enable = cmd.argument() == "ert";
                                break;
-                       case InsetBase::FLOAT_CODE:
+                       case Inset::FLOAT_CODE:
                                enable = cmd.argument() == "float";
                                break;
-                       case InsetBase::WRAP_CODE:
+                       case Inset::WRAP_CODE:
                                enable = cmd.argument() == "wrap";
                                break;
-                       case InsetBase::NOTE_CODE:
+                       case Inset::NOTE_CODE:
                                enable = cmd.argument() == "note";
                                break;
-                       case InsetBase::BRANCH_CODE:
+                       case Inset::BRANCH_CODE:
                                enable = cmd.argument() == "branch";
                                break;
-                       case InsetBase::BOX_CODE:
+                       case Inset::BOX_CODE:
                                enable = cmd.argument() == "box";
                                break;
+                       case Inset::LISTINGS_CODE:
+                               enable = cmd.argument() == "listings";
+                               break;
                        default:
                                break;
                }
@@ -527,7 +531,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
 
        case LFUN_INSET_APPLY: {
                string const name = cmd.getArg(0);
-               InsetBase * inset = lyx_view_->getDialogs().getOpenInset(name);
+               Inset * inset = lyx_view_->getDialogs().getOpenInset(name);
                if (inset) {
                        FuncRequest fr(LFUN_INSET_MODIFY, cmd.argument());
                        FuncStatus fs;
@@ -544,6 +548,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
                break;
        }
 
+       case LFUN_DIALOG_TOGGLE:
+               flag.setOnOff(lyx_view_->getDialogs().visible(cmd.getArg(0)));
+               // fall through to set "enable"
        case LFUN_DIALOG_SHOW: {
                string const name = cmd.getArg(0);
                if (!buf)
@@ -555,7 +562,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
                        enable = Exporter::isExportable(*buf, "dvi")
                                && lyxrc.print_command != "none";
                else if (name == "character")
-                       enable = cur.inset().lyxCode() != InsetBase::ERT_CODE;
+                       enable = cur.inset().lyxCode() != Inset::ERT_CODE &&
+                               cur.inset().lyxCode() != Inset::LISTINGS_CODE;
                else if (name == "latexlog")
                        enable = isFileReadable(FileName(buf->getLogName().second));
                else if (name == "spellchecker")
@@ -570,8 +578,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        }
 
        case LFUN_DIALOG_SHOW_NEW_INSET:
-               enable = cur.inset().lyxCode() != InsetBase::ERT_CODE;
-               if (cur.inset().lyxCode() == InsetBase::CAPTION_CODE) {
+               enable = cur.inset().lyxCode() != Inset::ERT_CODE &&
+                       cur.inset().lyxCode() != Inset::LISTINGS_CODE;
+               if (cur.inset().lyxCode() == Inset::CAPTION_CODE) {
                        FuncStatus flag;
                        if (cur.inset().getStatus(cur, cmd, flag))
                                return flag;
@@ -637,7 +646,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        case LFUN_BUFFER_UPDATE:
        case LFUN_BUFFER_VIEW:
        case LFUN_BUFFER_IMPORT:
-       case LFUN_TOC_VIEW:
        case LFUN_BUFFER_AUTO_SAVE:
        case LFUN_RECONFIGURE:
        case LFUN_HELP_OPEN:
@@ -1091,14 +1099,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                theApp()->gui().closeAllViews();
                        break;
 
-               case LFUN_TOC_VIEW: {
-                       BOOST_ASSERT(lyx_view_);
-                       InsetCommandParams p("tableofcontents");
-                       string const data = InsetCommandMailer::params2string("toc", p);
-                       lyx_view_->getDialogs().show("toc", data, 0);
-                       break;
-               }
-
                case LFUN_BUFFER_AUTO_SAVE:
                        autoSave(view());
                        break;
@@ -1220,7 +1220,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
 
                case LFUN_SERVER_NOTIFY:
                        dispatch_buffer = keyseq->print(false);
-                       theLyXServer().notifyClient(to_utf8(dispatch_buffer));
+                       theServer().notifyClient(to_utf8(dispatch_buffer));
                        break;
 
                case LFUN_SERVER_GOTO_FILE_ROW: {
@@ -1323,6 +1323,9 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        } else if (name == "float") {
                                InsetFloatParams p;
                                data = InsetFloatMailer::params2string(p);
+                       } else if (name == "listings") {
+                               InsetListingsParams p;
+                               data = InsetListingsMailer::params2string(p);
                        } else if (name == "graphics") {
                                InsetGraphicsParams p;
                                Buffer const & buffer = *lyx_view_->buffer();
@@ -1345,7 +1348,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        BOOST_ASSERT(lyx_view_);
                        string const & name = argument;
                        // Can only update a dialog connected to an existing inset
-                       InsetBase * inset = lyx_view_->getDialogs().getOpenInset(name);
+                       Inset * inset = lyx_view_->getDialogs().getOpenInset(name);
                        if (inset) {
                                FuncRequest fr(LFUN_INSET_DIALOG_UPDATE, cmd.argument());
                                inset->dispatch(view()->cursor(), fr);
@@ -1361,6 +1364,15 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        Dialogs::hide(argument, 0);
                        break;
 
+               case LFUN_DIALOG_TOGGLE: {
+                       BOOST_ASSERT(lyx_view_);
+                       if (lyx_view_->getDialogs().visible(cmd.getArg(0)))
+                               dispatch(FuncRequest(LFUN_DIALOG_HIDE, argument));
+                       else
+                               dispatch(FuncRequest(LFUN_DIALOG_SHOW, argument));
+                       break;
+               }
+
                case LFUN_DIALOG_DISCONNECT_INSET:
                        BOOST_ASSERT(lyx_view_);
                        lyx_view_->getDialogs().disconnect(argument);
@@ -1535,7 +1547,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_INSET_APPLY: {
                        BOOST_ASSERT(lyx_view_);
                        string const name = cmd.getArg(0);
-                       InsetBase * inset = lyx_view_->getDialogs().getOpenInset(name);
+                       Inset * inset = lyx_view_->getDialogs().getOpenInset(name);
                        if (inset) {
                                FuncRequest fr(LFUN_INSET_MODIFY, argument);
                                inset->dispatch(view()->cursor(), fr);
@@ -1553,18 +1565,18 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        BOOST_ASSERT(lyx_view_);
                        string action;
                        string const name = split(argument, action, ' ');
-                       InsetBase::Code const inset_code =
-                               InsetBase::translate(name);
+                       Inset::Code const inset_code =
+                               Inset::translate(name);
 
                        Cursor & cur = view()->cursor();
                        FuncRequest fr(LFUN_INSET_TOGGLE, action);
 
-                       InsetBase & inset = lyx_view_->buffer()->inset();
+                       Inset & inset = lyx_view_->buffer()->inset();
                        InsetIterator it  = inset_iterator_begin(inset);
                        InsetIterator const end = inset_iterator_end(inset);
                        for (; it != end; ++it) {
                                if (!it->asInsetMath()
-                                   && (inset_code == InsetBase::NO_CODE
+                                   && (inset_code == Inset::NO_CODE
                                    || inset_code == it->lyxCode())) {
                                        Cursor tmpcur = cur;
                                        tmpcur.pushLeft(*it);
@@ -1638,11 +1650,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        Cursor & cur = view()->cursor();
                        FuncRequest fr(LFUN_INSET_REFRESH);
 
-                       InsetBase & inset = lyx_view_->buffer()->inset();
+                       Inset & inset = lyx_view_->buffer()->inset();
                        InsetIterator it  = inset_iterator_begin(inset);
                        InsetIterator const end = inset_iterator_end(inset);
                        for (; it != end; ++it)
-                               if (it->lyxCode() == InsetBase::CITE_CODE)
+                               if (it->lyxCode() == Inset::CITE_CODE)
                                        it->dispatch(cur, fr);
                        break;
                }