# # # patch "src/view/dialogs/CheckoutRevision.cpp" # from [2f1434555459a66f555c07212473d891f4faf3a6] # to [9f44333eed1f9a6fb8d71649b411e7a7e3953522] # # patch "src/view/dialogs/CheckoutRevision.h" # from [c2406fda2ad112fc53938b47b334d316d3ed6e37] # to [3dda8ca65b998395464e71944bbc869a1fca6712] # ============================================================ --- src/view/dialogs/CheckoutRevision.cpp 2f1434555459a66f555c07212473d891f4faf3a6 +++ src/view/dialogs/CheckoutRevision.cpp 9f44333eed1f9a6fb8d71649b411e7a7e3953522 @@ -19,63 +19,70 @@ ***************************************************************************/ #include "CheckoutRevision.h" -#include "SelectRevision.h" -#include "MonotoneDelegate.h" +#include "MonotoneUtil.h" #include "Settings.h" #include -CheckoutRevision::CheckoutRevision(QWidget* parent) - : Dialog(parent) +CheckoutRevision::CheckoutRevision(QWidget * parent, const QString & database) + : Dialog(parent), databaseFile(database) { setupUi(this); Dialog::init(); - + // OSX sheet-alike dialog setWindowFlags(Qt::Sheet); - - branchesModel = new Branches(this, false); + + branchesModel = new Branches(this, databaseFile, false); branchesModel->readBranches(); branchList->setModel(branchesModel); - - tagsModel = new Tags(this); + + tagsModel = new Tags(this, databaseFile); tagsModel->readTags(QString()); tagList->setModel(tagsModel); - + selectorCompleter = new QCompleter( Settings::getItemList("RecentCheckoutSelectors"), this ); - + selectorCompleter->setCaseSensitivity(Qt::CaseInsensitive); selectedRevision->setCompleter(selectorCompleter); - + localCheckoutPath->setText(QDir::homePath()); - + connect( selectRevision, SIGNAL(clicked()), this, SLOT(slotSelectRevision()) ); - + connect( branchList, SIGNAL(activated(int)), this, SLOT(selectBranchOption()) ); - + connect( tagList, SIGNAL(activated(int)), this, SLOT(selectTagOption()) ); - + connect( selectedRevision, SIGNAL(textChanged(const QString &)), this, SLOT(selectSelectorOption()) ); - + connect( browseDirs, SIGNAL(clicked()), this, SLOT(openDirBrowser()) ); + + // FIXME: this is a bit hacky, because we assume that the parent, i.e. + // the MainWindow by convention, signals the outcome of a successful + // revision selection through the SelectRevision dialog + connect( + parent, SIGNAL(revisionSelected(const QString &)), + this, SLOT(setSelectedRevision(const QString &)) + ); } CheckoutRevision::~CheckoutRevision() @@ -88,7 +95,7 @@ void CheckoutRevision::accept() void CheckoutRevision::accept() { QString selector; - + if (checkoutByBranch->isChecked()) { QString selection(branchList->currentText()); @@ -104,7 +111,7 @@ void CheckoutRevision::accept() } selector = "h:" + selection; } - + if (checkoutByTag->isChecked()) { QString selection(tagList->currentText()); @@ -120,7 +127,7 @@ void CheckoutRevision::accept() } selector = "t:" + selection; } - + if (checkoutByRevision->isChecked()) { QString selection = selectedRevision->text(); @@ -137,9 +144,9 @@ void CheckoutRevision::accept() selector = selection; Settings::addItemToList("RecentCheckoutSelectors", selection, 10); } - - QStringList revList(MonotoneDelegate::resolveSelector(this, selector)); - + + QStringList revList(MonotoneUtil::resolveSelector(databaseFile, selector)); + if (revList.size() == 0) { QMessageBox::warning( @@ -150,7 +157,7 @@ void CheckoutRevision::accept() ); return; } - + if (revList.size() > 1) { QMessageBox::information( @@ -159,14 +166,14 @@ void CheckoutRevision::accept() tr("Your selection matched multiple revisions. Please choose one."), QMessageBox::Ok ); - - openSelectRevision(selector); + + emit selectRevisionFromSelector(selector); return; } - + QString checkoutPath = localCheckoutPath->text(); QDir checkoutDir(checkoutPath); - + // check if the dir exists, and if not, create it if (!checkoutDir.exists()) { @@ -177,9 +184,9 @@ void CheckoutRevision::accept() "do you want to create it?"), QMessageBox::Yes | QMessageBox::No ); - + if (btn == QMessageBox::No) return; - + checkoutDir.setPath(QDir::rootPath()); if (!checkoutDir.mkpath(checkoutPath)) { @@ -208,8 +215,8 @@ void CheckoutRevision::accept() ); return; } - - QDir::Filters filters = QDir::NoDotAndDotDot | QDir::AllEntries | + + QDir::Filters filters = QDir::NoDotAndDotDot | QDir::AllEntries | QDir::Hidden | QDir::System; // ensure the user acknowledges that a directory may not be empty if (checkoutDir.entryList(filters).size() > 0) @@ -221,13 +228,13 @@ void CheckoutRevision::accept() "Do you want to continue?"), QMessageBox::Yes | QMessageBox::No ); - + if (btn == QMessageBox::No) return; } - + selectedRevisionId = revList.at(0); selectedCheckoutDirectory = checkoutDir; - + D(QString("Selected %1 to be checked out to %2").arg(selectedRevisionId) .arg(selectedCheckoutDirectory.absolutePath()) ); @@ -236,26 +243,12 @@ void CheckoutRevision::slotSelectRevisio void CheckoutRevision::slotSelectRevision() { - openSelectRevision(QString()); + emit selectRevisionFromSelector(QString()); } -void CheckoutRevision::openSelectRevision(const QString & selector) +void CheckoutRevision::setSelectedRevision(const QString & revision) { - hide(); - - SelectRevision dlg(parentWidget()); - - if (selector.size() > 0) - { - dlg.queryRevisions(selector); - } - - if (dlg.execDocumentModal() == QDialog::Accepted) - { - selectedRevision->setText(dlg.getSelectedRevision()); - } - - show(); + selectedRevision->setText(revision); } void CheckoutRevision::selectBranchOption() @@ -278,7 +271,7 @@ void CheckoutRevision::openDirBrowser() QString fn = QFileDialog::getExistingDirectory( this, tr("Select a directory for checkout...") ); - + if (!fn.isEmpty()) { localCheckoutPath->setText(fn); ============================================================ --- src/view/dialogs/CheckoutRevision.h c2406fda2ad112fc53938b47b334d316d3ed6e37 +++ src/view/dialogs/CheckoutRevision.h 3dda8ca65b998395464e71944bbc869a1fca6712 @@ -31,24 +31,29 @@ class CheckoutRevision : public Dialog, class CheckoutRevision : public Dialog, private Ui::CheckoutRevision { - Q_OBJECT + Q_OBJECT public: - CheckoutRevision(QWidget *); - ~CheckoutRevision(); + CheckoutRevision(QWidget *, const QString &); + ~CheckoutRevision(); inline QString getSelectedRevision() const { return selectedRevisionId; } inline QDir getSelectedCheckoutDirectory() const { return selectedCheckoutDirectory; } +public slots: + void setSelectedRevision(const QString &); + +signals: + void selectRevisionFromSelector(const QString &); + private: - void openSelectRevision(const QString &); - Branches * branchesModel; Tags * tagsModel; QCompleter * selectorCompleter; QString selectedRevisionId; QDir selectedCheckoutDirectory; + QString databaseFile; private slots: void slotSelectRevision(); @@ -58,5 +63,5 @@ private slots: void selectSelectorOption(); void openDirBrowser(); }; - + #endif