X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathMacro.h;h=b7308562ff2df2c26b58733081e78e2a3e8522e8;hb=aafd52f44167d5510be1ddcb974daa9dae486933;hp=1296aa140b07a00c42b1f7375366e3c94267d150;hpb=8e212b98b474b540afc4590c37195cc5a211a8bc;p=lyx.git diff --git a/src/mathed/MathMacro.h b/src/mathed/MathMacro.h index 1296aa140b..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. */ @@ -26,7 +26,7 @@ namespace lyx { 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; } /// @@ -46,7 +46,7 @@ public: 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); @@ -56,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); @@ -69,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; @@ -90,7 +94,7 @@ public: DISPLAY_INIT, DISPLAY_INTERACTIVE_INIT, DISPLAY_UNFOLDED, - DISPLAY_NORMAL, + DISPLAY_NORMAL }; /// @@ -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() const; /// update macro definition void updateMacro(MacroContext const & mc); /// check if macro definition changed, argument changed etc. and adapt - void updateRepresentation(Cursor const * bvCur); + 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); @@ -142,7 +150,7 @@ protected: MacroData const * macro() { return macro_; } /// bool editMetrics(BufferView const * bv) const; - + private: /// virtual Inset * clone() const; @@ -155,7 +163,7 @@ private: DisplayMode displayMode_; /// expanded macro with ArgumentProxies InsetMathSqrt expanded_; - /// editing look of macro + /// macro definition with #1,#2,.. insets MathData definition_; /// number of arguments that were really attached size_t attachedArgsNum_; @@ -175,6 +183,26 @@ private: 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