[LyX/master] Fix bug #11781. Patch from Daniel.

Richard Kimberly Heck rikiheck at lyx.org
Sun Nov 27 17:28:38 UTC 2022


commit 5db9e91f16eed97bd28d5c69cbe6620fe44b35a2
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date:   Sun Nov 27 13:16:00 2022 -0500

    Fix bug #11781. Patch from Daniel.
---
 src/BufferParams.cpp             |    3 +
 src/Changes.cpp                  |   35 ++++---
 src/Color.cpp                    |    1 +
 src/ColorCode.h                  |    2 +
 src/Compare.cpp                  |    2 +-
 src/Compare.h                    |    4 +-
 src/frontends/qt/GuiCompare.cpp  |   17 +++
 src/frontends/qt/ui/CompareUi.ui |  213 +++++++++++++++++++++-----------------
 8 files changed, 163 insertions(+), 114 deletions(-)

diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 6bb90d0..f1425b8 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -370,6 +370,9 @@ BufferParams::Impl::Impl()
 	authorlist.record(Author(from_utf8(lyxrc.user_name),
 				 from_utf8(lyxrc.user_email),
 				 from_utf8(lyxrc.user_initials)));
+	// set comparison author
+	authorlist.record(Author(from_utf8("Document Comparison"),
+				 docstring(), docstring()));
 }
 
 
diff --git a/src/Changes.cpp b/src/Changes.cpp
index 1bdbbf3..16bbb2f 100644
--- a/src/Changes.cpp
+++ b/src/Changes.cpp
@@ -71,22 +71,25 @@ bool Change::isSimilarTo(Change const & change) const
 Color Change::color() const
 {
 	Color color = Color_none;
-	switch (author % 5) {
-		case 0:
-			color = Color_changedtext_workarea_author1;
-			break;
-		case 1:
-			color = Color_changedtext_workarea_author2;
-			break;
-		case 2:
-			color = Color_changedtext_workarea_author3;
-			break;
-		case 3:
-			color = Color_changedtext_workarea_author4;
-			break;
-		case 4:
-			color = Color_changedtext_workarea_author5;
-			break;
+	if (author == 0)
+		color = Color_changedtext_workarea_author1;
+	else if (author == 1)
+		color = Color_changedtext_workarea_comparison;
+	else {
+		switch ((author - 2) % 4) {
+			case 0:
+				color = Color_changedtext_workarea_author2;
+				break;
+			case 1:
+				color = Color_changedtext_workarea_author3;
+				break;
+			case 2:
+				color = Color_changedtext_workarea_author4;
+				break;
+			case 3:
+				color = Color_changedtext_workarea_author5;
+				break;
+		}
 	}
 
 	if (deleted())
diff --git a/src/Color.cpp b/src/Color.cpp
index 7cb520d..aaa7d02 100644
--- a/src/Color.cpp
+++ b/src/Color.cpp
@@ -329,6 +329,7 @@ ColorSet::ColorSet()
 	{ Color_changedtext_workarea_author3, N_("changed text (workarea, 3rd author)"), "changedtextauthor3", "#ff0000", "#ea8989", "changedtextauthor3" },
 	{ Color_changedtext_workarea_author4, N_("changed text (workarea, 4th author)"), "changedtextauthor4", "#aa00ff", "#c371ec", "changedtextauthor4" },
 	{ Color_changedtext_workarea_author5, N_("changed text (workarea, 5th author)"), "changedtextauthor5", "#55aa00", "#acd780", "changedtextauthor5" },
+	{ Color_changedtext_workarea_comparison, N_("changed text (workarea, document comparison)"), "changedtextcomparison", "#008080", "#719FB0", "changedtextcomparison" },
 	{ Color_deletedtext_workarea_modifier, N_("deleted text modifier (workarea)"), "deletedtextmodifier", white, white, "deletedtextmodifier" },
 	{ Color_added_space, N_("added space markers"), "added_space", Brown, Brown, "added_space" },
 	{ Color_tabularline, N_("table line"), "tabularline", black, Linen, "tabularline" },
diff --git a/src/ColorCode.h b/src/ColorCode.h
index e1a6b0a..f2d0f68 100644
--- a/src/ColorCode.h
+++ b/src/ColorCode.h
@@ -196,6 +196,8 @@ enum ColorCode {
 	Color_changedtext_workarea_author4,
 	/// Changed text color author 5 (workarea)
 	Color_changedtext_workarea_author5,
+	/// Changed text color document comparison (workarea)
+	Color_changedtext_workarea_comparison,
 	/// Deleted text modifying color (workarea)
 	Color_deletedtext_workarea_modifier,
 	/// Table line color
diff --git a/src/Compare.cpp b/src/Compare.cpp
index 17bd012..82236aa 100644
--- a/src/Compare.cpp
+++ b/src/Compare.cpp
@@ -866,7 +866,7 @@ void Compare::Impl::writeToDestBuffer(DocRange const & range,
 	// Set the change
 	ParagraphList::iterator it = pars.begin();
 	for (; it != pars.end(); ++it) {
-		it->setChange(Change(type));
+		it->setChange(Change(type, compare_.options_.author));
 		size += it->size();
 	}
 
diff --git a/src/Compare.h b/src/Compare.h
index 1c93fb5..df2c7fa 100644
--- a/src/Compare.h
+++ b/src/Compare.h
@@ -30,11 +30,13 @@ class CompareOptions {
 public:
 	///
 	CompareOptions()
-		: settings_from_new(0)
+		: settings_from_new(0), author(0)
 	{}
 
 	/// Copy the settings from the new or old document
 	bool settings_from_new;
+	/// Author id for change tracking
+	bool author;
 };
 
 /**
diff --git a/src/frontends/qt/GuiCompare.cpp b/src/frontends/qt/GuiCompare.cpp
index 7f6b00f..e485ec0 100644
--- a/src/frontends/qt/GuiCompare.cpp
+++ b/src/frontends/qt/GuiCompare.cpp
@@ -12,10 +12,13 @@
 
 #include "GuiCompare.h"
 
+#include "GuiApplication.h"
+
 #include "Buffer.h"
 #include "BufferView.h"
 #include "BufferList.h"
 #include "buffer_funcs.h"
+#include "ColorCache.h"
 #include "Compare.h"
 #include "FuncRequest.h"
 #include "GuiView.h"
@@ -329,6 +332,7 @@ int GuiCompare::run(bool blocking_mode)
 	// get the options from the dialog
 	CompareOptions options;
 	options.settings_from_new = newSettingsRB->isChecked();
+	options.author = authorCO->currentIndex();
 
 	// init the compare object and start it
 
@@ -385,6 +389,19 @@ bool GuiCompare::initialiseParams(std::string const &par)
 	progressBar->setEnabled(false);
 	progressBar->setMaximum(1);
 
+	// If empty fill the author combobox with the current and the comparison
+	// author and their respective colors
+	if (authorCO->count() == 0) {
+		authorCO->clear();
+		QPixmap colorIcon(32, 32);
+		colorIcon.fill(guiApp->colorCache().get(
+			Color(Color_changedtext_workarea_author1)));
+		authorCO->addItem(colorIcon, qt_("Current Author"));
+		colorIcon.fill(guiApp->colorCache().get(
+			Color(Color_changedtext_workarea_comparison)));
+		authorCO->addItem(colorIcon, qt_("Document Comparison"));
+	}
+
 	return true;
 }
 
diff --git a/src/frontends/qt/ui/CompareUi.ui b/src/frontends/qt/ui/CompareUi.ui
index 3151932..d8da529 100644
--- a/src/frontends/qt/ui/CompareUi.ui
+++ b/src/frontends/qt/ui/CompareUi.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>622</width>
-    <height>288</height>
+    <height>299</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -17,7 +17,7 @@
    <bool>true</bool>
   </property>
   <layout class="QGridLayout" name="gridLayout_2">
-   <item row="5" column="0">
+   <item row="10" column="0">
     <widget class="QProgressBar" name="progressBar">
      <property name="value">
       <number>24</number>
@@ -27,6 +27,100 @@
      </property>
     </widget>
    </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>4</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select the document from which the settings should be taken</string>
+       </property>
+       <property name="title">
+        <string>Document Settings</string>
+       </property>
+       <property name="flat">
+        <bool>true</bool>
+       </property>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QRadioButton" name="oldSettingsRB">
+          <property name="text">
+           <string>O&ld Document</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="newSettingsRB">
+          <property name="text">
+           <string>New Docu&ment</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="7" column="0" colspan="2">
+    <widget class="QCheckBox" name="trackingCB">
+     <property name="toolTip">
+      <string>Turns on the change tracking and showing changes in LaTeX output for the resulting document</string>
+     </property>
+     <property name="text">
+      <string>&Enable change tracking features in the output</string>
+     </property>
+     <property name="checked">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="8" column="0">
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>4</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
    <item row="0" column="0" colspan="2">
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
@@ -103,59 +197,7 @@
      </item>
     </layout>
    </item>
-   <item row="2" column="0" colspan="2">
-    <layout class="QHBoxLayout" name="horizontalLayout_3">
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="toolTip">
-        <string>Select the document from which the settings should be taken</string>
-       </property>
-       <property name="title">
-        <string>Document Settings</string>
-       </property>
-       <property name="flat">
-        <bool>true</bool>
-       </property>
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <widget class="QRadioButton" name="oldSettingsRB">
-          <property name="text">
-           <string>O&ld Document</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QRadioButton" name="newSettingsRB">
-          <property name="text">
-           <string>New Docu&ment</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="6" column="0" colspan="2">
+   <item row="11" column="0" colspan="2">
     <layout class="QHBoxLayout">
      <item>
       <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="1,0">
@@ -177,47 +219,26 @@
      </item>
     </layout>
    </item>
-   <item row="3" column="0" colspan="2">
-    <widget class="QCheckBox" name="trackingCB">
-     <property name="toolTip">
-      <string>Turns on the change tracking and showing changes in LaTeX output for the resulting document</string>
-     </property>
-     <property name="text">
-      <string>&Enable change tracking features in the output</string>
-     </property>
-     <property name="checked">
-      <bool>false</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="4" column="0">
-    <spacer name="verticalSpacer_2">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>4</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="1" column="0">
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeType">
-      <enum>QSizePolicy::Fixed</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>4</height>
-      </size>
-     </property>
-    </spacer>
+   <item row="3" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Mark changes in the workarea as </string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="authorCO"/>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </spacer>
+     </item>
+    </layout>
    </item>
   </layout>
  </widget>


More information about the lyx-cvs mailing list