X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathMacroTemplate.cpp;h=2989e2be5ce01ba25c5aab5ccabdf091308552d4;hb=981e958b9d63930c83b1adced65b75b3d857ac97;hp=2d74457040e46ef01a314252f614402144a80585;hpb=f19b6178a9505e4dfe17f1836096f4ce1040a200;p=lyx.git diff --git a/src/mathed/MathMacroTemplate.cpp b/src/mathed/MathMacroTemplate.cpp index 2d74457040..2989e2be5c 100644 --- a/src/mathed/MathMacroTemplate.cpp +++ b/src/mathed/MathMacroTemplate.cpp @@ -35,7 +35,6 @@ #include "FuncStatus.h" #include "Lexer.h" #include "LyXRC.h" -#include "Undo.h" #include "frontends/Painter.h" @@ -48,6 +47,7 @@ #include "support/docstream.h" #include "support/lstrings.h" +#include #include using namespace std; @@ -592,6 +592,7 @@ void MathMacroTemplate::metrics(MetricsInfo & mi, Dimension & dim) const void MathMacroTemplate::draw(PainterInfo & pi, int x, int y) const { + ColorChanger dummy0(pi.base.font, Color_math); FontSetChanger dummy1(pi.base, from_ascii("mathnormal")); StyleChanger dummy2(pi.base, LM_ST_TEXT); @@ -616,7 +617,7 @@ void MathMacroTemplate::draw(PainterInfo & pi, int x, int y) const void MathMacroTemplate::edit(Cursor & cur, bool front, EntryDirection entry_from) { updateLook(); - cur.updateFlags(Update::SinglePar); + cur.screenUpdateFlags(Update::SinglePar); InsetMathNest::edit(cur, front, entry_from); } @@ -625,15 +626,16 @@ bool MathMacroTemplate::notifyCursorLeaves(Cursor const & old, Cursor & cur) { commitEditChanges(cur, old); updateLook(); - cur.updateFlags(Update::Force); + cur.screenUpdateFlags(Update::Force); return InsetMathNest::notifyCursorLeaves(old, cur); } void MathMacroTemplate::removeArguments(Cursor & cur, - DocIterator const & /*insetPos*/, int from, int to) + DocIterator const & /*inset_pos*/, int from, int to) { - for (DocIterator it = doc_iterator_begin(&buffer(), this); it; it.forwardChar()) { + DocIterator it = doc_iterator_begin(&buffer(), this); + for (; it; it.forwardChar()) { if (!it.nextInset()) continue; if (it.nextInset()->lyxCode() != MATH_MACROARG_CODE) @@ -672,7 +674,7 @@ void MathMacroTemplate::shiftArguments(size_t from, int by) int MathMacroTemplate::maxArgumentInDefinition() const { // We don't have a buffer when pasting from the clipboard (bug 6014). - Buffer const * macro_buffer = this->isBufferValid() ? &buffer() : 0; + Buffer const * macro_buffer = isBufferLoaded() ? &buffer() : 0; int maxArg = 0; DocIterator it = doc_iterator_begin(macro_buffer, this); it.idx() = defIdx(); @@ -716,15 +718,15 @@ void MathMacroTemplate::insertMissingArguments(int maxArg) void MathMacroTemplate::changeArity(Cursor & cur, - DocIterator const & insetPos, int newNumArg) + DocIterator const & inset_pos, int newNumArg) { // remove parameter which do not appear anymore in the definition for (int i = numargs_; i > newNumArg; --i) - removeParameter(cur, insetPos, numargs_ - 1, false); + removeParameter(cur, inset_pos, numargs_ - 1, true); // add missing parameter for (int i = numargs_; i < newNumArg; ++i) - insertParameter(cur, insetPos, numargs_, false, false); + insertParameter(cur, inset_pos, numargs_, true, false); } @@ -735,7 +737,8 @@ public: /// AddRemoveMacroInstanceFix(int n, bool insert) : n_(n), insert_(insert) {} /// - void operator()(MathMacro * macro) { + void operator()(MathMacro * macro) + { if (macro->folded()) { if (insert_) macro->insertArgument(n_); @@ -759,7 +762,8 @@ public: /// OptionalsMacroInstanceFix(int optionals) : optionals_(optionals) {} /// - void operator()(MathMacro * macro) { + void operator()(MathMacro * macro) + { macro->setOptionals(optionals_); } @@ -774,7 +778,7 @@ class NullMacroInstanceFix { public: /// - void operator()(MathMacro * macro) {} + void operator()(MathMacro * ) {} }; @@ -790,18 +794,15 @@ void fixMacroInstances(Cursor & cur, DocIterator const & inset_pos, // remember hull to trigger preview reload DocIterator hull(dit.buffer()); bool preview_reload_needed = false; + set preview_hulls; // iterate over all positions until macro is redefined for (; dit; dit.forwardPos()) { // left the outer hull? if (!hull.empty() && dit.depth() == hull.depth()) { - // reload the preview if necessary + // schedule reload of the preview if necessary if (preview_reload_needed) { - InsetMathHull * inset_hull = - hull.nextInset()->asInsetMath()->asHullInset(); - LASSERT(inset_hull, /**/); - inset_hull->reloadPreview(hull); - cur.updateFlags(Update::Force); + preview_hulls.insert(hull); preview_reload_needed = false; } hull.clear(); @@ -837,6 +838,19 @@ void fixMacroInstances(Cursor & cur, DocIterator const & inset_pos, preview_reload_needed = true; } } + + if (!preview_hulls.empty()) { + // reload the scheduled previews + set::const_iterator sit = preview_hulls.begin(); + set::const_iterator end = preview_hulls.end(); + for (; sit != end; ++sit) { + InsetMathHull * inset_hull = + sit->nextInset()->asInsetMath()->asHullInset(); + LASSERT(inset_hull, /**/); + inset_hull->reloadPreview(*sit); + } + cur.screenUpdateFlags(Update::Force); + } } @@ -973,7 +987,7 @@ void MathMacroTemplate::makeNonOptional(Cursor & cur, void MathMacroTemplate::doDispatch(Cursor & cur, FuncRequest & cmd) { string const arg = to_utf8(cmd.argument()); - switch (cmd.action) { + switch (cmd.action()) { case LFUN_MATH_MACRO_ADD_PARAM: if (numargs_ < 9) { @@ -1063,7 +1077,7 @@ bool MathMacroTemplate::getStatus(Cursor & /*cur*/, FuncRequest const & cmd, { bool ret = true; string const arg = to_utf8(cmd.argument()); - switch (cmd.action) { + switch (cmd.action()) { case LFUN_MATH_MACRO_ADD_PARAM: { int num = numargs_ + 1; if (arg.size() != 0) @@ -1078,6 +1092,7 @@ bool MathMacroTemplate::getStatus(Cursor & /*cur*/, FuncRequest const & cmd, flag.setEnabled(numargs_ < 9); break; + case LFUN_MATH_MACRO_REMOVE_GREEDY_PARAM: case LFUN_MATH_MACRO_REMOVE_PARAM: { int num = numargs_; if (arg.size() != 0) @@ -1153,8 +1168,10 @@ void MathMacroTemplate::write(WriteStream & os) const } -void MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const +int MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const { + int num_lines = 0; + if (os.latex()) { if (optionals_ > 0) { // macros with optionals use the xargs package, e.g.: @@ -1217,14 +1234,24 @@ void MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) cons if (os.latex()) { // writing .tex. done. os << "\n"; + ++num_lines; } else { // writing .lyx, write special .tex export only if necessary - if (!cell(displayIdx()).empty()) + if (!cell(displayIdx()).empty()) { os << "\n{" << cell(displayIdx()) << '}'; + ++num_lines; + } } + + return num_lines; } +docstring MathMacroTemplate::xhtml(XHTMLStream &, OutputParams const &) const +{ + return docstring(); +} + int MathMacroTemplate::plaintext(odocstream & os, OutputParams const &) const { @@ -1340,7 +1367,7 @@ void MathMacroTemplate::infoize(odocstream & os) const } -docstring MathMacroTemplate::contextMenu(BufferView const &, int, int) const +docstring MathMacroTemplate::contextMenuName() const { return from_ascii("context-math-macro-definition"); }