diff options
author | Petar Perisin <petar.perisin@gmail.com> | 2012-12-16 20:35:58 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@digia.com> | 2013-01-07 15:33:20 +0100 |
commit | 81bf2ec154f8a98269040b1e185d9b59d2c6f3e9 (patch) | |
tree | 445b19a8c792f65762e5ce03af78229f749e2eb2 /src/plugins/git/branchcheckoutdialog.cpp | |
parent | 7df112b687c8694153ef3a5938921104b6e75115 (diff) | |
download | qt-creator-81bf2ec154f8a98269040b1e185d9b59d2c6f3e9.tar.gz |
Git: Auto stash for branches
Allow user to handle local changes when switching branches.
Task-number: QTCREATORBUG-8417
Change-Id: I62d615aadfbd81c8ae03f3cd292b98773a36e1e7
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins/git/branchcheckoutdialog.cpp')
-rw-r--r-- | src/plugins/git/branchcheckoutdialog.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/plugins/git/branchcheckoutdialog.cpp b/src/plugins/git/branchcheckoutdialog.cpp new file mode 100644 index 0000000000..fc0c34aefa --- /dev/null +++ b/src/plugins/git/branchcheckoutdialog.cpp @@ -0,0 +1,88 @@ +#include "branchcheckoutdialog.h" +#include "ui_branchcheckoutdialog.h" + +namespace Git { +namespace Internal { + +BranchCheckoutDialog::BranchCheckoutDialog(QWidget *parent, + const QString& currentBranch, + const QString& nextBranch) : + QDialog(parent), + m_ui(new Ui::BranchCheckoutDialog), + m_foundStashForNextBranch(false), + m_hasLocalChanges(true) +{ + m_ui->setupUi(this); + + setWindowTitle(tr("Checkout branch \"%1\"").arg(nextBranch)); + m_ui->moveChangesRadioButton->setText(tr("Move Local Changes to \"%1\"").arg(nextBranch)); + m_ui->popStashCheckBox->setText(tr("Pop Stash of \"%1\"").arg(nextBranch)); + + if (!currentBranch.isEmpty()) { + m_ui->makeStashRadioButton->setText(tr("Create Branch Stash for \"%1\"").arg(currentBranch)); + } else { + m_ui->makeStashRadioButton->setText(tr("Create Branch Stash for Current Branch")); + foundNoLocalChanges(); + } + + connect(m_ui->moveChangesRadioButton, SIGNAL(toggled(bool)), this, SLOT(updatePopStashCheckBox(bool))); +} + +BranchCheckoutDialog::~BranchCheckoutDialog() +{ + delete m_ui; +} + +void BranchCheckoutDialog::foundNoLocalChanges() +{ + m_ui->discardChangesRadioButton->setChecked(true); + m_ui->localChangesGroupBox->setEnabled(false); + m_hasLocalChanges = false; +} + +void BranchCheckoutDialog::foundStashForNextBranch() +{ + m_ui->popStashCheckBox->setChecked(true); + m_ui->popStashCheckBox->setEnabled(true); + m_foundStashForNextBranch = true; +} + +bool BranchCheckoutDialog::makeStashOfCurrentBranch() +{ + return m_ui->makeStashRadioButton->isChecked(); +} + +bool BranchCheckoutDialog::moveLocalChangesToNextBranch() +{ + return m_ui->moveChangesRadioButton->isChecked(); +} + +bool BranchCheckoutDialog::discardLocalChanges() +{ + return m_ui->discardChangesRadioButton->isChecked() && m_ui->localChangesGroupBox->isEnabled(); +} + +bool BranchCheckoutDialog::popStashOfNextBranch() +{ + return m_ui->popStashCheckBox->isChecked(); +} + +bool BranchCheckoutDialog::hasStashForNextBranch() +{ + return m_foundStashForNextBranch; +} + +bool BranchCheckoutDialog::hasLocalChanges() +{ + return m_hasLocalChanges; +} + +void BranchCheckoutDialog::updatePopStashCheckBox(bool moveChangesChecked) +{ + m_ui->popStashCheckBox->setChecked(!moveChangesChecked && m_foundStashForNextBranch); + m_ui->popStashCheckBox->setEnabled(!moveChangesChecked && m_foundStashForNextBranch); +} + +} // namespace Internal +} // namespace Git + |