Erase all the middle pars in one go


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10338 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2005-07-19 13:17:01 +00:00
parent 0a32e0c357
commit 5570211e7b
2 changed files with 21 additions and 34 deletions

View File

@ -1,3 +1,9 @@
2005-07-19 Lars Gullik Bjønnes <larsbj@lyx.org>
bug 1920
* CutAndPaste.C (eraseSelectionHelper): erase all the "middle"
pars in one go.
2005-07-18 Lars Gullik Bjønnes <larsbj@lyx.org> 2005-07-18 Lars Gullik Bjønnes <larsbj@lyx.org>
* messages.C: supress some lyxerr messages * messages.C: supress some lyxerr messages

View File

@ -253,40 +253,33 @@ PitPosPair eraseSelectionHelper(BufferParams const & params,
pit_type startpit, pit_type endpit, pit_type startpit, pit_type endpit,
int startpos, int endpos, bool doclear) int startpos, int endpos, bool doclear)
{ {
// Start of selection is really invalid.
if (startpit == pit_type(pars.size()) || if (startpit == pit_type(pars.size()) ||
(startpos > pars[startpit].size())) (startpos > pars[startpit].size()))
return PitPosPair(endpit, endpos); return PitPosPair(endpit, endpos);
// Start and end is inside same paragraph
if (endpit == pit_type(pars.size()) || if (endpit == pit_type(pars.size()) ||
startpit == endpit) { startpit == endpit) {
endpos -= pars[startpit].erase(startpos, endpos); endpos -= pars[startpit].erase(startpos, endpos);
return PitPosPair(endpit, endpos); return PitPosPair(endpit, endpos);
} }
// clear end/begin fragments of the first/last par in selection
bool all_erased = true; bool all_erased = true;
// Clear fragments of the first par in selection
pars[startpit].erase(startpos, pars[startpit].size()); pars[startpit].erase(startpos, pars[startpit].size());
if (pars[startpit].size() != startpos) if (pars[startpit].size() != startpos)
all_erased = false; all_erased = false;
// Clear fragments of the last par in selection
endpos -= pars[endpit].erase(0, endpos); endpos -= pars[endpit].erase(0, endpos);
if (endpos != 0) if (endpos != 0)
all_erased = false; all_erased = false;
// Loop through the deleted pars if any, erasing as needed // Erase all the "middle" paragraphs.
for (pit_type pit = startpit + 1; pit != endpit;) { pars.erase(pars.begin() + startpit + 1, pars.begin() + endpit);
// "erase" the contents of the par endpit = startpit + 1;
pars[pit].erase(0, pars[pit].size());
if (!pars[pit].size()) {
// remove the par if it's now empty
pars.erase(pars.begin() + pit);
--endpit;
} else {
++pit;
all_erased = false;
}
}
#if 0 // FIXME: why for cut but not copy ? #if 0 // FIXME: why for cut but not copy ?
// the cut selection should begin with standard layout // the cut selection should begin with standard layout
@ -304,18 +297,17 @@ PitPosPair eraseSelectionHelper(BufferParams const & params,
pars[startpit + 1].stripLeadingSpaces(); pars[startpit + 1].stripLeadingSpaces();
} }
// paste the paragraphs again, if possible // Merge first and last paragraph, if possible
if (all_erased && if (all_erased &&
(pars[startpit].hasSameLayout(pars[startpit + 1]) || (pars[startpit].hasSameLayout(pars[startpit + 1]) ||
pars[startpit + 1].empty())) { pars[startpit + 1].empty())) {
mergeParagraph(params, pars, startpit); mergeParagraph(params, pars, startpit);
// this because endpar gets deleted here! // This because endpar gets deleted here!
endpit = startpit; endpit = startpit;
endpos = startpos; endpos = startpos;
} }
return PitPosPair(endpit, endpos); return PitPosPair(endpit, endpos);
} }
@ -329,6 +321,7 @@ void copySelectionHelper(ParagraphList & pars,
// Clone the paragraphs within the selection. // Clone the paragraphs within the selection.
ParagraphList paragraphs(pars.begin() + startpit, pars.begin() + endpit + 1); ParagraphList paragraphs(pars.begin() + startpit, pars.begin() + endpit + 1);
for_each(paragraphs.begin(), paragraphs.end(), resetOwnerAndChanges()); for_each(paragraphs.begin(), paragraphs.end(), resetOwnerAndChanges());
// Cut out the end of the last paragraph. // Cut out the end of the last paragraph.
@ -342,18 +335,6 @@ void copySelectionHelper(ParagraphList & pars,
theCuts.push(make_pair(paragraphs, tc)); theCuts.push(make_pair(paragraphs, tc));
} }
PitPosPair cutSelectionHelper(BufferParams const & params,
ParagraphList & pars, pit_type startpit, pit_type endpit,
int startpos, int endpos, textclass_type tc, bool doclear)
{
copySelectionHelper(pars, startpit, endpit, startpos, endpos, tc);
return eraseSelectionHelper(params, pars, startpit, endpit,
startpos, endpos, doclear);
}
} // namespace anon } // namespace anon
@ -490,7 +471,7 @@ void cutSelection(LCursor & cur, bool doclear, bool realcut)
// finished. The solution used currently just works, to make it // finished. The solution used currently just works, to make it
// faster we need to be more clever and probably also have more // faster we need to be more clever and probably also have more
// calls to stuffClipboard. (Lgb) // calls to stuffClipboard. (Lgb)
cur.bv().stuffClipboard(cur.selectionAsString(true)); // cur.bv().stuffClipboard(cur.selectionAsString(true));
// This doesn't make sense, if there is no selection // This doesn't make sense, if there is no selection
if (!cur.selection()) if (!cur.selection())
@ -615,10 +596,10 @@ void pasteSelection(LCursor & cur, size_t sel_index)
boost::tie(ppp, endpit) = boost::tie(ppp, endpit) =
pasteSelectionHelper(cur.buffer(), pasteSelectionHelper(cur.buffer(),
text->paragraphs(), text->paragraphs(),
cur.pit(), cur.pos(), cur.pit(), cur.pos(),
cur.buffer().params().textclass, cur.buffer().params().textclass,
sel_index, el); sel_index, el);
bufferErrors(cur.buffer(), el); bufferErrors(cur.buffer(), el);
cur.bv().showErrorList(_("Paste")); cur.bv().showErrorList(_("Paste"));