# # # patch "src/model/ChangesetModel.cpp" # from [9db73c376ae513811f07749800ef40c8f31cdb5d] # to [43a012c5392877c265c673a57de4e486dbfee1ed] # # patch "src/view/dialogs/ChangesetBrowser.cpp" # from [22c6f00c601bc0004274b8ce7242d97c3fdd2be5] # to [e77c3bc918b43044c6e08afda0552e99dce9d6e0] # # patch "src/view/dialogs/ChangesetBrowser.h" # from [edd5d69c14290a198cd81116f87c52737b5f8094] # to [cbcbc6af994d54c4e68abed35c87e107a0d3fda4] # ============================================================ --- src/model/ChangesetModel.cpp 9db73c376ae513811f07749800ef40c8f31cdb5d +++ src/model/ChangesetModel.cpp 43a012c5392877c265c673a57de4e486dbfee1ed @@ -112,7 +112,7 @@ int ChangesetModel::columnCount(const QM int ChangesetModel::columnCount(const QModelIndex &parent) const { - return 4; + return 5; } QVariant ChangesetModel::data(const QModelIndex &index, int role) const @@ -141,13 +141,15 @@ QVariant ChangesetModel::data(const QMod if(changesetMap[rev] == NULL) return QVariant(); switch(col) { - case(0): + case(0): + return QVariant(row); + case(1): return QVariant(changesetMap[rev]->getDate()); - case(1): + case(2): return QVariant(changesetMap[rev]->getAuthor()); - case(2): + case(3): return QVariant(changesetMap[rev]->getChangelogFlat()); - case(3): + case(4): return QVariant(rev); } } @@ -171,13 +173,15 @@ QVariant ChangesetModel::headerData(int { switch(section) { - case(0): + case(0): + return QVariant(tr("Toposort ID")); + case(1): return QVariant(tr("Date")); - case(1): + case(2): return QVariant(tr("Author")); - case(2): + case(3): return QVariant(tr("Changelog")); - case(3): + case(4): return QVariant(tr("Revision ID")); } } ============================================================ --- src/view/dialogs/ChangesetBrowser.cpp 22c6f00c601bc0004274b8ce7242d97c3fdd2be5 +++ src/view/dialogs/ChangesetBrowser.cpp e77c3bc918b43044c6e08afda0552e99dce9d6e0 @@ -30,7 +30,9 @@ ChangesetBrowser::ChangesetBrowser(QWidg Dialog::init(); // OSX sheet-alike dialog - setWindowFlags(Qt::Sheet); + //setWindowFlags(Qt::Sheet); + //The reason to disable this is that is quite a wide dialog and I want to + //be able to use the maximize button! this->setWindowFlags(this->windowFlags() | Qt::WindowMaximizeButtonHint); this->setWindowFlags(this->windowFlags() | Qt::WindowMinimizeButtonHint); @@ -57,12 +59,17 @@ ChangesetBrowser::ChangesetBrowser(QWidg ); changesetModel = new ChangesetModel(this); - changesets->setModel(changesetModel); + sortedChangesetModel = new QSortFilterProxyModel(this); + sortedChangesetModel->setSourceModel(changesetModel); + + changesets->setModel(sortedChangesetModel); changesets->setRootIsDecorated(false); + changesets->setSortingEnabled(true); + revisionModel = new GetRevision(this); revisionView->setModel(revisionModel); - + connect( changesets, SIGNAL(clicked(const QModelIndex &)), this, SLOT(changesetsClicked(const QModelIndex &)) @@ -123,8 +130,8 @@ 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(); + QModelIndex revIdx = sortedChangesetModel->index(idx.row(), 4, QModelIndex()); + QString revision = sortedChangesetModel->data(revIdx, Qt::DisplayRole).toString(); revisionModel->readRevision(revision); } @@ -171,7 +178,7 @@ void ChangesetBrowser::changesetsDoubleC void ChangesetBrowser::changesetsDoubleClicked(const QModelIndex & index) { if (!index.isValid()) return; - QModelIndex revIdx = changesetModel->index(index.row(), 3, QModelIndex()); + QModelIndex revIdx = sortedChangesetModel->index(index.row(), 4, QModelIndex()); openManifestDialog(revIdx.data().toString()); } @@ -180,12 +187,12 @@ void ChangesetBrowser::contextMenuReques if (indexList.size() == 0) return; QModelIndex revIdx = - changesetModel->index(indexList.at(0).row(), 3, QModelIndex()); + sortedChangesetModel->index(indexList.at(0).row(), 4, QModelIndex()); QString rev(revIdx.data().toString()); QModelIndex revPrevIdx = - changesetModel->index(indexList.at(0).row() - 1, 3, QModelIndex()); + sortedChangesetModel->index(indexList.at(0).row() + 1, 4, QModelIndex()); QString revPrev(revPrevIdx.data().toString()); QMenu menu(this); @@ -195,9 +202,16 @@ void ChangesetBrowser::contextMenuReques QAction * actOpenManifest = menu.addAction(tr("View files in this revision")); actOpenManifest->setFont(activeFont); - QAction * actShowDiff; - if(revPrevIdx.isValid()) - actShowDiff = menu.addAction(tr("Show differences to previous revision")); + QAction * actDiff; + foreach(QString parentRev, revisionModel->getParentRevisions()) + { + //if(revPrevIdx.isValid()) + if(parentRev == revPrev) + actDiff = menu.addAction(tr("Show differences to %1 (prev)").arg(parentRev)); + else + actDiff = menu.addAction(tr("Show differences to %1").arg(parentRev)); + actDiff->setData(QVariant(parentRev)); + } QAction * act = menu.exec(pos); @@ -206,10 +220,10 @@ void ChangesetBrowser::contextMenuReques openManifestDialog(rev); } - - if (act == actShowDiff) + + if (act != NULL && !act->data().isNull()) { - showRevisionDiff(rev, revPrev); + showRevisionDiff(rev, act->data().toString()); } // TODO: we might want to add more items here, like "Checkout", "Update", // etc. ============================================================ --- src/view/dialogs/ChangesetBrowser.h edd5d69c14290a198cd81116f87c52737b5f8094 +++ src/view/dialogs/ChangesetBrowser.h cbcbc6af994d54c4e68abed35c87e107a0d3fda4 @@ -55,6 +55,7 @@ private: Branches * branchModel; ChangesetModel * changesetModel; GetRevision * revisionModel; + QSortFilterProxyModel *sortedChangesetModel; }; #endif