# # # patch "src/view/dialogs/SelectRevision.cpp" # from [96088db0e2bc3328ff13e1faa50aac6aa7d36ddf] # to [1d443c5969d1839a8116d5128f20deb5434c38ef] # # patch "src/view/dialogs/SelectRevision.h" # from [23e1f02d0da51fcf7ffe720b5d346a0f36e98a7a] # to [d58f7a788ae6addc55a00edfceaa774cf7dc7317] # ============================================================ --- src/view/dialogs/SelectRevision.cpp 96088db0e2bc3328ff13e1faa50aac6aa7d36ddf +++ src/view/dialogs/SelectRevision.cpp 1d443c5969d1839a8116d5128f20deb5434c38ef @@ -20,23 +20,21 @@ #include "SelectRevision.h" #include "Settings.h" -#include "RevisionDiff.h" -#include "RevisionManifest.h" #include #include -SelectRevision::SelectRevision(QWidget* parent) - : Dialog(parent), selectorCompleter(0) +SelectRevision::SelectRevision(QWidget * parent, const QString & database) + : Dialog(parent), selectorCompleter(0), databaseFile(database) { setupUi(this); Dialog::init(); - + // OSX sheet-alike dialog setWindowFlags(Qt::Sheet); - + splitter->init(); - + // add some items to the selector box selectorBox->addItem(tr("Revision"), "i"); selectorBox->addItem(tr("Branch"), "b"); @@ -45,55 +43,55 @@ SelectRevision::SelectRevision(QWidget* selectorBox->addItem(tr("Date"), "d"); selectorBox->addItem(tr("Custom"), "c"); selectorBox->addItem(tr("Combined"), ""); - + // create the models - selectorModel = new Select(this); - sortModel = new Toposort(this); - certsModel = new Certs(this); - branchesModel = new Branches(this, false); - tagsModel = new Tags(this); - keysModel = new Keys(this); - + selectorModel = new Select(this, databaseFile); + sortModel = new Toposort(this, databaseFile); + certsModel = new Certs(this, databaseFile); + branchesModel = new Branches(this, databaseFile, false); + tagsModel = new Tags(this, databaseFile); + keysModel = new Keys(this, databaseFile); + // toposort revisions sortModel->setSourceModel(selectorModel); - + // set initial completer setCompleter(0); - + // assign the models to the views revisionList->setModel(sortModel); certList->setModel(certsModel); - + // enable sorting of revisions revisionList->setSortingEnabled(true); revisionList->sortByColumn(0, Qt::AscendingOrder); - + // some tweak certList->header()->setResizeMode(QHeaderView::Interactive); - + // connect its item clicked signal with a local slot connect( revisionList, SIGNAL(clicked(const QModelIndex &)), this, SLOT(enableDisableOkButton(const QModelIndex &)) ); - + // trigger the search when clicking on "Find" connect( searchRevsBtn, SIGNAL(clicked()), this, SLOT(triggerRevisionSearch()) ); - + // display the certs of a selected revision on click connect( revisionList, SIGNAL(clicked(const QModelIndex &)), this, SLOT(readCerts(const QModelIndex &)) ); - + connect( revisionList, SIGNAL(clicked(const QModelIndex &)), this, SLOT(enableDiffButtons(const QModelIndex &)) ); - + // show the manifest on double-click and right-click (context menu) connect( revisionList, SIGNAL(doubleClicked(const QModelIndex &)), @@ -103,34 +101,34 @@ SelectRevision::SelectRevision(QWidget* revisionList, SIGNAL(contextMenuRequested(const QModelIndexList &, const QPoint &)), this, SLOT(contextMenuRequested(const QModelIndexList &, const QPoint &)) ); - + // handle selector errors connect( selectorModel, SIGNAL(invalidSelection(QString)), this, SLOT(handleInvalidSelection(QString)) ); - + // connect to the completer for valid types connect( selectorBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setCompleter(int)) ); - + connect( selectFirst, SIGNAL(clicked()), this, SLOT(setFirstRevision()) ); - + connect( selectSecond, SIGNAL(clicked()), this, SLOT(setSecondRevision()) ); - + connect( showDiff, SIGNAL(clicked()), - this, SLOT(showDiffDialog()) + this, SLOT(openDiffDialog()) ); - + // disable the OK button unless we have a valid selected revision okButton->setEnabled(false); } @@ -150,48 +148,38 @@ void SelectRevision::triggerRevisionSear selectFirst->setEnabled(false); selectSecond->setEnabled(false); showDiff->setEnabled(false); - + QString selector = selectorBox->itemData(selectorBox->currentIndex()).toString(); - + if (selector == "i") { Settings::addItemToList("RecentRevisionSelector", selectorValue->text(), 10); } - + if (selector == "d") { Settings::addItemToList("RecentDateSelector", selectorValue->text(), 10); } - + if (selector == "c") { Settings::addItemToList("RecentCustomSelector", selectorValue->text(), 10); } - + if (selector == "") { Settings::addItemToList("RecentCombinedSelector", selectorValue->text(), 10); } - + // combined selectors have no common prefix if (selector != "") { selector.append(":"); } - + selector.append(selectorValue->text()); - - if (!selectorModel->readSelection(selector)) - { - QMessageBox::warning( - this, - tr("Unable to execute command"), - tr("Unable to execute '%1' - maybe another command is still running?").arg("select"), - QMessageBox::Ok - ); - return; - } - + selectorModel->readSelection(selector); + // remove any previously set data in this model and update the view certsModel->clearData(); } @@ -213,23 +201,23 @@ void SelectRevision::enableDisableOkButt okButton->setEnabled(false); return; } - + QString rev(index.data().toString()); if (rev.size() == 0) { okButton->setEnabled(false); return; } - + okButton->setEnabled(true); } void SelectRevision::setCompleter(int index) { QString selector = selectorBox->itemData(index).toString(); - + if (selectorCompleter) delete selectorCompleter; - + if (selector == "t") { tagsModel->readTags(QString()); @@ -240,7 +228,7 @@ void SelectRevision::setCompleter(int in selectorValue->setCompleter(selectorCompleter); return; } - + if (selector == "a") { keysModel->readKeys(); @@ -251,7 +239,7 @@ void SelectRevision::setCompleter(int in selectorValue->setCompleter(selectorCompleter); return; } - + if (selector == "b") { branchesModel->readBranches(); @@ -262,7 +250,7 @@ void SelectRevision::setCompleter(int in selectorValue->setCompleter(selectorCompleter); return; } - + if (selector == "i") { selectorCompleter = new QCompleter( @@ -284,7 +272,7 @@ void SelectRevision::setCompleter(int in selectorValue->setCompleter(selectorCompleter); return; } - + if (selector == "c") { selectorCompleter = new QCompleter( @@ -330,57 +318,44 @@ void SelectRevision::enableDiffButtons(c selectSecond->setEnabled(true); } -void SelectRevision::showDiffDialog() +void SelectRevision::openDiffDialog() { I(firstRevision.size() > 0 && secondRevision.size() > 0); - - RevisionDiff dlg(this); - dlg.init(".", firstRevision, secondRevision); - dlg.exec(); + emit revisionDiff (".", firstRevision, secondRevision); } void SelectRevision::readCerts(const QModelIndex & index) { if (!index.isValid()) return; - - QString rev(index.data().toString()); - - if (!certsModel->readCerts(rev)) - { - C(QString("Couldn't read certs for %1").arg(rev)); - } -} -void SelectRevision::openManifestDialog(const QString & rev) -{ - RevisionManifest dlg(this, rev); - dlg.exec(); + QString rev(index.data().toString()); + certsModel->readCerts(rev); } void SelectRevision::revListDoubleClicked(const QModelIndex & index) { if (!index.isValid()) return; - openManifestDialog(index.data().toString()); + emit revisionManifest(index.data().toString()); } void SelectRevision::contextMenuRequested(const QModelIndexList & indexList, const QPoint & pos) { if (indexList.size() == 0) return; QString rev(indexList.at(0).data().toString()); - + QMenu menu(this); QFont activeFont; activeFont.setBold(true); - + QAction * actOpenManifest = menu.addAction(tr("View files in this revision")); actOpenManifest->setFont(activeFont); QAction * actSetFirstRevision = menu.addAction(tr("Select as first revision")); QAction * actSetSecondRevision = menu.addAction(tr("Select as second revision")); - + QAction * act = menu.exec(pos); if (act == actOpenManifest) { - openManifestDialog(rev); + emit revisionManifest(rev); } else if (act == actSetFirstRevision) { ============================================================ --- src/view/dialogs/SelectRevision.h 23e1f02d0da51fcf7ffe720b5d346a0f36e98a7a +++ src/view/dialogs/SelectRevision.h d58f7a788ae6addc55a00edfceaa774cf7dc7317 @@ -34,17 +34,20 @@ class SelectRevision : public Dialog, pr class SelectRevision : public Dialog, private Ui::SelectRevision { - Q_OBJECT - + Q_OBJECT public: - SelectRevision(QWidget *); - ~SelectRevision(); + SelectRevision(QWidget *, const QString &); + ~SelectRevision(); inline QString getSelectedRevision() const { return currentRevision; } void queryRevisions(const QString &); +signals: + void revisionDiff(const QString &, const QString &, const QString &); + void revisionManifest(const QString &); + private: void openManifestDialog(const QString &); - + Select * selectorModel; Toposort * sortModel; Certs * certsModel; @@ -52,11 +55,12 @@ private: Tags * tagsModel; Keys * keysModel; QCompleter * selectorCompleter; - + QString firstRevision; QString secondRevision; QString currentRevision; - + QString databaseFile; + private slots: void triggerRevisionSearch(); void handleInvalidSelection(QString); @@ -65,10 +69,10 @@ private slots: void setFirstRevision(); void setSecondRevision(); void enableDiffButtons(const QModelIndex &); - void showDiffDialog(); + void openDiffDialog(); void readCerts(const QModelIndex &); void revListDoubleClicked(const QModelIndex &); void contextMenuRequested(const QModelIndexList &, const QPoint &); }; - + #endif