X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Finsets%2FInsetTabular.h;h=87114ec367bb23cf0d668c2f28a8ff44c59e71ef;hb=87a7f728ca9b8b4d358cf06de980f61b67a927ac;hp=d26b1aa4f399efb657718ff75951848831c19867;hpb=c4ab6210883a5e4a973b5ad2d887aebdf98f131a;p=lyx.git diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index d26b1aa4f3..87114ec367 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -33,8 +33,6 @@ #include -using std::shared_ptr; - namespace lyx { class Buffer; @@ -65,6 +63,10 @@ public: /// void toggleFixedWidth(bool fw) { isFixedWidth = fw; } /// + void toggleMultiCol(bool m) { isMultiColumn = m; } + /// + void toggleMultiRow(bool m) { isMultiRow = m; } + /// void setContentAlignment(LyXAlignment al) {contentAlign = al; } /// writes the contents of the cell as a string, optionally /// descending into insets @@ -73,15 +75,18 @@ public: docstring xhtml(XHTMLStream &, OutputParams const &) const; /// void addToToc(DocIterator const & di, bool output_active, - UpdateType utype) const; + UpdateType utype, TocBackend & backend) const; + /// + void metrics(MetricsInfo &, Dimension &) const; private: /// unimplemented InsetTableCell(); /// unimplemented void operator=(InsetTableCell const &); // FIXME - // This boolean is supposed to track whether the cell has had its - // width explicitly set. We need to know this to determine whether + // These booleans are supposed to track whether the cell has had its + // width explicitly set and whether it is part of a multicolumn, respectively. + // We need to know this to determine whether // layout changes and paragraph customization are allowed---that is, // we need it in forcePlainLayout() and allowParagraphCustomization(). // Unfortunately, that information is not readily available in @@ -104,6 +109,10 @@ private: // --rgh /// bool isFixedWidth; + /// + bool isMultiColumn; + /// + bool isMultiRow; // FIXME: Here the thoughts from the comment above also apply. /// LyXAlignment contentAlign; @@ -122,11 +131,7 @@ private: /// Is the width forced to some value? bool hasFixedWidth() const { return isFixedWidth; } /// Can the cell contain several paragraphs? - /** FIXME this is wrong for multirows, that are limited to one - * paragraph. However, we cannot test for this (see the big - * comment above). - */ - bool allowMultiPar() const { return isFixedWidth; } + bool allowMultiPar() const { return !isMultiRow && (!isMultiColumn || isFixedWidth); } }; @@ -230,6 +235,8 @@ public: /// SET_MPWIDTH, /// + TOGGLE_VARWIDTH_COLUMN, + /// SET_ROTATE_TABULAR, /// UNSET_ROTATE_TABULAR, @@ -341,7 +348,9 @@ public: /// BOX_PARBOX = 1, /// - BOX_MINIPAGE = 2 + BOX_MINIPAGE = 2, + /// + BOX_VARWIDTH = 3 }; enum CaptionType { @@ -462,6 +471,8 @@ public: /// bool setMColumnPWidth(Cursor &, idx_type, Length const &); /// + bool toggleVarwidth(idx_type, bool const); + /// bool setMROffset(Cursor &, idx_type, Length const &); /// void setAlignSpecial(idx_type cell, docstring const & special, @@ -472,6 +483,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; /// @@ -525,7 +539,11 @@ public: /// bool hasMultiColumn(col_type cell) const; /// - idx_type setMultiColumn(idx_type cell, idx_type number, + bool hasVarwidthColumn() const; + /// + bool isVTypeColumn(col_type cell) const; + /// + idx_type setMultiColumn(Cursor & cur, idx_type cell, idx_type number, bool const right_border); /// void unsetMultiColumn(idx_type cell); @@ -538,7 +556,7 @@ public: /// bool hasMultiRow(row_type r) const; /// - idx_type setMultiRow(idx_type cell, idx_type number, + idx_type setMultiRow(Cursor & cur, idx_type cell, idx_type number, bool const bottom_border, LyXAlignment const halign); /// @@ -586,7 +604,7 @@ public: /// bool getLTNewPage(row_type row) const; /// - idx_type setLTCaption(row_type row, bool what); + idx_type setLTCaption(Cursor & cur, row_type row, bool what); /// bool ltCaption(row_type row) const; /// @@ -611,13 +629,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 cellInset(idx_type cell); - shared_ptr cellInset(row_type row, col_type column); + std::shared_ptr cellInset(idx_type cell); + std::shared_ptr cellInset(row_type row, col_type column); InsetTableCell const * cellInset(idx_type cell) const; //@} /// void setCellInset(row_type row, col_type column, - shared_ptr); + std::shared_ptr); /// Search for \param inset in the tabular, with the /// void validate(LaTeXFeatures &) const; @@ -674,7 +692,7 @@ public: /// Length p_width; // this is only set for multicolumn!!! /// - shared_ptr inset; + std::shared_ptr inset; }; /// CellData const & cellInfo(idx_type cell) const; @@ -740,6 +758,8 @@ public: docstring align_special; /// docstring decimal_point; + /// + bool varwidth; }; /// typedef std::vector column_vector; @@ -755,7 +775,7 @@ public: /// column_vector column_info; /// - mutable cell_vvector cell_info; + cell_vvector cell_info; /// Length tabular_width; /// @@ -787,30 +807,33 @@ public: /// bool setFixedWidth(row_type r, col_type c); /// return true of update is needed - bool updateColumnWidths(); + bool updateColumnWidths(MetricsInfo & mi); /// idx_type columnSpan(idx_type cell) const; /// idx_type rowSpan(idx_type cell) const; /// - BoxType useParbox(idx_type cell) const; + BoxType useBox(idx_type cell) const; /// // 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) const; /// - void TeXBottomHLine(otexstream &, row_type row, std::string const & lang) const; + void TeXBottomHLine(otexstream &, row_type row, std::string const & lang, + std::list) 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) const; /// bool isValidRow(row_type const row) const; /// void TeXRow(otexstream &, row_type const row, - OutputParams const &) const; + OutputParams const &, std::list) const; /// // helper functions for plain text /// @@ -921,9 +944,9 @@ public: /// number of cells size_t nargs() const { return tabular.numberofcells; } /// - shared_ptr cell(idx_type) const; + std::shared_ptr cell(idx_type) const; /// - shared_ptr cell(idx_type); + std::shared_ptr cell(idx_type); /// Text * getText(int) const; @@ -958,7 +981,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; @@ -980,6 +1003,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; } @@ -1053,15 +1079,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