# # # patch "res/forms/file_diff.ui" # from [6608573b8c72a21523ea07b110636abda6a8c815] # to [2bc8e89bcd40649e690c55899c588e156dd389d3] # # patch "res/forms/revision_diff.ui" # from [ba6bea52826e407528f851b6d366c7f988228f56] # to [f8f34ee08360a9c9d8e525324d1a61f54171d2bd] # # patch "src/model/ContentDiff.h" # from [38035d0dec91320d0fa33e58ffc5238a11109852] # to [90b48b45b61ac9e9d29d606df9203c8acbf5c3be] # # patch "src/view/dialogs/FileDiff.cpp" # from [f9e9afd79cc644e82dc4987ca845ae2e37dcc473] # to [1fa30bddffcd068da2466e07d76819cb0adf45f9] # # patch "src/view/dialogs/RevisionDiff.cpp" # from [24e17c91450da9413c36beea817d744f313c2341] # to [9fb6896e4bf29679a45b6be6c267ce6e377385a7] # # patch "src/view/dialogs/RevisionDiff.h" # from [bce21301eb5596f48b36be6f32947ec6b5cfea71] # to [b895f3c22dc1e2451ffc60cbff06a6e52c453c79] # ============================================================ --- res/forms/file_diff.ui 6608573b8c72a21523ea07b110636abda6a8c815 +++ res/forms/file_diff.ui 2bc8e89bcd40649e690c55899c588e156dd389d3 @@ -10,7 +10,7 @@ - File differences of "%1" + Loading file differences ============================================================ --- res/forms/revision_diff.ui ba6bea52826e407528f851b6d366c7f988228f56 +++ res/forms/revision_diff.ui f8f34ee08360a9c9d8e525324d1a61f54171d2bd @@ -9,6 +9,9 @@ 500 + + Loading differences + :/icons/guitone.png:/icons/guitone.png ============================================================ --- src/model/ContentDiff.h 38035d0dec91320d0fa33e58ffc5238a11109852 +++ src/model/ContentDiff.h 90b48b45b61ac9e9d29d606df9203c8acbf5c3be @@ -100,8 +100,10 @@ public: int rowCount(const QModelIndex &) const; int columnCount(const QModelIndex &) const; - inline Diff * getDiff(QString fileName) { return diffParser->getDiff(fileName); } - inline FileDiffs getAllDiffs() { return diffParser->getAllDiffs(); } + inline Diff * getDiff(QString fileName) const { return diffParser->getDiff(fileName); } + inline FileDiffs getAllDiffs() const { return diffParser->getAllDiffs(); } + inline QString getBase() const { return lastTask.getOptions().size() > 1 ? QString(lastTask.getOptions().at(1)) : ""; } + inline QString getTarget() const { return lastTask.getOptions().size() > 3 ? QString(lastTask.getOptions().at(3)) : ""; } public slots: void readDatabaseDiff(const DatabaseFile &, const QString &, const QString &, const QString &, const QString & encoding = QString()); ============================================================ --- src/view/dialogs/FileDiff.cpp f9e9afd79cc644e82dc4987ca845ae2e37dcc473 +++ src/view/dialogs/FileDiff.cpp 1fa30bddffcd068da2466e07d76819cb0adf45f9 @@ -124,16 +124,8 @@ void FileDiff::forDatabase(const Databas } textEncoding->setCurrentIndex(textEncoding->findText(encoding)); - setWindowTitle(tr("File differences of \"%1\"").arg(fileName)); + setWindowTitle(tr("Loading file differences")); - firstRevision->setText( - tr("only left (%1)").arg(base.left(12).append("...")) - ); - - secondRevision->setText( - tr("only right (%1)").arg(target.left(12).append("...")) - ); - fileModel->readFileByName(db, fileName, base, encoding); diffModel->readDatabaseDiff(db, fileName, base, target, encoding); } @@ -158,24 +150,8 @@ void FileDiff::forWorkspace(const Worksp } textEncoding->setCurrentIndex(textEncoding->findText(encoding)); - setWindowTitle(tr("File differences of \"%1\"").arg(fileName)); + setWindowTitle(tr("Loading file differences")); - QString left = tr("workspace parent"); - QString right = tr("workspace revision"); - - if (!base.isEmpty()) - { - left = base.left(12).append("..."); - } - - if (!target.isEmpty()) - { - right = target.left(12).append("..."); - } - - firstRevision->setText(tr("only left (%1)").arg(left)); - secondRevision->setText(tr("only right (%1)").arg(right)); - DatabaseFile db = MonotoneUtil::getDatabaseFile(ws); if (base.isEmpty()) { @@ -229,6 +205,24 @@ void FileDiff::applyDiff() return; } + setWindowTitle(tr("File differences of \"%1\"").arg(fileName)); + + QString left = tr("workspace parent"), right = tr("workspace revision"); + QString base = diffModel->getBase(), target = diffModel->getTarget(); + + if (!base.isEmpty()) + { + left = base.left(12).append("..."); + } + + if (!target.isEmpty()) + { + right = target.left(12).append("..."); + } + + firstRevision->setText(tr("only left (%1)").arg(left)); + secondRevision->setText(tr("only right (%1)").arg(right)); + fileModel->applyDiff(diff); diffStatusView->update(); } ============================================================ --- src/view/dialogs/RevisionDiff.cpp 24e17c91450da9413c36beea817d744f313c2341 +++ src/view/dialogs/RevisionDiff.cpp 9fb6896e4bf29679a45b6be6c267ce6e377385a7 @@ -36,6 +36,12 @@ RevisionDiff::RevisionDiff(QWidget * par ); diffModel = new ContentDiff(this); + + connect( + diffModel, SIGNAL(diffRead()), + this, SLOT(diffRead()) + ); + diffView->setModel(diffModel); } @@ -44,36 +50,44 @@ RevisionDiff::~RevisionDiff() delete diffModel; } -void RevisionDiff::forDatabase(const DatabaseFile & db, const QString & filePath, +void RevisionDiff::forDatabase(const DatabaseFile & db, const QString & path, const QString & base, const QString & target) { baseRevision = base; targetRevision = target; + filePath = path; - QString left = base.left(12).append("..."); - QString right = target.left(12).append("..."); + setWindowTitle(tr("Loading differences")); - 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, +void RevisionDiff::forWorkspace(const WorkspacePath & ws, const QString & path, const QString & base, const QString & target) { baseRevision = base; targetRevision = target; + filePath = path; - QString left = tr("base revision"); - QString right = tr("workspace revision"); + setWindowTitle(tr("Loading differences")); + diffModel->readWorkspaceDiff(ws, filePath, base, target); +} + +void RevisionDiff::triggerFileDiff(const QModelIndex & index) +{ + ListLine * line = static_cast(index.internalPointer()); + if (line->isFileLineAndDiffable()) + { + emit fileDiff(line->fileName, baseRevision, targetRevision); + } +} + +void RevisionDiff::diffRead() +{ + QString left = tr("base revision"), right = tr("workspace revision"); + QString base = diffModel->getBase(), target = diffModel->getTarget(); + if (!base.isEmpty()) { left = base.left(12).append("..."); @@ -93,15 +107,5 @@ void RevisionDiff::forWorkspace(const Wo .arg(left).arg(right); setWindowTitle(title); - diffModel->readWorkspaceDiff(ws, filePath, base, target); } -void RevisionDiff::triggerFileDiff(const QModelIndex & index) -{ - ListLine * line = static_cast(index.internalPointer()); - if (line->isFileLineAndDiffable()) - { - emit fileDiff(line->fileName, baseRevision, targetRevision); - } -} - ============================================================ --- src/view/dialogs/RevisionDiff.h bce21301eb5596f48b36be6f32947ec6b5cfea71 +++ src/view/dialogs/RevisionDiff.h b895f3c22dc1e2451ffc60cbff06a6e52c453c79 @@ -40,9 +40,11 @@ private: ContentDiff * diffModel; QString baseRevision; QString targetRevision; + QString filePath; private slots: void triggerFileDiff(const QModelIndex &); + void diffRead(); }; #endif