]> git.lyx.org Git - lyx.git/blobdiff - src/Changes.cpp
GuiDocument.cpp: remove unneeded conversion
[lyx.git] / src / Changes.cpp
index 3486b7c7d723daa83ddbe18f4d5ca00eea3573b1..8ea11399ea6648b34bc3beac239c3004aae2433c 100644 (file)
 
 #include "Changes.h"
 #include "Author.h"
+#include "Buffer.h"
 #include "BufferParams.h"
 #include "LaTeXFeatures.h"
+#include "Paragraph.h"
+#include "TocBackend.h"
 
 #include "support/debug.h"
-
-#include <boost/assert.hpp>
+#include "support/gettext.h"
+#include "support/lassert.h"
 
 #include <ostream>
 
+using namespace std;
+
 namespace lyx {
 
 /*
@@ -37,7 +42,7 @@ namespace lyx {
  * the later change time is preserved.
  */
 
-bool Change::isSimilarTo(Change const & change)
+bool Change::isSimilarTo(Change const & change) const
 {
        if (type != change.type)
                return false;
@@ -49,6 +54,34 @@ bool Change::isSimilarTo(Change const & change)
 }
 
 
+Color Change::color() const
+{
+       Color color = Color_none;
+       switch (author % 5) {
+               case 0:
+                       color = Color_changedtextauthor1;
+                       break;
+               case 1:
+                       color = Color_changedtextauthor2;
+                       break;
+               case 2:
+                       color = Color_changedtextauthor3;
+                       break;
+               case 3:
+                       color = Color_changedtextauthor4;
+                       break;
+               case 4:
+                       color = Color_changedtextauthor5;
+                       break;
+       }
+
+       if (deleted())
+               color.mergeColor = Color_deletedtextmodifier;
+
+       return color;
+}
+
+
 bool operator==(Change const & l, Change const & r)
 {
        if (l.type != r.type)
@@ -270,7 +303,7 @@ void Changes::merge()
                                << (it + 1)->range.end << ")");
 
                        (it + 1)->range.start = it->range.start;
-                       (it + 1)->change.changetime = std::max(it->change.changetime,
+                       (it + 1)->change.changetime = max(it->change.changetime,
                                                          (it + 1)->change.changetime);
                        table_.erase(it);
                        // start again
@@ -318,7 +351,7 @@ int Changes::latexMarkChange(odocstream & os, BufferParams const & bparams,
 }
 
 
-void Changes::lyxMarkChange(std::ostream & os, int & column,
+void Changes::lyxMarkChange(ostream & os, int & column,
                            Change const & old, Change const & change)
 {
        if (old == change)
@@ -355,4 +388,51 @@ void Changes::checkAuthors(AuthorList const & authorList)
                        authorList.get(it->change.author).setUsed(true);
 }
 
+
+void Changes::addToToc(DocIterator const & cdit, Buffer const & buffer) const
+{
+       if (table_.empty())
+               return;
+
+       Toc & change_list = buffer.tocBackend().toc("change");
+       AuthorList const & author_list = buffer.params().authors();
+       DocIterator dit = cdit;
+
+       ChangeTable::const_iterator it = table_.begin();
+       ChangeTable::const_iterator const itend = table_.end();
+       for (; it != itend; ++it) {
+               docstring str;
+               switch (it->change.type) {
+               case Change::UNCHANGED:
+                       continue;
+               case Change::DELETED:
+                       // 0x2702 is a scissors symbol in the Dingbats unicode group.
+                       str.push_back(0x2702);
+                       break;
+               case Change::INSERTED:
+                       // 0x270d is the hand writting symbol in the Dingbats unicode group.
+                       str.push_back(0x270d);
+                       break;
+               }
+               dit.pos() = it->range.start;
+               Paragraph const & par = dit.paragraph();
+               str += " " + par.asString(it->range.start, min(par.size(), it->range.end));
+               if (it->range.end > par.size())
+                       // the end of paragraph symbol from the Punctuation group
+                       str.push_back(0x204B);
+               docstring const & author = author_list.get(it->change.author).name();
+               Toc::iterator it = change_list.item(0, author);
+               if (it == change_list.end()) {
+                       change_list.push_back(TocItem(dit, 0, author));
+                       change_list.push_back(TocItem(dit, 1, str));
+                       continue;
+               }
+               for (++it; it != change_list.end(); ++it) {
+                       if (it->depth() == 0 && it->str() != author)
+                               break;
+               }
+               change_list.insert(it, TocItem(dit, 1, str));
+       }
+}
+
 } // namespace lyx