diff options
author | Friedemann Kleint <[email protected]> | 2009-01-07 12:58:31 +0100 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2009-01-07 12:58:31 +0100 |
commit | 352cf143535605d7e5488b33e395ce82c8c413fb (patch) | |
tree | 916bf26ecdc482bc88990f82018a2b5ad7f194ea /src/plugins/git/branchmodel.h | |
parent | 800baec88b60760404a7534ca451fbda506910b5 (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.h | 79 |
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; }; } |