X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finset.h;h=aae88009d78c4c7e8be4955fcd897013adda9cab;hb=4a5b7a5952ad2381fcdf4830511293e184c7c5a1;hp=70e5a31888d5ccaab3c0afddae6a8bcca04eccd7;hpb=e952d33e0b702265cdac14de9871ecbfcf34863d;p=lyx.git diff --git a/src/insets/inset.h b/src/insets/inset.h index 70e5a31888..aae88009d7 100644 --- a/src/insets/inset.h +++ b/src/insets/inset.h @@ -148,8 +148,6 @@ public: /// update the inset representation virtual void update(BufferView *, LyXFont const &, bool = false) {} - /// - virtual LyXFont const convertFont(LyXFont const & font) const; /// what appears in the minibuffer when opening virtual string const editMessage() const; /// @@ -161,7 +159,12 @@ public: /// This is called when the user clicks inside an inset virtual void insetButtonPress(BufferView *, int, int, int) {} /// This is called when the user releases the button inside an inset - virtual void insetButtonRelease(BufferView *, int, int, int) {} + // the bool return is used to see if we opened a dialog so that we can + // check this from an outer inset and open the dialog of the outer inset + // if that one has one! + /// + virtual bool insetButtonRelease(BufferView *, int, int, int) + { return false; } /// This is called when the user moves the mouse inside an inset virtual void insetMotionNotify(BufferView *, int , int , int) {} /// @@ -188,11 +191,11 @@ public: bool free_spc) const = 0; /// virtual int ascii(Buffer const *, - std::ostream &, int linelen = 0) const = 0; + std::ostream &, int linelen = 0) const = 0; /// virtual int linuxdoc(Buffer const *, std::ostream &) const = 0; /// - virtual int docBook(Buffer const *, std::ostream &) const = 0; + virtual int docbook(Buffer const *, std::ostream &) const = 0; /// Updates needed features for this inset. virtual void validate(LaTeXFeatures & features) const; /// @@ -228,6 +231,10 @@ public: /// Inset * owner() const { return owner_; } /// + void parOwner(Paragraph * par) { par_owner_ = par; } + /// + Paragraph * parOwner() const {return par_owner_; } + /// void setBackgroundColor(LColor::color); /// LColor::color backgroundColor() const; @@ -266,6 +273,12 @@ public: virtual Paragraph * firstParagraph() const { return 0; } + + /// + virtual Paragraph * getFirstParagraph(int /*num*/) const { + return 0; + } + /// return the cursor if we own one otherwise giv'em just the /// BufferView cursor to work with. virtual LyXCursor const & cursor(BufferView * bview) const; @@ -280,14 +293,42 @@ public: /// open the inset virtual void open(BufferView *) {} /// close the inset - virtual void close(BufferView *) {} + virtual void close(BufferView *) const {} /// check if the font of the char we want inserting is correct /// and modify it if it is not. virtual bool checkInsertChar(LyXFont &); + /// we need this here because collapsed insets are only EDITABLE + virtual void setFont(BufferView *, LyXFont const &, + bool toggleall = false, bool selectall = false); + /// + // needed for spellchecking text + /// + virtual bool allowSpellcheck() { return false; } + + // should this inset be handled like a normal charater + virtual bool isChar() const { return false; } + // is this equivalent to a letter? + virtual bool isLetter() const { return false; } + // is this equivalent to a space (which is BTW different from + // a line separator)? + virtual bool isSpace() const { return false; } + // should we break lines after this inset? + virtual bool isLineSeparator() const { return false; } + // if this inset has paragraphs should they be output all as default + // paragraphs with "Standard" layout? + virtual bool forceDefaultParagraphs(Inset const *) const; + // needed for widths which are % of something + /* returns the value of \textwidth in this inset. Most of the + time this is the width of the workarea, but if there is a + minipage somewhere, it will be the width of this minipage */ + virtual int latexTextWidth(BufferView *) const; + protected: /// mutable int top_x; /// + mutable bool topx_set; /* have we already drawn ourself! */ + /// mutable int top_baseline; /// mutable int scx; @@ -299,6 +340,8 @@ protected: private: /// Inset * owner_; + /// the paragraph in which this inset has been inserted + Paragraph * par_owner_; /// string name_; /// @@ -316,7 +359,7 @@ bool Inset::insetAllowed(Inset * in) const inline bool Inset::checkInsertChar(LyXFont &) { - return true; + return false; } // Updatable Insets. These insets can be locked and receive @@ -352,19 +395,28 @@ public: becomes a bit complex, just two possible results (boolean) are not enough. - DISPATCHED = the inset catched the action + 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 + FINISHED = the inset must be unlocked as a result + of the action + FINISHED_RIGHT = FINISHED, but put the cursor to the RIGHT of + the inset. + FINISHED_UP = FINISHED, but put the cursor UP of + the inset. + FINISHED_DOWN = FINISHED, but put the cursor DOWN of + the inset. + UNDISPATCHED = the action was not catched, it should be + dispatched by lower level insets */ enum RESULT { UNDISPATCHED = 0, DISPATCHED, DISPATCHED_NOUPDATE, - FINISHED + FINISHED, + FINISHED_RIGHT, + FINISHED_UP, + FINISHED_DOWN }; /// To convert old binary dispatch results @@ -377,6 +429,9 @@ public: /// UpdatableInset(UpdatableInset const & in, bool same_id = false); + /// check if the font of the char we want inserting is correct + /// and modify it if it is not. + virtual bool checkInsertChar(LyXFont &); /// virtual EDITABLE editable() const; @@ -393,8 +448,12 @@ public: /// virtual void insetButtonPress(BufferView *, int x, int y, int button); /// - virtual void insetButtonRelease(BufferView *, - int x, int y, int button); + // the bool return is used to see if we opened a dialog so that we can + // check this from an outer inset and open the dialog of the outer inset + // if that one has one! + /// + virtual bool insetButtonRelease(BufferView *, + int x, int y, int button); /// virtual void insetKeyPress(XKeyEvent * ev); /// @@ -409,9 +468,6 @@ public: virtual void draw(BufferView *, LyXFont const &, int baseline, float & x, bool cleared) const; /// - virtual void setFont(BufferView *, LyXFont const &, - bool toggleall = false, bool selectall = false); - /// virtual bool insertInset(BufferView *, Inset *) { return false; } /// virtual UpdatableInset * getLockingInset() const { @@ -430,7 +486,7 @@ public: { return false; } /// virtual bool unlockInsetInInset(BufferView *, UpdatableInset *, - bool /*lr*/ = false) + bool /*lr*/ = false) { return false; } /// An updatable inset could handle lyx editing commands virtual RESULT localDispatch(BufferView *, kb_action, string const &); @@ -446,7 +502,7 @@ public: /// virtual bool showInsetDialog(BufferView *) const { return false; } /// - virtual void nodraw(bool b) { + virtual void nodraw(bool b) const { block_drawing_ = b; } /// @@ -456,7 +512,9 @@ public: /// // needed for spellchecking text /// - virtual string const selectNextWord(BufferView *, float & value) const; + virtual bool allowSpellcheck() { return false; } + /// + virtual string const selectNextWordToSpellcheck(BufferView *, float & value) const; /// virtual void selectSelectedWord(BufferView *) { return; } /// @@ -467,10 +525,10 @@ public: // needed for search/replace functionality /// virtual bool searchForward(BufferView *, string const &, - bool const & = true, bool const & = false); + bool = true, bool = false); /// virtual bool searchBackward(BufferView *, string const &, - bool const & = true, bool const & = false); + bool = true, bool = false); protected: /// @@ -490,6 +548,31 @@ private: /// mutable bool cursor_visible_; /// - bool block_drawing_; + mutable bool block_drawing_; }; + +inline +bool UpdatableInset::checkInsertChar(LyXFont &) +{ + return true; +} + +/** + * returns true if pointer argument is valid + * and points to an editable inset + */ +inline bool isEditableInset(Inset * i) +{ + return i && i->editable(); +} + +/** + * returns true if pointer argument is valid + * and points to a highly editable inset + */ +inline bool isHighlyEditableInset(Inset * i) +{ + return i && i->editable() == Inset::HIGHLY_EDITABLE; +} + #endif