]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetTabular.h
Merge branch 'master' into biblatex2
[lyx.git] / src / insets / InsetTabular.h
index a3c2b86c504f755cbccd63bb6e804119c30f893c..1e1379cc7b28df7decf825ef123cd56dcab41faf 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;
@@ -219,6 +218,8 @@ public:
                ///
                UNSET_ALL_LINES,
                ///
+               TOGGLE_LONGTABULAR,
+               ///
                SET_LONGTABULAR,
                ///
                UNSET_LONGTABULAR,
@@ -266,6 +267,8 @@ public:
                ///
                SET_SPECIAL_MULTICOLUMN,
                ///
+               TOGGLE_BOOKTABS,
+               ///
                SET_BOOKTABS,
                ///
                UNSET_BOOKTABS,
@@ -467,6 +470,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;
        ///
@@ -606,13 +612,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;
@@ -669,9 +675,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;
        ///
@@ -747,7 +756,7 @@ public:
        ///
        column_vector column_info;
        ///
-       mutable cell_vvector cell_info;
+       cell_vvector cell_info;
        ///
        Length tabular_width;
        ///
@@ -826,7 +835,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_;
@@ -871,12 +882,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;
        ///
@@ -899,17 +914,17 @@ public:
        /// get offset of this cursor slice relative to our upper left corner
        void cursorPos(BufferView const & bv, CursorSlice const & sl,
                bool boundary, int & x, int & y) const;
-       ///
-       bool tabularFeatures(Cursor & cur, std::string const & what);
-       ///
+       /// Executes a space-separated sequence of tabular-features requests
+       void tabularFeatures(Cursor & cur, std::string const & what);
+       /// Change a single tabular feature; does not handle undo.
        void tabularFeatures(Cursor & cur, Tabular::Feature feature,
                             std::string const & val = std::string());
        /// 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;
 
@@ -966,6 +981,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; }
@@ -992,10 +1010,20 @@ private:
        ///
        void doDispatch(Cursor & cur, FuncRequest & cmd);
        ///
+       bool getFeatureStatus(Cursor & cur, std::string const & s,
+                        std::string const & argument, FuncStatus & status) const;
+       ///
        bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const;
        ///
        Inset * clone() const { return new InsetTabular(*this); }
 
+       ///
+       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
+       bool clickable(BufferView const &, int x, int y) const;
+
        ///
        void drawCellLines(PainterInfo &, int x, int y, row_type row,
                           idx_type cell) const;
@@ -1029,15 +1057,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