X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Flyxinset.h;h=401884e6d71ab6e91603e3bdb7ca79aacfcc244b;hb=3c8aba3b556871fb1100a2f98cd93d5d4e3f70c9;hp=c640f1d8f98d21997fc884530c7470c1dc218983;hpb=0eccdd1c3613e5170deb77b22174dd0afde833e9;p=lyx.git diff --git a/src/insets/lyxinset.h b/src/insets/lyxinset.h index c640f1d8f9..401884e6d7 100644 --- a/src/insets/lyxinset.h +++ b/src/insets/lyxinset.h @@ -1,36 +1,42 @@ // -*- C++ -*- /* This file is part of - * ====================================================== + * ====================================================== * * LyX, The Document Processor * - * Copyright (C) 1995 Matthias Ettrich + * Copyright 1995-2000 the LyX Team. * - *======================================================*/ -#ifndef _LYXINSET_H -#define _LYXINSET_H + * ====================================================== */ + +#ifndef LYXINSET_H +#define LYXINSET_H #ifdef __GNUG__ #pragma interface #endif -#include "definitions.h" +#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: - /** This is not quite the correct place for this enum, but it is - better than definitions.h. I think the correct would be to let - each subclass of Inset declare its own enum code. Actually the - notion of an Inset::Code should be avoided, but I am not sure how - this could be done in a cleaner way. */ + /** This is not quite the correct place for this enum. I think + the correct would be to let each subclass of Inset declare + its own enum code. Actually the notion of an Inset::Code + should be avoided, but I am not sure how this could be done + in a cleaner way. */ enum Code { /// NO_CODE, @@ -73,79 +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 }; /// - virtual ~Inset(){}; + Inset() { owner_ = 0; } /// - virtual int Ascent(LyXFont const &font) const=0; + virtual ~Inset() {} /// - virtual int Descent(LyXFont const &font) const=0; + virtual int ascent(Painter &, LyXFont const &) const = 0; /// - virtual int Width(LyXFont const& font) const=0; + virtual int descent(Painter &, LyXFont const &) const = 0; /// - virtual LyXFont ConvertFont(LyXFont font); + virtual int width(Painter &, LyXFont const &) const = 0; /// - virtual void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x)=0; + virtual void draw(Painter &, LyXFont const &, + int baseline, float & x) const = 0; /// - //virtual void setBuffer(Buffer const&) {;} + 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 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,35 +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 ~UpdatableInset() {} /// - virtual unsigned char Editable() const; + virtual EDITABLE Editable() const; /// may call ToggleLockedInsetCursor - virtual void ToggleInsetCursor(); + virtual void ToggleInsetCursor(BufferView *); /// - virtual void GetCursorPos(int&, int&) { } + virtual void ShowInsetCursor(BufferView *); /// - virtual void InsetButtonPress(int x, int y, int button); + virtual void HideInsetCursor(BufferView *); /// - virtual void InsetButtonRelease(int x, int y, int button); - + virtual void GetCursorPos(int &, int &) const {} /// - virtual void InsetKeyPress(XKeyEvent *ev); + virtual void InsetButtonPress(BufferView *, int x, int y, int button); /// - virtual void InsetMotionNotify(int x, int y, int state); + virtual void InsetButtonRelease(BufferView *, + int x, int y, int button); /// - virtual void InsetUnlock(); - + virtual void InsetKeyPress(XKeyEvent * ev); + /// + virtual void InsetMotionNotify(BufferView *, int x, int y, int state); + /// + 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; } -protected: + virtual RESULT LocalDispatch(BufferView *, int, string const &); /// - bool cursor_visible; -}; + 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