#ifndef CHANGES_H
#define CHANGES_H
-#include "support/docstream.h"
+#include "support/strfwd.h"
+#include "support/types.h"
#include "support/lyxtime.h"
#include <vector>
namespace lyx {
+class AuthorList;
+class Buffer;
+class Color;
+class DocIterator;
+class FontInfo;
+class OutputParams;
+class otexstream;
+class PainterInfo;
+class TocBackend;
+
class Change {
public:
DELETED // deleted text
};
- explicit Change(Type t, int a = 0, time_type ct = current_time())
+ explicit Change(Type t = UNCHANGED, int a = 0, time_t ct = support::current_time())
: type(t), author(a), changetime(ct) {}
/// is the change similar to the given change such that both can be merged?
- bool isSimilarTo(Change const & change);
+ bool isSimilarTo(Change const & change) const;
+ /// The color of this change on screen
+ Color color() const;
+ ///
+ bool changed() const { return type != UNCHANGED; }
+ ///
+ void setUnchanged() { type = UNCHANGED; }
+ ///
+ bool inserted() const { return type == INSERTED; }
+ ///
+ void setInserted() { type = INSERTED; }
+ ///
+ bool deleted() const { return type == DELETED; }
+ ///
+ void setDeleted() { type = DELETED; }
+ /// Is this change made by the current author ?
+ bool currentAuthor() const { return author == 0; }
+
+ /// Paint under- or strike-through line
+ ///
+ /// Text : underline or strike through
+ /// \param x1 begin
+ /// \param x2 end
+ /// \param y baseline
+ void paintCue(PainterInfo & pi, double const x1, double const y,
+ double const x2, FontInfo const & font) const;
+ /// Box : line below or diagonal
+ /// \param x1,y1 top-left corner
+ /// \param x2,y2 bottom-right corner
+ void paintCue(PainterInfo & pi, double const x1, double const y1,
+ double const x2, double const y2) const;
Type type;
int author;
- time_type changetime;
+ time_t changetime;
};
bool operator==(Change const & l, Change const & r);
/// erase the entry at pos and adjust all range bounds past it
/// (assumes that a character was deleted at pos)
- void erase(lyx::pos_type pos);
+ void erase(pos_type pos);
/// insert a new entry at pos and adjust all range bounds past it
/// (assumes that a character was inserted at pos)
- void insert(Change const & change, lyx::pos_type pos);
+ void insert(Change const & change, pos_type pos);
///
/// return true if there is a change in the given range (excluding end)
bool isChanged(pos_type start, pos_type end) const;
-
///
+ bool isChanged() const;
+
+ /// return true if the whole range is deleted
+ bool isDeleted(pos_type start, pos_type end) const;
/// output latex to mark a transition between two change types
/// returns length of text outputted
- static int latexMarkChange(odocstream & os, BufferParams const & bparams,
- Change const & oldChange, Change const & change);
+ static int latexMarkChange(otexstream & os, BufferParams const & bparams,
+ Change const & oldChange, Change const & change,
+ OutputParams const & runparams);
/// output .lyx file format for transitions between changes
- static void lyxMarkChange(std::ostream & os, int & column,
- Change const & old, Change const & change);
+ static void lyxMarkChange(std::ostream & os, BufferParams const & bparams,
+ int & column, Change const & old, Change const & change);
+
+ ///
+ void checkAuthors(AuthorList const & authorList) const;
+
+ ///
+ void addToToc(DocIterator const & cdit, Buffer const & buffer,
+ bool output_active, TocBackend & backend) const;
private:
class Range {