X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffactory.C;h=03a285a3c3e0e007b6eea7644f1f28878602148c;hb=37e82a546392d43f787826b85481a11f2a27af15;hp=f5a79b3ec543ba7d9fae794743371a4f566aac82;hpb=70d0ba900118ac7e253c1e1969fd7a3d64ec8e03;p=lyx.git diff --git a/src/factory.C b/src/factory.C index f5a79b3ec5..03a285a3c3 100644 --- a/src/factory.C +++ b/src/factory.C @@ -52,16 +52,19 @@ #include "insets/inseturl.h" #include "insets/insetvspace.h" #include "insets/insetwrap.h" -#include "mathed/formulamacro.h" -#include "mathed/formula.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 +#include + using lyx::support::compare_ascii_no_case; using std::auto_ptr; @@ -69,7 +72,7 @@ using std::endl; using std::string; -InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) +InsetBase * createInset(BufferView * bv, FuncRequest const & cmd) { BufferParams const & params = bv->buffer()->params(); @@ -152,7 +155,7 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) // Try and generate a valid index entry. InsetCommandParams icp("index"); string const contents = cmd.argument.empty() ? - bv->getLyXText()->getStringToIndex() : + bv->getLyXText()->getStringToIndex(bv->cursor()) : cmd.argument; icp.setContents(contents); @@ -179,16 +182,17 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) bv->owner()->getDialogs().show("tabularcreate"); return 0; - case LFUN_INSET_CAPTION: - if (!bv->innerInset()) { - auto_ptr inset(new InsetCaption(params)); - inset->setOwner(bv->innerInset()); - inset->setAutoBreakRows(true); - inset->setDrawFrame(InsetText::LOCKED); - inset->setFrameColor(LColor::captionframe); - return inset.release(); + case LFUN_INSET_CAPTION: { + UpdatableInset * up = bv->cursor().inset().asUpdatableInset(); + if (!up) { + auto_ptr inset(new InsetCaption(params)); + inset->setAutoBreakRows(true); + inset->setDrawFrame(true); + inset->setFrameColor(LColor::captionframe); + return inset.release(); + } + return 0; } - return 0; case LFUN_INDEX_PRINT: return new InsetPrintIndex(InsetCommandParams("printindex")); @@ -327,7 +331,7 @@ InsetOld * createInset(BufferView * bv, FuncRequest const & cmd) } -InsetOld * readInset(LyXLex & lex, Buffer const & buf) +InsetBase * readInset(LyXLex & lex, Buffer const & buf) { // consistency check if (lex.getString() != "\\begin_inset") { @@ -335,10 +339,10 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf) << endl; } - auto_ptr inset; + auto_ptr inset; LyXTextClass tclass = buf.params().getLyXTextClass(); - + lex.next(); string tmptok = lex.getString(); @@ -400,9 +404,9 @@ InsetOld * 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 InsetFormula); + inset.reset(new MathHullInset); } else if (tmptok == "Graphics") { inset.reset(new InsetGraphics); } else if (tmptok == "Note") { @@ -466,6 +470,17 @@ InsetOld * 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(inset.get()); + MacroTable::globalMacros().insert + (tmpl->name(), tmpl->asMacroData()); + lyxerr << "creating local macro " << tmpl->name() << endl; + } } return inset.release();