X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetTabular.h;h=78727b0f5cb12d32793dd0ce6d870a72d8edbb3c;hb=d8a6b5bfd0baa02a4ba03f8c9e9c618baf41b03f;hp=f042b0a6f32a98377f7c9608d34712680bfa4309;hpb=ef1a53c4929133e2d261a78a62cbbd87a687ca14;p=lyx.git diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index f042b0a6f3..78727b0f5c 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -37,10 +37,10 @@ #define INSETTABULAR_H #include "Inset.h" -#include "MailInset.h" -#include "LyXLength.h" #include "InsetText.h" - +#include "Layout.h" +#include "Length.h" +#include "MailInset.h" #include @@ -61,13 +61,13 @@ namespace frontend { class Painter; } class InsetTabular; -class LCursor; +class Cursor; class OutputParams; // // A helper struct for tables -// -class Tabular { +// +class Tabular { public: /// enum Feature { @@ -144,10 +144,14 @@ public: /// UNSET_ROTATE_TABULAR, /// + TOGGLE_ROTATE_TABULAR, + /// SET_ROTATE_CELL, /// UNSET_ROTATE_CELL, /// + TOGGLE_ROTATE_CELL, + /// SET_USEBOX, /// SET_LTHEAD, @@ -235,8 +239,9 @@ public: static const idx_type npos = static_cast(-1); /// constructor - Tabular(BufferParams const &, col_type columns_arg, - row_type rows_arg); + Tabular(); + /// constructor + Tabular(Buffer const &, col_type columns_arg, row_type rows_arg); /// Returns true if there is a topline, returns false if not bool topLine(idx_type cell, bool wholerow = false) const; @@ -262,21 +267,21 @@ public: /* returns the maximum over all rows */ /// - int getWidthOfColumn(idx_type cell) const; + int columnWidth(idx_type cell) const; /// - int getWidthOfTabular() const; + int width() const; /// - int getAscentOfRow(row_type row) const; + int height() const; /// - int getDescentOfRow(row_type row) const; + int rowAscent(row_type row) const; /// - int getHeightOfTabular() const; + int rowDescent(row_type row) const; /// - void setAscentOfRow(row_type row, int height); + void setRowAscent(row_type row, int height); /// - void setDescentOfRow(row_type row, int height); + void setRowDescent(row_type row, int height); /// - void setWidthOfCell(idx_type cell, int new_width); + void setCellWidth(idx_type cell, int new_width); /// void setAllLines(idx_type cell, bool line); /// @@ -294,9 +299,9 @@ public: void setVAlignment(idx_type cell, VAlignment align, bool onlycolumn = false); /// - void setColumnPWidth(LCursor &, idx_type, LyXLength const &); + void setColumnPWidth(Cursor &, idx_type, Length const &); /// - bool setMColumnPWidth(LCursor &, idx_type, LyXLength const &); + bool setMColumnPWidth(Cursor &, idx_type, Length const &); /// void setAlignSpecial(idx_type cell, docstring const & special, Feature what); @@ -307,29 +312,29 @@ public: VAlignment getVAlignment(idx_type cell, bool onlycolumn = false) const; /// - LyXLength const getPWidth(idx_type cell) const; + Length const getPWidth(idx_type cell) const; /// - LyXLength const getColumnPWidth(idx_type cell) const; + Length const getColumnPWidth(idx_type cell) const; /// - LyXLength const getMColumnPWidth(idx_type cell) const; + Length const getMColumnPWidth(idx_type cell) const; /// docstring const getAlignSpecial(idx_type cell, int what) const; /// - int getWidthOfCell(idx_type cell) const; + int cellWidth(idx_type cell) const; /// int getBeginningOfTextInCell(idx_type cell) const; /// - void appendRow(BufferParams const &, idx_type cell); + void appendRow(idx_type cell); /// void deleteRow(row_type row); /// - void copyRow(BufferParams const &, row_type); + void copyRow(row_type); /// - void appendColumn(BufferParams const &, idx_type cell); + void appendColumn(idx_type cell); /// void deleteColumn(col_type column); /// - void copyColumn(BufferParams const &, col_type); + void copyColumn(col_type); /// bool isFirstCellInRow(idx_type cell) const; /// @@ -339,37 +344,37 @@ public: /// idx_type getLastCellInRow(row_type row) const; /// - idx_type getNumberOfCells() const; + idx_type cellCount() const; /// idx_type numberOfCellsInRow(idx_type cell) const; /// - void write(Buffer const &, std::ostream &) const; + void write(std::ostream &) const; /// - void read(Buffer const &, Lexer &); + void read(Lexer &); /// - int latex(Buffer const &, odocstream &, OutputParams const &) const; + int latex(odocstream &, OutputParams const &) const; // - int docbook(Buffer const & buf, odocstream & os, OutputParams const &) const; + int docbook(odocstream & os, OutputParams const &) const; /// - void plaintext(Buffer const &, odocstream &, - OutputParams const & runparams, int const depth, - bool onlydata, unsigned char delim) const; + void plaintext(odocstream &, + OutputParams const & runparams, int const depth, + bool onlydata, char_type delim) const; /// bool isMultiColumn(idx_type cell) const; /// bool isMultiColumnReal(idx_type cell) const; /// - void setMultiColumn(Buffer *, idx_type cell, idx_type number); + void setMultiColumn(idx_type cell, idx_type number); /// idx_type unsetMultiColumn(idx_type cell); // returns number of new cells /// bool isPartOfMultiColumn(row_type row, col_type column) const; /// - row_type row_of_cell(idx_type cell) const; + row_type cellRow(idx_type cell) const; /// - col_type column_of_cell(idx_type cell) const; + col_type cellColumn(idx_type cell) const; /// - col_type right_column_of_cell(idx_type cell) const; + col_type cellRightColumn(idx_type cell) const; /// void setBookTabs(bool); /// @@ -399,7 +404,7 @@ public: /// idx_type getLastCellBelow(idx_type cell) const; /// - idx_type getCellNumber(row_type row, col_type column) const; + idx_type cellIndex(row_type row, col_type column) const; /// void setUsebox(idx_type cell, BoxType); /// @@ -444,30 +449,30 @@ public: boost::shared_ptr) const; /// Search for \param inset in the tabular, with the /// - idx_type getCellFromInset(InsetBase const * inset) const; + idx_type getCellFromInset(Inset const * inset) const; /// - row_type rows() const { return rows_; } + row_type rowCount() const { return row_info.size(); } /// - col_type columns() const { return columns_;} + col_type columnCount() const { return column_info.size();} /// void validate(LaTeXFeatures &) const; /// //private: /// - class cellstruct { + class CellData { public: /// - cellstruct(BufferParams const &); + CellData(Buffer const &); /// - cellstruct(cellstruct const &); + CellData(CellData const &); /// - cellstruct & operator=(cellstruct); + CellData & operator=(CellData); /// - void swap(cellstruct & rhs); + void swap(CellData & rhs); /// idx_type cellno; /// - int width_of_cell; + int width; /// int multicolumn; /// @@ -489,39 +494,39 @@ public: /// docstring align_special; /// - LyXLength p_width; // this is only set for multicolumn!!! + Length p_width; // this is only set for multicolumn!!! /// boost::shared_ptr inset; }; - cellstruct & cellinfo_of_cell(idx_type cell) const; + CellData & cellinfo_of_cell(idx_type cell) const; /// - typedef std::vector cell_vector; + typedef std::vector cell_vector; /// typedef std::vector cell_vvector; /// - class rowstruct { + class RowData { public: /// - rowstruct(); + RowData(); /// - int ascent_of_row; + int ascent; /// - int descent_of_row; + int descent; /// bool top_line; /// bool bottom_line; /// Extra space between the top line and this row - LyXLength top_space; + Length top_space; /// Ignore top_space if true and use the default top space bool top_space_default; /// Extra space between this row and the bottom line - LyXLength bottom_space; + Length bottom_space; /// Ignore bottom_space if true and use the default bottom space bool bottom_space_default; /// Extra space between the bottom line and the next top line - LyXLength interline_space; + Length interline_space; /// Ignore interline_space if true and use the default interline space bool interline_space_default; /// This are for longtabulars only @@ -533,17 +538,17 @@ public: bool endfoot; /// row of endlastfoot bool endlastfoot; - /// row for a pagebreak + /// row for a newpage bool newpage; }; /// - typedef std::vector row_vector; + typedef std::vector row_vector; /// - class columnstruct { + class ColumnData { public: /// - columnstruct(); + ColumnData(); /// LyXAlignment alignment; /// @@ -553,19 +558,15 @@ public: /// bool right_line; /// - int width_of_column; + int width; /// - LyXLength p_width; + Length p_width; /// docstring align_special; }; /// - typedef std::vector column_vector; + typedef std::vector column_vector; - /// - row_type rows_; - /// - col_type columns_; /// idx_type numberofcells; /// @@ -579,8 +580,6 @@ public: /// mutable cell_vvector cell_info; /// - int width_of_tabular; - /// bool use_booktabs; /// bool rotate; @@ -598,10 +597,10 @@ public: ltType endlastfoot; /// - void init(BufferParams const &, row_type rows_arg, + void init(Buffer const &, row_type rows_arg, col_type columns_arg); /// - void set_row_column_number_info(); + void updateIndexes(); /// Returns true if a complete update is necessary, otherwise false bool setWidthOfMulticolCell(idx_type cell, int new_width); /// @@ -611,10 +610,6 @@ public: /// bool calculate_width_of_column_NMC(col_type column); // no multi cells /// - void calculate_width_of_tabular(); - /// - void delete_column(col_type column); - /// idx_type cells_in_multicolumn(idx_type cell) const; /// BoxType useParbox(idx_type cell) const; @@ -629,39 +624,44 @@ public: /// int TeXCellPostamble(odocstream &, idx_type cell) const; /// - int TeXLongtableHeaderFooter(odocstream &, Buffer const & buf, - OutputParams const &) const; + int TeXLongtableHeaderFooter(odocstream &, OutputParams const &) const; /// bool isValidRow(row_type const row) const; /// - int TeXRow(odocstream &, row_type const row, Buffer const & buf, + int TeXRow(odocstream &, row_type const row, OutputParams const &) const; /// // helper functions for plain text /// bool plaintextTopHLine(odocstream &, row_type row, - std::vector const &) const; + std::vector const &) const; /// bool plaintextBottomHLine(odocstream &, row_type row, - std::vector const &) const; + std::vector const &) const; /// - void plaintextPrintCell(Buffer const &, odocstream &, - OutputParams const &, - idx_type cell, row_type row, col_type column, - std::vector const &, - bool onlydata) const; + void plaintextPrintCell(odocstream &, + OutputParams const &, + idx_type cell, row_type row, col_type column, + std::vector const &, + bool onlydata) const; /// auxiliary function for docbook - int docbookRow(Buffer const & buf, odocstream & os, row_type, - OutputParams const &) const; + int docbookRow(odocstream & os, row_type, OutputParams const &) const; + + /// change associated Buffer + void setBuffer(Buffer const & buffer) { buffer_ = &buffer; } + /// retrieve associated Buffer + Buffer const & buffer() const { return *buffer_; } private: + Buffer const * buffer_; + /// renumber cells after structural changes void fixCellNums(); }; -class InsetTabular : public InsetOld { +class InsetTabular : public Inset { public: /// InsetTabular(Buffer const &, row_type rows = 1, @@ -669,21 +669,21 @@ public: /// ~InsetTabular(); /// - void read(Buffer const &, Lexer &); + void read(Lexer &); /// - void write(Buffer const &, std::ostream &) const; + void write(std::ostream &) const; /// - bool metrics(MetricsInfo &, Dimension &) const; + void metrics(MetricsInfo &, Dimension &) const; /// void draw(PainterInfo & pi, int x, int y) const; /// void drawSelection(PainterInfo & pi, int x, int y) const; /// - virtual docstring const editMessage() const; + docstring editMessage() const; /// EDITABLE editable() const { return HIGHLY_EDITABLE; } /// - bool insetAllowed(InsetBase::Code) const { return true; } + bool insetAllowed(InsetCode code) const; /// bool allowSpellCheck() const { return true; } /// @@ -693,40 +693,37 @@ public: insets that may contain several paragraphs */ bool noFontChange() const { return true; } /// - bool display() const { return tabular.isLongTabular(); } + DisplayType display() const { return tabular.isLongTabular() ? AlignCenter : Inline; } /// - int latex(Buffer const &, odocstream &, - OutputParams const &) const; + int latex(odocstream &, OutputParams const &) const; /// - int plaintext(Buffer const &, odocstream &, - OutputParams const &) const; + int plaintext(odocstream &, OutputParams const &) const; /// - int docbook(Buffer const &, odocstream &, - OutputParams const &) const; + int docbook(odocstream &, OutputParams const &) const; /// void validate(LaTeXFeatures & features) const; /// - Code lyxCode() const { return InsetBase::TABULAR_CODE; } + InsetCode lyxCode() const { return TABULAR_CODE; } /// 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(LCursor & cur, std::string const & what); + bool tabularFeatures(Cursor & cur, std::string const & what); /// - void tabularFeatures(LCursor & cur, Tabular::Feature feature, + void tabularFeatures(Cursor & cur, Tabular::Feature feature, std::string const & val = std::string()); /// void openLayoutDialog(BufferView *) const; /// bool showInsetDialog(BufferView *) const; /// number of cells - size_t nargs() const { return tabular.getNumberOfCells(); } + size_t nargs() const { return tabular.cellCount(); } /// boost::shared_ptr cell(idx_type) const; /// boost::shared_ptr cell(idx_type); /// - LyXText * getText(int) const; + Text * getText(int) const; /// set the change for the entire inset void setChange(Change const & change); @@ -738,22 +735,20 @@ public: // this should return true if we have a "normal" cell, otherwise false. // "normal" means without width set! /// should all paragraphs be output with "Standard" layout? - bool forceDefaultParagraphs(idx_type cell = 0) const; - + virtual bool allowParagraphCustomization(idx_type cell = 0) const; /// - void addPreview(graphics::PreviewLoader &) const; - + virtual bool forceEmptyLayout() { return true; } /// - Buffer const & buffer() const; + void addPreview(graphics::PreviewLoader &) const; - /// set the owning buffer - void buffer(Buffer const * buf); /// lock cell with given index - void edit(LCursor & cur, bool left); + void edit(Cursor & cur, bool front, EntryDirection entry_from); /// - InsetBase * editXY(LCursor & cur, int x, int y); + Inset * editXY(Cursor & cur, int x, int y); /// can we go further down on mouse click? bool descendable() const { return true; } + // Update the counters of this inset and of its contents + void updateLabels(ParIterator const &); // // Public structures and variables @@ -764,61 +759,60 @@ protected: /// InsetTabular(InsetTabular const &); /// - virtual void doDispatch(LCursor & cur, FuncRequest & cmd); + virtual void doDispatch(Cursor & cur, FuncRequest & cmd); /// - bool getStatus(LCursor & cur, FuncRequest const & cmd, FuncStatus &) const; + bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const; /// int scroll() const { return scx_; } private: - virtual std::auto_ptr doClone() const; + Inset * clone() const; /// void drawCellLines(frontend::Painter &, int x, int y, row_type row, idx_type cell, bool erased) const; /// - void setCursorFromCoordinates(LCursor & cur, int x, int y) const; + void setCursorFromCoordinates(Cursor & cur, int x, int y) const; /// - void moveNextCell(LCursor & cur); + void moveNextCell(Cursor & cur); /// - void movePrevCell(LCursor & cur); + void movePrevCell(Cursor & cur); /// int getCellXPos(idx_type cell) const; /// - void resetPos(LCursor & cur) const; + void resetPos(Cursor & cur) const; /// void removeTabularRow(); /// - bool copySelection(LCursor & cur); + bool copySelection(Cursor & cur); /// - bool pasteClipboard(LCursor & cur); + bool pasteClipboard(Cursor & cur); /// - void cutSelection(LCursor & cur); + void cutSelection(Cursor & cur); /// - bool isRightToLeft(LCursor & cur) const; + bool isRightToLeft(Cursor & cur) const; /// - void getSelection(LCursor & cur, row_type & rs, row_type & re, + void getSelection(Cursor & cur, row_type & rs, row_type & re, col_type & cs, col_type & ce) const; /// bool insertPlaintextString(BufferView &, docstring const & buf, bool usePaste); /// are we operating on several cells? - bool tablemode(LCursor & cur) const; + bool tablemode(Cursor & cur) const; /// return the "Manhattan distance" to nearest corner int dist(BufferView &, idx_type cell, int x, int y) const; /// return the cell nearest to x, y idx_type getNearestCell(BufferView &, int x, int y) const; - /// - Buffer const * buffer_; + /// test the rotation state of the give 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; /// mutable int scx_; - /// Ugly boolean used when this inset is dissolved and - /// InsetTabularMailer should not be used. - bool is_deleted_; }; @@ -827,7 +821,7 @@ public: /// InsetTabularMailer(InsetTabular const & inset); /// - virtual InsetBase & inset() const { return inset_; } + virtual Inset & inset() const { return inset_; } /// virtual std::string const & name() const { return name_; } ///