X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathMacro.h;h=b7308562ff2df2c26b58733081e78e2a3e8522e8;hb=58550435998be842c6aa996c1abdd318bd95cdba;hp=0209ac6a36394c112e7d1e74c635f430e2125192;hpb=240e59ae0dd530a2eb7df31158534333704f2541;p=lyx.git diff --git a/src/mathed/MathMacro.h b/src/mathed/MathMacro.h index 0209ac6a36..b7308562ff 100644 --- a/src/mathed/MathMacro.h +++ b/src/mathed/MathMacro.h @@ -5,7 +5,7 @@ * Licence details can be found in the file COPYING. * * \author Alejandro Aguilar Sierra - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -18,14 +18,15 @@ #include "MacroTable.h" #include "MathData.h" -namespace lyx { +#include +namespace lyx { /// This class contains the data for a macro. class MathMacro : public InsetMathNest { public: /// A macro can be built from an existing template - MathMacro(docstring const & name); + MathMacro(Buffer * buf, docstring const & name); /// virtual MathMacro * asMacro() { return this; } /// @@ -40,12 +41,12 @@ public: /// void metrics(MetricsInfo & mi, Dimension & dim) const; /// - int kerning() const; + int kerning(BufferView const * bv) const; /// get cursor position void cursorPos(BufferView const & bv, CursorSlice const & sl, bool boundary, int & x, int & y) const; /// - void edit(Cursor & cur, bool left); + void edit(Cursor & cur, bool front, EntryDirection entry_from); /// Inset * editXY(Cursor & cur, int x, int y); @@ -55,7 +56,7 @@ public: bool idxLast(Cursor &) const; /// - virtual bool notifyCursorLeaves(Cursor &); + virtual bool notifyCursorLeaves(Cursor const & old, Cursor & cur); /// Remove cell (starting from 0) void removeArgument(pos_type pos); @@ -68,10 +69,14 @@ public: /// void write(WriteStream & os) const; /// + void normalize(NormalStream & os) const; + /// void maple(MapleStream &) const; /// void mathmlize(MathStream &) const; /// + void htmlize(HtmlStream &) const; + /// void octave(OctaveStream &) const; /// void infoize(odocstream &) const; @@ -89,7 +94,7 @@ public: DISPLAY_INIT, DISPLAY_INTERACTIVE_INIT, DISPLAY_UNFOLDED, - DISPLAY_NORMAL, + DISPLAY_NORMAL }; /// @@ -98,7 +103,6 @@ public: /// bool extraBraces() const { return displayMode_ == DISPLAY_NORMAL && arity() > 0; } - /// docstring name() const; /// @@ -118,20 +122,24 @@ public: if (n <= int(nargs())) optionals_ = n; } - + /// Return the maximal number of arguments the macro is greedy for. + size_t appetite() const { return appetite_; } + /// + InsetCode lyxCode() const { return MATH_MACRO_CODE; } + protected: friend class MathData; friend class ArgumentProxy; friend class Cursor; /// update the display mode (should only be called after detaching arguments) - void setDisplayMode(DisplayMode mode); + void setDisplayMode(DisplayMode mode, int appetite = -1); /// compute the next display mode - DisplayMode computeDisplayMode(MetricsInfo const & mi) const; + DisplayMode computeDisplayMode() const; /// update macro definition - void updateMacro(MetricsInfo & mi); + void updateMacro(MacroContext const & mc); /// check if macro definition changed, argument changed etc. and adapt - void updateRepresentation(MetricsInfo & mi); + void updateRepresentation(Cursor * cur, MacroContext const & mc, UpdateType); /// empty macro, put arguments into args, possibly strip arity-attachedArgsNum_ empty ones. /// Includes the optional arguments. void detachArguments(std::vector & args, bool strip); @@ -139,28 +147,26 @@ protected: /// including the optional ones (even if it can be empty here) void attachArguments(std::vector const & args, size_t arity, int optionals); /// - bool editing() { return editing_; } - /// MacroData const * macro() { return macro_; } + /// + bool editMetrics(BufferView const * bv) const; private: /// virtual Inset * clone() const; - /// the index of the cursor slice of the macro, or -1 if it is not edited - int cursorIdx(Cursor const & cur) const; /// - bool editMode(Cursor const & cur) const; + bool editMode(BufferView const * bv) const; /// name of macro docstring name_; /// current display mode DisplayMode displayMode_; - /// display mode before change + /// expanded macro with ArgumentProxies InsetMathSqrt expanded_; + /// macro definition with #1,#2,.. insets + MathData definition_; /// number of arguments that were really attached size_t attachedArgsNum_; - /// cursor position during last draw - idx_type previousCurIdx_; /// optional argument attached? (only in DISPLAY_NORMAL mode) size_t optionals_; /// fold mode to be set in next metrics call? @@ -172,11 +178,31 @@ private: /// this might invalidate after metrics was called MacroData const * macro_; /// - bool editing_; + mutable std::map editing_; /// std::string requires_; /// update macro representation bool needsUpdate_; + /// maximal number of arguments the macro is greedy for + size_t appetite_; + +public: + /// + bool completionSupported(Cursor const &) const; + /// + bool inlineCompletionSupported(Cursor const & cur) const; + /// + bool automaticInlineCompletion() const; + /// + bool automaticPopupCompletion() const; + /// + CompletionList const * createCompletionList(Cursor const & cur) const; + /// + docstring completionPrefix(Cursor const & cur) const; + /// + bool insertCompletion(Cursor & cur, docstring const & s, bool finished); + /// + void completionPosAndDim(Cursor const &, int & x, int & y, Dimension & dim) const; }; } // namespace lyx