summaryrefslogtreecommitdiff
path: root/src/plugins/git/branchcheckoutdialog.cpp
diff options
context:
space:
mode:
authorPetar Perisin <petar.perisin@gmail.com>2012-12-16 20:35:58 +0100
committerTobias Hunger <tobias.hunger@digia.com>2013-01-07 15:33:20 +0100
commit81bf2ec154f8a98269040b1e185d9b59d2c6f3e9 (patch)
tree445b19a8c792f65762e5ce03af78229f749e2eb2 /src/plugins/git/branchcheckoutdialog.cpp
parent7df112b687c8694153ef3a5938921104b6e75115 (diff)
downloadqt-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.cpp88
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
+