JMarc's changes to the painting routines seem to have made it very easy now to implement an oft-requested feature: to be able to hide changes in the LyX display. The attached patch does this. There is at least one bug: If an entire paragraph is deleted, it shows as an empty line. I'm not sure how to fix that.
Note that this patch disables operations on changes (accepting, rejecting, etc) when changes are not shown. This seems sensible, since you can't actually see what you are doing. For the same sort of reason, the Changes TOC is hidden when changes are not shown. Riki
>From 005c1022cffd8756bb74a649fe94565b0a0974ff Mon Sep 17 00:00:00 2001 From: Richard Kimberly Heck <rikih...@lyx.org> Date: Wed, 2 May 2018 22:31:57 -0400 Subject: [PATCH] Allow to hide changes in the LyX display. --- lib/Makefile.am | 2 ++ lib/images/changes-display.svgz | Bin 0 -> 3496 bytes lib/images/oxygen/changes-display.svgz | Bin 0 -> 6385 bytes lib/ui/stdmenus.inc | 3 ++- lib/ui/stdtoolbars.inc | 1 + src/Buffer.cpp | 13 +++++++++++++ src/BufferParams.cpp | 7 +++++++ src/BufferParams.h | 2 ++ src/BufferView.cpp | 3 ++- src/Changes.cpp | 2 +- src/FuncCode.h | 2 ++ src/LyXAction.cpp | 8 ++++++++ src/RowPainter.cpp | 18 ++++++++++++++---- src/RowPainter.h | 3 ++- src/Text3.cpp | 16 ++++++++++------ src/TextMetrics.cpp | 5 +++++ 16 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 lib/images/changes-display.svgz create mode 100644 lib/images/oxygen/changes-display.svgz diff --git a/lib/Makefile.am b/lib/Makefile.am index 2b3ea9a0d9..67957abd4e 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -445,6 +445,7 @@ dist_images_DATA1X = \ images/change-accept.svgz \ images/change-next.svgz \ images/change-reject.svgz \ + images/changes-display.svgz \ images/changes-merge.svgz \ images/changes-output.svgz \ images/changes-track.svgz \ @@ -1726,6 +1727,7 @@ dist_imagesoxygen_DATA1X = \ images/oxygen/change-accept.svgz \ images/oxygen/change-next.svgz \ images/oxygen/change-reject.svgz \ + images/oxygen/changes-display.svgz \ images/oxygen/changes-merge.svgz \ images/oxygen/changes-output.svgz \ images/oxygen/changes-track.svgz \ diff --git a/lib/images/changes-display.svgz b/lib/images/changes-display.svgz new file mode 100644 index 0000000000000000000000000000000000000000..2127a7da44d396e3bfa71a924199515fc4b55fcf GIT binary patch literal 3496 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 W85#YY({{?cSN{dgW90ERIsgDQH@Bw% literal 0 HcmV?d00001 diff --git a/lib/images/oxygen/changes-display.svgz b/lib/images/oxygen/changes-display.svgz new file mode 100644 index 0000000000000000000000000000000000000000..2d6bf2693bf8e61c2273b8caf2b5e24ba30e68e9 GIT binary patch literal 6385 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 literal 0 HcmV?d00001 diff --git a/lib/ui/stdmenus.inc b/lib/ui/stdmenus.inc index 1bed2393ae..cda6917ab6 100644 --- a/lib/ui/stdmenus.inc +++ b/lib/ui/stdmenus.inc @@ -558,7 +558,8 @@ Menuset Item "Reject Change|R" "change-reject" Item "Accept All Changes|c" "all-changes-accept" Item "Reject All Changes|e" "all-changes-reject" - Item "Show Changes in Output|S" "changes-output" + Item "Show Changes on Screen|S" "changes-display" + Item "Show Changes in Output|O" "changes-output" End # diff --git a/lib/ui/stdtoolbars.inc b/lib/ui/stdtoolbars.inc index 54bea8abc9..f1145d9268 100644 --- a/lib/ui/stdtoolbars.inc +++ b/lib/ui/stdtoolbars.inc @@ -235,6 +235,7 @@ ToolbarSet Toolbar "review" "Review[[Toolbar]]" Item "Track changes" "changes-track" + Item "Show changes on screen" "changes-display" Item "Show changes in output" "changes-output" Separator Item "Next change" "change-next" diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 043f0cc9a7..1d8f6e105c 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -2623,6 +2623,11 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag) flag.setOnOff(params().output_changes); break; + case LFUN_CHANGES_DISPLAY: + flag.setEnabled(true); + flag.setOnOff(params().display_changes); + break; + case LFUN_BUFFER_TOGGLE_COMPRESSION: flag.setOnOff(params().compressed); break; @@ -2893,6 +2898,14 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) } break; + case LFUN_CHANGES_DISPLAY: + if (params().save_transient_properties) + undo().recordUndoBufferParams(CursorData()); + params().display_changes = !params().display_changes; + updateBuffer(); + changed(true); + break; + case LFUN_BUFFER_TOGGLE_COMPRESSION: // turn compression on/off undo().recordUndoBufferParams(CursorData()); diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 7211f12b83..35c1b3bc2c 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -447,6 +447,7 @@ BufferParams::BufferParams() notefontcolor = lyx::rgbFromHexName("#cccccc"); boxbgcolor = lyx::rgbFromHexName("#ff0000"); compressed = lyxrc.save_compressed; + display_changes = true; for (int iter = 0; iter < 4; ++iter) { user_defined_bullet(iter) = ITEMIZE_DEFAULTS[iter]; temp_bullet(iter) = ITEMIZE_DEFAULTS[iter]; @@ -927,6 +928,8 @@ string BufferParams::readToken(Lexer & lex, string const & token, lex >> use_indices; } else if (token == "\\tracking_changes") { lex >> track_changes; + } else if (token == "\\showing_changes") { + lex >> display_changes; } else if (token == "\\output_changes") { lex >> output_changes; } else if (token == "\\branch") { @@ -1426,6 +1429,10 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const << (save_transient_properties ? convert<string>(track_changes) : "false") << '\n'; + os << "\\showing_changes " + << (save_transient_properties ? convert<string>(display_changes) : "true") + << '\n'; + os << "\\output_changes " << (save_transient_properties ? convert<string>(output_changes) : "false") << '\n'; diff --git a/src/BufferParams.h b/src/BufferParams.h index bc5c10d194..ad98dcacad 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -417,6 +417,8 @@ public: * This is a transient property. */ bool output_changes; + /// whether to show changes on screen + bool display_changes; /// bool compressed; diff --git a/src/BufferView.cpp b/src/BufferView.cpp index b8bc705434..9a389d9aa4 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1176,7 +1176,8 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) case LFUN_CHANGE_PREVIOUS: case LFUN_ALL_CHANGES_ACCEPT: case LFUN_ALL_CHANGES_REJECT: - flag.setEnabled(buffer_.areChangesPresent()); + flag.setEnabled(buffer_.params().display_changes && + buffer_.areChangesPresent()); break; case LFUN_SCREEN_UP: diff --git a/src/Changes.cpp b/src/Changes.cpp index b4226582f4..e9d63098f4 100644 --- a/src/Changes.cpp +++ b/src/Changes.cpp @@ -480,7 +480,7 @@ void Changes::checkAuthors(AuthorList const & authorList) void Changes::addToToc(DocIterator const & cdit, Buffer const & buffer, bool output_active, TocBackend & backend) const { - if (table_.empty()) + if (table_.empty() || !buffer.params().display_changes) return; shared_ptr<Toc> change_list = backend.toc("change"); diff --git a/src/FuncCode.h b/src/FuncCode.h index f19a3e6095..376c076ca4 100644 --- a/src/FuncCode.h +++ b/src/FuncCode.h @@ -479,6 +479,8 @@ enum FuncCode LFUN_BUFFER_ANONYMIZE, // sanda, 20180201 LFUN_GRAPHICS_UNIFY, // sanda, 20180207 LFUN_MASTER_BUFFER_EXPORT, // rkh, 20180417 + LFUN_CHANGES_DISPLAY, // rkh, 20180502 + // 375 LFUN_LASTACTION // end of the table }; diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index 6e7c96a39c..f8c3607fe1 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -1015,6 +1015,14 @@ void LyXAction::init() */ { LFUN_CELL_SPLIT, "cell-split", Noop, Edit }, +/*! + * \var lyx::FuncCode lyx::LFUN_CHANGES_DISPLAY + * \li Action: Toggles showing of changes on screen. + * \li Syntax: changes-display + * \li Origin: rkh, 2 May 2018 + * \endvar + */ + { LFUN_CHANGES_DISPLAY, "changes-display", Noop, Edit }, /*! * \var lyx::FuncCode lyx::LFUN_CHANGES_MERGE diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp index f093805213..16663378b7 100644 --- a/src/RowPainter.cpp +++ b/src/RowPainter.cpp @@ -222,10 +222,10 @@ void RowPainter::paintStringAndSel(Row::Element const & e) const bool const all_sel = (e.pos >= row_.sel_beg && e.endpos < row_.sel_end) || pi_.selected; - if (all_sel || e.change.changed()) { + if (all_sel || (displayChanges() && e.change.changed())) { Font copy = e.font; - Color const col = e.change.changed() ? e.change.color() - : Color_selectiontext; + Color const col = displayChanges() && e.change.changed() ? + e.change.color() : Color_selectiontext; copy.fontInfo().setPaintColor(col); pi_.pain.text(int(x_), yo_, e.str, copy, e.extra, e.full_width()); } else if (!some_sel) { @@ -241,12 +241,16 @@ void RowPainter::paintStringAndSel(Row::Element const & e) const void RowPainter::paintChange(Row::Element const & e) const { - e.change.paintCue(pi_, x_, yo_, x_ + e.full_width(), e.font.fontInfo()); + if (displayChanges()) + e.change.paintCue(pi_, x_, yo_, x_ + e.full_width(), e.font.fontInfo()); } void RowPainter::paintChangeBar() const { + if (!displayChanges()) + return; + int const height = tm_.isLastRow(row_) ? row_.ascent() : row_.height(); @@ -430,6 +434,12 @@ void RowPainter::paintTopLevelLabel() const pi_.pain.text(int(x), yo_ - maxdesc - labeladdon, str, font); } +bool RowPainter::displayChanges() const +{ + return pi_.base.bv && + pi_.base.bv->buffer().params().display_changes; +} + /** Check if the current paragraph is the last paragraph in a proof environment */ diff --git a/src/RowPainter.h b/src/RowPainter.h index 20febee826..300b9d28c9 100644 --- a/src/RowPainter.h +++ b/src/RowPainter.h @@ -71,7 +71,8 @@ private: void paintLabel() const; /// void paintTopLevelLabel() const; - + /// + bool displayChanges() const; /// contains painting related information. PainterInfo & pi_; diff --git a/src/Text3.cpp b/src/Text3.cpp index 572e4bdd92..4da222d939 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -3196,12 +3196,16 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, // However, without proper optimizations, this will inevitably // result in unacceptable performance - just imagine a user who // wants to select the complete content of a long document. - if (!cur.selection()) - enable = cur.paragraph().isChanged(cur.pos()); - else - // TODO: context-sensitive enabling of LFUN_CHANGE_ACCEPT/REJECT - // for selections. - enable = true; + if (!cur.buffer()->params().display_changes) + enable = false; + else { + if (!cur.selection()) + enable = cur.paragraph().isChanged(cur.pos()); + else + // TODO: context-sensitive enabling of LFUN_CHANGE_ACCEPT/REJECT + // for selections. + enable = true; + } break; case LFUN_OUTLINE_UP: diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index d23c09d29b..65c74de9b1 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -863,6 +863,11 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const pos_type i = pos; FontIterator fi = FontIterator(*this, par, row.pit(), pos); while (i < end && (i == pos || row.width() <= width)) { + if (par.lookupChange(i).deleted() && + !bv_->buffer().params().display_changes) { + ++i; + continue; + } char_type c = par.getChar(i); // The most special cases are handled first. if (par.isInset(i)) { -- 2.14.3