mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 11:16:55 +00:00
add label/refs validation on pasting.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23407 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
eef138f77b
commit
ffc4554815
@ -37,6 +37,7 @@
|
||||
#include "Undo.h"
|
||||
|
||||
#include "insets/InsetFlex.h"
|
||||
#include "insets/InsetCommand.h"
|
||||
#include "insets/InsetGraphics.h"
|
||||
#include "insets/InsetGraphicsParams.h"
|
||||
#include "insets/InsetTabular.h"
|
||||
@ -212,14 +213,36 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
|
||||
// A couple of insets store buffer references so need updating.
|
||||
insertion.swap(in.paragraphs());
|
||||
|
||||
ParIterator fpit = par_iterator_begin(in);
|
||||
ParIterator fend = par_iterator_end(in);
|
||||
InsetIterator const i_end = inset_iterator_end(in);
|
||||
|
||||
for (; fpit != fend; ++fpit) {
|
||||
InsetList::const_iterator it = fpit->insetList().begin();
|
||||
InsetList::const_iterator et = fpit->insetList().end();
|
||||
for (; it != et; ++it)
|
||||
it->inset->setBuffer(const_cast<Buffer &>(buffer));
|
||||
for (InsetIterator it = inset_iterator_begin(in); it != i_end; ++it) {
|
||||
|
||||
it->setBuffer(const_cast<Buffer &>(buffer));
|
||||
|
||||
switch (it->lyxCode()) {
|
||||
|
||||
case LABEL_CODE: {
|
||||
// check for duplicates
|
||||
InsetCommand & lab = static_cast<InsetCommand &>(*it);
|
||||
docstring const oldname = lab.getParam("name");
|
||||
lab.update(oldname, false);
|
||||
docstring const newname = lab.getParam("name");
|
||||
if (oldname != newname) {
|
||||
// adapt the references
|
||||
for (InsetIterator itt = inset_iterator_begin(in); itt != i_end; ++itt) {
|
||||
if (itt->lyxCode() == REF_CODE) {
|
||||
InsetCommand & ref = dynamic_cast<InsetCommand &>(*itt);
|
||||
if (ref.getParam("reference") == oldname)
|
||||
ref.setParam("reference", newname);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break; // nothing
|
||||
}
|
||||
}
|
||||
insertion.swap(in.paragraphs());
|
||||
|
||||
|
@ -85,6 +85,8 @@ public:
|
||||
/// Whether this is a command this inset can represent.
|
||||
/// Not implemented here. Must be implemented in derived class.
|
||||
static bool isCompatibleCommand(std::string const & cmd);
|
||||
/// update label and references. Currently used by InsetLabel.
|
||||
virtual void update(docstring const &, bool) {};
|
||||
|
||||
protected:
|
||||
///
|
||||
|
@ -49,7 +49,7 @@ void InsetLabel::validate()
|
||||
}
|
||||
|
||||
|
||||
void InsetLabel::update(docstring const & new_label)
|
||||
void InsetLabel::update(docstring const & new_label, bool updaterefs)
|
||||
{
|
||||
docstring const old_label = getParam("name");
|
||||
docstring label = new_label;
|
||||
@ -68,11 +68,13 @@ void InsetLabel::update(docstring const & new_label)
|
||||
|
||||
setParam("name", label);
|
||||
|
||||
Buffer::References const & refs = buffer().references(old_label);
|
||||
Buffer::References::const_iterator it = refs.begin();
|
||||
Buffer::References::const_iterator end = refs.end();
|
||||
for (; it != end; ++it)
|
||||
it->first->setParam("reference", label);
|
||||
if (updaterefs) {
|
||||
Buffer::References const & refs = buffer().references(old_label);
|
||||
Buffer::References::const_iterator it = refs.begin();
|
||||
Buffer::References::const_iterator end = refs.end();
|
||||
for (; it != end; ++it)
|
||||
it->first->setParam("reference", label);
|
||||
}
|
||||
|
||||
// We need an update of the Buffer reference cache. This is achieved by
|
||||
// updateLabel().
|
||||
|
@ -53,14 +53,14 @@ public:
|
||||
void updateLabels(ParIterator const & it);
|
||||
///
|
||||
void addToToc(ParConstIterator const &) const;
|
||||
///
|
||||
void update(docstring const & new_label, bool updaterefs = true);
|
||||
protected:
|
||||
///
|
||||
void doDispatch(Cursor & cur, FuncRequest & cmd);
|
||||
private:
|
||||
///
|
||||
Inset * clone() const { return new InsetLabel(*this); }
|
||||
///
|
||||
void update(docstring const & new_label);
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user