1
2
3 #include "versioncontrolwidget.h"
4
5 #include <QLabel>
6 #include <QVBoxLayout>
7 #include <QSpinBox>
8 #include <QTimeEdit>
9 #include <QTextEdit>
10 #include <QDateTimeEdit>
11 #include <QRadioButton>
12
13 //=============================================================================
14 // DateChooserWidget
15 //-----------------------------------------------------------------------------
16
DateChooserWidget(QWidget * parent)17 DateChooserWidget::DateChooserWidget(QWidget *parent)
18 : QWidget(parent), m_selectedRadioIndex(0) {
19 QVBoxLayout *mainLayout = new QVBoxLayout;
20 mainLayout->setMargin(0);
21 mainLayout->setAlignment(Qt::AlignTop);
22
23 // Time
24 QHBoxLayout *timeLayout = new QHBoxLayout;
25
26 m_timeRadioButton = new QRadioButton;
27 m_timeRadioButton->setChecked(true);
28 connect(m_timeRadioButton, SIGNAL(clicked()), this,
29 SLOT(onRadioButtonClicked()));
30
31 m_timeEdit = new QTimeEdit;
32 m_timeEdit->setDisplayFormat("hh:mm");
33
34 timeLayout->addWidget(m_timeRadioButton);
35 timeLayout->addWidget(m_timeEdit);
36 timeLayout->addWidget(new QLabel(tr("time ago.")));
37 timeLayout->addStretch();
38 mainLayout->addLayout(timeLayout);
39
40 // Days
41 QHBoxLayout *dayLayout = new QHBoxLayout;
42
43 m_dayRadioButton = new QRadioButton;
44 connect(m_dayRadioButton, SIGNAL(clicked()), this,
45 SLOT(onRadioButtonClicked()));
46
47 m_dayEdit = new QSpinBox;
48 m_dayEdit->setRange(1, 99);
49 m_dayEdit->setValue(1);
50 m_dayEdit->setEnabled(false);
51
52 dayLayout->addWidget(m_dayRadioButton);
53 dayLayout->addWidget(m_dayEdit);
54 dayLayout->addWidget(new QLabel(tr("days ago.")));
55 dayLayout->addStretch();
56 mainLayout->addLayout(dayLayout);
57
58 // Weeks
59 QHBoxLayout *weekLayout = new QHBoxLayout;
60
61 m_weekRadioButton = new QRadioButton;
62 connect(m_weekRadioButton, SIGNAL(clicked()), this,
63 SLOT(onRadioButtonClicked()));
64
65 m_weekEdit = new QSpinBox;
66 m_weekEdit->setRange(1, 99);
67 m_weekEdit->setValue(1);
68 m_weekEdit->setEnabled(false);
69
70 weekLayout->addWidget(m_weekRadioButton);
71 weekLayout->addWidget(m_weekEdit);
72 weekLayout->addWidget(new QLabel(tr("weeks ago.")));
73 weekLayout->addStretch();
74 mainLayout->addLayout(weekLayout);
75
76 // Custom date
77 QHBoxLayout *customDateLayout = new QHBoxLayout;
78
79 m_dateRadioButton = new QRadioButton;
80 connect(m_dateRadioButton, SIGNAL(clicked()), this,
81 SLOT(onRadioButtonClicked()));
82
83 m_dateTimeEdit = new QDateTimeEdit;
84 m_dateTimeEdit->setDisplayFormat("yyyy-MM-dd hh:mm");
85 QDate now = QDate::currentDate();
86 m_dateTimeEdit->setMaximumDate(now);
87 m_dateTimeEdit->setDate(now);
88 m_dateTimeEdit->setEnabled(false);
89 m_dateTimeEdit->setCalendarPopup(true);
90
91 customDateLayout->addWidget(m_dateRadioButton);
92 customDateLayout->addWidget(m_dateTimeEdit);
93 customDateLayout->addWidget(new QLabel(tr("( Custom date )")));
94 customDateLayout->addStretch();
95 mainLayout->addLayout(customDateLayout);
96
97 setLayout(mainLayout);
98 }
99
100 //-----------------------------------------------------------------------------
101
disableAllWidgets()102 void DateChooserWidget::disableAllWidgets() {
103 m_timeEdit->setEnabled(false);
104 m_dayEdit->setEnabled(false);
105 m_weekEdit->setEnabled(false);
106 m_dateTimeEdit->setEnabled(false);
107 }
108
109 //-----------------------------------------------------------------------------
110
onRadioButtonClicked()111 void DateChooserWidget::onRadioButtonClicked() {
112 QObject *obj = sender();
113 QRadioButton *button = dynamic_cast<QRadioButton *>(obj);
114
115 if (!button) return;
116
117 disableAllWidgets();
118
119 if (button == m_timeRadioButton) {
120 m_timeEdit->setEnabled(true);
121 m_selectedRadioIndex = 0;
122 } else if (button == m_dayRadioButton) {
123 m_dayEdit->setEnabled(true);
124 m_selectedRadioIndex = 1;
125 } else if (button == m_weekRadioButton) {
126 m_weekEdit->setEnabled(true);
127 m_selectedRadioIndex = 2;
128 } else if (button == m_dateRadioButton) {
129 m_dateTimeEdit->setEnabled(true);
130 m_selectedRadioIndex = 3;
131 }
132 }
133
134 //-----------------------------------------------------------------------------
135
getRevisionString() const136 QString DateChooserWidget::getRevisionString() const {
137 QString timeString;
138 QString dateString;
139
140 QDate today = QDate::currentDate();
141
142 if (m_selectedRadioIndex == 0) // Time
143 {
144 QTime currentTime = QTime::currentTime();
145 QTime t = m_timeEdit->time();
146 int seconds = t.hour() * 60 * 60 + t.minute() * 60;
147 currentTime = currentTime.addSecs(-seconds);
148 timeString = currentTime.toString("hh:mm");
149 dateString = today.toString("yyyy-MM-dd");
150 } else if (m_selectedRadioIndex == 1) // Days
151 {
152 timeString = "00:00";
153 today = today.addDays(-(m_dayEdit->value()));
154 dateString = today.toString("yyyy-MM-dd");
155 } else if (m_selectedRadioIndex == 2) // Weeks
156 {
157 timeString = "00:00";
158 today = today.addDays(-(m_weekEdit->value() * 7));
159 dateString = today.toString("yyyy-MM-dd");
160 } else // Custom date
161 {
162 QTime time = m_dateTimeEdit->time();
163 timeString = time.toString("hh:mm");
164
165 QDate date = m_dateTimeEdit->date();
166 dateString = date.toString("yyyy-MM-dd");
167 }
168
169 return "{" + dateString + " " + timeString + "}";
170 }
171
172 //-----------------------------------------------------------------------------
173
174 //=============================================================================
175 // ConflictWidget
176 //-----------------------------------------------------------------------------
177
ConflictWidget(QWidget * parent)178 ConflictWidget::ConflictWidget(QWidget *parent)
179 : QWidget(parent), m_button1Text(tr("Mine")), m_button2Text(tr("Theirs")) {
180 m_mainLayout = new QVBoxLayout;
181 m_mainLayout->setMargin(0);
182 m_mainLayout->setAlignment(Qt::AlignTop);
183 setLayout(m_mainLayout);
184 }
185
186 //-----------------------------------------------------------------------------
187
setFiles(const QStringList & files)188 void ConflictWidget::setFiles(const QStringList &files) {
189 DoubleRadioWidget *radio = 0;
190 int fileCount = files.size();
191 for (int i = 0; i < fileCount; i++) {
192 radio = new DoubleRadioWidget(m_button1Text, m_button2Text, files.at(i));
193 connect(radio, SIGNAL(valueChanged()), this, SLOT(onRadioValueChanged()));
194 m_mainLayout->addWidget(radio);
195 m_radios.insert(radio, -1);
196 }
197 m_mainLayout->addStretch();
198 }
199
200 //-----------------------------------------------------------------------------
201
onRadioValueChanged()202 void ConflictWidget::onRadioValueChanged() {
203 DoubleRadioWidget *obj = dynamic_cast<DoubleRadioWidget *>(sender());
204 if (obj) m_radios[obj] = obj->getValue();
205
206 if (!m_radios.values().contains(-1)) emit allConflictSetted();
207 }
208
209 //-----------------------------------------------------------------------------
210
getFilesWithOption(int option) const211 QStringList ConflictWidget::getFilesWithOption(int option) const {
212 QStringList files;
213 QMap<DoubleRadioWidget *, int>::const_iterator i;
214 for (i = m_radios.constBegin(); i != m_radios.constEnd(); ++i) {
215 if (i.value() == option) files << i.key()->getText();
216 }
217 return files;
218 }
219
220 //=============================================================================
221 // DoubleRadioWidget
222 //-----------------------------------------------------------------------------
223
DoubleRadioWidget(const QString & button1Text,const QString & button2Text,const QString & text,QWidget * parent)224 DoubleRadioWidget::DoubleRadioWidget(const QString &button1Text,
225 const QString &button2Text,
226 const QString &text, QWidget *parent)
227 : QWidget(parent)
228
229 {
230 QHBoxLayout *mainLayout = new QHBoxLayout;
231 mainLayout->setMargin(0);
232
233 m_firstButton = new QRadioButton(button1Text);
234 connect(m_firstButton, SIGNAL(clicked()), this, SIGNAL(valueChanged()));
235 m_secondButton = new QRadioButton(button2Text);
236 connect(m_secondButton, SIGNAL(clicked()), this, SIGNAL(valueChanged()));
237
238 m_label = new QLabel;
239 m_label->setFixedWidth(180);
240 m_label->setText(text);
241
242 mainLayout->addWidget(m_label);
243 mainLayout->addSpacing(20);
244 mainLayout->addWidget(m_firstButton);
245 mainLayout->addWidget(m_secondButton);
246
247 setLayout(mainLayout);
248 }
249
250 //-----------------------------------------------------------------------------
251
getValue() const252 int DoubleRadioWidget::getValue() const {
253 if (m_firstButton->isChecked())
254 return 0;
255 else if (m_secondButton->isChecked())
256 return 1;
257 else
258 return -1;
259 }
260
261 //-----------------------------------------------------------------------------
262
getText() const263 QString DoubleRadioWidget::getText() const { return m_label->text(); }
264