]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetTabular.h
Enable dissolve in undefined Flex inset context menu
[lyx.git] / src / insets / InsetTabular.h
index 6b60e44acb7c2866dd2720df3602e5fee1fd1376..ddb02763fcb2a5e409156c77a36dba56eac5170d 100644 (file)
 #ifndef INSET_TABULAR_H
 #define INSET_TABULAR_H
 
-#include "Inset.h"
 #include "InsetText.h"
 #include "Length.h"
 
-#include "support/shared_ptr.h"
-
 #include <climits>
 #include <iosfwd>
+#include <memory>
 #include <vector>
 
+
 namespace lyx {
 
 class Buffer;
@@ -72,7 +71,7 @@ public:
        docstring xhtml(XHTMLStream &, OutputParams const &) const;
        ///
        void addToToc(DocIterator const & di, bool output_active,
-                                 UpdateType utype) const;
+                                 UpdateType utype, TocBackend & backend) const;
 private:
        /// unimplemented
        InsetTableCell();
@@ -298,6 +297,8 @@ public:
                ///
                SET_TABULAR_WIDTH,
                ///
+               SET_INNER_LINES,
+               ///
                LAST_ACTION
        };
        ///
@@ -340,7 +341,9 @@ public:
                ///
                BOX_PARBOX = 1,
                ///
-               BOX_MINIPAGE = 2
+               BOX_MINIPAGE = 2,
+               ///
+               BOX_VARWIDTH = 3
        };
 
        enum CaptionType {
@@ -399,9 +402,13 @@ public:
        /// Returns true if there is a topline, returns false if not
        bool bottomLine(idx_type cell) const;
        /// Returns true if there is a topline, returns false if not
-       bool leftLine(idx_type cell) const;
+       /// If \p ignore_bt is true, we return the state as if booktabs was
+       /// not used
+       bool leftLine(idx_type cell, bool const ignore_bt = false) const;
        /// Returns true if there is a topline, returns false if not
-       bool rightLine(idx_type cell) const;
+       /// If \p ignore_bt is true, we return the state as if booktabs was
+       /// not used
+       bool rightLine(idx_type cell, bool const ignore_bt = false) const;
 
        /// return space occupied by the second horizontal line and
        /// interline space above row \p row in pixels
@@ -471,6 +478,9 @@ public:
        ///
        VAlignment getVAlignment(idx_type cell,
                                 bool onlycolumn = false) const;
+       /// The vertical offset of the table due to the vertical
+       /// alignment with respect to the baseline.
+       int offsetVAlignment() const;
        ///
        Length const getPWidth(idx_type cell) const;
        ///
@@ -610,13 +620,13 @@ public:
        /// returns the VISIBLE cell at r,c, which may be the same as the
        /// cell at the previous row or column, if we're dealing with some
        /// multirow or multicell.
-       shared_ptr<InsetTableCell> cellInset(idx_type cell) const;
-       shared_ptr<InsetTableCell> cellInset(row_type row,
-                                                 col_type column) const;
+       std::shared_ptr<InsetTableCell> cellInset(idx_type cell);
+       std::shared_ptr<InsetTableCell> cellInset(row_type row, col_type column);
+       InsetTableCell const * cellInset(idx_type cell) const;
        //@}
        ///
        void setCellInset(row_type row, col_type column,
-                         shared_ptr<InsetTableCell>) const;
+                         std::shared_ptr<InsetTableCell>);
        /// Search for \param inset in the tabular, with the
        ///
        void validate(LaTeXFeatures &) const;
@@ -673,9 +683,12 @@ public:
                ///
                Length p_width; // this is only set for multicolumn!!!
                ///
-               shared_ptr<InsetTableCell> inset;
+               std::shared_ptr<InsetTableCell> inset;
        };
-       CellData & cellInfo(idx_type cell) const;
+       ///
+       CellData const & cellInfo(idx_type cell) const;
+       ///
+       CellData & cellInfo(idx_type cell);
        ///
        typedef std::vector<CellData> cell_vector;
        ///
@@ -751,7 +764,7 @@ public:
        ///
        column_vector column_info;
        ///
-       mutable cell_vvector cell_info;
+       cell_vvector cell_info;
        ///
        Length tabular_width;
        ///
@@ -793,20 +806,23 @@ public:
        ///
        // helper function for Latex
        ///
-       void TeXTopHLine(otexstream &, row_type row, std::string const & lang) const;
+       void TeXTopHLine(otexstream &, row_type row, std::string const & lang,
+                        std::list<col_type>) const;
        ///
-       void TeXBottomHLine(otexstream &, row_type row, std::string const & lang) const;
+       void TeXBottomHLine(otexstream &, row_type row, std::string const & lang,
+                           std::list<col_type>) const;
        ///
-       void TeXCellPreamble(otexstream &, idx_type cell, bool & ismulticol, bool & ismultirow) const;
+       void TeXCellPreamble(otexstream &, idx_type cell, bool & ismulticol, bool & ismultirow,
+                            bool const bidi) const;
        ///
        void TeXCellPostamble(otexstream &, idx_type cell, bool ismulticol, bool ismultirow) const;
        ///
-       void TeXLongtableHeaderFooter(otexstream &, OutputParams const &) const;
+       void TeXLongtableHeaderFooter(otexstream &, OutputParams const &, std::list<col_type>) const;
        ///
        bool isValidRow(row_type const row) const;
        ///
        void TeXRow(otexstream &, row_type const row,
-                   OutputParams const &) const;
+                   OutputParams const &, std::list<col_type>) const;
        ///
        // helper functions for plain text
        ///
@@ -830,7 +846,9 @@ public:
        /// change associated Buffer
        void setBuffer(Buffer & buffer);
        /// retrieve associated Buffer
-       Buffer & buffer() const { return *buffer_; }
+       Buffer const & buffer() const { return *buffer_; }
+       /// retrieve associated Buffer
+       Buffer & buffer() { return *buffer_; }
 
 private:
        Buffer * buffer_;
@@ -875,12 +893,16 @@ public:
        bool allowSpellCheck() const { return true; }
        ///
        bool canTrackChanges() const { return true; }
+       ///
+       bool canPaintChange(BufferView const &) const { return true; }
        /** returns false if, when outputing LaTeX, font changes should
            be closed before generating this inset. This is needed for
            insets that may contain several paragraphs */
        bool inheritFont() const { return false; }
        ///
        bool allowsCaptionVariation(std::string const &) const;
+       //
+       bool isTable() const { return true; }
        ///
        DisplayType display() const;
        ///
@@ -911,9 +933,9 @@ public:
        /// number of cells
        size_t nargs() const { return tabular.numberofcells; }
        ///
-       shared_ptr<InsetTableCell const> cell(idx_type) const;
+       std::shared_ptr<InsetTableCell const> cell(idx_type) const;
        ///
-       shared_ptr<InsetTableCell> cell(idx_type);
+       std::shared_ptr<InsetTableCell> cell(idx_type);
        ///
        Text * getText(int) const;
 
@@ -948,7 +970,7 @@ public:
        void updateBuffer(ParIterator const &, UpdateType);
        ///
        void addToToc(DocIterator const & di, bool output_active,
-                                 UpdateType utype) const;
+                                 UpdateType utype, TocBackend & backend) const;
 
        ///
        bool completionSupported(Cursor const &) const;
@@ -970,6 +992,9 @@ public:
        void completionPosAndDim(Cursor const &, int & x, int & y, Dimension & dim) const;
        ///
        virtual bool usePlainLayout() const { return true; }
+       ///
+       docstring layoutName() const { return from_ascii("Tabular"); }
+
 
        ///
        InsetTabular * asInsetTabular() { return this; }
@@ -1007,7 +1032,7 @@ private:
        bool hitSelectRow(BufferView const & bv, int x) const;
        ///
        bool hitSelectColumn(BufferView const & bv, int y) const;
-       ///     Returns true if coordinates are on row/column selection zones
+       /// Returns true if coordinates are on row/column selection zones
        bool clickable(BufferView const &, int x, int y) const;
 
        ///
@@ -1043,15 +1068,11 @@ private:
        /// return the cell nearest to x, y
        idx_type getNearestCell(BufferView &, int x, int y) const;
 
-       /// test the rotation state of the give cell range.
+       /// test the rotation state of the given cell range.
        bool oneCellHasRotationState(bool rotated,
                                row_type row_start, row_type row_end,
                                col_type col_start, col_type col_end) const;
-       ///
-       mutable idx_type first_visible_cell_;
-       /// The vertical offset of the table due to the vertical
-       /// alignment with respect to the baseline.
-       mutable int offset_valign_;
+
        /// true when selecting rows with the mouse
        bool rowselect_;
        /// true when selecting columns with the mouse