]> git.lyx.org Git - lyx.git/blob - src/insets/InsetFloat.h
Internal buffers are valid
[lyx.git] / src / insets / InsetFloat.h
1 // -*- C++ -*-
2 /**
3  * \file InsetFloat.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Jürgen Vigna
8  * \author Lars Gullik Bjønnes
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #ifndef INSET_FLOAT_H
14 #define INSET_FLOAT_H
15
16 #include "InsetCaptionable.h"
17
18
19 namespace lyx {
20
21 struct TexString;
22
23
24 class InsetFloatParams
25 {
26 public:
27         ///
28         InsetFloatParams() : type("senseless"), wide(false), sideways(false), subfloat(false) {}
29         ///
30         void write(std::ostream & os) const;
31         ///
32         void read(Lexer & lex);
33         ///
34         std::string type;
35         ///
36         std::string placement;
37         /// span columns
38         bool wide;
39         ///
40         bool sideways;
41         ///
42         bool subfloat;
43 };
44
45
46
47 /////////////////////////////////////////////////////////////////////////
48 //
49 // InsetFloat
50 //
51 /////////////////////////////////////////////////////////////////////////
52
53 /// Used for "floating" objects like tables, figures etc.
54 class InsetFloat : public InsetCaptionable
55 {
56 public:
57         InsetFloat(Buffer * buffer, std::string params_str);
58         ///
59         static void string2params(std::string const &, InsetFloatParams &);
60         ///
61         static std::string params2string(InsetFloatParams const &);
62         ///
63         void setWide(bool w, bool update_label = true);
64         ///
65         void setSideways(bool s, bool update_label = true);
66         ///
67         void setSubfloat(bool s, bool update_label = true);
68         ///
69         void setNewLabel();
70         ///
71         InsetFloatParams const & params() const { return params_; }
72         ///
73         bool allowsCaptionVariation(std::string const &) const;
74 private:
75         ///
76         void setCaptionType(std::string const & type);
77         ///
78         docstring layoutName() const;
79         ///
80         docstring toolTip(BufferView const & bv, int x, int y) const;
81         ///
82         void write(std::ostream & os) const;
83         ///
84         void read(Lexer & lex);
85         ///
86         void validate(LaTeXFeatures & features) const;
87         ///
88         InsetCode lyxCode() const { return FLOAT_CODE; }
89         ///
90         void latex(otexstream &, OutputParams const &) const;
91         ///
92         int plaintext(odocstringstream & ods, OutputParams const & op,
93                       size_t max_length = INT_MAX) const;
94         ///
95         int docbook(odocstream &, OutputParams const &) const;
96         ///
97         docstring xhtml(XHTMLStream &, OutputParams const &) const;
98         ///
99         bool insetAllowed(InsetCode) const;
100         /** returns false if, when outputing LaTeX, font changes should
101             be closed before generating this inset. This is needed for
102             insets that may contain several paragraphs */
103         bool inheritFont() const { return false; }
104         ///
105         bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const;
106         ///
107         bool hasSubCaptions(ParIterator const & it) const;
108         ///
109         void doDispatch(Cursor & cur, FuncRequest & cmd);
110         ///
111         Inset * clone() const { return new InsetFloat(*this); }
112         /// Is the content of this inset part of the immediate (visible) text sequence?
113         bool isPartOfTextSequence() const { return false; }
114         ///
115         TexString getCaption(OutputParams const &) const;
116
117         InsetFloatParams params_;
118 };
119
120
121 } // namespace lyx
122
123 #endif // INSET_FLOAT_H