# # # patch "src/view/dialogs/RevisionDiff.cpp" # from [c1678eb933d4bffda44ca7fa412d1078172d8104] # to [b10e003f4e0dfec33e78d9e96c147574a8931608] # # patch "src/view/dialogs/RevisionDiff.h" # from [e56753fafa9f66fb1041841249f4aef278b84cca] # to [60ddf83b6d75d995185fdf313d5177f017d6a527] # ============================================================ --- src/view/dialogs/RevisionDiff.cpp c1678eb933d4bffda44ca7fa412d1078172d8104 +++ src/view/dialogs/RevisionDiff.cpp b10e003f4e0dfec33e78d9e96c147574a8931608 @@ -19,60 +19,66 @@ ***************************************************************************/ #include "RevisionDiff.h" -#include "Monotone.h" #include -RevisionDiff::RevisionDiff(QWidget* parent) : Dialog(parent) +RevisionDiff::RevisionDiff(QWidget * parent) : Dialog(parent) { setupUi(this); Dialog::init(); - + diffView->setItemsExpandable(true); diffView->setRootIsDecorated(true); // arrow width is approx. 10px diffView->setIndentation(10); + + diffModel = new ContentDiff(this); + diffView->setModel(diffModel); } -void RevisionDiff::init(QString path, QString leftRevision, QString rightRevision) +RevisionDiff::~RevisionDiff() { - QString left = tr("base revision"); + delete diffModel; +} + +void RevisionDiff::forDatabase(const DatabaseFile & db, const QString & filePath, + const QString & base, const QString & target) +{ + QString left = base.left(12).append("..."); + QString right = target.left(12).append("..."); + + QString title; + if (!filePath.isEmpty() && filePath != ".") + title = tr("Differences between %1 and %2 in %3") + .arg(left).arg(right).arg(filePath); + else + title = tr("Differences between %1 and %2") + .arg(left).arg(right); + + setWindowTitle(title); + diffModel->readDatabaseDiff(db, filePath, base, target); +} + +void RevisionDiff::forWorkspace(const WorkspacePath & ws, + const QString & filePath, const QString & base) +{ + QString left = tr("base revision"); QString right = tr("workspace revision"); - - if (leftRevision.size() > 0) + + if (base.size() > 0) { - left = leftRevision.left(12).append("..."); + left = base.left(12).append("..."); } - - if (rightRevision.size() > 0) - { - right = rightRevision.left(12).append("..."); - } - + QString title; - if (path.size() > 0 && path != ".") - { + if (!filePath.isEmpty() && filePath != ".") title = tr("Differences between %1 and %2 in %3") - .arg(left).arg(right).arg(path); - } + .arg(left).arg(right).arg(filePath); else - { title = tr("Differences between %1 and %2") .arg(left).arg(right); - } - + setWindowTitle(title); - - diffModel = new ContentDiff(this); - diffView->setModel(diffModel); - - // FIXME: proper error handling here - if (!diffModel->readDiff(path, leftRevision, rightRevision)) - { - C("Couldn't execute readDiff"); - done(1); - } + diffModel->readWorkspaceDiff(ws, filePath, base); } -RevisionDiff::~RevisionDiff() {} - ============================================================ --- src/view/dialogs/RevisionDiff.h e56753fafa9f66fb1041841249f4aef278b84cca +++ src/view/dialogs/RevisionDiff.h 60ddf83b6d75d995185fdf313d5177f017d6a527 @@ -27,14 +27,14 @@ class RevisionDiff : public Dialog, priv class RevisionDiff : public Dialog, private Ui::RevisionDiffDialog { - Q_OBJECT - + Q_OBJECT public: - RevisionDiff(QWidget*); - void init(QString, QString, QString); - + RevisionDiff(QWidget *); ~RevisionDiff(); + void forDatabase(const DatabaseFile &, const QString &, const QString &, const QString &); + void forWorkspace(const WorkspacePath &, const QString &, const QString & base = QString()); + private: ContentDiff * diffModel; };