X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCollapsable.h;h=57a089858d1eda392d57ba68629c431ca7f940a0;hb=2c357c1d23b7b83839a9beb8225d4f1ae4f793b4;hp=2a31b1453fe4828a8bd404f1d54344046fb38471;hpb=2bd998c29eab19692e976a086b02174cc924b376;p=lyx.git diff --git a/src/insets/InsetCollapsable.h b/src/insets/InsetCollapsable.h index 2a31b1453f..57a089858d 100644 --- a/src/insets/InsetCollapsable.h +++ b/src/insets/InsetCollapsable.h @@ -16,19 +16,20 @@ #include "Inset.h" #include "InsetText.h" -#include "TextClass.h" #include "Box.h" -#include "Font.h" +#include "TextClass.h" +#include "TextClassPtr.h" #include namespace lyx { -class Text; -class Paragraph; class CursorSlice; +class FontInfo; class InsetLayout; +class Paragraph; +class Text; namespace frontend { class Painter; } @@ -38,30 +39,47 @@ namespace frontend { class Painter; } class InsetCollapsable : public InsetText { public: /// - static int const TEXT_TO_TOP_OFFSET = 2; + InsetCollapsable( + BufferParams const &, + CollapseStatus status = Inset::Open, + TextClassPtr tc = TextClassPtr((TextClass *)0) + ); /// - static int const TEXT_TO_BOTTOM_OFFSET = 2; + InsetCollapsable(InsetCollapsable const & rhs); /// - InsetCollapsable(BufferParams const &, CollapseStatus status = Open); + InsetCollapsable * asInsetCollapsable() { return this; } /// - InsetCollapsable(InsetCollapsable const & rhs); + InsetCollapsable const * asInsetCollapsable() const { return this; } + /// + docstring toolTip(BufferView const & bv, int x, int y) const; /// docstring name() const { return from_ascii("Collapsable"); } /// + InsetLayout const & getLayout(BufferParams const &) const + { return *layout_; } + /// + InsetLayout const & getLayout() const + { return *layout_; } + /// void setLayout(BufferParams const &); + /// (Re-)set the character style parameters from \p tc according + /// to name() + void setLayout(TextClassPtr tc); + /// + virtual bool useEmptyLayout() { return true; } /// void read(Buffer const &, Lexer &); /// void write(Buffer const &, std::ostream &) const; /// - bool metrics(MetricsInfo &, Dimension &) const; + void metrics(MetricsInfo &, Dimension &) const; /// void draw(PainterInfo & pi, int x, int y) const; - /// - void drawSelection(PainterInfo & pi, int x, int y) const; + /// return x,y of given position relative to the inset's baseline void cursorPos(BufferView const & bv, CursorSlice const & sl, - bool boundary, int & x, int & y) const; + /// + bool boundary, int & x, int & y) const; /// bool hitButton(FuncRequest const &) const; /// @@ -71,69 +89,114 @@ public: /// can we go further down on mouse click? bool descendable() const; /// + bool isMacroScope(Buffer const & buf) const; + /// void setLabel(docstring const & l); /// virtual void setButtonLabel() {} /// - void setLabelFont(Font const & f); - /// - bool isOpen() const { return status_ == Open || status_ == Inlined; } - /// - bool inlined() const { return status_ == Inlined; } + bool isOpen() const { return geometry() != ButtonOnly; } /// CollapseStatus status() const; + /** Of the old CollapseStatus we only keep the values + * Open and Collapsed. + * We define a list of possible inset decoration + * styles, and a list of possible (concrete, visual) + * inset geometries. Relationships between them + * (geometries in body of table): + * + * \ CollapseStatus: + * Decoration: \ Open Collapsed + * -------------+------------------------------- + * Classic | *) TopButton, <--x) ButtonOnly + * | LeftButton + * Minimalistic | NoButton ButtonOnly + * Conglomerate | SubLabel Corners + * --------------------------------------------- + * *) toggled by openinlined_ + * x) toggled by autoOpen_ + */ + + /// Default looks + virtual InsetDecoration decoration() const; + /// + enum Geometry { + TopButton, + ButtonOnly, + NoButton, + LeftButton, + SubLabel, + Corners + }; + /// Returns the geometry based on CollapseStatus + /// (status_), autoOpen_ and openinlined_, and of + /// course decoration(). + Geometry geometry() const; /// bool allowSpellCheck() const { return true; } /// + bool allowMultiPar() const; + /// bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const; /// void setStatus(Cursor & cur, CollapseStatus st); /// bool setMouseHover(bool mouse_hover); + /// + virtual ColorCode backgroundColor() const {return layout_->bgcolor(); } + /// + int latex(Buffer const &, odocstream &, + OutputParams const &) const; + /// + void validate(LaTeXFeatures &) const; + /// + virtual InsetCode lyxCode() const { return COLLAPSABLE_CODE; } + /// Allow multiple blanks + virtual bool isFreeSpacing() const { return layout_->isFreeSpacing(); } + /// Don't eliminate empty paragraphs + virtual bool allowEmpty() const { return layout_->isKeepEmpty(); } + /// Force inset into LTR environment if surroundings are RTL? + virtual bool forceLTR() const { return layout_->isForceLtr(); } + /// + virtual bool useEmptyLayout() const { return true; } + /// Is this inset's layout defined in the document's textclass? + /// May be wrong after textclass change or paste from another document + bool undefined() const; protected: /// virtual void doDispatch(Cursor & cur, FuncRequest & cmd); /// - Dimension dimensionCollapsed() const; - /// - Box const & buttonDim() const; - /// - void edit(Cursor & cur, bool left); + void edit(Cursor & cur, bool front, + EntryDirection entry_from = ENTRY_DIRECTION_IGNORE); /// Inset * editXY(Cursor & cur, int x, int y); /// - void setInlined() { status_ = Inlined; } - /// docstring floatName(std::string const & type, BufferParams const &) const; - -protected: /// - mutable Box button_dim; - /// - mutable int topx; + virtual void resetParagraphsFont(); + +private: + /// text class to keep the InsetLayout above in memory + TextClassPtr textClass_; + /// cache for the layout_. Make sure it is in sync with the text class! + InsetLayout const * layout_; /// - mutable int topbaseline; + Dimension dimensionCollapsed() const; /// - mutable docstring label; + docstring labelstring_; /// - mutable InsetLayout layout_; -private: + mutable Box button_dim; /// mutable CollapseStatus status_; /// a substatus of the Open status, determined automatically in metrics mutable bool openinlined_; /// the inset will automatically open when the cursor is inside mutable bool autoOpen_; - /// - mutable Dimension textdim_; /// changes color when mouse enters/leaves this inset bool mouse_hover_; }; -// A helper function that pushes the cursor out of the inset. -void leaveInset(Cursor & cur, Inset const & in); - } // namespace lyx #endif