From 81bf2ec154f8a98269040b1e185d9b59d2c6f3e9 Mon Sep 17 00:00:00 2001 From: Petar Perisin Date: Sun, 16 Dec 2012 20:35:58 +0100 Subject: 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 Reviewed-by: Tobias Hunger --- src/plugins/git/branchcheckoutdialog.cpp | 88 ++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/plugins/git/branchcheckoutdialog.cpp (limited to 'src/plugins/git/branchcheckoutdialog.cpp') 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 + -- cgit v1.2.1