# # # patch "res/forms/changeset_browser.ui" # from [bd83e32049a34fbc92ace307a7db4b77b1ce16a4] # to [5a7e001d962135a3f120b356f96476eeb6d87eb8] # # patch "src/model/GetRevision.cpp" # from [10a2cb967b01e82641b3dd7c7be9316db1adcbbe] # to [5fb8d261fa465925f9ab9b61e9f9f6b06ffe9fe6] # # patch "src/model/GetRevision.h" # from [b5bb677355b8c88fb1bf3096e92433576087ea77] # to [77d9a435709a6ec72e7b5d2fd25286135a3cc3d6] # # patch "src/view/dialogs/ChangesetBrowser.cpp" # from [7281ea4d20f313f0383c2fcf41c9e748427f9ad2] # to [8bef25dfabd1c8bf365d48154d17f655910b0dd1] # # patch "src/view/dialogs/ChangesetBrowser.h" # from [5fee47bec4ac82fe7a5ea7a091160fe02c423f3e] # to [702cb80e34ccd1dd8d17521a4ade28b50743ca14] # # patch "src/view/dialogs/DatabaseDialogManager.cpp" # from [bd233a55cd97ce0a3d96f4fd8a89408b63d600dd] # to [7ae75ab5b5aebd9c7a33511c67b82f1e20828579] # ============================================================ --- res/forms/changeset_browser.ui bd83e32049a34fbc92ace307a7db4b77b1ce16a4 +++ res/forms/changeset_browser.ui 5a7e001d962135a3f120b356f96476eeb6d87eb8 @@ -5,8 +5,8 @@ 0 0 - 655 - 506 + 760 + 617 @@ -42,19 +42,39 @@ true - - - true - - - QAbstractItemView::NoSelection - - - false - - - false - + + + + + + + + Show changes against parent + + + + + + + + + + + + true + + + QAbstractItemView::SingleSelection + + + false + + + false + + + + ============================================================ --- src/model/GetRevision.cpp 10a2cb967b01e82641b3dd7c7be9316db1adcbbe +++ src/model/GetRevision.cpp 5fb8d261fa465925f9ab9b61e9f9f6b06ffe9fe6 @@ -175,7 +175,7 @@ void GetRevision::processTaskResult(cons } // set the first as the default parent against which changes are displayed - changesAgainstParent = revision.changesAgainstParent.keys().at(0); + currentParentRevision = revision.changesAgainstParent.keys().at(0); // reset the view reset(); @@ -195,11 +195,11 @@ QVariant GetRevision::data(const QModelI if (!index.isValid()) return QVariant(); - if (!revision.changesAgainstParent.contains(changesAgainstParent)) + if (!revision.changesAgainstParent.contains(currentParentRevision)) return QVariant(); Change change = - revision.changesAgainstParent[changesAgainstParent].at(index.row()); + revision.changesAgainstParent[currentParentRevision].at(index.row()); if (role == Qt::DisplayRole) { @@ -258,19 +258,19 @@ int GetRevision::rowCount(const QModelIn int GetRevision::rowCount(const QModelIndex & parent) const { Q_UNUSED(parent); - if (!revision.changesAgainstParent.contains(changesAgainstParent)) + if (!revision.changesAgainstParent.contains(currentParentRevision)) return 0; - return revision.changesAgainstParent[changesAgainstParent].size(); + return revision.changesAgainstParent[currentParentRevision].size(); } QModelIndex GetRevision::index(int row, int column, const QModelIndex & parent) const { Q_UNUSED(parent); - if (!revision.changesAgainstParent.contains(changesAgainstParent)) + if (!revision.changesAgainstParent.contains(currentParentRevision)) return QModelIndex(); - if (row >= revision.changesAgainstParent[changesAgainstParent].size()) + if (row >= revision.changesAgainstParent[currentParentRevision].size()) return QModelIndex(); return createIndex(row, column); @@ -293,7 +293,7 @@ void GetRevision::showChangesAgainstPare if (!parents.contains(parent)) return; - changesAgainstParent = parent; + currentParentRevision = parent; reset(); } @@ -301,10 +301,10 @@ QMap > { QMap > fileMap; - if (revision.changesAgainstParent.contains(changesAgainstParent)) + if (revision.changesAgainstParent.contains(currentParentRevision)) { QList changes = - revision.changesAgainstParent.value(changesAgainstParent); + revision.changesAgainstParent.value(currentParentRevision); foreach (Change ch, changes) { Stanza st = ch.stanza; @@ -360,3 +360,8 @@ QString GetRevision::getRevisionText() c return revision.print(); } +QString GetRevision::getCurrentParentRevision() const +{ + return currentParentRevision; +} + ============================================================ --- src/model/GetRevision.h b5bb677355b8c88fb1bf3096e92433576087ea77 +++ src/model/GetRevision.h 77d9a435709a6ec72e7b5d2fd25286135a3cc3d6 @@ -152,6 +152,7 @@ public: int columnCount(const QModelIndex &) const; QMap > getChangedFiles() const; QString getRevisionText() const; + QString getCurrentParentRevision() const; public slots: void readDatabaseRevision(const DatabaseFile &, const QString &); @@ -166,7 +167,7 @@ private: void processTaskResult(const MonotoneTask &); Revision revision; - QString changesAgainstParent; + QString currentParentRevision; DatabaseFile databaseFile; }; ============================================================ --- src/view/dialogs/ChangesetBrowser.cpp 7281ea4d20f313f0383c2fcf41c9e748427f9ad2 +++ src/view/dialogs/ChangesetBrowser.cpp 8bef25dfabd1c8bf365d48154d17f655910b0dd1 @@ -57,6 +57,16 @@ ChangesetBrowser::ChangesetBrowser(QWidg revisionView->setModel(revisionModel); connect( + revisionModel, SIGNAL(revisionRead()), + this, SLOT(updateParentsList()) + ); + + connect( + revisionParents, SIGNAL(currentIndexChanged(const QString &)), + revisionModel, SLOT(showChangesAgainstParent(const QString &)) + ); + + connect( changesets, SIGNAL(clicked(const QModelIndex &)), this, SLOT(changesetsClicked(const QModelIndex &)) ); @@ -80,6 +90,11 @@ ChangesetBrowser::ChangesetBrowser(QWidg changesets, SIGNAL(contextMenuRequested(const QModelIndexList &, const QPoint &)), this, SLOT(contextMenuRequested(const QModelIndexList &, const QPoint &)) ); + + connect( + revisionView, SIGNAL(doubleClicked(const QModelIndex &)), + this, SLOT(changeViewDoubleClicked(const QModelIndex &)) + ); } void ChangesetBrowser::receiveAll() @@ -122,9 +137,10 @@ void ChangesetBrowser::changesetsClicked void ChangesetBrowser::changesetsClicked(const QModelIndex & idx) { QModelIndex revIdx = changesetModel->index(idx.row(), 3, QModelIndex()); - QString revision = changesetModel->data(revIdx, Qt::DisplayRole).toString(); + currentRevision = changesetModel->data(revIdx, Qt::DisplayRole).toString(); changeLog->setHtml(changesetModel->data(revIdx, Qt::UserRole).toString()); - revisionModel->readDatabaseRevision(databaseFile, revision); + revisionModel->readDatabaseRevision(databaseFile, currentRevision); + revisionParents->clear(); } void ChangesetBrowser::initTreeWidget() @@ -192,3 +208,36 @@ void ChangesetBrowser::contextMenuReques } } +void ChangesetBrowser::updateParentsList() +{ + revisionParents->addItems(revisionModel->getParentRevisions()); +} + +void ChangesetBrowser::changeViewDoubleClicked(const QModelIndex & index) +{ + if (!index.isValid()) return; + + QModelIndex label, path; + if (index.column() == 0) + { + label = index; + path = index.sibling(index.row(), 1); + } + else + if (index.column() == 1) + { + label = index.sibling(index.row(), 0); + path = index; + } + else + I(false); + + // not a patched file + if (label.data().toString() != QObject::tr("Patched")) + return; + + emit diffFile(path.data().toString(), + revisionModel->getCurrentParentRevision(), + currentRevision); +} + ============================================================ --- src/view/dialogs/ChangesetBrowser.h 5fee47bec4ac82fe7a5ea7a091160fe02c423f3e +++ src/view/dialogs/ChangesetBrowser.h 702cb80e34ccd1dd8d17521a4ade28b50743ca14 @@ -34,6 +34,7 @@ signals: signals: void revisionManifest(const QString &); + void diffFile(const QString &, const QString &, const QString &); private slots: void branchesClicked(const QModelIndex &); @@ -44,6 +45,8 @@ private slots: void receiveMore(); void changesetsDoubleClicked(const QModelIndex &); void contextMenuRequested(const QModelIndexList &, const QPoint &); + void changeViewDoubleClicked(const QModelIndex &); + void updateParentsList(); private: void initTreeWidget(); @@ -53,6 +56,7 @@ private: Branches * branchModel; ChangesetModel * changesetModel; GetRevision * revisionModel; + QString currentRevision; }; #endif ============================================================ --- src/view/dialogs/DatabaseDialogManager.cpp bd233a55cd97ce0a3d96f4fd8a89408b63d600dd +++ src/view/dialogs/DatabaseDialogManager.cpp 7ae75ab5b5aebd9c7a33511c67b82f1e20828579 @@ -68,10 +68,16 @@ void DatabaseDialogManager::showChangese if (!changesetBrowser) { changesetBrowser = new ChangesetBrowser(parentWidget(), databaseFile); + connect( changesetBrowser, SIGNAL(revisionManifest(const QString &)), this, SLOT(showRevisionManifest(const QString &)) ); + + connect( + changesetBrowser, SIGNAL(diffFile(const QString &, const QString &, const QString &)), + this, SLOT(showFileDiff(const QString &, const QString &, const QString &)) + ); } showDialog(changesetBrowser);