aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/branchmodel.h
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2009-01-07 12:58:31 +0100
committerFriedemann Kleint <[email protected]>2009-01-07 12:58:31 +0100
commit352cf143535605d7e5488b33e395ce82c8c413fb (patch)
tree916bf26ecdc482bc88990f82018a2b5ad7f194ea /src/plugins/git/branchmodel.h
parent800baec88b60760404a7534ca451fbda506910b5 (diff)
Fixes: Add way to create a new local branch in the git plugin
Task: 205821 Details: Split up the branch model into remote branch base class and extended local branch class with <New Branch> row.
Diffstat (limited to 'src/plugins/git/branchmodel.h')
-rw-r--r--src/plugins/git/branchmodel.h79
1 files changed, 64 insertions, 15 deletions
diff --git a/src/plugins/git/branchmodel.h b/src/plugins/git/branchmodel.h
index 5083a1c377c..91b1ca84dc0 100644
--- a/src/plugins/git/branchmodel.h
+++ b/src/plugins/git/branchmodel.h
@@ -3,27 +3,25 @@
#include <QtCore/QAbstractListModel>
#include <QtCore/QList>
+#include <QtCore/QVariant>
namespace Git {
namespace Internal {
class GitClient;
-/* A model to list git branches in a simple list of branch names. Local
- * branches will have a read-only checkbox indicating the current one. The
- * [delayed] tooltip describes the latest commit. */
+/* A read-only model to list git remote branches in a simple list of branch names.
+ * The tooltip describes the latest commit (delayed creation).
+ * Provides virtuals to be able to derive a local branch model with the notion
+ * of a "current branch". */
-class BranchModel : public QAbstractListModel {
+class RemoteBranchModel : public QAbstractListModel {
+ Q_OBJECT
public:
- enum Type { LocalBranches, RemoteBranches };
+ explicit RemoteBranchModel(GitClient *client, QObject *parent = 0);
- explicit BranchModel(GitClient *client,
- Type type = LocalBranches,
- QObject *parent = 0);
-
- bool refresh(const QString &workingDirectory, QString *errorMessage);
+ virtual bool refresh(const QString &workingDirectory, QString *errorMessage);
- int currentBranch() const;
QString branchName(int row) const;
// QAbstractListModel
@@ -31,9 +29,12 @@ public:
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
-private:
- QString toolTip(const QString &sha) const;
+ int branchCount() const;
+ QString workingDirectory() const;
+ int findBranchByName(const QString &name) const;
+
+protected:
struct Branch {
bool parse(const QString &line, bool *isCurrent);
@@ -43,13 +44,61 @@ private:
};
typedef QList<Branch> BranchList;
- const Type m_type;
+ /* Parse git output and populate m_branches. */
+ bool refreshBranches(const QString &workingDirectory, bool remoteBranches,
+ int *currentBranch, QString *errorMessage);
+ bool runGitBranchCommand(const QString &workingDirectory, const QStringList &additionalArgs, QString *output, QString *errorMessage);
+
+private:
+ QString toolTip(const QString &sha) const;
+
const Qt::ItemFlags m_flags;
- GitClient *m_client;
+ GitClient *m_client;
QString m_workingDirectory;
BranchList m_branches;
+};
+
+/* LocalBranchModel: Extends RemoteBranchModel by a read-only
+ * checkable column indicating the current branch. Provides an
+ * editable "Type here" new-branch-row at the bottom to create
+ * a new branch. */
+
+class LocalBranchModel : public RemoteBranchModel {
+ Q_OBJECT
+public:
+
+ explicit LocalBranchModel(GitClient *client,
+ QObject *parent = 0);
+
+ virtual bool refresh(const QString &workingDirectory, QString *errorMessage);
+
+ // is this the "type here" row?
+ bool isNewBranchRow(int row) const;
+ bool isNewBranchRow(const QModelIndex & index) const { return isNewBranchRow(index.row()); }
+
+ int currentBranch() const;
+
+ // QAbstractListModel
+ virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+
+signals:
+ void newBranchCreated(const QString &);
+
+private slots:
+ void slotNewBranchDelayedRefresh();
+
+private:
+ bool checkNewBranchName(const QString &name) const;
+
+ const QVariant m_typeHere;
+ const QVariant m_typeHereToolTip;
+
int m_currentBranch;
+ QString m_newBranch;
};
}