X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Flyxinset.h;h=401884e6d71ab6e91603e3bdb7ca79aacfcc244b;hb=3c8aba3b556871fb1100a2f98cd93d5d4e3f70c9;hp=aa866d1afd9c9d2f9d8068d1018cf708018ea166;hpb=5ba861bb096de90bd5c29c75626200958e3a5ca9;p=lyx.git diff --git a/src/insets/lyxinset.h b/src/insets/lyxinset.h index aa866d1afd..401884e6d7 100644 --- a/src/insets/lyxinset.h +++ b/src/insets/lyxinset.h @@ -4,8 +4,7 @@ * * LyX, The Document Processor * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-1999 the LyX Team. + * Copyright 1995-2000 the LyX Team. * * ====================================================== */ @@ -16,14 +15,20 @@ #pragma interface #endif +#include + #include "gettext.h" #include "lyxfont.h" #include "lyxlex.h" class Painter; class Buffer; +class BufferView; + struct LaTeXFeatures; + + /// Insets class Inset { public: @@ -74,9 +79,29 @@ public: /// PARENT_CODE, /// - BIBTEX_CODE + BIBTEX_CODE, + /// + TEXT_CODE, + /// + ERT_CODE, + /// + FOOT_CODE, + /// + MARGIN_CODE, + /// + SPECIALCHAR_CODE, + /// + TABULAR_CODE }; + enum EDITABLE { + NOT_EDITABLE = 0, + IS_EDITABLE, + HIGHLY_EDITABLE + }; + + /// + Inset() { owner_ = 0; } /// virtual ~Inset() {} /// @@ -91,35 +116,46 @@ public: /// virtual LyXFont ConvertFont(LyXFont font); /// what appears in the minibuffer when opening - virtual char const * EditMessage() const {return _("Opened inset");} + virtual const char * EditMessage() const; /// - virtual void Edit(int, int); + virtual void Edit(BufferView *, int x, int y, unsigned int button); /// - virtual unsigned char Editable() const; + virtual EDITABLE Editable() const; + /// + virtual void InsetButtonPress(BufferView *, int, int, int) {} + /// + virtual void InsetButtonRelease(BufferView *, int, int, int) {} + /// + virtual void InsetMotionNotify(BufferView *, int , int , int) {} + /// + bool IsTextInset() const; /// virtual bool AutoDelete() const; /// - virtual void Write(ostream &) const = 0; + virtual void Write(std::ostream &) const = 0; /// virtual void Read(LyXLex & lex) = 0; /** returns the number of rows (\n's) of generated tex code. - fragile != 0 means, that the inset should take care about + fragile == true means, that the inset should take care about fragile commands by adding a \protect before. + If the free_spc (freespacing) variable is set, then this inset + is in a free-spacing paragraph. */ - virtual int Latex(ostream &, signed char fragile) const = 0; + virtual int Latex(std::ostream &, bool fragile, + bool free_spc) const = 0; /// - virtual int Latex(string & file, signed char fragile) const = 0; + virtual int Ascii(std::ostream &) const = 0; /// - virtual int Linuxdoc(string & /*file*/) const = 0; + virtual int Linuxdoc(std::ostream &) const = 0; /// - virtual int DocBook(string & /*file*/) const = 0; + virtual int DocBook(std::ostream &) const = 0; /// Updates needed features for this inset. virtual void Validate(LaTeXFeatures & features) const; /// virtual bool Deletable() const; /// returns LyX code associated with the inset. Used for TOC, ...) - virtual Inset::Code LyxCode() const = 0; + virtual Inset::Code LyxCode() const { return NO_CODE; } /// Get the label that appears at screen virtual string getLabel(int) const { @@ -140,7 +176,22 @@ public: virtual int GetNumberOfLabels() const { return 0; } - + /// + virtual bool InsertInsetAllowed(Inset *) const { return false; } + /// + virtual void setInsetName(const char * s) { name = s; } + /// + virtual string getInsetName() const { return name; } + /// + virtual void setOwner(Inset * inset) { owner_ = inset; } + /// + virtual Inset * owner() const { return owner_; } + /// +private: + /// + Inset * owner_; + /// + string name; }; @@ -172,33 +223,101 @@ public: */ class UpdatableInset: public Inset { public: + /** Dispatch result codes + Now that nested updatable insets are allowed, the local dispatch + becomes a bit complex, just two possible results (boolean) + are not enough. + + DISPATCHED = the inset catched the action + DISPATCHED_NOUPDATE = the inset catched the action and no update + is needed here to redraw the inset + FINISHED = the inset must be unlocked as a result + of the action + UNDISPATCHED = the action was not catched, it should be + dispatched by lower level insets + */ + enum RESULT { + UNDISPATCHED = 0, + DISPATCHED, + DISPATCHED_NOUPDATE, + FINISHED + }; + + /// To convert old binary dispatch results + RESULT DISPATCH_RESULT(bool b) { + return b ? DISPATCHED : FINISHED; + } + + /// + UpdatableInset() { scx = mx_scx = 0; } /// //virtual ~UpdatableInset() {} /// - virtual unsigned char Editable() const; + virtual EDITABLE Editable() const; /// may call ToggleLockedInsetCursor - virtual void ToggleInsetCursor(); + virtual void ToggleInsetCursor(BufferView *); + /// + virtual void ShowInsetCursor(BufferView *); + /// + virtual void HideInsetCursor(BufferView *); /// virtual void GetCursorPos(int &, int &) const {} /// - virtual void InsetButtonPress(int x, int y, int button); + virtual void InsetButtonPress(BufferView *, int x, int y, int button); /// - virtual void InsetButtonRelease(int x, int y, int button); - + virtual void InsetButtonRelease(BufferView *, + int x, int y, int button); /// virtual void InsetKeyPress(XKeyEvent * ev); /// - virtual void InsetMotionNotify(int x, int y, int state); + virtual void InsetMotionNotify(BufferView *, int x, int y, int state); /// - virtual void InsetUnlock(); - + virtual void InsetUnlock(BufferView *); + /// + virtual void Edit(BufferView *, int x, int y, unsigned int button); + /// + virtual void draw(Painter &, LyXFont const &, + int baseline, float & x) const; + /// + virtual void SetFont(BufferView *, LyXFont const &, + bool toggleall = false); + /// + virtual bool InsertInset(BufferView *, Inset *) { return false; } + /// + virtual bool InsertInsetAllowed(Inset *) const { return true; } + /// + virtual UpdatableInset * GetLockingInset() { return this; } + /// + virtual int InsetInInsetY() { return 0; } + /// + virtual bool UpdateInsetInInset(BufferView *, Inset *) + { return false; } + /// + virtual bool LockInsetInInset(BufferView *, UpdatableInset *) + { return false; } + /// + virtual bool UnlockInsetInInset(BufferView *, UpdatableInset *, + bool /*lr*/ = false) + { return false; } /// An updatable inset could handle lyx editing commands - virtual bool LocalDispatch(int, char const *) { return false; }; - // - bool isCursorVisible() const { return cursor_visible; } + virtual RESULT LocalDispatch(BufferView *, int, string const &); + /// + virtual bool isCursorVisible() const { return cursor_visible; } + /// + virtual int getMaxWidth(Painter & pain, UpdatableInset const *) const; + protected: /// + // virtual void UpdateLocal(bool flag=true); + /// + mutable int top_x; + mutable int top_baseline; mutable bool cursor_visible; + +private: + /// + int mx_scx; + mutable int scx; }; #endif