mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 13:31:49 +00:00
* methods to cut off DocIterators and to append vectors of CursorSlices. This is used to keep the visual cursor position when folding/unfolding macros with the cursor in a parameter.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21323 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
6408f99b31
commit
6fa7710506
@ -401,19 +401,18 @@ bool DocIterator::hasPart(DocIterator const & it) const
|
||||
void DocIterator::updateInsets(Inset * inset)
|
||||
{
|
||||
// this function re-creates the cache of inset pointers.
|
||||
// code taken in part from StableDocIterator::asDocIterator.
|
||||
//lyxerr << "converting:\n" << *this << endl;
|
||||
DocIterator dit = DocIterator(*inset);
|
||||
DocIterator dit = *this;
|
||||
size_t const n = slices_.size();
|
||||
slices_.resize(0);
|
||||
for (size_t i = 0 ; i < n; ++i) {
|
||||
BOOST_ASSERT(inset);
|
||||
dit.push_back(slices_[i]);
|
||||
dit.top().inset_ = inset;
|
||||
push_back(dit[i]);
|
||||
top().inset_ = inset;
|
||||
if (i + 1 != n)
|
||||
inset = dit.nextInset();
|
||||
inset = nextInset();
|
||||
}
|
||||
//lyxerr << "converted:\n" << *this << endl;
|
||||
operator=(dit);
|
||||
}
|
||||
|
||||
|
||||
@ -471,6 +470,53 @@ bool DocIterator::fixIfBroken()
|
||||
}
|
||||
|
||||
|
||||
DocIterator::idx_type DocIterator::find(MathData const & cell) const
|
||||
{
|
||||
for (size_t l = 0; l != slices_.size(); ++l) {
|
||||
if (slices_[l].asInsetMath() && &slices_[l].cell() == &cell)
|
||||
return l;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
DocIterator::idx_type DocIterator::find(InsetMath const * inset) const
|
||||
{
|
||||
for (size_t l = 0; l != slices_.size(); ++l) {
|
||||
if (slices_[l].asInsetMath() == inset)
|
||||
return l;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void DocIterator::cutOff(DocIterator::idx_type above, std::vector<CursorSlice> & cut)
|
||||
{
|
||||
cut = std::vector<CursorSlice>(slices_.begin() + above + 1, slices_.end());
|
||||
slices_.resize(above + 1);
|
||||
}
|
||||
|
||||
|
||||
void DocIterator::cutOff(DocIterator::idx_type above)
|
||||
{
|
||||
slices_.resize(above + 1);
|
||||
}
|
||||
|
||||
|
||||
void DocIterator::append(std::vector<CursorSlice> const & x)
|
||||
{
|
||||
slices_.insert(slices_.end(), x.begin(), x.end());
|
||||
}
|
||||
|
||||
|
||||
void DocIterator::append(DocIterator::idx_type idx, pos_type pos)
|
||||
{
|
||||
slices_.push_back(CursorSlice());
|
||||
top().idx() = idx;
|
||||
top().pos() = pos;
|
||||
}
|
||||
|
||||
|
||||
std::ostream & operator<<(std::ostream & os, DocIterator const & dit)
|
||||
{
|
||||
for (size_t i = 0, n = dit.depth(); i != n; ++i)
|
||||
|
@ -212,6 +212,19 @@ public:
|
||||
/// \return true if the DocIterator was fixed.
|
||||
bool fixIfBroken();
|
||||
|
||||
/// find index of CursorSlice with &cell() == &cell (or -1 if not found)
|
||||
idx_type find(MathData const & cell) const;
|
||||
/// find index of CursorSlice with inset() == inset (or -1 of not found)
|
||||
idx_type find(InsetMath const * inset) const;
|
||||
/// cut off CursorSlices with index > above and store cut off slices in cut
|
||||
void cutOff(idx_type above, std::vector<CursorSlice> & cut);
|
||||
/// cut off CursorSlices with index > above
|
||||
void cutOff(idx_type above);
|
||||
/// push CursorSlices on top
|
||||
void append(std::vector<CursorSlice> const & x);
|
||||
/// push one CursorSlice on top and set its index and position
|
||||
void append(idx_type idx, pos_type pos);
|
||||
|
||||
private:
|
||||
/**
|
||||
* When the cursor position is i, is the cursor after the i-th char
|
||||
|
Loading…
Reference in New Issue
Block a user