mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 13:31:49 +00:00
* src/buffer_funcs.[Ch]
- updateCounters renamed to updateLabels - void updateLabels(Buffer const & buf, ParIterator & it): new convenience function - void updateLabels(Buffer const & buf, ParIterator & from, ParIterator & to): new convenience function - setCounter renamed to setLabel - bool tryToUpdateCurrentLabel(Buffer const & buf, ParIterator & it): new method - needsUpdateCounters: deleted * src/BufferView_pimpl.C * src/CutAndPaste.C * src/frontends/controllers/ControlDocument.C * src/lyxfunc.C * src/text.C * src/text2.C * src/text3.C - fixed the calls to updateLabels git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13689 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
a90ee19486
commit
f6bcac7285
@ -1236,7 +1236,7 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & cmd)
|
|||||||
lyx::toc::outline(op, buffer_, cursor_.pit());
|
lyx::toc::outline(op, buffer_, cursor_.pit());
|
||||||
bv_->text()->setCursor(cursor_, cursor_.pit(), 0);
|
bv_->text()->setCursor(cursor_, cursor_.pit(), 0);
|
||||||
buffer_->markDirty();
|
buffer_->markDirty();
|
||||||
updateCounters(*buffer_);
|
updateLabels(*buffer_);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,7 +516,7 @@ void cutSelection(LCursor & cur, bool doclear, bool realcut)
|
|||||||
|
|
||||||
// need a valid cursor. (Lgb)
|
// need a valid cursor. (Lgb)
|
||||||
cur.clearSelection();
|
cur.clearSelection();
|
||||||
updateCounters(cur.buffer());
|
updateLabels(cur.buffer());
|
||||||
|
|
||||||
// tell tabular that a recent copy happened
|
// tell tabular that a recent copy happened
|
||||||
dirtyTabularStack(false);
|
dirtyTabularStack(false);
|
||||||
@ -610,7 +610,7 @@ void pasteParagraphList(LCursor & cur, ParagraphList const & parlist,
|
|||||||
parlist, textclass,
|
parlist, textclass,
|
||||||
el);
|
el);
|
||||||
bufferErrors(cur.buffer(), el);
|
bufferErrors(cur.buffer(), el);
|
||||||
updateCounters(cur.buffer());
|
updateLabels(cur.buffer());
|
||||||
cur.clearSelection();
|
cur.clearSelection();
|
||||||
text->setCursor(cur, ppp.first, ppp.second);
|
text->setCursor(cur, ppp.first, ppp.second);
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,13 @@
|
|||||||
#include "support/fs_extras.h"
|
#include "support/fs_extras.h"
|
||||||
#include "support/lyxlib.h"
|
#include "support/lyxlib.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/filesystem/operations.hpp>
|
#include <boost/filesystem/operations.hpp>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
using lyx::pit_type;
|
using lyx::pit_type;
|
||||||
using lyx::support::bformat;
|
using lyx::support::bformat;
|
||||||
using lyx::support::libFileSearch;
|
using lyx::support::libFileSearch;
|
||||||
@ -346,8 +350,8 @@ bool needEnumCounterReset(ParIterator const & it)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// set the counter of a paragraph. This includes the labels
|
// set the label of a paragraph. This includes the counters.
|
||||||
void setCounter(Buffer const & buf, ParIterator & it)
|
void setLabel(Buffer const & buf, ParIterator & it)
|
||||||
{
|
{
|
||||||
Paragraph & par = *it;
|
Paragraph & par = *it;
|
||||||
BufferParams const & bufparams = buf.params();
|
BufferParams const & bufparams = buf.params();
|
||||||
@ -505,8 +509,12 @@ void setCounter(Buffer const & buf, ParIterator & it)
|
|||||||
} // anon namespace
|
} // anon namespace
|
||||||
|
|
||||||
|
|
||||||
bool needsUpdateCounters(Buffer const & buf, ParIterator & it)
|
bool updateCurrentLabel(Buffer const & buf,
|
||||||
|
ParIterator & it)
|
||||||
{
|
{
|
||||||
|
if (it == par_iterator_end(buf.inset()))
|
||||||
|
return true;
|
||||||
|
|
||||||
switch (it->layout()->labeltype) {
|
switch (it->layout()->labeltype) {
|
||||||
|
|
||||||
case LABEL_NO_LABEL:
|
case LABEL_NO_LABEL:
|
||||||
@ -516,24 +524,53 @@ bool needsUpdateCounters(Buffer const & buf, ParIterator & it)
|
|||||||
case LABEL_CENTERED_TOP_ENVIRONMENT:
|
case LABEL_CENTERED_TOP_ENVIRONMENT:
|
||||||
case LABEL_STATIC:
|
case LABEL_STATIC:
|
||||||
case LABEL_ITEMIZE:
|
case LABEL_ITEMIZE:
|
||||||
setCounter(buf, it);
|
setLabel(buf, it);
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
case LABEL_SENSITIVE:
|
case LABEL_SENSITIVE:
|
||||||
case LABEL_COUNTER:
|
case LABEL_COUNTER:
|
||||||
// do more things with enumerate later
|
// do more things with enumerate later
|
||||||
case LABEL_ENUMERATE:
|
case LABEL_ENUMERATE:
|
||||||
return true;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is dead code which get rid of a warning:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void updateLabels(Buffer const & buf,
|
||||||
|
ParIterator & from, ParIterator & to)
|
||||||
|
{
|
||||||
|
for (ParIterator it = from; it != to; ++it) {
|
||||||
|
if (it.pit() > it.lastpit())
|
||||||
|
return;
|
||||||
|
if (!updateCurrentLabel (buf, it)) {
|
||||||
|
updateLabels(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void updateCounters(Buffer const & buf)
|
void updateLabels(Buffer const & buf,
|
||||||
|
ParIterator & iter)
|
||||||
{
|
{
|
||||||
// start over
|
if (updateCurrentLabel(buf, iter))
|
||||||
|
return;
|
||||||
|
|
||||||
|
updateLabels(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void updateLabels(Buffer const & buf)
|
||||||
|
{
|
||||||
|
// start over the counters
|
||||||
buf.params().getLyXTextClass().counters().reset();
|
buf.params().getLyXTextClass().counters().reset();
|
||||||
|
|
||||||
for (ParIterator it = par_iterator_begin(buf.inset()); it; ++it) {
|
ParIterator const end = par_iterator_end(buf.inset());
|
||||||
|
|
||||||
|
for (ParIterator it = par_iterator_begin(buf.inset()); it != end; ++it) {
|
||||||
// reduce depth if necessary
|
// reduce depth if necessary
|
||||||
if (it.pit()) {
|
if (it.pit()) {
|
||||||
Paragraph const & prevpar = it.plist()[it.pit() - 1];
|
Paragraph const & prevpar = it.plist()[it.pit() - 1];
|
||||||
@ -543,7 +580,7 @@ void updateCounters(Buffer const & buf)
|
|||||||
it->params().depth(0);
|
it->params().depth(0);
|
||||||
|
|
||||||
// set the counter for this paragraph
|
// set the counter for this paragraph
|
||||||
setCounter(buf, it);
|
setLabel(buf, it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,15 +49,21 @@ int countWords(DocIterator const & from, DocIterator const & to);
|
|||||||
std::string expandLabel(Buffer const & buf, LyXLayout_ptr const & layout,
|
std::string expandLabel(Buffer const & buf, LyXLayout_ptr const & layout,
|
||||||
bool appendix);
|
bool appendix);
|
||||||
|
|
||||||
/// updates current counter and/or label if possible.
|
|
||||||
|
/// update labels at "iter".
|
||||||
/**
|
/**
|
||||||
\retval true if a full updateCounters is required.
|
A full updateLabels(Buffer const &) will be called if not possible.
|
||||||
\retval false if a full updateCounters is not required.
|
|
||||||
*/
|
*/
|
||||||
bool needsUpdateCounters(Buffer const & buf, ParIterator & it);
|
void updateLabels(Buffer const & buf, ParIterator & it);
|
||||||
|
|
||||||
|
/// update labels between "from" and "to" if possible.
|
||||||
|
/**
|
||||||
|
A full updateLabels(Buffer const &) will be called if not possible.
|
||||||
|
*/
|
||||||
|
void updateLabels(Buffer const & buf,
|
||||||
|
ParIterator & from, ParIterator & to);
|
||||||
|
|
||||||
/// updates all counters
|
/// updates all counters
|
||||||
void updateCounters(Buffer const &);
|
void updateLabels(Buffer const &);
|
||||||
|
|
||||||
|
|
||||||
#endif // BUFFER_FUNCS_H
|
#endif // BUFFER_FUNCS_H
|
||||||
|
@ -104,7 +104,7 @@ void ControlDocument::dispatchParams()
|
|||||||
|
|
||||||
// redo the numbering if necessary
|
// redo the numbering if necessary
|
||||||
if (new_secnumdepth != old_secnumdepth)
|
if (new_secnumdepth != old_secnumdepth)
|
||||||
updateCounters(kernel().buffer());
|
updateLabels(kernel().buffer());
|
||||||
|
|
||||||
// Generate the colours requested by each new branch.
|
// Generate the colours requested by each new branch.
|
||||||
BranchList & branchlist = params().branchlist();
|
BranchList & branchlist = params().branchlist();
|
||||||
|
@ -1564,7 +1564,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
|||||||
view()->setCursor(backcur.asDocIterator(&(buffer->inset())));
|
view()->setCursor(backcur.asDocIterator(&(buffer->inset())));
|
||||||
bufferErrors(*buffer, el);
|
bufferErrors(*buffer, el);
|
||||||
view()->showErrorList(_("Class switch"));
|
view()->showErrorList(_("Class switch"));
|
||||||
updateCounters(*buffer);
|
updateLabels(*buffer);
|
||||||
update = true;
|
update = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
11
src/text.C
11
src/text.C
@ -1090,11 +1090,11 @@ void LyXText::breakParagraph(LCursor & cur, bool keep_layout)
|
|||||||
pars_[next_par].erase(0);
|
pars_[next_par].erase(0);
|
||||||
|
|
||||||
ParIterator current_it(cur);
|
ParIterator current_it(cur);
|
||||||
ParIterator next_it(cur); next_it.pit() = next_par;
|
ParIterator last_it(cur);
|
||||||
|
++last_it;
|
||||||
|
++last_it;
|
||||||
|
|
||||||
if (needsUpdateCounters(cur.buffer(), current_it)
|
updateLabels(cur.buffer(), current_it, last_it);
|
||||||
|| needsUpdateCounters(cur.buffer(), next_it))
|
|
||||||
updateCounters(cur.buffer());
|
|
||||||
|
|
||||||
// Mark "carriage return" as inserted if change tracking:
|
// Mark "carriage return" as inserted if change tracking:
|
||||||
if (cur.buffer().params().tracking_changes) {
|
if (cur.buffer().params().tracking_changes) {
|
||||||
@ -1677,8 +1677,7 @@ bool LyXText::backspacePos0(LCursor & cur)
|
|||||||
|
|
||||||
// the counters may have changed
|
// the counters may have changed
|
||||||
ParIterator par_it(cur);
|
ParIterator par_it(cur);
|
||||||
if (needsUpdateCounters(cur.buffer(), par_it))
|
updateLabels(cur.buffer(), par_it);
|
||||||
updateCounters(cur.buffer());
|
|
||||||
|
|
||||||
setCursor(cur, cur.pit(), cur.pos(), false);
|
setCursor(cur, cur.pit(), cur.pos(), false);
|
||||||
}
|
}
|
||||||
|
14
src/text2.C
14
src/text2.C
@ -90,7 +90,7 @@ void LyXText::init(BufferView * bv)
|
|||||||
pars_[pit].rows().clear();
|
pars_[pit].rows().clear();
|
||||||
|
|
||||||
current_font = getFont(pars_[0], 0);
|
current_font = getFont(pars_[0], 0);
|
||||||
updateCounters(*bv->buffer());
|
updateLabels(*bv->buffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ void LyXText::setLayout(LCursor & cur, string const & layout)
|
|||||||
pit_type undopit = undoSpan(end - 1);
|
pit_type undopit = undoSpan(end - 1);
|
||||||
recUndo(start, undopit - 1);
|
recUndo(start, undopit - 1);
|
||||||
setLayout(start, end, layout);
|
setLayout(start, end, layout);
|
||||||
updateCounters(cur.buffer());
|
updateLabels(cur.buffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -419,7 +419,7 @@ void LyXText::changeDepth(LCursor & cur, DEPTH_CHANGE type)
|
|||||||
}
|
}
|
||||||
// this handles the counter labels, and also fixes up
|
// this handles the counter labels, and also fixes up
|
||||||
// depth values for follow-on (child) paragraphs
|
// depth values for follow-on (child) paragraphs
|
||||||
updateCounters(cur.buffer());
|
updateLabels(cur.buffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1274,9 +1274,11 @@ bool LyXText::deleteEmptyParagraphMechanism(LCursor & cur, LCursor & old)
|
|||||||
cur.resetAnchor();
|
cur.resetAnchor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ParIterator par_it(old);
|
// There is a crash reported by Edwin Leuven (16/04/2006) because of:
|
||||||
if (needsUpdateCounters(old.buffer(), par_it))
|
//ParIterator par_it(old);
|
||||||
updateCounters(old.buffer());
|
//updateLabels(old.buffer(), par_it);
|
||||||
|
// So for now we do the full update:
|
||||||
|
updateLabels(old.buffer());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,7 +342,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
|
|||||||
par.params().startOfAppendix(start);
|
par.params().startOfAppendix(start);
|
||||||
|
|
||||||
// we can set the refreshing parameters now
|
// we can set the refreshing parameters now
|
||||||
updateCounters(cur.buffer());
|
updateLabels(cur.buffer());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user