X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FChanges.h;h=1d55b03b548acd191cb36d77d764bc16df0bc130;hb=e2bc7ffae3eb387661064be8b9dc927742f9e7e8;hp=8f91407431e79765da73104a89828771dc729c8d;hpb=06d65218c0cbde21060257cc565d60476635eb1c;p=lyx.git diff --git a/src/Changes.h b/src/Changes.h index 8f91407431..1d55b03b54 100644 --- a/src/Changes.h +++ b/src/Changes.h @@ -15,16 +15,23 @@ #ifndef CHANGES_H #define CHANGES_H +#include "Color.h" + #include "support/strfwd.h" #include "support/types.h" #include "support/lyxtime.h" +#include "texstream.h" + #include namespace lyx { class AuthorList; +class Buffer; +class DocIterator; +class OutputParams; class Change { public: @@ -35,11 +42,27 @@ public: DELETED // deleted text }; - explicit Change(Type t, int a = 0, time_t 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; } Type type; @@ -55,6 +78,8 @@ class BufferParams; class Changes { public: + Changes() : is_update_required_(false) {} + /// set the pos to the given change void set(Change const & change, pos_type pos); /// set the range (excluding end) to the given change @@ -75,21 +100,34 @@ public: /// 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); + /// + void addToToc(DocIterator const & cdit, Buffer const & buffer, + bool output_active) const; + + /// + void updateBuffer(Buffer const & buf); + /// + bool isUpdateRequired() const { return is_update_required_; } + private: class Range { public: @@ -132,6 +170,10 @@ private: /// table of changes, every row a change and range descriptor ChangeTable table_; + + /// signals that the buffer's flag tracked_changes_present_ needs to be + /// recalculated + bool is_update_required_; };