1#pragma once
2
3/****************************************************************************************
4 ** GitQlient is an application to manage and operate one or several Git repositories. With
5 ** GitQlient you will be able to add commits, branches and manage all the options Git provides.
6 ** Copyright (C) 2021 Francesc Martinez
7 **
8 ** LinkedIn: www.linkedin.com/in/cescmm/
9 ** Web: www.francescmm.com
10 **
11 ** This program is free software; you can redistribute it and/or
12 ** modify it under the terms of the GNU Lesser General Public
13 ** License as published by the Free Software Foundation; either
14 ** version 2 of the License, or (at your option) any later version.
15 **
16 ** This program is distributed in the hope that it will be useful,
17 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 ** Lesser General Public License for more details.
20 **
21 ** You should have received a copy of the GNU Lesser General Public
22 ** License along with this library; if not, write to the Free Software
23 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 ***************************************************************************************/
25
26#include <QFrame>
27
28class QToolButton;
29class QPushButton;
30class GitBase;
31class GitCache;
32class GitTags;
33class GitCache;
34class QNetworkAccessManager;
35class QProgressBar;
36class GitQlientUpdater;
37class QButtonGroup;
38class QHBoxLayout;
39class PomodoroButton;
40
41/*!
42 \brief Enum used to configure the different views handled by the Controls widget.
43
44*/
45enum class ControlsMainViews
46{
47 History,
48 Diff,
49 Blame,
50 Merge,
51 GitServer,
52 BuildSystem,
53 Config
54};
55
56/*!
57 \brief The Controls class creates the layout to store all the buttons that acts over the UI current view and the most
58 used Git actions.
59
60*/
61class Controls : public QFrame
62{
63 Q_OBJECT
64
65signals:
66 /*!
67 \brief Signal triggered when the user wants to go to the main repository view.
68
69 */
70 void signalGoRepo();
71 /*!
72 \brief Signal triggered when the user selects the diff view.
73
74 */
75 void signalGoDiff();
76 /*!
77 \brief Signal triggered when the user selects the Blame&History view.
78
79 */
80 void signalGoBlame();
81 /*!
82 \brief Signal triggered when the user selects the merge conflict resolution view.
83
84 */
85 void signalGoMerge();
86
87 /**
88 * @brief signalGoManagement Signal triggered when the user selected the Git remote platform view.
89 */
90 void signalGoServer();
91
92 /**
93 * @brief signalGoBuildSystem Signal triggered when the user selected the Build System view.
94 */
95 void signalGoBuildSystem();
96 /*!
97 * \brief Signal triggered when trying to pull and a conflict happens.
98 */
99 void signalPullConflict();
100
101 /**
102 * @brief signalRefreshPRsCache Signal that refreshes PRs cache.
103 */
104 void signalRefreshPRsCache();
105
106 /**
107 * @brief requestReload Signal triggered when the user forces a full refresh of the repository data.
108 */
109 void requestFullReload();
110
111 /**
112 * @brief requestReload Signal triggered when the user forces a refresh of the references of the repository.
113 */
114 void requestReferencesReload();
115
116 /**
117 * @brief goConfig Signal triggered when the user seleced the config view.
118 */
119 void goConfig();
120
121public:
122 /*!
123 \brief Default constructor.
124
125 \param git The git object to perform Git operations.
126 \param parent The parent widget if needed.
127 */
128 explicit Controls(const QSharedPointer<GitCache> &cache, const QSharedPointer<GitBase> &git,
129 QWidget *parent = nullptr);
130
131 /**
132 * @brief Destructor.
133 */
134 ~Controls();
135 /*!
136 \brief Process the toggled button and triggers its corresponding action.
137
138 \param view The view the user selected.
139 */
140 void toggleButton(ControlsMainViews view);
141 /*!
142 \brief Sets the current SHA.
143
144 \param sha The SHA hash.
145 */
146 void setCurrentSha(const QString &sha) { mCurrentSha = sha; }
147 /*!
148 \brief Set all the buttons as enabled.
149
150 \param enabled True to enable, false otherwise.
151 */
152 void enableButtons(bool enabled);
153 /*!
154 \brief Performs the fetch action. Can be triggered manually or by a timer.
155
156 */
157 void fetchAll();
158 /*!
159 \brief Activates the merge warning frame.
160
161 */
162 void activateMergeWarning();
163 /*!
164 \brief Disables the merge warning frame.
165
166 */
167 void disableMergeWarning();
168 /*!
169 \brief Disables the diff button and view.
170
171 */
172 void disableDiff();
173 /*!
174 \brief Enables the diff button and view.
175
176 */
177 void enableDiff();
178 /*!
179 \brief Gets the current selected button/view.
180
181 \return ControlsMainViews The value of the current selected button.
182 */
183 ControlsMainViews getCurrentSelectedButton() const;
184
185private:
186 QString mCurrentSha;
187 QSharedPointer<GitCache> mCache;
188 QSharedPointer<GitBase> mGit;
189 QSharedPointer<GitTags> mGitTags;
190 QToolButton *mHistory = nullptr;
191 QToolButton *mDiff = nullptr;
192 QToolButton *mBlame = nullptr;
193 QToolButton *mPullBtn = nullptr;
194 QToolButton *mPullOptions = nullptr;
195 QToolButton *mPushBtn = nullptr;
196 QToolButton *mRefreshBtn = nullptr;
197 QToolButton *mConfigBtn = nullptr;
198 QToolButton *mGitPlatform = nullptr;
199 QToolButton *mBuildSystem = nullptr;
200 PomodoroButton *mPomodoro = nullptr;
201 QToolButton *mVersionCheck = nullptr;
202 QPushButton *mMergeWarning = nullptr;
203 GitQlientUpdater *mUpdater = nullptr;
204 QButtonGroup *mBtnGroup = nullptr;
205 bool mGoGitServerView = false;
206
207 /*!
208 \brief Pulls the current branch.
209
210 */
211 void pullCurrentBranch();
212 /*!
213 \brief Pushes the current local branch changes.
214
215 */
216 void pushCurrentBranch();
217 /*!
218 \brief Prunes all branches, tags and stashes.
219
220 */
221 void pruneBranches();
222
223 /**
224 * @brief createGitPlatformButton Createst the git platform button if the user has enabled it.
225 */
226 void createGitPlatformButton(QHBoxLayout *layout);
227
228 /**
229 * @brief createBuildSystemButton Creates the build system platform button if the user has enabled it.
230 */
231 void configBuildSystemButton();
232
233 bool eventFilter(QObject *obj, QEvent *event);
234};
235