File indexing completed on 2024-04-28 17:01:40
0001 /* 0002 SPDX-FileCopyrightText: 2001-2004,2009 Otto Bruggeman <bruggie@gmail.com> 0003 SPDX-FileCopyrightText: 2001-2003 John Firebaugh <jfirebaugh@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef KOMPAREDIFF2_DIFFMODEL_H 0009 #define KOMPAREDIFF2_DIFFMODEL_H 0010 0011 #include <QObject> 0012 #include <QStringList> 0013 #include "diffhunk.h" 0014 #include "kompare.h" 0015 #include "komparediff2_export.h" 0016 0017 namespace Diff2 0018 { 0019 0020 /** 0021 * @class DiffModel diffmodel.h <KompareDiff2/DiffModel> 0022 * 0023 * A model describing the differences between two files. 0024 */ 0025 class KOMPAREDIFF2_EXPORT DiffModel : public QObject 0026 { 0027 Q_OBJECT 0028 public: 0029 0030 DiffModel(const QString& srcBaseURL, const QString& destBaseURL); 0031 DiffModel(); 0032 ~DiffModel() override; 0033 0034 private: 0035 DiffModel(const DiffModel&) : QObject() {} 0036 0037 public: 0038 int parseDiff(enum Kompare::Format format, const QStringList& list); 0039 0040 QString recreateDiff() const; 0041 0042 int hunkCount() const { return m_hunks.count(); } 0043 int differenceCount() const { return m_differences.count(); } 0044 int appliedCount() const { return m_appliedCount; } 0045 0046 DiffHunk* hunkAt(int i) { return (m_hunks.at(i)); } 0047 const Difference* differenceAt(int i) const { return (m_differences.at(i)); } 0048 Difference* differenceAt(int i) { return (m_differences.at(i)); } 0049 0050 DiffHunkList* hunks() { return &m_hunks; } 0051 const DiffHunkList* hunks() const { return &m_hunks; } 0052 DifferenceList* differences() { return &m_differences; } 0053 const DifferenceList* differences() const { return &m_differences; } 0054 0055 int findDifference(Difference* diff) const { return m_differences.indexOf(diff); } 0056 0057 Difference* firstDifference(); 0058 Difference* lastDifference(); 0059 Difference* prevDifference(); 0060 Difference* nextDifference(); 0061 0062 const QString source() const { return m_source; } 0063 const QString destination() const { return m_destination; } 0064 const QString sourceFile() const; 0065 const QString destinationFile() const; 0066 const QString sourcePath() const; 0067 const QString destinationPath() const; 0068 const QString sourceTimestamp() const { return m_sourceTimestamp; } 0069 const QString destinationTimestamp() const { return m_destinationTimestamp; } 0070 const QString sourceRevision() const { return m_sourceRevision; } 0071 const QString destinationRevision() const { return m_destinationRevision; } 0072 0073 void setSourceFile(QString path); 0074 void setDestinationFile(QString path); 0075 void setSourceTimestamp(QString timestamp); 0076 void setDestinationTimestamp(QString timestamp); 0077 void setSourceRevision(QString revision); 0078 void setDestinationRevision(QString revision); 0079 0080 void addHunk(DiffHunk* hunk); 0081 void addDiff(Difference* diff); 0082 bool hasUnsavedChanges() const; 0083 0084 int diffIndex(void) const { return m_diffIndex; } 0085 void setDiffIndex(int diffIndex) { m_diffIndex = diffIndex; } 0086 0087 void applyDifference(bool apply); 0088 void applyAllDifferences(bool apply); 0089 0090 bool setSelectedDifference(Difference* diff); 0091 0092 DiffModel& operator=(const DiffModel& model); 0093 bool operator<(const DiffModel& model); 0094 0095 int localeAwareCompareSource(const DiffModel& model); 0096 0097 bool isBlended() const { return m_blended; } 0098 void setBlended(bool blended) { m_blended = blended; } 0099 0100 /** 0101 * @p oldlines - lines that were removed. 0102 * @p newLines - lines that were inserted. 0103 * @p startPos - number of line at which the change occurred 0104 */ 0105 QPair<QList<Difference*>, QList<Difference*> > linesChanged(const QStringList& oldLines, const QStringList& newLines, int editLineNumber); 0106 0107 private: 0108 void splitSourceInPathAndFileName(); 0109 void splitDestinationInPathAndFileName(); 0110 void computeDiffStats(Difference* diff); 0111 void processStartMarker(Difference* diff, const QStringList& lines, MarkerListConstIterator& currentMarker, int& currentListLine, bool isSource); 0112 0113 private: 0114 QString m_source; 0115 QString m_destination; 0116 0117 QString m_sourcePath; 0118 QString m_destinationPath; 0119 0120 QString m_sourceFile; 0121 QString m_destinationFile; 0122 0123 QString m_sourceTimestamp; 0124 QString m_destinationTimestamp; 0125 0126 QString m_sourceRevision; 0127 QString m_destinationRevision; 0128 0129 DiffHunkList m_hunks; 0130 DifferenceList m_differences; 0131 0132 int m_appliedCount; 0133 0134 int m_diffIndex; 0135 Difference* m_selectedDifference; 0136 0137 bool m_blended; 0138 0139 private Q_SLOTS: 0140 void slotDifferenceApplied(Difference* diff); 0141 }; 0142 0143 } // End of namespace Diff2 0144 0145 #endif 0146