Mercurial > hg > easyhg
comparison filestatuswidget.cpp @ 336:4229b6a8e9c6
Merge
author | Chris Cannam |
---|---|
date | Mon, 14 Mar 2011 10:00:29 +0000 |
parents | acfe9390d5c6 |
children | bb189827f6d1 |
comparison
equal
deleted
inserted
replaced
335:aa852b477e4d | 336:4229b6a8e9c6 |
---|---|
29 #include <QToolButton> | 29 #include <QToolButton> |
30 #include <QDir> | 30 #include <QDir> |
31 #include <QProcess> | 31 #include <QProcess> |
32 #include <QCheckBox> | 32 #include <QCheckBox> |
33 #include <QSettings> | 33 #include <QSettings> |
34 #include <QAction> | |
34 | 35 |
35 FileStatusWidget::FileStatusWidget(QWidget *parent) : | 36 FileStatusWidget::FileStatusWidget(QWidget *parent) : |
36 QWidget(parent), | 37 QWidget(parent), |
37 m_dateReference(0) | 38 m_dateReference(0) |
38 { | 39 { |
53 m_simpleLabels[FileStates::Removed] = tr("Removed:"); | 54 m_simpleLabels[FileStates::Removed] = tr("Removed:"); |
54 m_simpleLabels[FileStates::Missing] = tr("Missing:"); | 55 m_simpleLabels[FileStates::Missing] = tr("Missing:"); |
55 m_simpleLabels[FileStates::InConflict] = tr("In Conflict:"); | 56 m_simpleLabels[FileStates::InConflict] = tr("In Conflict:"); |
56 m_simpleLabels[FileStates::Unknown] = tr("Untracked:"); | 57 m_simpleLabels[FileStates::Unknown] = tr("Untracked:"); |
57 m_simpleLabels[FileStates::Ignored] = tr("Ignored:"); | 58 m_simpleLabels[FileStates::Ignored] = tr("Ignored:"); |
59 | |
60 m_actionLabels[FileStates::Annotate] = tr("Show annotated version"); | |
61 m_actionLabels[FileStates::Diff] = tr("Diff to parent"); | |
62 m_actionLabels[FileStates::Commit] = tr("Commit..."); | |
63 m_actionLabels[FileStates::Revert] = tr("Revert to last committed state"); | |
64 m_actionLabels[FileStates::Add] = tr("Add to version control"); | |
65 m_actionLabels[FileStates::Remove] = tr("Remove from version control"); | |
66 m_actionLabels[FileStates::RedoMerge] = tr("Redo merge"); | |
67 m_actionLabels[FileStates::MarkResolved] = tr("Mark conflict as resolved"); | |
68 m_actionLabels[FileStates::Ignore] = tr("Ignore"); | |
69 m_actionLabels[FileStates::UnIgnore] = tr("Stop ignoring"); | |
58 | 70 |
59 m_descriptions[FileStates::Clean] = tr("You have not changed these files."); | 71 m_descriptions[FileStates::Clean] = tr("You have not changed these files."); |
60 m_descriptions[FileStates::Modified] = tr("You have changed these files since you last committed them."); | 72 m_descriptions[FileStates::Modified] = tr("You have changed these files since you last committed them."); |
61 m_descriptions[FileStates::Added] = tr("These files will be added to version control next time you commit them."); | 73 m_descriptions[FileStates::Added] = tr("These files will be added to version control next time you commit them."); |
62 m_descriptions[FileStates::Removed] = tr("These files will be removed from version control next time you commit them.<br>" | 74 m_descriptions[FileStates::Removed] = tr("These files will be removed from version control next time you commit them.<br>" |
103 w->setSelectionMode(QListWidget::ExtendedSelection); | 115 w->setSelectionMode(QListWidget::ExtendedSelection); |
104 boxlayout->addWidget(w, 2, 0); | 116 boxlayout->addWidget(w, 2, 0); |
105 | 117 |
106 connect(w, SIGNAL(itemSelectionChanged()), | 118 connect(w, SIGNAL(itemSelectionChanged()), |
107 this, SLOT(itemSelectionChanged())); | 119 this, SLOT(itemSelectionChanged())); |
120 connect(w, SIGNAL(itemDoubleClicked(QListWidgetItem *)), | |
121 this, SLOT(itemDoubleClicked(QListWidgetItem *))); | |
122 | |
123 FileStates::Activities activities = m_fileStates.activitiesSupportedBy(s); | |
124 int prevGroup = -1; | |
125 foreach (FileStates::Activity a, activities) { | |
126 // Skip activities which are not yet implemented | |
127 if (a == FileStates::Ignore || | |
128 a == FileStates::UnIgnore) { | |
129 continue; | |
130 } | |
131 int group = FileStates::activityGroup(a); | |
132 if (group != prevGroup && prevGroup != -1) { | |
133 QAction *sep = new QAction("", w); | |
134 sep->setSeparator(true); | |
135 w->insertAction(0, sep); | |
136 } | |
137 prevGroup = group; | |
138 QAction *act = new QAction(m_actionLabels[a], w); | |
139 act->setProperty("state", s); | |
140 act->setProperty("activity", a); | |
141 connect(act, SIGNAL(triggered()), this, SLOT(menuActionActivated())); | |
142 w->insertAction(0, act); | |
143 } | |
144 w->setContextMenuPolicy(Qt::ActionsContextMenu); | |
108 | 145 |
109 boxlayout->addItem(new QSpacerItem(2, 2), 3, 0); | 146 boxlayout->addItem(new QSpacerItem(2, 2), 3, 0); |
110 | 147 |
111 boxesLayout->addWidget(box, ++boxRow, 0); | 148 boxesLayout->addWidget(box, ++boxRow, 0); |
112 m_boxes.push_back(box); | 149 m_boxes.push_back(box); |
171 m_noModificationsLabel->setText | 208 m_noModificationsLabel->setText |
172 (tr("<qt>You have no uncommitted changes.</qt>")); | 209 (tr("<qt>You have no uncommitted changes.</qt>")); |
173 } | 210 } |
174 } | 211 } |
175 | 212 |
213 | |
214 void FileStatusWidget::menuActionActivated() | |
215 { | |
216 QAction *act = qobject_cast<QAction *>(sender()); | |
217 if (!act) return; | |
218 | |
219 FileStates::State state = (FileStates::State) | |
220 act->property("state").toUInt(); | |
221 FileStates::Activity activity = (FileStates::Activity) | |
222 act->property("activity").toUInt(); | |
223 | |
224 DEBUG << "menuActionActivated: state = " << state << ", activity = " | |
225 << activity << endl; | |
226 | |
227 if (!FileStates::supportsActivity(state, activity)) { | |
228 std::cerr << "WARNING: FileStatusWidget::menuActionActivated: " | |
229 << "Action state " << state << " does not support activity " | |
230 << activity << std::endl; | |
231 return; | |
232 } | |
233 | |
234 QStringList files = getSelectedFilesInState(state); | |
235 | |
236 switch (activity) { | |
237 case FileStates::Annotate: emit annotateFiles(files); break; | |
238 case FileStates::Diff: emit diffFiles(files); break; | |
239 case FileStates::Commit: emit commitFiles(files); break; | |
240 case FileStates::Revert: emit revertFiles(files); break; | |
241 case FileStates::Add: emit addFiles(files); break; | |
242 case FileStates::Remove: emit removeFiles(files); break; | |
243 case FileStates::RedoMerge: emit redoFileMerges(files); break; | |
244 case FileStates::MarkResolved: emit markFilesResolved(files); break; | |
245 case FileStates::Ignore: emit ignoreFiles(files); break; | |
246 case FileStates::UnIgnore: emit unIgnoreFiles(files); break; | |
247 } | |
248 } | |
249 | |
250 void FileStatusWidget::itemDoubleClicked(QListWidgetItem *item) | |
251 { | |
252 QStringList files; | |
253 files << item->text(); | |
254 emit annotateFiles(files); | |
255 } | |
256 | |
176 void FileStatusWidget::itemSelectionChanged() | 257 void FileStatusWidget::itemSelectionChanged() |
177 { | 258 { |
178 DEBUG << "FileStatusWidget::itemSelectionChanged" << endl; | 259 DEBUG << "FileStatusWidget::itemSelectionChanged" << endl; |
179 | 260 |
180 QListWidget *list = qobject_cast<QListWidget *>(sender()); | 261 QListWidget *list = qobject_cast<QListWidget *>(sender()); |
210 } | 291 } |
211 } | 292 } |
212 | 293 |
213 bool FileStatusWidget::haveChangesToCommit() const | 294 bool FileStatusWidget::haveChangesToCommit() const |
214 { | 295 { |
215 return !m_fileStates.added().empty() || | 296 return !getAllCommittableFiles().empty(); |
216 !m_fileStates.removed().empty() || | |
217 !m_fileStates.modified().empty(); | |
218 } | 297 } |
219 | 298 |
220 bool FileStatusWidget::haveSelection() const | 299 bool FileStatusWidget::haveSelection() const |
221 { | 300 { |
222 return !m_selectedFiles.empty(); | 301 return !m_selectedFiles.empty(); |
223 } | 302 } |
224 | 303 |
225 QStringList FileStatusWidget::getAllSelectedFiles() const | 304 QStringList FileStatusWidget::getSelectedFilesInState(FileStates::State s) const |
226 { | |
227 return m_selectedFiles; | |
228 } | |
229 | |
230 QStringList FileStatusWidget::getSelectedCommittableFiles() const | |
231 { | 305 { |
232 QStringList files; | 306 QStringList files; |
233 foreach (QString f, m_selectedFiles) { | 307 foreach (QString f, m_selectedFiles) { |
234 switch (m_fileStates.getStateOfFile(f)) { | 308 if (m_fileStates.stateOf(f) == s) files.push_back(f); |
235 case FileStates::Added: | |
236 case FileStates::Modified: | |
237 case FileStates::Removed: | |
238 files.push_back(f); | |
239 break; | |
240 default: break; | |
241 } | |
242 } | 309 } |
243 return files; | 310 return files; |
244 } | 311 } |
245 | 312 |
246 QStringList FileStatusWidget::getAllCommittableFiles() const | 313 QStringList FileStatusWidget::getSelectedFilesSupportingActivity(FileStates::Activity a) const |
247 { | |
248 QStringList files; | |
249 files << m_fileStates.getFilesInState(FileStates::Modified); | |
250 files << m_fileStates.getFilesInState(FileStates::Added); | |
251 files << m_fileStates.getFilesInState(FileStates::Removed); | |
252 return files; | |
253 } | |
254 | |
255 QStringList FileStatusWidget::getSelectedRevertableFiles() const | |
256 { | 314 { |
257 QStringList files; | 315 QStringList files; |
258 foreach (QString f, m_selectedFiles) { | 316 foreach (QString f, m_selectedFiles) { |
259 switch (m_fileStates.getStateOfFile(f)) { | 317 if (m_fileStates.supportsActivity(f, a)) files.push_back(f); |
260 case FileStates::Added: | |
261 case FileStates::Modified: | |
262 case FileStates::Removed: | |
263 case FileStates::Missing: | |
264 case FileStates::InConflict: | |
265 files.push_back(f); | |
266 break; | |
267 default: break; | |
268 } | |
269 } | 318 } |
270 return files; | 319 return files; |
320 } | |
321 | |
322 QStringList FileStatusWidget::getAllCommittableFiles() const | |
323 { | |
324 return m_fileStates.filesSupportingActivity(FileStates::Commit); | |
271 } | 325 } |
272 | 326 |
273 QStringList FileStatusWidget::getAllRevertableFiles() const | 327 QStringList FileStatusWidget::getAllRevertableFiles() const |
274 { | 328 { |
275 QStringList files; | 329 return m_fileStates.filesSupportingActivity(FileStates::Revert); |
276 files << m_fileStates.getFilesInState(FileStates::Modified); | |
277 files << m_fileStates.getFilesInState(FileStates::Added); | |
278 files << m_fileStates.getFilesInState(FileStates::Removed); | |
279 files << m_fileStates.getFilesInState(FileStates::Missing); | |
280 files << m_fileStates.getFilesInState(FileStates::InConflict); | |
281 return files; | |
282 } | |
283 | |
284 QStringList FileStatusWidget::getSelectedUnresolvedFiles() const | |
285 { | |
286 QStringList files; | |
287 foreach (QString f, m_selectedFiles) { | |
288 switch (m_fileStates.getStateOfFile(f)) { | |
289 case FileStates::InConflict: | |
290 files.push_back(f); | |
291 break; | |
292 default: break; | |
293 } | |
294 } | |
295 return files; | |
296 } | 330 } |
297 | 331 |
298 QStringList FileStatusWidget::getAllUnresolvedFiles() const | 332 QStringList FileStatusWidget::getAllUnresolvedFiles() const |
299 { | 333 { |
300 QStringList files; | 334 return m_fileStates.filesInState(FileStates::InConflict); |
301 files << m_fileStates.getFilesInState(FileStates::InConflict); | |
302 return files; | |
303 } | 335 } |
304 | 336 |
305 QStringList FileStatusWidget::getSelectedAddableFiles() const | 337 QStringList FileStatusWidget::getSelectedAddableFiles() const |
306 { | 338 { |
307 QStringList files; | 339 return getSelectedFilesSupportingActivity(FileStates::Add); |
308 foreach (QString f, m_selectedFiles) { | |
309 switch (m_fileStates.getStateOfFile(f)) { | |
310 case FileStates::Unknown: | |
311 case FileStates::Removed: | |
312 files.push_back(f); | |
313 break; | |
314 default: break; | |
315 } | |
316 } | |
317 return files; | |
318 } | |
319 | |
320 QStringList FileStatusWidget::getAllAddableFiles() const | |
321 { | |
322 QStringList files; | |
323 files << m_fileStates.getFilesInState(FileStates::Removed); | |
324 files << m_fileStates.getFilesInState(FileStates::Unknown); | |
325 return files; | |
326 } | 340 } |
327 | 341 |
328 QStringList FileStatusWidget::getSelectedRemovableFiles() const | 342 QStringList FileStatusWidget::getSelectedRemovableFiles() const |
329 { | 343 { |
330 QStringList files; | 344 return getSelectedFilesSupportingActivity(FileStates::Remove); |
331 foreach (QString f, m_selectedFiles) { | |
332 switch (m_fileStates.getStateOfFile(f)) { | |
333 case FileStates::Clean: | |
334 case FileStates::Added: | |
335 case FileStates::Modified: | |
336 case FileStates::Missing: | |
337 case FileStates::InConflict: | |
338 files.push_back(f); | |
339 break; | |
340 default: break; | |
341 } | |
342 } | |
343 return files; | |
344 } | |
345 | |
346 QStringList FileStatusWidget::getAllRemovableFiles() const | |
347 { | |
348 QStringList files; | |
349 files << m_fileStates.getFilesInState(FileStates::Clean); | |
350 files << m_fileStates.getFilesInState(FileStates::Added); | |
351 files << m_fileStates.getFilesInState(FileStates::Modified); | |
352 files << m_fileStates.getFilesInState(FileStates::Missing); | |
353 files << m_fileStates.getFilesInState(FileStates::InConflict); | |
354 return files; | |
355 } | 345 } |
356 | 346 |
357 QString | 347 QString |
358 FileStatusWidget::localPath() const | 348 FileStatusWidget::localPath() const |
359 { | 349 { |
401 | 391 |
402 foreach (FileStates::State s, m_stateListMap.keys()) { | 392 foreach (FileStates::State s, m_stateListMap.keys()) { |
403 | 393 |
404 QListWidget *w = m_stateListMap[s]; | 394 QListWidget *w = m_stateListMap[s]; |
405 w->clear(); | 395 w->clear(); |
406 QStringList files = m_fileStates.getFilesInState(s); | 396 QStringList files = m_fileStates.filesInState(s); |
407 | 397 |
408 QStringList highPriority, lowPriority; | 398 QStringList highPriority, lowPriority; |
409 | 399 |
410 foreach (QString file, files) { | 400 foreach (QString file, files) { |
411 | 401 |
432 } | 422 } |
433 | 423 |
434 foreach (QString file, highPriority) { | 424 foreach (QString file, highPriority) { |
435 QListWidgetItem *item = new QListWidgetItem(file); | 425 QListWidgetItem *item = new QListWidgetItem(file); |
436 w->addItem(item); | 426 w->addItem(item); |
437 item->setForeground(QColor("#d40000")); //!!! and a nice gold star | 427 item->setForeground(QColor("#d40000")); |
438 item->setSelected(selectedFiles.contains(file)); | 428 item->setSelected(selectedFiles.contains(file)); |
439 } | 429 } |
440 | 430 |
441 foreach (QString file, lowPriority) { | 431 foreach (QString file, lowPriority) { |
442 QListWidgetItem *item = new QListWidgetItem(file); | 432 QListWidgetItem *item = new QListWidgetItem(file); |