]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_gridinset.h
Fix math cursor positioning bug
[lyx.git] / src / mathed / math_gridinset.h
index e664dd7cff962ab50d48ed49211c3a53b73e0988..e66b02765e29fe3a32efd80d7a87e3b170433d9c 100644 (file)
  *  This is the base to all grid-like editable math objects
  */
 class MathGridInset : public MathNestInset {
-
 public:
 
        /// additional per-cell information
-       struct CellInfo {
+       class CellInfo {
+       public:
                ///
                CellInfo();
                /// a dummy cell before a multicolumn cell
@@ -41,7 +41,8 @@ public:
        };
 
        /// additional per-row information
-       struct RowInfo {
+       class RowInfo {
+       public:
                ///
                RowInfo();
                ///
@@ -53,7 +54,7 @@ public:
                /// cached offset
                mutable int offset_;
                /// how many hlines above this row?
-               int lines_;
+               unsigned int lines_;
                /// parameter to the line break
                LyXLength crskip_;
                /// extra distance between lines
@@ -61,7 +62,8 @@ public:
        };
 
        // additional per-row information
-       struct ColInfo {
+       class ColInfo {
+       public:
                ///
                ColInfo();
                /// currently possible: 'l', 'c', 'r'
@@ -72,12 +74,8 @@ public:
                mutable int width_;
                /// cached offset
                mutable int offset_;
-               /// do we need a line to the left?
-               bool leftline_;
-               /// do we need a line to the right?
-               bool rightline_;
                /// how many lines to the left of this column?
-               int lines_;
+               unsigned int lines_;
                /// additional amount to be skipped when drawing
                int skip_;
        };
@@ -94,8 +92,6 @@ public:
        /// Ensures that the dialog is closed.
        ~MathGridInset();
        ///
-       std::auto_ptr<InsetBase> clone() const;
-       ///
        void metrics(MetricsInfo & mi) const;
        ///
        void metrics(MetricsInfo & mi, Dimension &) const;
@@ -159,21 +155,21 @@ public:
        /// pulls cell after pressing erase
        void idxGlue(idx_type idx);
 
-       ///
+       /// add a row
        virtual void addRow(row_type r);
-       ///
+       /// delete a row
        virtual void delRow(row_type r);
-       ///
+       /// copy a row
        virtual void copyRow(row_type r);
-       ///
+       /// swap two rows
        virtual void swapRow(row_type r);
-       ///
+       /// add a column
        virtual void addCol(col_type c);
-       ///
+       /// delete a column
        virtual void delCol(col_type c);
-       ///
+       /// copy a column
        virtual void copyCol(col_type c);
-       ///
+       /// swap two columns
        virtual void swapCol(col_type c);
        ///
        virtual void appendRow();
@@ -211,8 +207,10 @@ public:
        //void octave(OctaveStream &) const;
 
 protected:
+       virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
        ///
-       void priv_dispatch(LCursor & cur, FuncRequest const & cmd);
+       bool getStatus(LCursor & cur, FuncRequest const & cmd,
+               FuncStatus & flag) const;
        /// returns x offset of cell compared to inset
        int cellXOffset(idx_type idx) const;
        /// returns y offset of cell compared to inset
@@ -227,14 +225,18 @@ protected:
        void splitCell(LCursor & cur);
 
 public:
-       /// row info
+       /// row info.
+       /// rowinfo_[nrows()] is a dummy row used only for hlines.
        std::vector<RowInfo> rowinfo_;
-       /// column info
+       /// column info.
+       /// colinfo_[ncols()] is a dummy column used only for vlines.
        std::vector<ColInfo> colinfo_;
        /// cell info
        std::vector<CellInfo> cellinfo_;
        ///
        char v_align_; // add approp. type
+private:
+       virtual std::auto_ptr<InsetBase> doClone() const;
 };
 
 #endif