[LyX/master] Track changes in InsetCommands
Juergen Spitzmueller
spitz at lyx.org
Tue Dec 31 14:29:46 UTC 2019
commit 79674c7632ed6daf559dd1b0a82cdd981db1054a
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Tue Dec 31 15:46:03 2019 +0100
Track changes in InsetCommands
---
src/insets/InsetCommand.cpp | 32 ++++++++++++++++++++++++++++++--
src/insets/InsetCommand.h | 2 ++
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/src/insets/InsetCommand.cpp b/src/insets/InsetCommand.cpp
index 7693d08..1d67ad9 100644
--- a/src/insets/InsetCommand.cpp
+++ b/src/insets/InsetCommand.cpp
@@ -22,6 +22,7 @@
#include "FuncRequest.h"
#include "FuncStatus.h"
#include "Lexer.h"
+#include "LyX.h"
#include "MetricsInfo.h"
#include "texstream.h"
@@ -186,13 +187,33 @@ void InsetCommand::validate(LaTeXFeatures & features) const
}
+void InsetCommand::changeCmdName(string const & new_name)
+{
+ string const old_name = getCmdName();
+ if (old_name == new_name)
+ return;
+
+ if (buffer().masterParams().track_changes) {
+ // With change tracking, we insert a new inset and
+ // delete the old one
+ InsetCommandParams p(p_.code());
+ p = p_;
+ p.setCmdName(new_name);
+ string const data = InsetCommand::params2string(p);
+ lyx::dispatch(FuncRequest(LFUN_INSET_INSERT, data));
+ lyx::dispatch(FuncRequest(LFUN_CHAR_DELETE_FORWARD));
+ } else
+ p_.setCmdName(new_name);
+}
+
+
void InsetCommand::doDispatch(Cursor & cur, FuncRequest & cmd)
{
switch (cmd.action()) {
case LFUN_INSET_MODIFY: {
if (cmd.getArg(0) == "changetype") {
cur.recordUndo();
- p_.setCmdName(cmd.getArg(1));
+ changeCmdName(cmd.getArg(1));
cur.forceBufferUpdate();
initView();
break;
@@ -203,7 +224,14 @@ void InsetCommand::doDispatch(Cursor & cur, FuncRequest & cmd)
cur.noScreenUpdate();
else {
cur.recordUndo();
- setParams(p);
+ if (buffer().masterParams().track_changes) {
+ // With change tracking, we insert a new inset and
+ // delete the old one
+ string const data = InsetCommand::params2string(p);
+ lyx::dispatch(FuncRequest(LFUN_INSET_INSERT, data));
+ lyx::dispatch(FuncRequest(LFUN_CHAR_DELETE_FORWARD));
+ } else
+ setParams(p);
}
// FIXME We might also want to check here if this one is in the TOC.
// But I think most of those are labeled.
diff --git a/src/insets/InsetCommand.h b/src/insets/InsetCommand.h
index f51f8c9..d450a66 100644
--- a/src/insets/InsetCommand.h
+++ b/src/insets/InsetCommand.h
@@ -118,6 +118,8 @@ protected:
/// What matters here is the parameter name, not position.
/// \see InsetCommandParams::setCmdName
void setCmdName(std::string const & n) { p_.setCmdName(n); }
+ ///
+ void changeCmdName(std::string const & new_name);
//@}
private:
More information about the lyx-cvs
mailing list