X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetTabular.h;h=067141edd12c74c1fbf8fa9d8aca05d49b5321c6;hb=9176e60b7bcab3e355521a86ddb4c2778cd9b29e;hp=4b8ce5942f683a63e18eabb459e6fc20256bf6b8;hpb=d654c4782a0cc34342f2632f7a50ffe6658241dd;p=lyx.git diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index 4b8ce5942f..067141edd1 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -52,7 +52,7 @@ class InsetTableCell : public InsetText { public: /// - InsetTableCell(Buffer * buf); + explicit InsetTableCell(Buffer * buf); /// InsetCode lyxCode() const { return CELL_CODE; } /// @@ -63,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 @@ -71,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 @@ -102,6 +109,10 @@ private: // --rgh /// bool isFixedWidth; + /// + bool isMultiColumn; + /// + bool isMultiRow; // FIXME: Here the thoughts from the comment above also apply. /// LyXAlignment contentAlign; @@ -120,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); } }; @@ -172,6 +179,22 @@ public: ///FIXME: remove TOGGLE_LINE_RIGHT, /// + SET_LTRIM_TOP, + /// + SET_RTRIM_TOP, + /// + SET_LTRIM_BOTTOM, + /// + SET_RTRIM_BOTTOM, + /// + TOGGLE_LTRIM_TOP, + /// + TOGGLE_RTRIM_TOP, + /// + TOGGLE_LTRIM_BOTTOM, + /// + TOGGLE_RTRIM_BOTTOM, + /// ALIGN_LEFT, /// ALIGN_RIGHT, @@ -216,6 +239,8 @@ public: /// SET_ALL_LINES, /// + RESET_FORMAL_DEFAULT, + /// UNSET_ALL_LINES, /// TOGGLE_LONGTABULAR, @@ -228,6 +253,8 @@ public: /// SET_MPWIDTH, /// + TOGGLE_VARWIDTH_COLUMN, + /// SET_ROTATE_TABULAR, /// UNSET_ROTATE_TABULAR, @@ -297,6 +324,8 @@ public: /// SET_TABULAR_WIDTH, /// + SET_INNER_LINES, + /// LAST_ACTION }; /// @@ -339,7 +368,9 @@ public: /// BOX_PARBOX = 1, /// - BOX_MINIPAGE = 2 + BOX_MINIPAGE = 2, + /// + BOX_VARWIDTH = 3 }; enum CaptionType { @@ -398,9 +429,17 @@ 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; + /// Returns whether the top line is trimmed left and/or right + std::pair topLineTrim(idx_type const cell) const; + /// Returns whether the bottom line is trimmed left and/or right + std::pair bottomLineTrim(idx_type const cell) const; /// return space occupied by the second horizontal line and /// interline space above row \p row in pixels @@ -434,6 +473,18 @@ public: /// void setBottomLine(idx_type cell, bool line); /// + void setTopLineLTrim(idx_type cell, bool val); + /// + void setBottomLineLTrim(idx_type cell, bool val); + /// + void setTopLineRTrim(idx_type cell, bool val); + /// + void setBottomLineRTrim(idx_type cell, bool val); + /// + void setTopLineTrim(idx_type cell, std::pair); + /// + void setBottomLineTrim(idx_type cell, std::pair); + /// void setLeftLine(idx_type cell, bool line); /// void setRightLine(idx_type cell, bool line); @@ -460,6 +511,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, @@ -484,7 +537,7 @@ public: /// void appendRow(row_type row); /// - void deleteRow(row_type row); + void deleteRow(row_type row, bool const force = false); /// void copyRow(row_type row); /// @@ -496,15 +549,19 @@ public: /// void appendColumn(col_type column); /// - void deleteColumn(col_type column); + void deleteColumn(col_type column, bool const force = false); /// void copyColumn(col_type column); /// void insertColumn(col_type column, bool copy); /// - idx_type getFirstCellInRow(row_type row) const; + idx_type getFirstCellInRow(row_type row, bool const ct = false) const; + /// + idx_type getLastCellInRow(row_type row, bool const ct = false) const; + /// + idx_type getFirstRow(bool const ct = false) const; /// - idx_type getLastCellInRow(row_type row) const; + idx_type getLastRow(bool const ct = false) const; /// idx_type numberOfCellsInRow(row_type row) const; /// @@ -526,7 +583,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); @@ -539,7 +600,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); /// @@ -587,7 +648,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; /// @@ -633,7 +694,7 @@ public: class CellData { public: /// - CellData(Buffer *); + explicit CellData(Buffer *); /// CellData(CellData const &); /// @@ -667,6 +728,14 @@ public: /// bool right_line; /// + bool top_line_rtrimmed; + /// + bool top_line_ltrimmed; + /// + bool bottom_line_rtrimmed; + /// + bool bottom_line_ltrimmed; + /// BoxType usebox; /// int rotate; @@ -720,6 +789,8 @@ public: bool newpage; /// caption bool caption; + /// + Change change; }; /// typedef std::vector row_vector; @@ -741,6 +812,10 @@ public: docstring align_special; /// docstring decimal_point; + /// + bool varwidth; + /// + Change change; }; /// typedef std::vector column_vector; @@ -788,30 +863,34 @@ 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::list, + std::list) const; /// - void TeXBottomHLine(otexstream &, row_type row, std::string const & lang) const; + void TeXBottomHLine(otexstream &, row_type row, std::list, + 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, + std::list) const; /// bool isValidRow(row_type const row) const; /// void TeXRow(otexstream &, row_type const row, - OutputParams const &) const; + OutputParams const &, std::list, std::list) const; /// // helper functions for plain text /// @@ -928,6 +1007,8 @@ public: /// Text * getText(int) const; + /// does the inset contain changes ? + bool isChanged() const; /// set the change for the entire inset void setChange(Change const & change); /// accept the changes within the inset @@ -959,7 +1040,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; @@ -981,6 +1062,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; }