aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/branchdialog.h
blob: 064719b8ff045167b67ceaf2524f105e302a3bd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef BRANCHDIALOG_H
#define BRANCHDIALOG_H

#include <QtGui/QDialog>

QT_BEGIN_NAMESPACE
class QPushButton;
QT_END_NAMESPACE

namespace Git {
    namespace Internal {
        namespace Ui {
            class BranchDialog;
        }

        class GitClient;
        class BranchModel;

        /* Branch dialog: Display a list of local branches at the top
         * and remote branches below. Offers to checkout/delete local
         * branches.
         * TODO: Add new branch (optionally tracking a remote one).
         * How to find out that a local branch is a tracking one? */
        class BranchDialog : public QDialog {
            Q_OBJECT
            Q_DISABLE_COPY(BranchDialog)
        public:
            explicit BranchDialog(QWidget *parent = 0);

            bool init(GitClient *client, const QString &workingDirectory, QString *errorMessage);

            virtual ~BranchDialog();

        protected:
            virtual void changeEvent(QEvent *e);

        private slots:
            void slotEnableButtons();
            void slotCheckoutSelectedBranch();
            void slotDeleteSelectedBranch();
            void slotLocalBranchActivated();

        private:
            bool ask(const QString &title, const QString &what, bool defaultButton);

            int selectedLocalBranchIndex() const;
            int selectedRemoteBranchIndex() const;

            GitClient *m_client;
            Ui::BranchDialog *m_ui;
            QPushButton *m_checkoutButton;
            QPushButton *m_deleteButton;

            BranchModel *m_localModel;
            BranchModel *m_remoteModel;
            QString m_repoDirectory;
        };
    } // namespace Internal
} // namespace Git
#endif // BRANCHDIALOG_H