X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Flyxinset.h;h=401884e6d71ab6e91603e3bdb7ca79aacfcc244b;hb=3c8aba3b556871fb1100a2f98cd93d5d4e3f70c9;hp=7a1b9ed3b48a68e1c241ca54a45b0482d7169a89;hpb=188833d864794c9c1ec42a8361b93aaa718874ea;p=lyx.git diff --git a/src/insets/lyxinset.h b/src/insets/lyxinset.h index 7a1b9ed3b4..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" -#include "lyxscreen.h" +class Painter; class Buffer; +class BufferView; + struct LaTeXFeatures; + + /// Insets class Inset { public: @@ -74,78 +79,119 @@ 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() {} /// - virtual int Ascent(LyXFont const & font) const = 0; + virtual int ascent(Painter &, LyXFont const &) const = 0; /// - virtual int Descent(LyXFont const & font) const = 0; + virtual int descent(Painter &, LyXFont const &) const = 0; /// - virtual int Width(LyXFont const & font) const = 0; + virtual int width(Painter &, LyXFont const &) const = 0; /// - virtual LyXFont ConvertFont(LyXFont font); + virtual void draw(Painter &, LyXFont const &, + int baseline, float & x) const = 0; /// - virtual void Draw(LyXFont font, LyXScreen & scr, - int baseline, float & x) = 0; + virtual LyXFont ConvertFont(LyXFont font); /// what appears in the minibuffer when opening - virtual char const * EditMessage() {return _("Opened inset");} + virtual const char * EditMessage() const; + /// + virtual void Edit(BufferView *, int x, int y, unsigned int button); + /// + virtual EDITABLE Editable() const; + /// + virtual void InsetButtonPress(BufferView *, int, int, int) {} /// - virtual void Edit(int, int); + virtual void InsetButtonRelease(BufferView *, int, int, int) {} /// - virtual unsigned char Editable() const; + virtual void InsetMotionNotify(BufferView *, int , int , int) {} + /// + bool IsTextInset() const; /// virtual bool AutoDelete() const; /// - virtual void Write(FILE * file)= 0; + virtual void Write(std::ostream &) const = 0; /// - virtual void Read(LyXLex & lex)= 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(FILE * file, signed char fragile) = 0; - virtual int Latex(string & file, signed char fragile) = 0; + virtual int Latex(std::ostream &, bool fragile, + bool free_spc) const = 0; + /// + virtual int Ascii(std::ostream &) const = 0; /// - virtual int Linuxdoc(string & /*file*/) = 0; + virtual int Linuxdoc(std::ostream &) const = 0; /// - virtual int DocBook(string & /*file*/) = 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 { return string(); } - /// used for autocorrection - virtual bool IsEqual(Inset * /*other*/){ - return false; - } - /// - virtual Inset * Clone() = 0; + virtual Inset * Clone() const = 0; /// returns true to override begin and end inset in file virtual bool DirectWrite() const; /// Returns true if the inset should be centered alone - virtual bool Display() const { return false; } - + virtual bool display() const { return false; } /// Changes the display state of the inset - virtual void SetDisplay(bool) { } + virtual void display(bool) {} /// 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; }; @@ -177,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; + } + /// - virtual ~UpdatableInset() {} + UpdatableInset() { scx = mx_scx = 0; } /// - virtual unsigned char Editable() const; + //virtual ~UpdatableInset() {} + /// + virtual EDITABLE Editable() const; /// may call ToggleLockedInsetCursor - virtual void ToggleInsetCursor(); + virtual void ToggleInsetCursor(BufferView *); + /// + virtual void ShowInsetCursor(BufferView *); /// - virtual void GetCursorPos(int &, int &) {} + virtual void HideInsetCursor(BufferView *); /// - virtual void InsetButtonPress(int x, int y, int button); + virtual void GetCursorPos(int &, int &) const {} /// - virtual void InsetButtonRelease(int x, int y, int button); - + virtual void InsetButtonPress(BufferView *, 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: /// - bool cursor_visible; + // 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