diff --git a/git/pushdialog.cpp b/git/pushdialog.cpp index 2021670..72380c9 100644 --- a/git/pushdialog.cpp +++ b/git/pushdialog.cpp @@ -1,169 +1,171 @@ /****************************************************************************** * Copyright (C) 2010 by Sebastian Doerner * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ******************************************************************************/ #include "pushdialog.h" #include "gitwrapper.h" #include #include #include #include #include #include #include #include #include #include PushDialog::PushDialog (QWidget* parent ): QDialog (parent, Qt::Dialog) { this->setWindowTitle(xi18nc("@title:window", "Git Push")); m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); QWidget *mainWidget = new QWidget(this); QVBoxLayout *mainLayout = new QVBoxLayout; this->setLayout(mainLayout); mainLayout->addWidget(mainWidget); QPushButton *okButton = m_buttonBox->button(QDialogButtonBox::Ok); okButton->setDefault(true); okButton->setShortcut(Qt::CTRL | Qt::Key_Return); this->connect(m_buttonBox, SIGNAL(accepted()), this, SLOT(accept())); this->connect(m_buttonBox, SIGNAL(rejected()), this, SLOT(reject())); m_buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); okButton->setText(i18nc("@action:button", "Push")); QWidget * boxWidget = new QWidget(this); QVBoxLayout * boxLayout = new QVBoxLayout(boxWidget); mainLayout->addWidget(boxWidget); //Destination QGroupBox * destinationGroupBox = new QGroupBox(boxWidget); mainLayout->addWidget(destinationGroupBox); boxLayout->addWidget(destinationGroupBox); destinationGroupBox->setTitle(i18nc("@title:group The remote host", "Destination")); QHBoxLayout * destinationHBox = new QHBoxLayout(destinationGroupBox); destinationGroupBox->setLayout(destinationHBox); QLabel * remoteLabel = new QLabel(i18nc("@label:listbox a git remote", "Remote:"), destinationGroupBox); destinationHBox->addWidget(remoteLabel); m_remoteComboBox = new QComboBox(destinationGroupBox); destinationHBox->addWidget(m_remoteComboBox); destinationHBox->addStretch(); //Branches QGroupBox* branchesGroupBox = new QGroupBox(boxWidget); mainLayout->addWidget(branchesGroupBox); boxLayout->addWidget(branchesGroupBox); branchesGroupBox->setTitle(i18nc("@title:group", "Branches")); QHBoxLayout * branchesHBox = new QHBoxLayout(branchesGroupBox); branchesGroupBox->setLayout(branchesHBox); QLabel * localBranchLabel = new QLabel(i18nc("@label:listbox", "Local Branch:"), branchesGroupBox); branchesHBox->addWidget(localBranchLabel); m_localBranchComboBox = new QComboBox(branchesGroupBox); branchesHBox->addWidget(m_localBranchComboBox); branchesHBox->addStretch(); QLabel * remoteBranchLabel = new QLabel(i18nc("@label:listbox", "Remote Branch:"), branchesGroupBox); branchesHBox->addWidget(remoteBranchLabel); m_remoteBranchComboBox = new QComboBox(branchesGroupBox); branchesHBox->addWidget(m_remoteBranchComboBox); QGroupBox* optionsGroupBox = new QGroupBox(boxWidget); mainLayout->addWidget(optionsGroupBox); boxLayout->addWidget(optionsGroupBox); optionsGroupBox->setTitle(i18nc("@title:group", "Options")); QHBoxLayout * optionsHBox = new QHBoxLayout(optionsGroupBox); optionsGroupBox->setLayout(optionsHBox); m_forceCheckBox = new QCheckBox(i18nc("@option:check", "Force"), optionsGroupBox); m_forceCheckBox->setToolTip(i18nc("@info:tooltip", "Proceed even if the remote branch is not an ancestor of the local branch.")); optionsHBox->addWidget(m_forceCheckBox); mainLayout->addWidget(m_buttonBox); //populate UI GitWrapper * gitWrapper = GitWrapper::instance(); //get destinations QStringList remotes = gitWrapper->pushRemotes(); m_remoteComboBox->addItems(remotes); //get branch names int currentBranchIndex; QStringList branches = gitWrapper->branches(¤tBranchIndex); foreach (const QString& branch, branches) { if (branch.startsWith(QLatin1String("remotes/"))) { const QString remote = branch.section('/', 1, 1); const QString name = branch.section('/', 2); m_remoteBranches[remote] << name; } else { m_localBranchComboBox->addItem(branch); } } - m_localBranchComboBox->setCurrentText(branches.at(currentBranchIndex)); + if (currentBranchIndex >= 0) { + m_localBranchComboBox->setCurrentText(branches.at(currentBranchIndex)); + } remoteSelectionChanged(m_remoteComboBox->currentText()); //Signals connect(m_remoteComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(remoteSelectionChanged(QString))); connect(m_localBranchComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(localBranchSelectionChanged(QString))); } QString PushDialog::destination() const { return m_remoteComboBox->currentText(); } QString PushDialog::localBranch() const { return m_localBranchComboBox->currentText(); } QString PushDialog::remoteBranch() const { return m_remoteBranchComboBox->currentText(); } bool PushDialog::force() const { return m_forceCheckBox->isChecked(); } void PushDialog::remoteSelectionChanged(const QString& newRemote) { m_remoteBranchComboBox->clear(); m_remoteBranchComboBox->addItems(m_remoteBranches.value(newRemote)); localBranchSelectionChanged(m_localBranchComboBox->currentText()); } void PushDialog::localBranchSelectionChanged(const QString& newLocalBranch) { //select matching remote branch if possible const int index = m_remoteBranchComboBox->findText(newLocalBranch); if (index != -1) { m_remoteBranchComboBox->setCurrentIndex(index); } QPushButton *okButton = m_buttonBox->button(QDialogButtonBox::Ok); okButton->setEnabled(m_remoteBranchComboBox->count() > 0); }