]> git.lyx.org Git - lyx.git/blobdiff - src/Text2.cpp
GuiTabular.cpp: don't hardcode decimal align combobox item
[lyx.git] / src / Text2.cpp
index 184de7b3a9e34057c47dfddec1736fd03b4b2382..1741028dfdc6d68bb3f033e039e6ff42f138ebdb 100644 (file)
@@ -76,16 +76,7 @@ FontInfo Text::layoutFont(pit_type const pit) const
                // In case the default family has been customized
                if (layout.font.family() == INHERIT_FAMILY)
                        lf.setFamily(owner_->buffer().params().getFont().fontInfo().family());
-               // FIXME
-               // It ought to be possible here just to use Inset::getLayout() and skip
-               // the asInsetCollapsable() bit. Unfortunatley, that doesn't work right
-               // now, because Inset::getLayout() will return a default-constructed
-               // InsetLayout, and that e.g. sets the foreground color to red. So we
-               // need to do some work to make that possible.
-               InsetCollapsable const * icp = owner_->asInsetCollapsable();
-               if (!icp)
-                       return lf;
-               FontInfo icf = icp->getLayout().font();
+               FontInfo icf = owner_->getLayout().font();
                icf.realize(lf);
                return icf;
        }
@@ -182,25 +173,6 @@ void Text::setInsetFont(BufferView const & bv, pit_type pit,
 }
 
 
-// return past-the-last paragraph influenced by a layout change on pit
-pit_type Text::undoSpan(pit_type pit)
-{
-       pit_type const end = paragraphs().size();
-       pit_type nextpit = pit + 1;
-       if (nextpit == end)
-               return nextpit;
-       //because of parindents
-       if (!pars_[pit].getDepth())
-               return boost::next(nextpit);
-       //because of depth constrains
-       for (; nextpit != end; ++pit, ++nextpit) {
-               if (!pars_[pit].getDepth())
-                       break;
-       }
-       return nextpit;
-}
-
-
 void Text::setLayout(pit_type start, pit_type end,
                     docstring const & layout)
 {
@@ -226,8 +198,7 @@ void Text::setLayout(Cursor & cur, docstring const & layout)
 
        pit_type start = cur.selBegin().pit();
        pit_type end = cur.selEnd().pit() + 1;
-       pit_type undopit = undoSpan(end - 1);
-       recUndo(cur, start, undopit - 1);
+       cur.recordUndoSelection();
        setLayout(start, end, layout);
        cur.forceBufferUpdate();
 }
@@ -482,31 +453,31 @@ docstring Text::getStringToIndex(Cursor const & cur)
 }
 
 
-void Text::setLabelWidthStringToSequence(pit_type const par_offset,
+void Text::setLabelWidthStringToSequence(Cursor const & cur,
                docstring const & s)
 {
-       pit_type offset = par_offset;
+       Cursor c = cur;
        // Find first of same layout in sequence
-       while (!isFirstInSequence(offset)) {
-               offset = depthHook(offset, pars_[offset].getDepth());
+       while (!isFirstInSequence(c.pit())) {
+               c.pit() = depthHook(c.pit(), c.paragraph().getDepth());
        }
 
        // now apply label width string to every par
        // in sequence
-       pit_type const end = pars_.size();
-       depth_type const depth = pars_[offset].getDepth();
-       Layout const & layout = pars_[offset].layout();
-       for (pit_type pit = offset; pit != end; ++pit) {
-               while (pars_[pit].getDepth() > depth) {
-                       ++pit;
-                       if (pit == end)
+       depth_type const depth = c.paragraph().getDepth();
+       Layout const & layout = c.paragraph().layout();
+       for ( ; c.pit() <= c.lastpit() ; ++c.pit()) {
+               while (c.paragraph().getDepth() > depth) {
+                       ++c.pit();
+                       if (c.pit() > c.lastpit())
                                return;
                }
-               if (pars_[pit].getDepth() < depth)
+               if (c.paragraph().getDepth() < depth)
                        return;
-               if (pars_[pit].layout() != layout)
+               if (c.paragraph().layout() != layout)
                        return;
-               pars_[pit].setLabelWidthString(s);
+               c.recordUndo();
+               c.paragraph().setLabelWidthString(s);
        }
 }
 
@@ -514,26 +485,25 @@ void Text::setLabelWidthStringToSequence(pit_type const par_offset,
 void Text::setParagraphs(Cursor & cur, docstring arg, bool merge) 
 {
        LASSERT(cur.text(), /**/);
-       // make sure that the depth behind the selection are restored, too
-       pit_type undopit = undoSpan(cur.selEnd().pit());
-       recUndo(cur, cur.selBegin().pit(), undopit - 1);
 
        //FIXME UNICODE
        string const argument = to_utf8(arg);
        depth_type priordepth = -1;
        Layout priorlayout;
-       for (pit_type pit = cur.selBegin().pit(), end = cur.selEnd().pit();
-            pit <= end; ++pit) {
-               Paragraph & par = pars_[pit];
+       Cursor c(cur.bv());
+       c.setCursor(cur.selectionBegin());
+       for ( ; c <= cur.selectionEnd() ; ++c.pit()) {
+               Paragraph & par = c.paragraph();
                ParagraphParameters params = par.params();
                params.read(argument, merge);
                // Changes to label width string apply to all paragraphs
                // with same layout in a sequence.
                // Do this only once for a selected range of paragraphs
                // of the same layout and depth.
-               if (par.getDepth() != priordepth || par.layout() != priorlayout)
-                       setLabelWidthStringToSequence(pit, params.labelWidthString());
+               cur.recordUndo();
                par.params().apply(params, par.layout());
+               if (par.getDepth() != priordepth || par.layout() != priorlayout)
+                       setLabelWidthStringToSequence(c, params.labelWidthString());
                priordepth = par.getDepth();
                priorlayout = par.layout();
        }
@@ -546,23 +516,22 @@ void Text::setParagraphs(Cursor & cur, docstring arg, bool merge)
 void Text::setParagraphs(Cursor & cur, ParagraphParameters const & p) 
 {
        LASSERT(cur.text(), /**/);
-       // make sure that the depth behind the selection are restored, too
-       pit_type undopit = undoSpan(cur.selEnd().pit());
-       recUndo(cur, cur.selBegin().pit(), undopit - 1);
 
        depth_type priordepth = -1;
        Layout priorlayout;
-       for (pit_type pit = cur.selBegin().pit(), end = cur.selEnd().pit();
-            pit <= end; ++pit) {
-               Paragraph & par = pars_[pit];
+       Cursor c(cur.bv());
+       c.setCursor(cur.selectionBegin());
+       for ( ; c < cur.selectionEnd() ; ++c.pit()) {
+               Paragraph & par = c.paragraph();
                // Changes to label width string apply to all paragraphs
                // with same layout in a sequence.
                // Do this only once for a selected range of paragraphs
                // of the same layout and depth.
+               cur.recordUndo();
+               par.params().apply(p, par.layout());
                if (par.getDepth() != priordepth || par.layout() != priorlayout)
-                       setLabelWidthStringToSequence(pit,
+                       setLabelWidthStringToSequence(c,
                                par.params().labelWidthString());
-               par.params().apply(p, par.layout());
                priordepth = par.getDepth();
                priorlayout = par.layout();
        }