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>
This commit is contained in:
Petar Perisin
2012-12-16 20:35:58 +01:00
committed by Tobias Hunger
parent 7df112b687
commit 81bf2ec154
6 changed files with 331 additions and 4 deletions

View File

@@ -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