From e38ca152a4a4ec5f47ab4061a4e642708e684d8a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Mon, 25 May 2009 07:52:55 +0000 Subject: [PATCH] * paragraph_funcs.{cpp,h}: - new member setLabelWidthStringToSequence * Text2.cpp (setParagraphs): - use that. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29839 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Text2.cpp | 8 ++++++++ src/paragraph_funcs.cpp | 27 +++++++++++++++++++++++++++ src/paragraph_funcs.h | 6 ++++++ 3 files changed, 41 insertions(+) diff --git a/src/Text2.cpp b/src/Text2.cpp index b32f3a0526..9da71eb76e 100644 --- a/src/Text2.cpp +++ b/src/Text2.cpp @@ -449,6 +449,10 @@ void Text::setParagraphs(Cursor & cur, docstring arg, bool merge) Paragraph & par = pars_[pit]; ParagraphParameters params = par.params(); params.read(argument, merge); + // changes to label width string apply to all + // paragraph with same layout in a sequence + setLabelWidthStringToSequence(pit, pars_, + params.labelWidthString()); par.params().apply(params, par.layout()); } } @@ -467,6 +471,10 @@ void Text::setParagraphs(Cursor & cur, ParagraphParameters const & p) for (pit_type pit = cur.selBegin().pit(), end = cur.selEnd().pit(); pit <= end; ++pit) { Paragraph & par = pars_[pit]; + // changes to label width string apply to all + // paragraph with same layout in a sequence + setLabelWidthStringToSequence(pit, pars_, + par.params().labelWidthString()); par.params().apply(p, par.layout()); } } diff --git a/src/paragraph_funcs.cpp b/src/paragraph_funcs.cpp index 0459ed7911..0d626e3d64 100644 --- a/src/paragraph_funcs.cpp +++ b/src/paragraph_funcs.cpp @@ -256,6 +256,33 @@ bool isFirstInSequence(pit_type par_offset, ParagraphList const & pars) } +void setLabelWidthStringToSequence(pit_type par_offset, + ParagraphList & pars, docstring const & s) +{ + Paragraph & par = pars[par_offset]; + // Find first of same layout in sequence + while (!isFirstInSequence(par_offset, pars)) { + par_offset = depthHook(par_offset, pars, par.getDepth()); + par = pars[par_offset]; + } + + // now apply label width string to every par + // in sequence + pit_type const end = pars.size(); + depth_type const depth = par.getDepth(); + Layout const & layout = par.layout(); + for (pit_type pit = par_offset; pit != end; ++pit) { + while (pars[pit].getDepth() > depth) + ++pit; + if (pars[pit].getDepth() < depth) + return; + if (pars[pit].layout() != layout) + return; + pars[pit].setLabelWidthString(s); + } +} + + int getEndLabel(pit_type p, ParagraphList const & pars) { pit_type pit = p; diff --git a/src/paragraph_funcs.h b/src/paragraph_funcs.h index fa9aba2078..e41fc455e6 100644 --- a/src/paragraph_funcs.h +++ b/src/paragraph_funcs.h @@ -12,6 +12,7 @@ #ifndef PARAGRAPH_FUNCS_H #define PARAGRAPH_FUNCS_H +#include "support/docstring.h" #include "support/types.h" @@ -60,6 +61,11 @@ pit_type outerHook(pit_type par, ParagraphList const & plist); /// Is it the first par with same depth and layout? bool isFirstInSequence(pit_type par, ParagraphList const & plist); +/** Set Label Width string to all paragraphs of the same layout + and depth in a sequence */ +void setLabelWidthStringToSequence(pit_type par_offset, + ParagraphList & pars, docstring const & s); + /** Check if the current paragraph is the last paragraph in a proof environment */ int getEndLabel(pit_type par, ParagraphList const & plist); -- 2.39.2