]> git.lyx.org Git - lyx.git/blobdiff - src/factory.C
rename LFUN enum values according to their command (as used in th minibuffer/bind...
[lyx.git] / src / factory.C
index 11340acb54cd9e9e8f5518a40ecdf0c4835663c2..c67e34ac28b88c81b1d6222fd9bf361a68b58642 100644 (file)
 #include "insets/insetvspace.h"
 #include "insets/insetwrap.h"
 
-#include "mathed/formulamacro.h"
+#include "mathed/math_macrotemplate.h"
 #include "mathed/math_hullinset.h"
 
-#include "frontends/Dialogs.h"
-#include "frontends/LyXView.h"
-
 #include "support/lstrings.h"
-#include "support/std_sstream.h"
 
 #include <boost/assert.hpp>
+#include <boost/current_function.hpp>
+
+#include <sstream>
 
 using lyx::support::compare_ascii_no_case;
 
@@ -76,65 +75,69 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd)
        BufferParams const & params = bv->buffer()->params();
 
        switch (cmd.action) {
-       case LFUN_HFILL:
+       case LFUN_HFILL_INSERT:
                return new InsetHFill;
 
-       case LFUN_INSERT_LINE:
+       case LFUN_LINE_INSERT:
                return new InsetLine;
 
-       case LFUN_INSERT_PAGEBREAK:
+       case LFUN_PAGEBREAK_INSERT:
                return new InsetPagebreak;
 
-       case LFUN_INSERT_CHARSTYLE: {
+       case LFUN_CHARSTYLE_INSERT: {
                string s = cmd.getArg(0);
-               CharStyles::iterator found_cs = params.getLyXTextClass().charstyle(s);
-               return new InsetCharStyle(params, found_cs);
+               LyXTextClass tclass = params.getLyXTextClass();
+               CharStyles::iterator found_cs = tclass.charstyle(s);
+               if (found_cs != tclass.charstyles().end())
+                       return new InsetCharStyle(params, found_cs);
+               else
+                       return new InsetCharStyle(params, s);
        }
 
-       case LFUN_INSERT_NOTE: {
+       case LFUN_NOTE_INSERT: {
                string arg = cmd.getArg(0);
                if (arg.empty())
                        arg = "Note";
                return new InsetNote(params, arg);
        }
 
-       case LFUN_INSERT_BOX: {
+       case LFUN_BOX_INSERT: {
                string arg = cmd.getArg(0);
                if (arg.empty())
                        arg = "Boxed";
                return new InsetBox(params, arg);
        }
 
-       case LFUN_INSERT_BRANCH: {
+       case LFUN_BRANCH_INSERT: {
                string arg = cmd.getArg(0);
                if (arg.empty())
                        arg = "none";
                return new InsetBranch(params, InsetBranchParams(arg));
        }
 
-       case LFUN_INSET_ERT:
+       case LFUN_ERT_INSERT:
                return new InsetERT(params);
 
-       case LFUN_INSET_FOOTNOTE:
+       case LFUN_FOOTNOTE_INSERT:
                return new InsetFoot(params);
 
-       case LFUN_INSET_MARGINAL:
+       case LFUN_MARGINALNOTE_INSERT:
                return new InsetMarginal(params);
 
-       case LFUN_INSET_OPTARG:
+       case LFUN_OPTIONAL_INSERT:
                return new InsetOptArg(params);
 
-       case LFUN_INSERT_BIBITEM:
+       case LFUN_BIBITEM_INSERT:
                return new InsetBibitem(InsetCommandParams("bibitem"));
 
-       case LFUN_INSET_FLOAT:
+       case LFUN_FLOAT_INSERT:
                // check if the float type exists
                if (params.getLyXTextClass().floats().typeExist(cmd.argument))
                        return new InsetFloat(params, cmd.argument);
                lyxerr << "Non-existent float type: " << cmd.argument << endl;
                return 0;
 
-       case LFUN_INSET_WIDE_FLOAT:
+       case LFUN_FLOAT_WIDE_INSERT:
                // check if the float type exists
                if (params.getLyXTextClass().floats().typeExist(cmd.argument)) {
                        auto_ptr<InsetFloat> p(new InsetFloat(params, cmd.argument));
@@ -144,7 +147,7 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd)
                lyxerr << "Non-existent float type: " << cmd.argument << endl;
                return 0;
 
-       case LFUN_INSET_WRAP:
+       case LFUN_WRAP_INSERT:
                if (cmd.argument == "figure")
                        return new InsetWrap(params, cmd.argument);
                lyxerr << "Non-existent floatflt type: " << cmd.argument << endl;
@@ -157,42 +160,28 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd)
                        bv->getLyXText()->getStringToIndex(bv->cursor()) :
                        cmd.argument;
                icp.setContents(contents);
-
-               string data = InsetCommandMailer::params2string("index", icp);
-               LyXView * lv = bv->owner();
-
-               if (icp.getContents().empty()) {
-                       lv->getDialogs().show("index", data, 0);
-               } else {
-                       lv->dispatch(FuncRequest(LFUN_INSET_APPLY, data));
-               }
-               return 0;
+               return new InsetIndex(icp);
        }
 
-       case LFUN_TABULAR_INSERT:
-               if (!cmd.argument.empty()) {
-                       std::istringstream ss(cmd.argument);
-                       int r = 0, c = 0;
-                       ss >> r >> c;
-                       if (r <= 0) r = 2;
-                       if (c <= 0) c = 2;
-                       return new InsetTabular(*bv->buffer(), r, c);
-               }
-               bv->owner()->getDialogs().show("tabularcreate");
-               return 0;
+       case LFUN_TABULAR_INSERT: {
+               if (cmd.argument.empty())
+                       return 0;
+               std::istringstream ss(cmd.argument);
+               int r = 0, c = 0;
+               ss >> r >> c;
+               if (r <= 0)
+                       r = 2;
+               if (c <= 0)
+                       c = 2;
+               return new InsetTabular(*bv->buffer(), r, c);
+       }
 
-       case LFUN_INSET_CAPTION: {
-               UpdatableInset * up = bv->cursor().inset()
-                       ? bv->cursor().inset()->asUpdatableInset() : 0;
-               if (!up) {
-                       auto_ptr<InsetCaption> inset(new InsetCaption(params));
-                       inset->setOwner(up);
-                       inset->setAutoBreakRows(true);
-                       inset->setDrawFrame(InsetText::LOCKED);
-                       inset->setFrameColor(LColor::captionframe);
-                       return inset.release();
-               }
-               return 0;
+       case LFUN_CAPTION_INSERT: {
+               auto_ptr<InsetCaption> inset(new InsetCaption(params));
+               inset->setAutoBreakRows(true);
+               inset->setDrawFrame(true);
+               inset->setFrameColor(LColor::captionframe);
+               return inset.release();
        }
 
        case LFUN_INDEX_PRINT:
@@ -205,10 +194,10 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd)
                return new InsetEnvironment(params, cmd.argument);
 
 #if 0
-       case LFUN_INSET_LIST:
+       case LFUN_LIST_INSERT:
                return new InsetList;
 
-       case LFUN_INSET_THEOREM:
+       case LFUN_THEOREM_INSERT:
                return new InsetTheorem;
 #endif
 
@@ -343,7 +332,7 @@ InsetBase * readInset(LyXLex & lex, Buffer const & buf)
        auto_ptr<InsetBase> inset;
 
        LyXTextClass tclass = buf.params().getLyXTextClass();
-               
+
        lex.next();
        string tmptok = lex.getString();
 
@@ -405,7 +394,7 @@ InsetBase * readInset(LyXLex & lex, Buffer const & buf)
                } else if (tmptok == "External") {
                        inset.reset(new InsetExternal);
                } else if (tmptok == "FormulaMacro") {
-                       inset.reset(new InsetFormulaMacro);
+                       inset.reset(new MathMacroTemplate);
                } else if (tmptok == "Formula") {
                        inset.reset(new MathHullInset);
                } else if (tmptok == "Graphics") {
@@ -418,7 +407,12 @@ InsetBase * readInset(LyXLex & lex, Buffer const & buf)
                        lex.next();
                        string s = lex.getString();
                        CharStyles::iterator found_cs = tclass.charstyle(s);
-                       inset.reset(new InsetCharStyle(buf.params(), found_cs));
+                       if (found_cs != tclass.charstyles().end())
+                               inset.reset(new InsetCharStyle(buf.params(), found_cs));
+                       else {
+                               // "Undefined" inset
+                               inset.reset(new InsetCharStyle(buf.params(), s));
+                       }
                } else if (tmptok == "Branch") {
                        inset.reset(new InsetBranch(buf.params(),
                                                    InsetBranchParams()));
@@ -471,6 +465,20 @@ InsetBase * readInset(LyXLex & lex, Buffer const & buf)
                }
 
                inset->read(buf, lex);
+
+#ifdef WITH_WARNINGS
+#warning hack..
+#endif
+               if (inset->lyxCode() == InsetBase::MATHMACRO_CODE) {
+                       MathMacroTemplate const * tmpl =
+                               static_cast<MathMacroTemplate*>(inset.get());
+                       MacroTable::globalMacros().insert
+                               (tmpl->name(), tmpl->asMacroData());
+                       lyxerr[Debug::DEBUG]
+                               << BOOST_CURRENT_FUNCTION
+                               << ": creating local macro " << tmpl->name()
+                               << endl;
+               }
        }
 
        return inset.release();