Mercurial > hg > easyhg
comparison mainwindow.cpp @ 284:a68801b31ceb mainwindow_member_tidy
Make MainWindow members private and m_prefixed
author | Chris Cannam |
---|---|
date | Mon, 21 Feb 2011 09:08:55 +0000 |
parents | 1ec306df738e |
children | 3fbafca196e4 ca6edd303c9d |
comparison
equal
deleted
inserted
replaced
282:1ec306df738e | 284:a68801b31ceb |
---|---|
54 { | 54 { |
55 setWindowIcon(QIcon(":images/easyhg-icon.png")); | 55 setWindowIcon(QIcon(":images/easyhg-icon.png")); |
56 | 56 |
57 QString wndTitle; | 57 QString wndTitle; |
58 | 58 |
59 showAllFiles = false; | 59 m_showAllFiles = false; |
60 | 60 |
61 fsWatcher = 0; | 61 m_fsWatcher = 0; |
62 commitsSincePush = 0; | 62 m_commitsSincePush = 0; |
63 shouldHgStat = true; | 63 m_shouldHgStat = true; |
64 | 64 |
65 createActions(); | 65 createActions(); |
66 createMenus(); | 66 createMenus(); |
67 createToolBars(); | 67 createToolBars(); |
68 createStatusBar(); | 68 createStatusBar(); |
69 | 69 |
70 runner = new HgRunner(myDirPath, this); | 70 m_runner = new HgRunner(m_myDirPath, this); |
71 connect(runner, SIGNAL(commandStarting(HgAction)), | 71 connect(m_runner, SIGNAL(commandStarting(HgAction)), |
72 this, SLOT(commandStarting(HgAction))); | 72 this, SLOT(commandStarting(HgAction))); |
73 connect(runner, SIGNAL(commandCompleted(HgAction, QString)), | 73 connect(m_runner, SIGNAL(commandCompleted(HgAction, QString)), |
74 this, SLOT(commandCompleted(HgAction, QString))); | 74 this, SLOT(commandCompleted(HgAction, QString))); |
75 connect(runner, SIGNAL(commandFailed(HgAction, QString)), | 75 connect(m_runner, SIGNAL(commandFailed(HgAction, QString)), |
76 this, SLOT(commandFailed(HgAction, QString))); | 76 this, SLOT(commandFailed(HgAction, QString))); |
77 statusBar()->addPermanentWidget(runner); | 77 statusBar()->addPermanentWidget(m_runner); |
78 | 78 |
79 setWindowTitle(tr("EasyMercurial")); | 79 setWindowTitle(tr("EasyMercurial")); |
80 | 80 |
81 remoteRepoPath = ""; | 81 m_remoteRepoPath = ""; |
82 workFolderPath = ""; | 82 m_workFolderPath = ""; |
83 | 83 |
84 readSettings(); | 84 readSettings(); |
85 | 85 |
86 justMerged = false; | 86 m_justMerged = false; |
87 | 87 |
88 QWidget *central = new QWidget(this); | 88 QWidget *central = new QWidget(this); |
89 setCentralWidget(central); | 89 setCentralWidget(central); |
90 | 90 |
91 hgTabs = new HgTabWidget(central, remoteRepoPath, workFolderPath); | 91 m_hgTabs = new HgTabWidget(central, m_remoteRepoPath, m_workFolderPath); |
92 connectTabsSignals(); | 92 connectTabsSignals(); |
93 | 93 |
94 // Instead of setting the tab widget as our central widget | 94 // Instead of setting the tab widget as our central widget |
95 // directly, put it in a layout, so that we can have some space | 95 // directly, put it in a layout, so that we can have some space |
96 // around it on the Mac where it looks very strange without | 96 // around it on the Mac where it looks very strange without |
97 | 97 |
98 QGridLayout *cl = new QGridLayout(central); | 98 QGridLayout *cl = new QGridLayout(central); |
99 cl->addWidget(hgTabs, 0, 0); | 99 cl->addWidget(m_hgTabs, 0, 0); |
100 | 100 |
101 #ifndef Q_OS_MAC | 101 #ifndef Q_OS_MAC |
102 cl->setMargin(0); | 102 cl->setMargin(0); |
103 #endif | 103 #endif |
104 | 104 |
105 connect(hgTabs, SIGNAL(selectionChanged()), | 105 connect(m_hgTabs, SIGNAL(selectionChanged()), |
106 this, SLOT(enableDisableActions())); | 106 this, SLOT(enableDisableActions())); |
107 connect(hgTabs, SIGNAL(showAllChanged(bool)), | 107 connect(m_hgTabs, SIGNAL(showAllChanged(bool)), |
108 this, SLOT(showAllChanged(bool))); | 108 this, SLOT(showAllChanged(bool))); |
109 | 109 |
110 setUnifiedTitleAndToolBarOnMac(true); | 110 setUnifiedTitleAndToolBarOnMac(true); |
111 connectActions(); | 111 connectActions(); |
112 clearState(); | 112 clearState(); |
113 enableDisableActions(); | 113 enableDisableActions(); |
114 | 114 |
115 if (firstStart) { | 115 if (m_firstStart) { |
116 startupDialog(); | 116 startupDialog(); |
117 } | 117 } |
118 | 118 |
119 SettingsDialog::findDefaultLocations(m_myDirPath); | 119 SettingsDialog::findDefaultLocations(m_myDirPath); |
120 | 120 |
129 | 129 |
130 | 130 |
131 void MainWindow::closeEvent(QCloseEvent *) | 131 void MainWindow::closeEvent(QCloseEvent *) |
132 { | 132 { |
133 writeSettings(); | 133 writeSettings(); |
134 delete fsWatcher; | 134 delete m_fsWatcher; |
135 } | 135 } |
136 | 136 |
137 | 137 |
138 QString MainWindow::getUserInfo() const | 138 QString MainWindow::getUserInfo() const |
139 { | 139 { |
193 ).arg(EASYHG_VERSION)); | 193 ).arg(EASYHG_VERSION)); |
194 } | 194 } |
195 | 195 |
196 void MainWindow::clearSelections() | 196 void MainWindow::clearSelections() |
197 { | 197 { |
198 hgTabs->clearSelections(); | 198 m_hgTabs->clearSelections(); |
199 } | 199 } |
200 | 200 |
201 void MainWindow::showAllChanged(bool s) | 201 void MainWindow::showAllChanged(bool s) |
202 { | 202 { |
203 showAllFiles = s; | 203 m_showAllFiles = s; |
204 hgQueryPaths(); | 204 hgQueryPaths(); |
205 } | 205 } |
206 | 206 |
207 void MainWindow::hgRefresh() | 207 void MainWindow::hgRefresh() |
208 { | 208 { |
214 { | 214 { |
215 QStringList params; | 215 QStringList params; |
216 //!!! should we test version output? Really we want at least 1.7.x | 216 //!!! should we test version output? Really we want at least 1.7.x |
217 //!!! for options such as merge --tool | 217 //!!! for options such as merge --tool |
218 params << "--version"; | 218 params << "--version"; |
219 runner->requestAction(HgAction(ACT_TEST_HG, m_myDirPath, params)); | 219 m_runner->requestAction(HgAction(ACT_TEST_HG, m_myDirPath, params)); |
220 } | 220 } |
221 | 221 |
222 void MainWindow::hgTestExtension() | 222 void MainWindow::hgTestExtension() |
223 { | 223 { |
224 QStringList params; | 224 QStringList params; |
225 params << "--version"; | 225 params << "--version"; |
226 runner->requestAction(HgAction(ACT_TEST_HG_EXT, m_myDirPath, params)); | 226 m_runner->requestAction(HgAction(ACT_TEST_HG_EXT, m_myDirPath, params)); |
227 } | 227 } |
228 | 228 |
229 void MainWindow::hgStat() | 229 void MainWindow::hgStat() |
230 { | 230 { |
231 QStringList params; | 231 QStringList params; |
232 | 232 |
233 if (showAllFiles) { | 233 if (m_showAllFiles) { |
234 params << "stat" << "-A"; | 234 params << "stat" << "-A"; |
235 } else { | 235 } else { |
236 params << "stat" << "-ardum"; | 236 params << "stat" << "-ardum"; |
237 } | 237 } |
238 | 238 |
239 lastStatOutput = ""; | 239 m_lastStatOutput = ""; |
240 | 240 |
241 runner->requestAction(HgAction(ACT_STAT, workFolderPath, params)); | 241 m_runner->requestAction(HgAction(ACT_STAT, m_workFolderPath, params)); |
242 } | 242 } |
243 | 243 |
244 void MainWindow::hgQueryPaths() | 244 void MainWindow::hgQueryPaths() |
245 { | 245 { |
246 // Quickest is to just read the file | 246 // Quickest is to just read the file |
247 | 247 |
248 QFileInfo hgrc(workFolderPath + "/.hg/hgrc"); | 248 QFileInfo hgrc(m_workFolderPath + "/.hg/hgrc"); |
249 | 249 |
250 QString path; | 250 QString path; |
251 | 251 |
252 if (hgrc.exists()) { | 252 if (hgrc.exists()) { |
253 QSettings s(hgrc.canonicalFilePath(), QSettings::IniFormat); | 253 QSettings s(hgrc.canonicalFilePath(), QSettings::IniFormat); |
254 s.beginGroup("paths"); | 254 s.beginGroup("paths"); |
255 path = s.value("default").toString(); | 255 path = s.value("default").toString(); |
256 } | 256 } |
257 | 257 |
258 remoteRepoPath = path; | 258 m_remoteRepoPath = path; |
259 | 259 |
260 // We have to do this here, because commandCompleted won't be called | 260 // We have to do this here, because commandCompleted won't be called |
261 MultiChoiceDialog::addRecentArgument("local", workFolderPath); | 261 MultiChoiceDialog::addRecentArgument("local", m_workFolderPath); |
262 MultiChoiceDialog::addRecentArgument("remote", remoteRepoPath); | 262 MultiChoiceDialog::addRecentArgument("remote", m_remoteRepoPath); |
263 hgTabs->setWorkFolderAndRepoNames(workFolderPath, remoteRepoPath); | 263 m_hgTabs->setWorkFolderAndRepoNames(m_workFolderPath, m_remoteRepoPath); |
264 | 264 |
265 hgQueryBranch(); | 265 hgQueryBranch(); |
266 return; | 266 return; |
267 | 267 |
268 /* The classic method! | 268 /* The classic method! |
269 | 269 |
270 QStringList params; | 270 QStringList params; |
271 params << "paths"; | 271 params << "paths"; |
272 runner->requestAction(HgAction(ACT_QUERY_PATHS, workFolderPath, params)); | 272 m_runner->requestAction(HgAction(ACT_QUERY_PATHS, m_workFolderPath, params)); |
273 */ | 273 */ |
274 } | 274 } |
275 | 275 |
276 void MainWindow::hgQueryBranch() | 276 void MainWindow::hgQueryBranch() |
277 { | 277 { |
278 // Quickest is to just read the file | 278 // Quickest is to just read the file |
279 | 279 |
280 QFile hgbr(workFolderPath + "/.hg/branch"); | 280 QFile hgbr(m_workFolderPath + "/.hg/branch"); |
281 | 281 |
282 QString br = "default"; | 282 QString br = "default"; |
283 | 283 |
284 if (hgbr.exists() && hgbr.open(QFile::ReadOnly)) { | 284 if (hgbr.exists() && hgbr.open(QFile::ReadOnly)) { |
285 QByteArray ba = hgbr.readLine(); | 285 QByteArray ba = hgbr.readLine(); |
286 br = QString::fromUtf8(ba).trimmed(); | 286 br = QString::fromUtf8(ba).trimmed(); |
287 } | 287 } |
288 | 288 |
289 currentBranch = br; | 289 m_currentBranch = br; |
290 | 290 |
291 // We have to do this here, because commandCompleted won't be called | 291 // We have to do this here, because commandCompleted won't be called |
292 hgStat(); | 292 hgStat(); |
293 return; | 293 return; |
294 | 294 |
295 /* The classic method! | 295 /* The classic method! |
296 | 296 |
297 QStringList params; | 297 QStringList params; |
298 params << "branch"; | 298 params << "branch"; |
299 runner->requestAction(HgAction(ACT_QUERY_BRANCH, workFolderPath, params)); | 299 m_runner->requestAction(HgAction(ACT_QUERY_BRANCH, m_workFolderPath, params)); |
300 */ | 300 */ |
301 } | 301 } |
302 | 302 |
303 void MainWindow::hgQueryHeads() | 303 void MainWindow::hgQueryHeads() |
304 { | 304 { |
307 // that. Use --closed option so as to include closed branches; | 307 // that. Use --closed option so as to include closed branches; |
308 // otherwise we'll be stuck if the user updates into one, and our | 308 // otherwise we'll be stuck if the user updates into one, and our |
309 // incremental log will end up with spurious stuff in it because | 309 // incremental log will end up with spurious stuff in it because |
310 // we won't be pruning at the ends of closed branches | 310 // we won't be pruning at the ends of closed branches |
311 params << "heads" << "--closed"; | 311 params << "heads" << "--closed"; |
312 runner->requestAction(HgAction(ACT_QUERY_HEADS, workFolderPath, params)); | 312 m_runner->requestAction(HgAction(ACT_QUERY_HEADS, m_workFolderPath, params)); |
313 } | 313 } |
314 | 314 |
315 void MainWindow::hgLog() | 315 void MainWindow::hgLog() |
316 { | 316 { |
317 QStringList params; | 317 QStringList params; |
318 params << "log"; | 318 params << "log"; |
319 params << "--template"; | 319 params << "--template"; |
320 params << Changeset::getLogTemplate(); | 320 params << Changeset::getLogTemplate(); |
321 | 321 |
322 runner->requestAction(HgAction(ACT_LOG, workFolderPath, params)); | 322 m_runner->requestAction(HgAction(ACT_LOG, m_workFolderPath, params)); |
323 } | 323 } |
324 | 324 |
325 void MainWindow::hgLogIncremental(QStringList prune) | 325 void MainWindow::hgLogIncremental(QStringList prune) |
326 { | 326 { |
327 QStringList params; | 327 QStringList params; |
332 } | 332 } |
333 | 333 |
334 params << "--template"; | 334 params << "--template"; |
335 params << Changeset::getLogTemplate(); | 335 params << Changeset::getLogTemplate(); |
336 | 336 |
337 runner->requestAction(HgAction(ACT_LOG_INCREMENTAL, workFolderPath, params)); | 337 m_runner->requestAction(HgAction(ACT_LOG_INCREMENTAL, m_workFolderPath, params)); |
338 } | 338 } |
339 | 339 |
340 void MainWindow::hgQueryParents() | 340 void MainWindow::hgQueryParents() |
341 { | 341 { |
342 QStringList params; | 342 QStringList params; |
343 params << "parents"; | 343 params << "parents"; |
344 runner->requestAction(HgAction(ACT_QUERY_PARENTS, workFolderPath, params)); | 344 m_runner->requestAction(HgAction(ACT_QUERY_PARENTS, m_workFolderPath, params)); |
345 } | 345 } |
346 | 346 |
347 void MainWindow::hgAnnotate() | 347 void MainWindow::hgAnnotate() |
348 { | 348 { |
349 QStringList params; | 349 QStringList params; |
350 QString currentFile;//!!! = hgTabs -> getCurrentFileListLine(); | 350 QString currentFile;//!!! = m_hgTabs -> getCurrentFileListLine(); |
351 | 351 |
352 if (!currentFile.isEmpty()) | 352 if (!currentFile.isEmpty()) |
353 { | 353 { |
354 params << "annotate" << "--" << currentFile.mid(2); //Jump over status marker characters (e.g "M ") | 354 params << "annotate" << "--" << currentFile.mid(2); //Jump over status marker characters (e.g "M ") |
355 | 355 |
356 runner->requestAction(HgAction(ACT_ANNOTATE, workFolderPath, params)); | 356 m_runner->requestAction(HgAction(ACT_ANNOTATE, m_workFolderPath, params)); |
357 } | 357 } |
358 } | 358 } |
359 | 359 |
360 void MainWindow::hgResolveList() | 360 void MainWindow::hgResolveList() |
361 { | 361 { |
362 QStringList params; | 362 QStringList params; |
363 | 363 |
364 params << "resolve" << "--list"; | 364 params << "resolve" << "--list"; |
365 runner->requestAction(HgAction(ACT_RESOLVE_LIST, workFolderPath, params)); | 365 m_runner->requestAction(HgAction(ACT_RESOLVE_LIST, m_workFolderPath, params)); |
366 } | 366 } |
367 | 367 |
368 void MainWindow::hgAdd() | 368 void MainWindow::hgAdd() |
369 { | 369 { |
370 QStringList params; | 370 QStringList params; |
371 | 371 |
372 // hgExplorer permitted adding "all" files -- I'm not sure | 372 // hgExplorer permitted adding "all" files -- I'm not sure |
373 // that one is a good idea, let's require the user to select | 373 // that one is a good idea, let's require the user to select |
374 | 374 |
375 QStringList files = hgTabs->getSelectedAddableFiles(); | 375 QStringList files = m_hgTabs->getSelectedAddableFiles(); |
376 | 376 |
377 if (!files.empty()) { | 377 if (!files.empty()) { |
378 params << "add" << "--" << files; | 378 params << "add" << "--" << files; |
379 runner->requestAction(HgAction(ACT_ADD, workFolderPath, params)); | 379 m_runner->requestAction(HgAction(ACT_ADD, m_workFolderPath, params)); |
380 } | 380 } |
381 } | 381 } |
382 | 382 |
383 | 383 |
384 void MainWindow::hgRemove() | 384 void MainWindow::hgRemove() |
385 { | 385 { |
386 QStringList params; | 386 QStringList params; |
387 | 387 |
388 QStringList files = hgTabs->getSelectedRemovableFiles(); | 388 QStringList files = m_hgTabs->getSelectedRemovableFiles(); |
389 | 389 |
390 if (!files.empty()) { | 390 if (!files.empty()) { |
391 params << "remove" << "--after" << "--force" << "--" << files; | 391 params << "remove" << "--after" << "--force" << "--" << files; |
392 runner->requestAction(HgAction(ACT_REMOVE, workFolderPath, params)); | 392 m_runner->requestAction(HgAction(ACT_REMOVE, m_workFolderPath, params)); |
393 } | 393 } |
394 } | 394 } |
395 | 395 |
396 void MainWindow::hgCommit() | 396 void MainWindow::hgCommit() |
397 { | 397 { |
398 QStringList params; | 398 QStringList params; |
399 QString comment; | 399 QString comment; |
400 | 400 |
401 if (justMerged) { | 401 if (m_justMerged) { |
402 comment = mergeCommitComment; | 402 comment = m_mergeCommitComment; |
403 } | 403 } |
404 | 404 |
405 QStringList files = hgTabs->getSelectedCommittableFiles(); | 405 QStringList files = m_hgTabs->getSelectedCommittableFiles(); |
406 QStringList allFiles = hgTabs->getAllCommittableFiles(); | 406 QStringList allFiles = m_hgTabs->getAllCommittableFiles(); |
407 QStringList reportFiles = files; | 407 QStringList reportFiles = files; |
408 if (reportFiles.empty()) { | 408 if (reportFiles.empty()) { |
409 reportFiles = allFiles; | 409 reportFiles = allFiles; |
410 } | 410 } |
411 | 411 |
427 .arg(subsetNote), | 427 .arg(subsetNote), |
428 reportFiles, | 428 reportFiles, |
429 comment, | 429 comment, |
430 tr("Commit"))) { | 430 tr("Commit"))) { |
431 | 431 |
432 if (!justMerged && !files.empty()) { | 432 if (!m_justMerged && !files.empty()) { |
433 // User wants to commit selected file(s) (and this is not | 433 // User wants to commit selected file(s) (and this is not |
434 // merge commit, which would fail if we selected files) | 434 // merge commit, which would fail if we selected files) |
435 params << "commit" << "--message" << comment | 435 params << "commit" << "--message" << comment |
436 << "--user" << getUserInfo() << "--" << files; | 436 << "--user" << getUserInfo() << "--" << files; |
437 } else { | 437 } else { |
438 // Commit all changes | 438 // Commit all changes |
439 params << "commit" << "--message" << comment | 439 params << "commit" << "--message" << comment |
440 << "--user" << getUserInfo(); | 440 << "--user" << getUserInfo(); |
441 } | 441 } |
442 | 442 |
443 runner->requestAction(HgAction(ACT_COMMIT, workFolderPath, params)); | 443 m_runner->requestAction(HgAction(ACT_COMMIT, m_workFolderPath, params)); |
444 mergeCommitComment = ""; | 444 m_mergeCommitComment = ""; |
445 } | 445 } |
446 } | 446 } |
447 | 447 |
448 QString MainWindow::filterTag(QString tag) | 448 QString MainWindow::filterTag(QString tag) |
449 { | 449 { |
476 if (!tag.isEmpty()) {//!!! do something better if it is empty | 476 if (!tag.isEmpty()) {//!!! do something better if it is empty |
477 | 477 |
478 params << "tag" << "--user" << getUserInfo(); | 478 params << "tag" << "--user" << getUserInfo(); |
479 params << "--rev" << Changeset::hashOf(id) << filterTag(tag); | 479 params << "--rev" << Changeset::hashOf(id) << filterTag(tag); |
480 | 480 |
481 runner->requestAction(HgAction(ACT_TAG, workFolderPath, params)); | 481 m_runner->requestAction(HgAction(ACT_TAG, m_workFolderPath, params)); |
482 } | 482 } |
483 } | 483 } |
484 } | 484 } |
485 | 485 |
486 | 486 |
487 void MainWindow::hgIgnore() | 487 void MainWindow::hgIgnore() |
488 { | 488 { |
489 QString hgIgnorePath; | 489 QString hgIgnorePath; |
490 QStringList params; | 490 QStringList params; |
491 | 491 |
492 hgIgnorePath = workFolderPath; | 492 hgIgnorePath = m_workFolderPath; |
493 hgIgnorePath += "/.hgignore"; | 493 hgIgnorePath += "/.hgignore"; |
494 | 494 |
495 if (!QDir(workFolderPath).exists()) return; | 495 if (!QDir(m_workFolderPath).exists()) return; |
496 QFile f(hgIgnorePath); | 496 QFile f(hgIgnorePath); |
497 if (!f.exists()) { | 497 if (!f.exists()) { |
498 f.open(QFile::WriteOnly); | 498 f.open(QFile::WriteOnly); |
499 QTextStream *ts = new QTextStream(&f); | 499 QTextStream *ts = new QTextStream(&f); |
500 *ts << "syntax: glob\n"; | 500 *ts << "syntax: glob\n"; |
510 DEBUG << "Failed to find a text editor" << endl; | 510 DEBUG << "Failed to find a text editor" << endl; |
511 //!!! visible error! | 511 //!!! visible error! |
512 return; | 512 return; |
513 } | 513 } |
514 | 514 |
515 HgAction action(ACT_HG_IGNORE, workFolderPath, params); | 515 HgAction action(ACT_HG_IGNORE, m_workFolderPath, params); |
516 action.executable = editor; | 516 action.executable = editor; |
517 | 517 |
518 runner->requestAction(action); | 518 m_runner->requestAction(action); |
519 } | 519 } |
520 | 520 |
521 QString MainWindow::getDiffBinaryName() | 521 QString MainWindow::getDiffBinaryName() |
522 { | 522 { |
523 QSettings settings; | 523 QSettings settings; |
543 { | 543 { |
544 QStringList params; | 544 QStringList params; |
545 | 545 |
546 params << "diff" << "--stat"; | 546 params << "diff" << "--stat"; |
547 | 547 |
548 runner->requestAction(HgAction(ACT_DIFF_SUMMARY, workFolderPath, params)); | 548 m_runner->requestAction(HgAction(ACT_DIFF_SUMMARY, m_workFolderPath, params)); |
549 } | 549 } |
550 | 550 |
551 void MainWindow::hgFolderDiff() | 551 void MainWindow::hgFolderDiff() |
552 { | 552 { |
553 QString diff = getDiffBinaryName(); | 553 QString diff = getDiffBinaryName(); |
558 // Diff parent against working folder (folder diff) | 558 // Diff parent against working folder (folder diff) |
559 | 559 |
560 params << "--config" << "extensions.extdiff=" << "extdiff"; | 560 params << "--config" << "extensions.extdiff=" << "extdiff"; |
561 params << "--program" << diff; | 561 params << "--program" << diff; |
562 | 562 |
563 params << hgTabs->getSelectedCommittableFiles(); // may be none: whole dir | 563 params << m_hgTabs->getSelectedCommittableFiles(); // may be none: whole dir |
564 | 564 |
565 runner->requestAction(HgAction(ACT_FOLDERDIFF, workFolderPath, params)); | 565 m_runner->requestAction(HgAction(ACT_FOLDERDIFF, m_workFolderPath, params)); |
566 } | 566 } |
567 | 567 |
568 | 568 |
569 void MainWindow::hgDiffToCurrent(QString id) | 569 void MainWindow::hgDiffToCurrent(QString id) |
570 { | 570 { |
577 | 577 |
578 params << "--config" << "extensions.extdiff=" << "extdiff"; | 578 params << "--config" << "extensions.extdiff=" << "extdiff"; |
579 params << "--program" << diff; | 579 params << "--program" << diff; |
580 params << "--rev" << Changeset::hashOf(id); | 580 params << "--rev" << Changeset::hashOf(id); |
581 | 581 |
582 runner->requestAction(HgAction(ACT_FOLDERDIFF, workFolderPath, params)); | 582 m_runner->requestAction(HgAction(ACT_FOLDERDIFF, m_workFolderPath, params)); |
583 } | 583 } |
584 | 584 |
585 | 585 |
586 void MainWindow::hgDiffToParent(QString child, QString parent) | 586 void MainWindow::hgDiffToParent(QString child, QString parent) |
587 { | 587 { |
595 params << "--config" << "extensions.extdiff=" << "extdiff"; | 595 params << "--config" << "extensions.extdiff=" << "extdiff"; |
596 params << "--program" << diff; | 596 params << "--program" << diff; |
597 params << "--rev" << Changeset::hashOf(parent) | 597 params << "--rev" << Changeset::hashOf(parent) |
598 << "--rev" << Changeset::hashOf(child); | 598 << "--rev" << Changeset::hashOf(child); |
599 | 599 |
600 runner->requestAction(HgAction(ACT_CHGSETDIFF, workFolderPath, params)); | 600 m_runner->requestAction(HgAction(ACT_CHGSETDIFF, m_workFolderPath, params)); |
601 } | 601 } |
602 | 602 |
603 | 603 |
604 void MainWindow::hgUpdate() | 604 void MainWindow::hgUpdate() |
605 { | 605 { |
606 QStringList params; | 606 QStringList params; |
607 | 607 |
608 params << "update"; | 608 params << "update"; |
609 | 609 |
610 runner->requestAction(HgAction(ACT_UPDATE, workFolderPath, params)); | 610 m_runner->requestAction(HgAction(ACT_UPDATE, m_workFolderPath, params)); |
611 } | 611 } |
612 | 612 |
613 | 613 |
614 void MainWindow::hgUpdateToRev(QString id) | 614 void MainWindow::hgUpdateToRev(QString id) |
615 { | 615 { |
616 QStringList params; | 616 QStringList params; |
617 | 617 |
618 params << "update" << "--rev" << Changeset::hashOf(id) << "--check"; | 618 params << "update" << "--rev" << Changeset::hashOf(id) << "--check"; |
619 | 619 |
620 runner->requestAction(HgAction(ACT_UPDATE, workFolderPath, params)); | 620 m_runner->requestAction(HgAction(ACT_UPDATE, m_workFolderPath, params)); |
621 } | 621 } |
622 | 622 |
623 | 623 |
624 void MainWindow::hgRevert() | 624 void MainWindow::hgRevert() |
625 { | 625 { |
626 QStringList params; | 626 QStringList params; |
627 QString comment; | 627 QString comment; |
628 bool all = false; | 628 bool all = false; |
629 | 629 |
630 QStringList files = hgTabs->getSelectedRevertableFiles(); | 630 QStringList files = m_hgTabs->getSelectedRevertableFiles(); |
631 QStringList allFiles = hgTabs->getAllRevertableFiles(); | 631 QStringList allFiles = m_hgTabs->getAllRevertableFiles(); |
632 if (files.empty() || files == allFiles) { | 632 if (files.empty() || files == allFiles) { |
633 files = allFiles; | 633 files = allFiles; |
634 all = true; | 634 all = true; |
635 } | 635 } |
636 | 636 |
642 QString rf(tr("Revert files")); | 642 QString rf(tr("Revert files")); |
643 | 643 |
644 // Set up params before asking for confirmation, because there is | 644 // Set up params before asking for confirmation, because there is |
645 // a failure case here that we would need to report on early | 645 // a failure case here that we would need to report on early |
646 | 646 |
647 DEBUG << "hgRevert: justMerged = " << justMerged << ", mergeTargetRevision = " << mergeTargetRevision << endl; | 647 DEBUG << "hgRevert: m_justMerged = " << m_justMerged << ", m_mergeTargetRevision = " << m_mergeTargetRevision << endl; |
648 | 648 |
649 if (justMerged) { | 649 if (m_justMerged) { |
650 | 650 |
651 // This is a little fiddly. The proper way to "revert" the | 651 // This is a little fiddly. The proper way to "revert" the |
652 // whole of an uncommitted merge is with "hg update --clean ." | 652 // whole of an uncommitted merge is with "hg update --clean ." |
653 // But if the user has selected only some files, we're sort of | 653 // But if the user has selected only some files, we're sort of |
654 // promising to revert only those, which means we need to | 654 // promising to revert only those, which means we need to |
658 // restarted, or changed repository, since then. Hmmm. | 658 // restarted, or changed repository, since then. Hmmm. |
659 | 659 |
660 if (all) { | 660 if (all) { |
661 params << "update" << "--clean" << "."; | 661 params << "update" << "--clean" << "."; |
662 } else { | 662 } else { |
663 if (mergeTargetRevision != "") { | 663 if (m_mergeTargetRevision != "") { |
664 params << "revert" << "--rev" | 664 params << "revert" << "--rev" |
665 << Changeset::hashOf(mergeTargetRevision) | 665 << Changeset::hashOf(m_mergeTargetRevision) |
666 << "--" << files; | 666 << "--" << files; |
667 } else { | 667 } else { |
668 QMessageBox::information | 668 QMessageBox::information |
669 (this, tr("Unable to revert"), | 669 (this, tr("Unable to revert"), |
670 tr("<qt><b>Sorry, unable to revert these files</b><br><br>EasyMercurial can only revert a subset of files during a merge if it still has a record of which parent was the original merge target; that information is no longer available.<br><br>This is a limitation of EasyMercurial. Consider reverting all files, or using hg revert with a specific revision at the command-line instead.</qt>")); | 670 tr("<qt><b>Sorry, unable to revert these files</b><br><br>EasyMercurial can only revert a subset of files during a merge if it still has a record of which parent was the original merge target; that information is no longer available.<br><br>This is a limitation of EasyMercurial. Consider reverting all files, or using hg revert with a specific revision at the command-line instead.</qt>")); |
685 .arg(tr("You are about to <b>revert</b> %n file(s).<br><br>This will <b>throw away any changes</b> that you have made to these files but have not committed.", "", files.size())) | 685 .arg(tr("You are about to <b>revert</b> %n file(s).<br><br>This will <b>throw away any changes</b> that you have made to these files but have not committed.", "", files.size())) |
686 .arg(subsetNote), | 686 .arg(subsetNote), |
687 files, | 687 files, |
688 tr("Revert"))) { | 688 tr("Revert"))) { |
689 | 689 |
690 lastRevertedFiles = files; | 690 m_lastRevertedFiles = files; |
691 | 691 |
692 runner->requestAction(HgAction(ACT_REVERT, workFolderPath, params)); | 692 m_runner->requestAction(HgAction(ACT_REVERT, m_workFolderPath, params)); |
693 } | 693 } |
694 } | 694 } |
695 | 695 |
696 | 696 |
697 void MainWindow::hgMarkResolved(QStringList files) | 697 void MainWindow::hgMarkResolved(QStringList files) |
704 params << "--all"; | 704 params << "--all"; |
705 } else { | 705 } else { |
706 params << "--" << files; | 706 params << "--" << files; |
707 } | 707 } |
708 | 708 |
709 runner->requestAction(HgAction(ACT_RESOLVE_MARK, workFolderPath, params)); | 709 m_runner->requestAction(HgAction(ACT_RESOLVE_MARK, m_workFolderPath, params)); |
710 } | 710 } |
711 | 711 |
712 | 712 |
713 void MainWindow::hgRetryMerge() | 713 void MainWindow::hgRetryMerge() |
714 { | 714 { |
719 QString merge = getMergeBinaryName(); | 719 QString merge = getMergeBinaryName(); |
720 if (merge != "") { | 720 if (merge != "") { |
721 params << "--tool" << merge; | 721 params << "--tool" << merge; |
722 } | 722 } |
723 | 723 |
724 QStringList files = hgTabs->getSelectedUnresolvedFiles(); | 724 QStringList files = m_hgTabs->getSelectedUnresolvedFiles(); |
725 if (files.empty()) { | 725 if (files.empty()) { |
726 params << "--all"; | 726 params << "--all"; |
727 } else { | 727 } else { |
728 params << "--" << files; | 728 params << "--" << files; |
729 } | 729 } |
730 | 730 |
731 if (currentParents.size() == 1) { | 731 if (m_currentParents.size() == 1) { |
732 mergeTargetRevision = currentParents[0]->id(); | 732 m_mergeTargetRevision = m_currentParents[0]->id(); |
733 } | 733 } |
734 | 734 |
735 runner->requestAction(HgAction(ACT_RETRY_MERGE, workFolderPath, params)); | 735 m_runner->requestAction(HgAction(ACT_RETRY_MERGE, m_workFolderPath, params)); |
736 | 736 |
737 mergeCommitComment = tr("Merge"); | 737 m_mergeCommitComment = tr("Merge"); |
738 } | 738 } |
739 | 739 |
740 | 740 |
741 void MainWindow::hgMerge() | 741 void MainWindow::hgMerge() |
742 { | 742 { |
743 if (hgTabs->canResolve()) { | 743 if (m_hgTabs->canResolve()) { |
744 hgRetryMerge(); | 744 hgRetryMerge(); |
745 return; | 745 return; |
746 } | 746 } |
747 | 747 |
748 QStringList params; | 748 QStringList params; |
752 QString merge = getMergeBinaryName(); | 752 QString merge = getMergeBinaryName(); |
753 if (merge != "") { | 753 if (merge != "") { |
754 params << "--tool" << merge; | 754 params << "--tool" << merge; |
755 } | 755 } |
756 | 756 |
757 if (currentParents.size() == 1) { | 757 if (m_currentParents.size() == 1) { |
758 mergeTargetRevision = currentParents[0]->id(); | 758 m_mergeTargetRevision = m_currentParents[0]->id(); |
759 } | 759 } |
760 | 760 |
761 runner->requestAction(HgAction(ACT_MERGE, workFolderPath, params)); | 761 m_runner->requestAction(HgAction(ACT_MERGE, m_workFolderPath, params)); |
762 | 762 |
763 mergeCommitComment = tr("Merge"); | 763 m_mergeCommitComment = tr("Merge"); |
764 } | 764 } |
765 | 765 |
766 | 766 |
767 void MainWindow::hgMergeFrom(QString id) | 767 void MainWindow::hgMergeFrom(QString id) |
768 { | 768 { |
774 QString merge = getMergeBinaryName(); | 774 QString merge = getMergeBinaryName(); |
775 if (merge != "") { | 775 if (merge != "") { |
776 params << "--tool" << merge; | 776 params << "--tool" << merge; |
777 } | 777 } |
778 | 778 |
779 if (currentParents.size() == 1) { | 779 if (m_currentParents.size() == 1) { |
780 mergeTargetRevision = currentParents[0]->id(); | 780 m_mergeTargetRevision = m_currentParents[0]->id(); |
781 } | 781 } |
782 | 782 |
783 runner->requestAction(HgAction(ACT_MERGE, workFolderPath, params)); | 783 m_runner->requestAction(HgAction(ACT_MERGE, m_workFolderPath, params)); |
784 | 784 |
785 mergeCommitComment = ""; | 785 m_mergeCommitComment = ""; |
786 | 786 |
787 foreach (Changeset *cs, currentHeads) { | 787 foreach (Changeset *cs, m_currentHeads) { |
788 if (cs->id() == id && !cs->isOnBranch(currentBranch)) { | 788 if (cs->id() == id && !cs->isOnBranch(m_currentBranch)) { |
789 if (cs->branch() == "" || cs->branch() == "default") { | 789 if (cs->branch() == "" || cs->branch() == "default") { |
790 mergeCommitComment = tr("Merge from the default branch"); | 790 m_mergeCommitComment = tr("Merge from the default branch"); |
791 } else { | 791 } else { |
792 mergeCommitComment = tr("Merge from branch \"%1\"").arg(cs->branch()); | 792 m_mergeCommitComment = tr("Merge from branch \"%1\"").arg(cs->branch()); |
793 } | 793 } |
794 } | 794 } |
795 } | 795 } |
796 | 796 |
797 if (mergeCommitComment == "") { | 797 if (m_mergeCommitComment == "") { |
798 mergeCommitComment = tr("Merge from %1").arg(id); | 798 m_mergeCommitComment = tr("Merge from %1").arg(id); |
799 } | 799 } |
800 } | 800 } |
801 | 801 |
802 | 802 |
803 void MainWindow::hgCloneFromRemote() | 803 void MainWindow::hgCloneFromRemote() |
804 { | 804 { |
805 QStringList params; | 805 QStringList params; |
806 | 806 |
807 if (!QDir(workFolderPath).exists()) { | 807 if (!QDir(m_workFolderPath).exists()) { |
808 if (!QDir().mkpath(workFolderPath)) { | 808 if (!QDir().mkpath(m_workFolderPath)) { |
809 DEBUG << "hgCloneFromRemote: Failed to create target path " | 809 DEBUG << "hgCloneFromRemote: Failed to create target path " |
810 << workFolderPath << endl; | 810 << m_workFolderPath << endl; |
811 //!!! report error | 811 //!!! report error |
812 return; | 812 return; |
813 } | 813 } |
814 } | 814 } |
815 | 815 |
816 params << "clone" << remoteRepoPath << workFolderPath; | 816 params << "clone" << m_remoteRepoPath << m_workFolderPath; |
817 | 817 |
818 hgTabs->setWorkFolderAndRepoNames(workFolderPath, remoteRepoPath); | 818 m_hgTabs->setWorkFolderAndRepoNames(m_workFolderPath, m_remoteRepoPath); |
819 hgTabs->updateWorkFolderFileList(""); | 819 m_hgTabs->updateWorkFolderFileList(""); |
820 | 820 |
821 runner->requestAction(HgAction(ACT_CLONEFROMREMOTE, workFolderPath, params)); | 821 m_runner->requestAction(HgAction(ACT_CLONEFROMREMOTE, m_workFolderPath, params)); |
822 } | 822 } |
823 | 823 |
824 void MainWindow::hgInit() | 824 void MainWindow::hgInit() |
825 { | 825 { |
826 QStringList params; | 826 QStringList params; |
827 | 827 |
828 params << "init"; | 828 params << "init"; |
829 params << workFolderPath; | 829 params << m_workFolderPath; |
830 | 830 |
831 runner->requestAction(HgAction(ACT_INIT, workFolderPath, params)); | 831 m_runner->requestAction(HgAction(ACT_INIT, m_workFolderPath, params)); |
832 } | 832 } |
833 | 833 |
834 void MainWindow::hgIncoming() | 834 void MainWindow::hgIncoming() |
835 { | 835 { |
836 QStringList params; | 836 QStringList params; |
837 | 837 |
838 params << "incoming" << "--newest-first" << remoteRepoPath; | 838 params << "incoming" << "--newest-first" << m_remoteRepoPath; |
839 params << "--template" << Changeset::getLogTemplate(); | 839 params << "--template" << Changeset::getLogTemplate(); |
840 | 840 |
841 runner->requestAction(HgAction(ACT_INCOMING, workFolderPath, params)); | 841 m_runner->requestAction(HgAction(ACT_INCOMING, m_workFolderPath, params)); |
842 } | 842 } |
843 | 843 |
844 void MainWindow::hgPull() | 844 void MainWindow::hgPull() |
845 { | 845 { |
846 if (ConfirmCommentDialog::confirm | 846 if (ConfirmCommentDialog::confirm |
847 (this, tr("Confirm pull"), | 847 (this, tr("Confirm pull"), |
848 format3(tr("Confirm pull from remote repository"), | 848 format3(tr("Confirm pull from remote repository"), |
849 tr("You are about to pull changes from the following remote repository:"), | 849 tr("You are about to pull changes from the following remote repository:"), |
850 remoteRepoPath), | 850 m_remoteRepoPath), |
851 tr("Pull"))) { | 851 tr("Pull"))) { |
852 | 852 |
853 QStringList params; | 853 QStringList params; |
854 params << "pull" << remoteRepoPath; | 854 params << "pull" << m_remoteRepoPath; |
855 runner->requestAction(HgAction(ACT_PULL, workFolderPath, params)); | 855 m_runner->requestAction(HgAction(ACT_PULL, m_workFolderPath, params)); |
856 } | 856 } |
857 } | 857 } |
858 | 858 |
859 void MainWindow::hgPush() | 859 void MainWindow::hgPush() |
860 { | 860 { |
861 if (ConfirmCommentDialog::confirm | 861 if (ConfirmCommentDialog::confirm |
862 (this, tr("Confirm push"), | 862 (this, tr("Confirm push"), |
863 format3(tr("Confirm push to remote repository"), | 863 format3(tr("Confirm push to remote repository"), |
864 tr("You are about to push your changes to the following remote repository:"), | 864 tr("You are about to push your changes to the following remote repository:"), |
865 remoteRepoPath), | 865 m_remoteRepoPath), |
866 tr("Push"))) { | 866 tr("Push"))) { |
867 | 867 |
868 QStringList params; | 868 QStringList params; |
869 params << "push" << "--new-branch" << remoteRepoPath; | 869 params << "push" << "--new-branch" << m_remoteRepoPath; |
870 runner->requestAction(HgAction(ACT_PUSH, workFolderPath, params)); | 870 m_runner->requestAction(HgAction(ACT_PUSH, m_workFolderPath, params)); |
871 } | 871 } |
872 } | 872 } |
873 | 873 |
874 QStringList MainWindow::listAllUpIpV4Addresses() | 874 QStringList MainWindow::listAllUpIpV4Addresses() |
875 { | 875 { |
891 return ret; | 891 return ret; |
892 } | 892 } |
893 | 893 |
894 void MainWindow::clearState() | 894 void MainWindow::clearState() |
895 { | 895 { |
896 foreach (Changeset *cs, currentParents) delete cs; | 896 foreach (Changeset *cs, m_currentParents) delete cs; |
897 currentParents.clear(); | 897 m_currentParents.clear(); |
898 foreach (Changeset *cs, currentHeads) delete cs; | 898 foreach (Changeset *cs, m_currentHeads) delete cs; |
899 currentHeads.clear(); | 899 m_currentHeads.clear(); |
900 currentBranch = ""; | 900 m_currentBranch = ""; |
901 lastStatOutput = ""; | 901 m_lastStatOutput = ""; |
902 lastRevertedFiles.clear(); | 902 m_lastRevertedFiles.clear(); |
903 mergeTargetRevision = ""; | 903 m_mergeTargetRevision = ""; |
904 mergeCommitComment = ""; | 904 m_mergeCommitComment = ""; |
905 stateUnknown = true; | 905 m_stateUnknown = true; |
906 needNewLog = true; | 906 m_needNewLog = true; |
907 if (fsWatcher) { | 907 if (m_fsWatcher) { |
908 delete m_fsWatcherGeneralTimer; | 908 delete m_fsWatcherGeneralTimer; |
909 m_fsWatcherGeneralTimer = 0; | 909 m_fsWatcherGeneralTimer = 0; |
910 delete m_fsWatcherRestoreTimer; | 910 delete m_fsWatcherRestoreTimer; |
911 m_fsWatcherRestoreTimer = 0; | 911 m_fsWatcherRestoreTimer = 0; |
912 delete fsWatcher; | 912 delete m_fsWatcher; |
913 fsWatcher = 0; | 913 m_fsWatcher = 0; |
914 } | 914 } |
915 } | 915 } |
916 | 916 |
917 void MainWindow::hgServe() | 917 void MainWindow::hgServe() |
918 { | 918 { |
938 ts << tr("<p>Press Close to stop the server and return.</p>"); | 938 ts << tr("<p>Press Close to stop the server and return.</p>"); |
939 ts.flush(); | 939 ts.flush(); |
940 | 940 |
941 params << "serve"; | 941 params << "serve"; |
942 | 942 |
943 runner->requestAction(HgAction(ACT_SERVE, workFolderPath, params)); | 943 m_runner->requestAction(HgAction(ACT_SERVE, m_workFolderPath, params)); |
944 | 944 |
945 QMessageBox::information(this, tr("Serve"), msg, QMessageBox::Close); | 945 QMessageBox::information(this, tr("Serve"), msg, QMessageBox::Close); |
946 | 946 |
947 runner->killCurrentActions(); | 947 m_runner->killCurrentActions(); |
948 } | 948 } |
949 | 949 |
950 void MainWindow::startupDialog() | 950 void MainWindow::startupDialog() |
951 { | 951 { |
952 StartupDialog *dlg = new StartupDialog(this); | 952 StartupDialog *dlg = new StartupDialog(this); |
953 if (dlg->exec()) firstStart = false; | 953 if (dlg->exec()) m_firstStart = false; |
954 } | 954 } |
955 | 955 |
956 void MainWindow::open() | 956 void MainWindow::open() |
957 { | 957 { |
958 bool done = false; | 958 bool done = false; |
1026 | 1026 |
1027 void MainWindow::changeRemoteRepo() | 1027 void MainWindow::changeRemoteRepo() |
1028 { | 1028 { |
1029 // This will involve rewriting the local .hgrc | 1029 // This will involve rewriting the local .hgrc |
1030 | 1030 |
1031 QDir hgDir(workFolderPath + "/.hg"); | 1031 QDir hgDir(m_workFolderPath + "/.hg"); |
1032 if (!hgDir.exists()) { | 1032 if (!hgDir.exists()) { |
1033 //!!! visible error! | 1033 //!!! visible error! |
1034 return; | 1034 return; |
1035 } | 1035 } |
1036 | 1036 |
1037 QFileInfo hgrc(workFolderPath + "/.hg/hgrc"); | 1037 QFileInfo hgrc(m_workFolderPath + "/.hg/hgrc"); |
1038 if (hgrc.exists() && !hgrc.isWritable()) { | 1038 if (hgrc.exists() && !hgrc.isWritable()) { |
1039 //!!! visible error! | 1039 //!!! visible error! |
1040 return; | 1040 return; |
1041 } | 1041 } |
1042 | 1042 |
1061 QSettings s(hgrc.absoluteFilePath(), QSettings::IniFormat); | 1061 QSettings s(hgrc.absoluteFilePath(), QSettings::IniFormat); |
1062 s.beginGroup("paths"); | 1062 s.beginGroup("paths"); |
1063 s.setValue("default", d->getArgument()); | 1063 s.setValue("default", d->getArgument()); |
1064 } | 1064 } |
1065 | 1065 |
1066 stateUnknown = true; | 1066 m_stateUnknown = true; |
1067 hgQueryPaths(); | 1067 hgQueryPaths(); |
1068 } | 1068 } |
1069 | 1069 |
1070 delete d; | 1070 delete d; |
1071 } | 1071 } |
1279 | 1279 |
1280 case FolderIsFile: | 1280 case FolderIsFile: |
1281 return complainAboutFilePath(local); | 1281 return complainAboutFilePath(local); |
1282 } | 1282 } |
1283 | 1283 |
1284 workFolderPath = local; | 1284 m_workFolderPath = local; |
1285 remoteRepoPath = ""; | 1285 m_remoteRepoPath = ""; |
1286 return true; | 1286 return true; |
1287 } | 1287 } |
1288 | 1288 |
1289 bool MainWindow::openRemote(QString remote, QString local) | 1289 bool MainWindow::openRemote(QString remote, QString local) |
1290 { | 1290 { |
1312 if (status == FolderExists) { | 1312 if (status == FolderExists) { |
1313 local = complainAboutCloneToExistingFolder(local, remote); | 1313 local = complainAboutCloneToExistingFolder(local, remote); |
1314 if (local == "") return false; | 1314 if (local == "") return false; |
1315 } | 1315 } |
1316 | 1316 |
1317 workFolderPath = local; | 1317 m_workFolderPath = local; |
1318 remoteRepoPath = remote; | 1318 m_remoteRepoPath = remote; |
1319 hgCloneFromRemote(); | 1319 hgCloneFromRemote(); |
1320 | 1320 |
1321 return true; | 1321 return true; |
1322 } | 1322 } |
1323 | 1323 |
1344 | 1344 |
1345 if (status == FolderUnknown) { | 1345 if (status == FolderUnknown) { |
1346 return complainAboutUnknownFolder(local); | 1346 return complainAboutUnknownFolder(local); |
1347 } | 1347 } |
1348 | 1348 |
1349 workFolderPath = local; | 1349 m_workFolderPath = local; |
1350 remoteRepoPath = ""; | 1350 m_remoteRepoPath = ""; |
1351 hgInit(); | 1351 hgInit(); |
1352 return true; | 1352 return true; |
1353 } | 1353 } |
1354 | 1354 |
1355 void MainWindow::settings() | 1355 void MainWindow::settings() |
1356 { | 1356 { |
1357 SettingsDialog *settingsDlg = new SettingsDialog(this); | 1357 SettingsDialog *settingsDlg = new SettingsDialog(this); |
1358 settingsDlg->exec(); | 1358 settingsDlg->exec(); |
1359 | 1359 |
1360 if (settingsDlg->presentationChanged()) { | 1360 if (settingsDlg->presentationChanged()) { |
1361 hgTabs->updateFileStates(); | 1361 m_hgTabs->updateFileStates(); |
1362 updateToolBarStyle(); | 1362 updateToolBarStyle(); |
1363 hgRefresh(); | 1363 hgRefresh(); |
1364 } | 1364 } |
1365 } | 1365 } |
1366 | 1366 |
1408 } | 1408 } |
1409 | 1409 |
1410 void MainWindow::updateFileSystemWatcher() | 1410 void MainWindow::updateFileSystemWatcher() |
1411 { | 1411 { |
1412 bool justCreated = false; | 1412 bool justCreated = false; |
1413 if (!fsWatcher) { | 1413 if (!m_fsWatcher) { |
1414 fsWatcher = new QFileSystemWatcher(); | 1414 m_fsWatcher = new QFileSystemWatcher(); |
1415 justCreated = true; | 1415 justCreated = true; |
1416 } | 1416 } |
1417 | 1417 |
1418 // QFileSystemWatcher will refuse to add a file or directory to | 1418 // QFileSystemWatcher will refuse to add a file or directory to |
1419 // its watch list that it is already watching -- fine, that's what | 1419 // its watch list that it is already watching -- fine, that's what |
1420 // we want -- but it prints a warning when this happens, which is | 1420 // we want -- but it prints a warning when this happens, which is |
1421 // annoying because it would be the normal case for us. So we'll | 1421 // annoying because it would be the normal case for us. So we'll |
1422 // check for duplicates ourselves. | 1422 // check for duplicates ourselves. |
1423 QSet<QString> alreadyWatched; | 1423 QSet<QString> alreadyWatched; |
1424 QStringList dl(fsWatcher->directories()); | 1424 QStringList dl(m_fsWatcher->directories()); |
1425 foreach (QString d, dl) alreadyWatched.insert(d); | 1425 foreach (QString d, dl) alreadyWatched.insert(d); |
1426 | 1426 |
1427 std::deque<QString> pending; | 1427 std::deque<QString> pending; |
1428 pending.push_back(workFolderPath); | 1428 pending.push_back(m_workFolderPath); |
1429 | 1429 |
1430 while (!pending.empty()) { | 1430 while (!pending.empty()) { |
1431 | 1431 |
1432 QString path = pending.front(); | 1432 QString path = pending.front(); |
1433 pending.pop_front(); | 1433 pending.pop_front(); |
1434 if (!alreadyWatched.contains(path)) { | 1434 if (!alreadyWatched.contains(path)) { |
1435 fsWatcher->addPath(path); | 1435 m_fsWatcher->addPath(path); |
1436 DEBUG << "Added to file system watcher: " << path << endl; | 1436 DEBUG << "Added to file system watcher: " << path << endl; |
1437 } | 1437 } |
1438 | 1438 |
1439 QDir d(path); | 1439 QDir d(path); |
1440 if (d.exists()) { | 1440 if (d.exists()) { |
1457 this, SLOT(checkFilesystem())); | 1457 this, SLOT(checkFilesystem())); |
1458 m_fsWatcherGeneralTimer->setInterval(30 * 60 * 1000); // half an hour | 1458 m_fsWatcherGeneralTimer->setInterval(30 * 60 * 1000); // half an hour |
1459 m_fsWatcherGeneralTimer->start(); | 1459 m_fsWatcherGeneralTimer->start(); |
1460 | 1460 |
1461 if (justCreated) { | 1461 if (justCreated) { |
1462 connect(fsWatcher, SIGNAL(directoryChanged(QString)), | 1462 connect(m_fsWatcher, SIGNAL(directoryChanged(QString)), |
1463 this, SLOT(fsDirectoryChanged(QString))); | 1463 this, SLOT(fsDirectoryChanged(QString))); |
1464 connect(fsWatcher, SIGNAL(fileChanged(QString)), | 1464 connect(m_fsWatcher, SIGNAL(fileChanged(QString)), |
1465 this, SLOT(fsFileChanged(QString))); | 1465 this, SLOT(fsFileChanged(QString))); |
1466 } | 1466 } |
1467 } | 1467 } |
1468 | 1468 |
1469 void MainWindow::suspendFileSystemWatcher() | 1469 void MainWindow::suspendFileSystemWatcher() |
1470 { | 1470 { |
1471 DEBUG << "MainWindow::suspendFileSystemWatcher" << endl; | 1471 DEBUG << "MainWindow::suspendFileSystemWatcher" << endl; |
1472 if (fsWatcher) { | 1472 if (m_fsWatcher) { |
1473 m_fsWatcherSuspended = true; | 1473 m_fsWatcherSuspended = true; |
1474 if (m_fsWatcherRestoreTimer) { | 1474 if (m_fsWatcherRestoreTimer) { |
1475 delete m_fsWatcherRestoreTimer; | 1475 delete m_fsWatcherRestoreTimer; |
1476 m_fsWatcherRestoreTimer = 0; | 1476 m_fsWatcherRestoreTimer = 0; |
1477 } | 1477 } |
1499 } | 1499 } |
1500 | 1500 |
1501 void MainWindow::actuallyRestoreFileSystemWatcher() | 1501 void MainWindow::actuallyRestoreFileSystemWatcher() |
1502 { | 1502 { |
1503 DEBUG << "MainWindow::actuallyRestoreFileSystemWatcher" << endl; | 1503 DEBUG << "MainWindow::actuallyRestoreFileSystemWatcher" << endl; |
1504 if (fsWatcher) { | 1504 if (m_fsWatcher) { |
1505 m_fsWatcherSuspended = false; | 1505 m_fsWatcherSuspended = false; |
1506 m_fsWatcherGeneralTimer->start(); | 1506 m_fsWatcherGeneralTimer->start(); |
1507 } | 1507 } |
1508 } | 1508 } |
1509 | 1509 |
1549 } | 1549 } |
1550 } | 1550 } |
1551 | 1551 |
1552 void MainWindow::showIncoming(QString output) | 1552 void MainWindow::showIncoming(QString output) |
1553 { | 1553 { |
1554 runner->hide(); | 1554 m_runner->hide(); |
1555 IncomingDialog *d = new IncomingDialog(this, output); | 1555 IncomingDialog *d = new IncomingDialog(this, output); |
1556 d->exec(); | 1556 d->exec(); |
1557 delete d; | 1557 delete d; |
1558 } | 1558 } |
1559 | 1559 |
1579 report = tr("No changes to push"); | 1579 report = tr("No changes to push"); |
1580 } else { | 1580 } else { |
1581 report = tr("Push complete"); | 1581 report = tr("Push complete"); |
1582 } | 1582 } |
1583 report = format3(report, tr("The push command output was:"), output); | 1583 report = format3(report, tr("The push command output was:"), output); |
1584 runner->hide(); | 1584 m_runner->hide(); |
1585 QMessageBox::information(this, "Push complete", report); | 1585 QMessageBox::information(this, "Push complete", report); |
1586 } | 1586 } |
1587 | 1587 |
1588 void MainWindow::showPullResult(QString output) | 1588 void MainWindow::showPullResult(QString output) |
1589 { | 1589 { |
1595 report = tr("No changes to pull"); | 1595 report = tr("No changes to pull"); |
1596 } else { | 1596 } else { |
1597 report = tr("Pull complete"); | 1597 report = tr("Pull complete"); |
1598 } | 1598 } |
1599 report = format3(report, tr("The pull command output was:"), output); | 1599 report = format3(report, tr("The pull command output was:"), output); |
1600 runner->hide(); | 1600 m_runner->hide(); |
1601 | 1601 |
1602 //!!! and something about updating | 1602 //!!! and something about updating |
1603 | 1603 |
1604 QMessageBox::information(this, "Pull complete", report); | 1604 QMessageBox::information(this, "Pull complete", report); |
1605 } | 1605 } |
1606 | 1606 |
1607 void MainWindow::reportNewRemoteHeads(QString output) | 1607 void MainWindow::reportNewRemoteHeads(QString output) |
1608 { | 1608 { |
1609 bool headsAreLocal = false; | 1609 bool headsAreLocal = false; |
1610 | 1610 |
1611 if (currentParents.size() == 1) { | 1611 if (m_currentParents.size() == 1) { |
1612 int currentBranchHeads = 0; | 1612 int m_currentBranchHeads = 0; |
1613 bool parentIsHead = false; | 1613 bool parentIsHead = false; |
1614 Changeset *parent = currentParents[0]; | 1614 Changeset *parent = m_currentParents[0]; |
1615 foreach (Changeset *head, currentHeads) { | 1615 foreach (Changeset *head, m_currentHeads) { |
1616 if (head->isOnBranch(currentBranch)) { | 1616 if (head->isOnBranch(m_currentBranch)) { |
1617 ++currentBranchHeads; | 1617 ++m_currentBranchHeads; |
1618 } | 1618 } |
1619 if (parent->id() == head->id()) { | 1619 if (parent->id() == head->id()) { |
1620 parentIsHead = true; | 1620 parentIsHead = true; |
1621 } | 1621 } |
1622 } | 1622 } |
1623 if (currentBranchHeads == 2 && parentIsHead) { | 1623 if (m_currentBranchHeads == 2 && parentIsHead) { |
1624 headsAreLocal = true; | 1624 headsAreLocal = true; |
1625 } | 1625 } |
1626 } | 1626 } |
1627 | 1627 |
1628 if (headsAreLocal) { | 1628 if (headsAreLocal) { |
1687 output)); | 1687 output)); |
1688 settings(); | 1688 settings(); |
1689 return; | 1689 return; |
1690 case ACT_CLONEFROMREMOTE: | 1690 case ACT_CLONEFROMREMOTE: |
1691 // if clone fails, we have no repo | 1691 // if clone fails, we have no repo |
1692 workFolderPath = ""; | 1692 m_workFolderPath = ""; |
1693 enableDisableActions(); | 1693 enableDisableActions(); |
1694 break; | 1694 break; |
1695 case ACT_INCOMING: | 1695 case ACT_INCOMING: |
1696 // returns non-zero code and no output if the check was | 1696 // returns non-zero code and no output if the check was |
1697 // successful but there are no changes pending | 1697 // successful but there are no changes pending |
1767 DEBUG << "stdout is " << output << endl; | 1767 DEBUG << "stdout is " << output << endl; |
1768 LogParser lp(output, "="); | 1768 LogParser lp(output, "="); |
1769 LogList ll = lp.parse(); | 1769 LogList ll = lp.parse(); |
1770 DEBUG << ll.size() << " results" << endl; | 1770 DEBUG << ll.size() << " results" << endl; |
1771 if (!ll.empty()) { | 1771 if (!ll.empty()) { |
1772 remoteRepoPath = lp.parse()[0]["default"].trimmed(); | 1772 m_remoteRepoPath = lp.parse()[0]["default"].trimmed(); |
1773 DEBUG << "Set remote path to " << remoteRepoPath << endl; | 1773 DEBUG << "Set remote path to " << m_remoteRepoPath << endl; |
1774 } else { | 1774 } else { |
1775 remoteRepoPath = ""; | 1775 m_remoteRepoPath = ""; |
1776 } | 1776 } |
1777 MultiChoiceDialog::addRecentArgument("local", workFolderPath); | 1777 MultiChoiceDialog::addRecentArgument("local", m_workFolderPath); |
1778 MultiChoiceDialog::addRecentArgument("remote", remoteRepoPath); | 1778 MultiChoiceDialog::addRecentArgument("remote", m_remoteRepoPath); |
1779 hgTabs->setWorkFolderAndRepoNames(workFolderPath, remoteRepoPath); | 1779 m_hgTabs->setWorkFolderAndRepoNames(m_workFolderPath, m_remoteRepoPath); |
1780 break; | 1780 break; |
1781 } | 1781 } |
1782 | 1782 |
1783 case ACT_QUERY_BRANCH: | 1783 case ACT_QUERY_BRANCH: |
1784 currentBranch = output.trimmed(); | 1784 m_currentBranch = output.trimmed(); |
1785 break; | 1785 break; |
1786 | 1786 |
1787 case ACT_STAT: | 1787 case ACT_STAT: |
1788 lastStatOutput = output; | 1788 m_lastStatOutput = output; |
1789 updateFileSystemWatcher(); | 1789 updateFileSystemWatcher(); |
1790 break; | 1790 break; |
1791 | 1791 |
1792 case ACT_RESOLVE_LIST: | 1792 case ACT_RESOLVE_LIST: |
1793 if (output != "") { | 1793 if (output != "") { |
1798 foreach (QString line, outList) { | 1798 foreach (QString line, outList) { |
1799 if (!line.startsWith("R ")) winnowed.push_back(line); | 1799 if (!line.startsWith("R ")) winnowed.push_back(line); |
1800 } | 1800 } |
1801 output = winnowed.join("\n"); | 1801 output = winnowed.join("\n"); |
1802 } | 1802 } |
1803 DEBUG << "lastStatOutput = " << lastStatOutput << endl; | 1803 DEBUG << "m_lastStatOutput = " << m_lastStatOutput << endl; |
1804 DEBUG << "resolve output = " << output << endl; | 1804 DEBUG << "resolve output = " << output << endl; |
1805 hgTabs->updateWorkFolderFileList(lastStatOutput + output); | 1805 m_hgTabs->updateWorkFolderFileList(m_lastStatOutput + output); |
1806 break; | 1806 break; |
1807 | 1807 |
1808 case ACT_RESOLVE_MARK: | 1808 case ACT_RESOLVE_MARK: |
1809 shouldHgStat = true; | 1809 m_shouldHgStat = true; |
1810 break; | 1810 break; |
1811 | 1811 |
1812 case ACT_INCOMING: | 1812 case ACT_INCOMING: |
1813 showIncoming(output); | 1813 showIncoming(output); |
1814 break; | 1814 break; |
1815 | 1815 |
1816 case ACT_ANNOTATE: | 1816 case ACT_ANNOTATE: |
1817 presentLongStdoutToUser(output); | 1817 presentLongStdoutToUser(output); |
1818 shouldHgStat = true; | 1818 m_shouldHgStat = true; |
1819 break; | 1819 break; |
1820 | 1820 |
1821 case ACT_PULL: | 1821 case ACT_PULL: |
1822 showPullResult(output); | 1822 showPullResult(output); |
1823 shouldHgStat = true; | 1823 m_shouldHgStat = true; |
1824 break; | 1824 break; |
1825 | 1825 |
1826 case ACT_PUSH: | 1826 case ACT_PUSH: |
1827 showPushResult(output); | 1827 showPushResult(output); |
1828 break; | 1828 break; |
1829 | 1829 |
1830 case ACT_INIT: | 1830 case ACT_INIT: |
1831 MultiChoiceDialog::addRecentArgument("init", workFolderPath); | 1831 MultiChoiceDialog::addRecentArgument("init", m_workFolderPath); |
1832 MultiChoiceDialog::addRecentArgument("local", workFolderPath); | 1832 MultiChoiceDialog::addRecentArgument("local", m_workFolderPath); |
1833 enableDisableActions(); | 1833 enableDisableActions(); |
1834 shouldHgStat = true; | 1834 m_shouldHgStat = true; |
1835 break; | 1835 break; |
1836 | 1836 |
1837 case ACT_CLONEFROMREMOTE: | 1837 case ACT_CLONEFROMREMOTE: |
1838 MultiChoiceDialog::addRecentArgument("local", workFolderPath); | 1838 MultiChoiceDialog::addRecentArgument("local", m_workFolderPath); |
1839 MultiChoiceDialog::addRecentArgument("remote", remoteRepoPath); | 1839 MultiChoiceDialog::addRecentArgument("remote", m_remoteRepoPath); |
1840 MultiChoiceDialog::addRecentArgument("remote", workFolderPath, true); | 1840 MultiChoiceDialog::addRecentArgument("remote", m_workFolderPath, true); |
1841 QMessageBox::information(this, tr("Clone"), tr("<qt><h3>Clone successful</h3><pre>%1</pre>").arg(xmlEncode(output))); | 1841 QMessageBox::information(this, tr("Clone"), tr("<qt><h3>Clone successful</h3><pre>%1</pre>").arg(xmlEncode(output))); |
1842 enableDisableActions(); | 1842 enableDisableActions(); |
1843 shouldHgStat = true; | 1843 m_shouldHgStat = true; |
1844 break; | 1844 break; |
1845 | 1845 |
1846 case ACT_LOG: | 1846 case ACT_LOG: |
1847 hgTabs->setNewLog(output); | 1847 m_hgTabs->setNewLog(output); |
1848 needNewLog = false; | 1848 m_needNewLog = false; |
1849 break; | 1849 break; |
1850 | 1850 |
1851 case ACT_LOG_INCREMENTAL: | 1851 case ACT_LOG_INCREMENTAL: |
1852 hgTabs->addIncrementalLog(output); | 1852 m_hgTabs->addIncrementalLog(output); |
1853 break; | 1853 break; |
1854 | 1854 |
1855 case ACT_QUERY_PARENTS: | 1855 case ACT_QUERY_PARENTS: |
1856 { | 1856 { |
1857 foreach (Changeset *cs, currentParents) delete cs; | 1857 foreach (Changeset *cs, m_currentParents) delete cs; |
1858 currentParents = Changeset::parseChangesets(output); | 1858 m_currentParents = Changeset::parseChangesets(output); |
1859 QStringList parentIds = Changeset::getIds(currentParents); | 1859 QStringList parentIds = Changeset::getIds(m_currentParents); |
1860 hgTabs->setCurrent(parentIds, currentBranch); | 1860 m_hgTabs->setCurrent(parentIds, m_currentBranch); |
1861 } | 1861 } |
1862 break; | 1862 break; |
1863 | 1863 |
1864 case ACT_QUERY_HEADS: | 1864 case ACT_QUERY_HEADS: |
1865 { | 1865 { |
1866 oldHeadIds = Changeset::getIds(currentHeads); | 1866 oldHeadIds = Changeset::getIds(m_currentHeads); |
1867 Changesets newHeads = Changeset::parseChangesets(output); | 1867 Changesets newHeads = Changeset::parseChangesets(output); |
1868 QStringList newHeadIds = Changeset::getIds(newHeads); | 1868 QStringList newHeadIds = Changeset::getIds(newHeads); |
1869 if (oldHeadIds != newHeadIds) { | 1869 if (oldHeadIds != newHeadIds) { |
1870 DEBUG << "Heads changed, will prompt an incremental log if appropriate" << endl; | 1870 DEBUG << "Heads changed, will prompt an incremental log if appropriate" << endl; |
1871 headsChanged = true; | 1871 headsChanged = true; |
1872 foreach (Changeset *cs, currentHeads) delete cs; | 1872 foreach (Changeset *cs, m_currentHeads) delete cs; |
1873 currentHeads = newHeads; | 1873 m_currentHeads = newHeads; |
1874 } | 1874 } |
1875 } | 1875 } |
1876 break; | 1876 break; |
1877 | 1877 |
1878 case ACT_COMMIT: | 1878 case ACT_COMMIT: |
1879 hgTabs->clearSelections(); | 1879 m_hgTabs->clearSelections(); |
1880 justMerged = false; | 1880 m_justMerged = false; |
1881 shouldHgStat = true; | 1881 m_shouldHgStat = true; |
1882 break; | 1882 break; |
1883 | 1883 |
1884 case ACT_REVERT: | 1884 case ACT_REVERT: |
1885 hgMarkResolved(lastRevertedFiles); | 1885 hgMarkResolved(m_lastRevertedFiles); |
1886 justMerged = false; | 1886 m_justMerged = false; |
1887 break; | 1887 break; |
1888 | 1888 |
1889 case ACT_REMOVE: | 1889 case ACT_REMOVE: |
1890 case ACT_ADD: | 1890 case ACT_ADD: |
1891 hgTabs->clearSelections(); | 1891 m_hgTabs->clearSelections(); |
1892 shouldHgStat = true; | 1892 m_shouldHgStat = true; |
1893 break; | 1893 break; |
1894 | 1894 |
1895 case ACT_TAG: | 1895 case ACT_TAG: |
1896 needNewLog = true; | 1896 m_needNewLog = true; |
1897 shouldHgStat = true; | 1897 m_shouldHgStat = true; |
1898 break; | 1898 break; |
1899 | 1899 |
1900 case ACT_DIFF_SUMMARY: | 1900 case ACT_DIFF_SUMMARY: |
1901 QMessageBox::information(this, tr("Change summary"), | 1901 QMessageBox::information(this, tr("Change summary"), |
1902 format3(tr("Summary of uncommitted changes"), | 1902 format3(tr("Summary of uncommitted changes"), |
1906 | 1906 |
1907 case ACT_FOLDERDIFF: | 1907 case ACT_FOLDERDIFF: |
1908 case ACT_CHGSETDIFF: | 1908 case ACT_CHGSETDIFF: |
1909 case ACT_SERVE: | 1909 case ACT_SERVE: |
1910 case ACT_HG_IGNORE: | 1910 case ACT_HG_IGNORE: |
1911 shouldHgStat = true; | 1911 m_shouldHgStat = true; |
1912 break; | 1912 break; |
1913 | 1913 |
1914 case ACT_UPDATE: | 1914 case ACT_UPDATE: |
1915 QMessageBox::information(this, tr("Update"), tr("<qt><h3>Update successful</h3><p>%1</p>").arg(xmlEncode(output))); | 1915 QMessageBox::information(this, tr("Update"), tr("<qt><h3>Update successful</h3><p>%1</p>").arg(xmlEncode(output))); |
1916 shouldHgStat = true; | 1916 m_shouldHgStat = true; |
1917 break; | 1917 break; |
1918 | 1918 |
1919 case ACT_MERGE: | 1919 case ACT_MERGE: |
1920 //!!! use format3? | 1920 //!!! use format3? |
1921 QMessageBox::information(this, tr("Merge"), tr("<qt><h3>Merge successful</h3><pre>%1</pre>").arg(xmlEncode(output))); | 1921 QMessageBox::information(this, tr("Merge"), tr("<qt><h3>Merge successful</h3><pre>%1</pre>").arg(xmlEncode(output))); |
1922 shouldHgStat = true; | 1922 m_shouldHgStat = true; |
1923 justMerged = true; | 1923 m_justMerged = true; |
1924 break; | 1924 break; |
1925 | 1925 |
1926 case ACT_RETRY_MERGE: | 1926 case ACT_RETRY_MERGE: |
1927 QMessageBox::information(this, tr("Resolved"), | 1927 QMessageBox::information(this, tr("Resolved"), |
1928 tr("<qt><h3>Merge resolved</h3><p>Merge resolved successfully.</p>")); | 1928 tr("<qt><h3>Merge resolved</h3><p>Merge resolved successfully.</p>")); |
1929 shouldHgStat = true; | 1929 m_shouldHgStat = true; |
1930 justMerged = true; | 1930 m_justMerged = true; |
1931 break; | 1931 break; |
1932 | 1932 |
1933 default: | 1933 default: |
1934 break; | 1934 break; |
1935 } | 1935 } |
1952 { | 1952 { |
1953 QSettings settings; | 1953 QSettings settings; |
1954 settings.beginGroup("General"); | 1954 settings.beginGroup("General"); |
1955 if (settings.value("useextension", true).toBool()) { | 1955 if (settings.value("useextension", true).toBool()) { |
1956 hgTestExtension(); | 1956 hgTestExtension(); |
1957 } else if (workFolderPath == "") { | 1957 } else if (m_workFolderPath == "") { |
1958 open(); | 1958 open(); |
1959 } else { | 1959 } else { |
1960 hgQueryPaths(); | 1960 hgQueryPaths(); |
1961 } | 1961 } |
1962 break; | 1962 break; |
1963 } | 1963 } |
1964 | 1964 |
1965 case ACT_TEST_HG_EXT: | 1965 case ACT_TEST_HG_EXT: |
1966 if (workFolderPath == "") { | 1966 if (m_workFolderPath == "") { |
1967 open(); | 1967 open(); |
1968 } else{ | 1968 } else{ |
1969 hgQueryPaths(); | 1969 hgQueryPaths(); |
1970 } | 1970 } |
1971 break; | 1971 break; |
1985 case ACT_RESOLVE_LIST: | 1985 case ACT_RESOLVE_LIST: |
1986 hgQueryHeads(); | 1986 hgQueryHeads(); |
1987 break; | 1987 break; |
1988 | 1988 |
1989 case ACT_QUERY_HEADS: | 1989 case ACT_QUERY_HEADS: |
1990 if (headsChanged && !needNewLog) { | 1990 if (headsChanged && !m_needNewLog) { |
1991 hgLogIncremental(oldHeadIds); | 1991 hgLogIncremental(oldHeadIds); |
1992 } else { | 1992 } else { |
1993 hgQueryParents(); | 1993 hgQueryParents(); |
1994 } | 1994 } |
1995 break; | 1995 break; |
1997 case ACT_LOG_INCREMENTAL: | 1997 case ACT_LOG_INCREMENTAL: |
1998 hgQueryParents(); | 1998 hgQueryParents(); |
1999 break; | 1999 break; |
2000 | 2000 |
2001 case ACT_QUERY_PARENTS: | 2001 case ACT_QUERY_PARENTS: |
2002 if (needNewLog) { | 2002 if (m_needNewLog) { |
2003 hgLog(); | 2003 hgLog(); |
2004 } else { | 2004 } else { |
2005 // we're done | 2005 // we're done |
2006 noMore = true; | 2006 noMore = true; |
2007 } | 2007 } |
2011 // we're done | 2011 // we're done |
2012 noMore = true; | 2012 noMore = true; |
2013 break; | 2013 break; |
2014 | 2014 |
2015 default: | 2015 default: |
2016 if (shouldHgStat) { | 2016 if (m_shouldHgStat) { |
2017 shouldHgStat = false; | 2017 m_shouldHgStat = false; |
2018 hgQueryPaths(); | 2018 hgQueryPaths(); |
2019 } else { | 2019 } else { |
2020 noMore = true; | 2020 noMore = true; |
2021 } | 2021 } |
2022 break; | 2022 break; |
2023 } | 2023 } |
2024 | 2024 |
2025 if (noMore) { | 2025 if (noMore) { |
2026 stateUnknown = false; | 2026 m_stateUnknown = false; |
2027 enableDisableActions(); | 2027 enableDisableActions(); |
2028 hgTabs->updateHistory(); | 2028 m_hgTabs->updateHistory(); |
2029 } | 2029 } |
2030 } | 2030 } |
2031 | 2031 |
2032 void MainWindow::connectActions() | 2032 void MainWindow::connectActions() |
2033 { | 2033 { |
2034 connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); | 2034 connect(m_exitAct, SIGNAL(triggered()), this, SLOT(close())); |
2035 connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); | 2035 connect(m_aboutAct, SIGNAL(triggered()), this, SLOT(about())); |
2036 | 2036 |
2037 connect(hgRefreshAct, SIGNAL(triggered()), this, SLOT(hgRefresh())); | 2037 connect(m_hgRefreshAct, SIGNAL(triggered()), this, SLOT(hgRefresh())); |
2038 connect(hgRemoveAct, SIGNAL(triggered()), this, SLOT(hgRemove())); | 2038 connect(m_hgRemoveAct, SIGNAL(triggered()), this, SLOT(hgRemove())); |
2039 connect(hgAddAct, SIGNAL(triggered()), this, SLOT(hgAdd())); | 2039 connect(m_hgAddAct, SIGNAL(triggered()), this, SLOT(hgAdd())); |
2040 connect(hgCommitAct, SIGNAL(triggered()), this, SLOT(hgCommit())); | 2040 connect(m_hgCommitAct, SIGNAL(triggered()), this, SLOT(hgCommit())); |
2041 connect(hgFolderDiffAct, SIGNAL(triggered()), this, SLOT(hgFolderDiff())); | 2041 connect(m_hgFolderDiffAct, SIGNAL(triggered()), this, SLOT(hgFolderDiff())); |
2042 connect(hgUpdateAct, SIGNAL(triggered()), this, SLOT(hgUpdate())); | 2042 connect(m_hgUpdateAct, SIGNAL(triggered()), this, SLOT(hgUpdate())); |
2043 connect(hgRevertAct, SIGNAL(triggered()), this, SLOT(hgRevert())); | 2043 connect(m_hgRevertAct, SIGNAL(triggered()), this, SLOT(hgRevert())); |
2044 connect(hgMergeAct, SIGNAL(triggered()), this, SLOT(hgMerge())); | 2044 connect(m_hgMergeAct, SIGNAL(triggered()), this, SLOT(hgMerge())); |
2045 connect(hgIgnoreAct, SIGNAL(triggered()), this, SLOT(hgIgnore())); | 2045 connect(m_hgIgnoreAct, SIGNAL(triggered()), this, SLOT(hgIgnore())); |
2046 | 2046 |
2047 connect(settingsAct, SIGNAL(triggered()), this, SLOT(settings())); | 2047 connect(m_settingsAct, SIGNAL(triggered()), this, SLOT(settings())); |
2048 connect(openAct, SIGNAL(triggered()), this, SLOT(open())); | 2048 connect(m_openAct, SIGNAL(triggered()), this, SLOT(open())); |
2049 connect(changeRemoteRepoAct, SIGNAL(triggered()), this, SLOT(changeRemoteRepo())); | 2049 connect(m_changeRemoteRepoAct, SIGNAL(triggered()), this, SLOT(changeRemoteRepo())); |
2050 | 2050 |
2051 connect(hgIncomingAct, SIGNAL(triggered()), this, SLOT(hgIncoming())); | 2051 connect(m_hgIncomingAct, SIGNAL(triggered()), this, SLOT(hgIncoming())); |
2052 connect(hgPullAct, SIGNAL(triggered()), this, SLOT(hgPull())); | 2052 connect(m_hgPullAct, SIGNAL(triggered()), this, SLOT(hgPull())); |
2053 connect(hgPushAct, SIGNAL(triggered()), this, SLOT(hgPush())); | 2053 connect(m_hgPushAct, SIGNAL(triggered()), this, SLOT(hgPush())); |
2054 | 2054 |
2055 connect(hgAnnotateAct, SIGNAL(triggered()), this, SLOT(hgAnnotate())); | 2055 connect(m_hgAnnotateAct, SIGNAL(triggered()), this, SLOT(hgAnnotate())); |
2056 connect(hgServeAct, SIGNAL(triggered()), this, SLOT(hgServe())); | 2056 connect(m_hgServeAct, SIGNAL(triggered()), this, SLOT(hgServe())); |
2057 } | 2057 } |
2058 | 2058 |
2059 void MainWindow::connectTabsSignals() | 2059 void MainWindow::connectTabsSignals() |
2060 { | 2060 { |
2061 connect(hgTabs, SIGNAL(commit()), | 2061 connect(m_hgTabs, SIGNAL(commit()), |
2062 this, SLOT(hgCommit())); | 2062 this, SLOT(hgCommit())); |
2063 | 2063 |
2064 connect(hgTabs, SIGNAL(revert()), | 2064 connect(m_hgTabs, SIGNAL(revert()), |
2065 this, SLOT(hgRevert())); | 2065 this, SLOT(hgRevert())); |
2066 | 2066 |
2067 connect(hgTabs, SIGNAL(diffWorkingFolder()), | 2067 connect(m_hgTabs, SIGNAL(diffWorkingFolder()), |
2068 this, SLOT(hgFolderDiff())); | 2068 this, SLOT(hgFolderDiff())); |
2069 | 2069 |
2070 connect(hgTabs, SIGNAL(showSummary()), | 2070 connect(m_hgTabs, SIGNAL(showSummary()), |
2071 this, SLOT(hgShowSummary())); | 2071 this, SLOT(hgShowSummary())); |
2072 | 2072 |
2073 connect(hgTabs, SIGNAL(updateTo(QString)), | 2073 connect(m_hgTabs, SIGNAL(updateTo(QString)), |
2074 this, SLOT(hgUpdateToRev(QString))); | 2074 this, SLOT(hgUpdateToRev(QString))); |
2075 | 2075 |
2076 connect(hgTabs, SIGNAL(diffToCurrent(QString)), | 2076 connect(m_hgTabs, SIGNAL(diffToCurrent(QString)), |
2077 this, SLOT(hgDiffToCurrent(QString))); | 2077 this, SLOT(hgDiffToCurrent(QString))); |
2078 | 2078 |
2079 connect(hgTabs, SIGNAL(diffToParent(QString, QString)), | 2079 connect(m_hgTabs, SIGNAL(diffToParent(QString, QString)), |
2080 this, SLOT(hgDiffToParent(QString, QString))); | 2080 this, SLOT(hgDiffToParent(QString, QString))); |
2081 | 2081 |
2082 connect(hgTabs, SIGNAL(mergeFrom(QString)), | 2082 connect(m_hgTabs, SIGNAL(mergeFrom(QString)), |
2083 this, SLOT(hgMergeFrom(QString))); | 2083 this, SLOT(hgMergeFrom(QString))); |
2084 | 2084 |
2085 connect(hgTabs, SIGNAL(tag(QString)), | 2085 connect(m_hgTabs, SIGNAL(tag(QString)), |
2086 this, SLOT(hgTag(QString))); | 2086 this, SLOT(hgTag(QString))); |
2087 } | 2087 } |
2088 | 2088 |
2089 void MainWindow::enableDisableActions() | 2089 void MainWindow::enableDisableActions() |
2090 { | 2090 { |
2091 DEBUG << "MainWindow::enableDisableActions" << endl; | 2091 DEBUG << "MainWindow::enableDisableActions" << endl; |
2092 | 2092 |
2093 QString dirname = QDir(workFolderPath).dirName(); | 2093 QString dirname = QDir(m_workFolderPath).dirName(); |
2094 if (dirname != "") { | 2094 if (dirname != "") { |
2095 setWindowTitle(tr("EasyMercurial: %1").arg(dirname)); | 2095 setWindowTitle(tr("EasyMercurial: %1").arg(dirname)); |
2096 } else { | 2096 } else { |
2097 setWindowTitle(tr("EasyMercurial")); | 2097 setWindowTitle(tr("EasyMercurial")); |
2098 } | 2098 } |
2103 QDir localRepoDir; | 2103 QDir localRepoDir; |
2104 QDir workFolderDir; | 2104 QDir workFolderDir; |
2105 bool workFolderExist = true; | 2105 bool workFolderExist = true; |
2106 bool localRepoExist = true; | 2106 bool localRepoExist = true; |
2107 | 2107 |
2108 remoteRepoActionsEnabled = true; | 2108 m_remoteRepoActionsEnabled = true; |
2109 if (remoteRepoPath.isEmpty()) { | 2109 if (m_remoteRepoPath.isEmpty()) { |
2110 remoteRepoActionsEnabled = false; | 2110 m_remoteRepoActionsEnabled = false; |
2111 } | 2111 } |
2112 | 2112 |
2113 localRepoActionsEnabled = true; | 2113 m_localRepoActionsEnabled = true; |
2114 if (workFolderPath.isEmpty()) { | 2114 if (m_workFolderPath.isEmpty()) { |
2115 localRepoActionsEnabled = false; | 2115 m_localRepoActionsEnabled = false; |
2116 workFolderExist = false; | 2116 workFolderExist = false; |
2117 } | 2117 } |
2118 | 2118 |
2119 if (workFolderPath == "" || !workFolderDir.exists(workFolderPath)) { | 2119 if (m_workFolderPath == "" || !workFolderDir.exists(m_workFolderPath)) { |
2120 localRepoActionsEnabled = false; | 2120 m_localRepoActionsEnabled = false; |
2121 workFolderExist = false; | 2121 workFolderExist = false; |
2122 } else { | 2122 } else { |
2123 workFolderExist = true; | 2123 workFolderExist = true; |
2124 } | 2124 } |
2125 | 2125 |
2126 if (!localRepoDir.exists(workFolderPath + "/.hg")) { | 2126 if (!localRepoDir.exists(m_workFolderPath + "/.hg")) { |
2127 localRepoActionsEnabled = false; | 2127 m_localRepoActionsEnabled = false; |
2128 localRepoExist = false; | 2128 localRepoExist = false; |
2129 } | 2129 } |
2130 | 2130 |
2131 hgIncomingAct -> setEnabled(remoteRepoActionsEnabled && remoteRepoActionsEnabled); | 2131 m_hgIncomingAct -> setEnabled(m_remoteRepoActionsEnabled && m_remoteRepoActionsEnabled); |
2132 hgPullAct -> setEnabled(remoteRepoActionsEnabled && remoteRepoActionsEnabled); | 2132 m_hgPullAct -> setEnabled(m_remoteRepoActionsEnabled && m_remoteRepoActionsEnabled); |
2133 hgPushAct -> setEnabled(remoteRepoActionsEnabled && remoteRepoActionsEnabled); | 2133 m_hgPushAct -> setEnabled(m_remoteRepoActionsEnabled && m_remoteRepoActionsEnabled); |
2134 | 2134 |
2135 bool haveDiff = false; | 2135 bool haveDiff = false; |
2136 QSettings settings; | 2136 QSettings settings; |
2137 settings.beginGroup("Locations"); | 2137 settings.beginGroup("Locations"); |
2138 if (settings.value("extdiffbinary", "").toString() != "") { | 2138 if (settings.value("extdiffbinary", "").toString() != "") { |
2139 haveDiff = true; | 2139 haveDiff = true; |
2140 } | 2140 } |
2141 settings.endGroup(); | 2141 settings.endGroup(); |
2142 | 2142 |
2143 hgRefreshAct -> setEnabled(localRepoActionsEnabled); | 2143 m_hgRefreshAct -> setEnabled(m_localRepoActionsEnabled); |
2144 hgFolderDiffAct -> setEnabled(localRepoActionsEnabled && haveDiff); | 2144 m_hgFolderDiffAct -> setEnabled(m_localRepoActionsEnabled && haveDiff); |
2145 hgRevertAct -> setEnabled(localRepoActionsEnabled); | 2145 m_hgRevertAct -> setEnabled(m_localRepoActionsEnabled); |
2146 hgAddAct -> setEnabled(localRepoActionsEnabled); | 2146 m_hgAddAct -> setEnabled(m_localRepoActionsEnabled); |
2147 hgRemoveAct -> setEnabled(localRepoActionsEnabled); | 2147 m_hgRemoveAct -> setEnabled(m_localRepoActionsEnabled); |
2148 hgUpdateAct -> setEnabled(localRepoActionsEnabled); | 2148 m_hgUpdateAct -> setEnabled(m_localRepoActionsEnabled); |
2149 hgCommitAct -> setEnabled(localRepoActionsEnabled); | 2149 m_hgCommitAct -> setEnabled(m_localRepoActionsEnabled); |
2150 hgMergeAct -> setEnabled(localRepoActionsEnabled); | 2150 m_hgMergeAct -> setEnabled(m_localRepoActionsEnabled); |
2151 hgAnnotateAct -> setEnabled(localRepoActionsEnabled); | 2151 m_hgAnnotateAct -> setEnabled(m_localRepoActionsEnabled); |
2152 hgServeAct -> setEnabled(localRepoActionsEnabled); | 2152 m_hgServeAct -> setEnabled(m_localRepoActionsEnabled); |
2153 hgIgnoreAct -> setEnabled(localRepoActionsEnabled); | 2153 m_hgIgnoreAct -> setEnabled(m_localRepoActionsEnabled); |
2154 | 2154 |
2155 DEBUG << "localRepoActionsEnabled = " << localRepoActionsEnabled << endl; | 2155 DEBUG << "m_localRepoActionsEnabled = " << m_localRepoActionsEnabled << endl; |
2156 DEBUG << "canCommit = " << hgTabs->canCommit() << endl; | 2156 DEBUG << "canCommit = " << m_hgTabs->canCommit() << endl; |
2157 | 2157 |
2158 hgAddAct->setEnabled(localRepoActionsEnabled && hgTabs->canAdd()); | 2158 m_hgAddAct->setEnabled(m_localRepoActionsEnabled && m_hgTabs->canAdd()); |
2159 hgRemoveAct->setEnabled(localRepoActionsEnabled && hgTabs->canRemove()); | 2159 m_hgRemoveAct->setEnabled(m_localRepoActionsEnabled && m_hgTabs->canRemove()); |
2160 hgCommitAct->setEnabled(localRepoActionsEnabled && hgTabs->canCommit()); | 2160 m_hgCommitAct->setEnabled(m_localRepoActionsEnabled && m_hgTabs->canCommit()); |
2161 hgRevertAct->setEnabled(localRepoActionsEnabled && hgTabs->canRevert()); | 2161 m_hgRevertAct->setEnabled(m_localRepoActionsEnabled && m_hgTabs->canRevert()); |
2162 hgFolderDiffAct->setEnabled(localRepoActionsEnabled && hgTabs->canDiff()); | 2162 m_hgFolderDiffAct->setEnabled(m_localRepoActionsEnabled && m_hgTabs->canDiff()); |
2163 | 2163 |
2164 // A default merge makes sense if: | 2164 // A default merge makes sense if: |
2165 // * there is only one parent (if there are two, we have an uncommitted merge) and | 2165 // * there is only one parent (if there are two, we have an uncommitted merge) and |
2166 // * there are exactly two heads that have the same branch as the current branch and | 2166 // * there are exactly two heads that have the same branch as the current branch and |
2167 // * our parent is one of those heads | 2167 // * our parent is one of those heads |
2174 bool canUpdate = false; | 2174 bool canUpdate = false; |
2175 bool haveMerge = false; | 2175 bool haveMerge = false; |
2176 bool emptyRepo = false; | 2176 bool emptyRepo = false; |
2177 bool noWorkingCopy = false; | 2177 bool noWorkingCopy = false; |
2178 bool newBranch = false; | 2178 bool newBranch = false; |
2179 int currentBranchHeads = 0; | 2179 int m_currentBranchHeads = 0; |
2180 | 2180 |
2181 if (currentParents.size() == 1) { | 2181 if (m_currentParents.size() == 1) { |
2182 bool parentIsHead = false; | 2182 bool parentIsHead = false; |
2183 Changeset *parent = currentParents[0]; | 2183 Changeset *parent = m_currentParents[0]; |
2184 foreach (Changeset *head, currentHeads) { | 2184 foreach (Changeset *head, m_currentHeads) { |
2185 DEBUG << "head branch " << head->branch() << ", current branch " << currentBranch << endl; | 2185 DEBUG << "head branch " << head->branch() << ", current branch " << m_currentBranch << endl; |
2186 if (head->isOnBranch(currentBranch)) { | 2186 if (head->isOnBranch(m_currentBranch)) { |
2187 ++currentBranchHeads; | 2187 ++m_currentBranchHeads; |
2188 } | 2188 } |
2189 if (parent->id() == head->id()) { | 2189 if (parent->id() == head->id()) { |
2190 parentIsHead = true; | 2190 parentIsHead = true; |
2191 } | 2191 } |
2192 } | 2192 } |
2193 if (currentBranchHeads == 2 && parentIsHead) { | 2193 if (m_currentBranchHeads == 2 && parentIsHead) { |
2194 canMerge = true; | 2194 canMerge = true; |
2195 } | 2195 } |
2196 if (currentBranchHeads == 0 && parentIsHead) { | 2196 if (m_currentBranchHeads == 0 && parentIsHead) { |
2197 // Just created a new branch | 2197 // Just created a new branch |
2198 newBranch = true; | 2198 newBranch = true; |
2199 } | 2199 } |
2200 if (!parentIsHead) { | 2200 if (!parentIsHead) { |
2201 canUpdate = true; | 2201 canUpdate = true; |
2202 DEBUG << "parent id = " << parent->id() << endl; | 2202 DEBUG << "parent id = " << parent->id() << endl; |
2203 DEBUG << " head ids "<<endl; | 2203 DEBUG << " head ids "<<endl; |
2204 foreach (Changeset *h, currentHeads) { | 2204 foreach (Changeset *h, m_currentHeads) { |
2205 DEBUG << "head id = " << h->id() << endl; | 2205 DEBUG << "head id = " << h->id() << endl; |
2206 } | 2206 } |
2207 } | 2207 } |
2208 justMerged = false; | 2208 m_justMerged = false; |
2209 } else if (currentParents.size() == 0) { | 2209 } else if (m_currentParents.size() == 0) { |
2210 if (currentHeads.size() == 0) { | 2210 if (m_currentHeads.size() == 0) { |
2211 // No heads -> empty repo | 2211 // No heads -> empty repo |
2212 emptyRepo = true; | 2212 emptyRepo = true; |
2213 } else { | 2213 } else { |
2214 // Heads, but no parents -> no working copy, e.g. we have | 2214 // Heads, but no parents -> no working copy, e.g. we have |
2215 // just converted this repo but haven't updated in it yet. | 2215 // just converted this repo but haven't updated in it yet. |
2216 // Uncommon but confusing; probably merits a special case | 2216 // Uncommon but confusing; probably merits a special case |
2217 noWorkingCopy = true; | 2217 noWorkingCopy = true; |
2218 canUpdate = true; | 2218 canUpdate = true; |
2219 } | 2219 } |
2220 justMerged = false; | 2220 m_justMerged = false; |
2221 } else { | 2221 } else { |
2222 haveMerge = true; | 2222 haveMerge = true; |
2223 justMerged = true; | 2223 m_justMerged = true; |
2224 } | 2224 } |
2225 | 2225 |
2226 hgMergeAct->setEnabled(localRepoActionsEnabled && | 2226 m_hgMergeAct->setEnabled(m_localRepoActionsEnabled && |
2227 (canMerge || hgTabs->canResolve())); | 2227 (canMerge || m_hgTabs->canResolve())); |
2228 hgUpdateAct->setEnabled(localRepoActionsEnabled && | 2228 m_hgUpdateAct->setEnabled(m_localRepoActionsEnabled && |
2229 (canUpdate && !hgTabs->haveChangesToCommit())); | 2229 (canUpdate && !m_hgTabs->haveChangesToCommit())); |
2230 | 2230 |
2231 // Set the state field on the file status widget | 2231 // Set the state field on the file status widget |
2232 | 2232 |
2233 QString branchText; | 2233 QString branchText; |
2234 if (currentBranch == "" || currentBranch == "default") { | 2234 if (m_currentBranch == "" || m_currentBranch == "default") { |
2235 branchText = tr("the default branch"); | 2235 branchText = tr("the default branch"); |
2236 } else { | 2236 } else { |
2237 branchText = tr("branch \"%1\"").arg(currentBranch); | 2237 branchText = tr("branch \"%1\"").arg(m_currentBranch); |
2238 } | 2238 } |
2239 | 2239 |
2240 if (stateUnknown) { | 2240 if (m_stateUnknown) { |
2241 if (workFolderPath == "") { | 2241 if (m_workFolderPath == "") { |
2242 hgTabs->setState(tr("No repository open")); | 2242 m_hgTabs->setState(tr("No repository open")); |
2243 } else { | 2243 } else { |
2244 hgTabs->setState(tr("(Examining repository)")); | 2244 m_hgTabs->setState(tr("(Examining repository)")); |
2245 } | 2245 } |
2246 } else if (emptyRepo) { | 2246 } else if (emptyRepo) { |
2247 hgTabs->setState(tr("Nothing committed to this repository yet")); | 2247 m_hgTabs->setState(tr("Nothing committed to this repository yet")); |
2248 } else if (noWorkingCopy) { | 2248 } else if (noWorkingCopy) { |
2249 hgTabs->setState(tr("No working copy yet: consider updating")); | 2249 m_hgTabs->setState(tr("No working copy yet: consider updating")); |
2250 } else if (canMerge) { | 2250 } else if (canMerge) { |
2251 hgTabs->setState(tr("<b>Awaiting merge</b> on %1").arg(branchText)); | 2251 m_hgTabs->setState(tr("<b>Awaiting merge</b> on %1").arg(branchText)); |
2252 } else if (!hgTabs->getAllUnresolvedFiles().empty()) { | 2252 } else if (!m_hgTabs->getAllUnresolvedFiles().empty()) { |
2253 hgTabs->setState(tr("Have unresolved files following merge on %1").arg(branchText)); | 2253 m_hgTabs->setState(tr("Have unresolved files following merge on %1").arg(branchText)); |
2254 } else if (haveMerge) { | 2254 } else if (haveMerge) { |
2255 hgTabs->setState(tr("Have merged but not yet committed on %1").arg(branchText)); | 2255 m_hgTabs->setState(tr("Have merged but not yet committed on %1").arg(branchText)); |
2256 } else if (newBranch) { | 2256 } else if (newBranch) { |
2257 hgTabs->setState(tr("On %1. New branch: has not yet been committed").arg(branchText)); | 2257 m_hgTabs->setState(tr("On %1. New branch: has not yet been committed").arg(branchText)); |
2258 } else if (canUpdate) { | 2258 } else if (canUpdate) { |
2259 if (hgTabs->haveChangesToCommit()) { | 2259 if (m_hgTabs->haveChangesToCommit()) { |
2260 // have uncommitted changes | 2260 // have uncommitted changes |
2261 hgTabs->setState(tr("On %1. Not at the head of the branch").arg(branchText)); | 2261 m_hgTabs->setState(tr("On %1. Not at the head of the branch").arg(branchText)); |
2262 } else { | 2262 } else { |
2263 // no uncommitted changes | 2263 // no uncommitted changes |
2264 hgTabs->setState(tr("On %1. Not at the head of the branch: consider updating").arg(branchText)); | 2264 m_hgTabs->setState(tr("On %1. Not at the head of the branch: consider updating").arg(branchText)); |
2265 } | 2265 } |
2266 } else if (currentBranchHeads > 1) { | 2266 } else if (m_currentBranchHeads > 1) { |
2267 hgTabs->setState(tr("At one of %n heads of %1", "", currentBranchHeads).arg(branchText)); | 2267 m_hgTabs->setState(tr("At one of %n heads of %1", "", m_currentBranchHeads).arg(branchText)); |
2268 } else { | 2268 } else { |
2269 hgTabs->setState(tr("At the head of %1").arg(branchText)); | 2269 m_hgTabs->setState(tr("At the head of %1").arg(branchText)); |
2270 } | 2270 } |
2271 } | 2271 } |
2272 | 2272 |
2273 void MainWindow::createActions() | 2273 void MainWindow::createActions() |
2274 { | 2274 { |
2275 //File actions | 2275 //File actions |
2276 openAct = new QAction(QIcon(":/images/fileopen.png"), tr("Open..."), this); | 2276 m_openAct = new QAction(QIcon(":/images/fileopen.png"), tr("Open..."), this); |
2277 openAct -> setStatusTip(tr("Open an existing repository or working folder")); | 2277 m_openAct -> setStatusTip(tr("Open an existing repository or working folder")); |
2278 | 2278 |
2279 changeRemoteRepoAct = new QAction(tr("Change Remote Location..."), this); | 2279 m_changeRemoteRepoAct = new QAction(tr("Change Remote Location..."), this); |
2280 changeRemoteRepoAct->setStatusTip(tr("Change the default remote repository for pull and push actions")); | 2280 m_changeRemoteRepoAct->setStatusTip(tr("Change the default remote repository for pull and push actions")); |
2281 | 2281 |
2282 settingsAct = new QAction(QIcon(":/images/settings.png"), tr("Settings..."), this); | 2282 m_settingsAct = new QAction(QIcon(":/images/settings.png"), tr("Settings..."), this); |
2283 settingsAct -> setStatusTip(tr("View and change application settings")); | 2283 m_settingsAct -> setStatusTip(tr("View and change application settings")); |
2284 | 2284 |
2285 exitAct = new QAction(QIcon(":/images/exit.png"), tr("Quit"), this); | 2285 m_exitAct = new QAction(QIcon(":/images/exit.png"), tr("Quit"), this); |
2286 exitAct->setShortcuts(QKeySequence::Quit); | 2286 m_exitAct->setShortcuts(QKeySequence::Quit); |
2287 exitAct->setStatusTip(tr("Quit EasyMercurial")); | 2287 m_exitAct->setStatusTip(tr("Quit EasyMercurial")); |
2288 | 2288 |
2289 //Repository actions | 2289 //Repository actions |
2290 hgRefreshAct = new QAction(QIcon(":/images/status.png"), tr("Refresh"), this); | 2290 m_hgRefreshAct = new QAction(QIcon(":/images/status.png"), tr("Refresh"), this); |
2291 hgRefreshAct->setStatusTip(tr("Refresh the window to show the current state of the working folder")); | 2291 m_hgRefreshAct->setStatusTip(tr("Refresh the window to show the current state of the working folder")); |
2292 | 2292 |
2293 hgIncomingAct = new QAction(QIcon(":/images/incoming.png"), tr("Preview"), this); | 2293 m_hgIncomingAct = new QAction(QIcon(":/images/incoming.png"), tr("Preview"), this); |
2294 hgIncomingAct -> setStatusTip(tr("See what changes are available in the remote repository waiting to be pulled")); | 2294 m_hgIncomingAct -> setStatusTip(tr("See what changes are available in the remote repository waiting to be pulled")); |
2295 | 2295 |
2296 hgPullAct = new QAction(QIcon(":/images/pull.png"), tr("Pull"), this); | 2296 m_hgPullAct = new QAction(QIcon(":/images/pull.png"), tr("Pull"), this); |
2297 hgPullAct -> setStatusTip(tr("Pull changes from the remote repository to the local repository")); | 2297 m_hgPullAct -> setStatusTip(tr("Pull changes from the remote repository to the local repository")); |
2298 | 2298 |
2299 hgPushAct = new QAction(QIcon(":/images/push.png"), tr("Push"), this); | 2299 m_hgPushAct = new QAction(QIcon(":/images/push.png"), tr("Push"), this); |
2300 hgPushAct->setStatusTip(tr("Push changes from the local repository to the remote repository")); | 2300 m_hgPushAct->setStatusTip(tr("Push changes from the local repository to the remote repository")); |
2301 | 2301 |
2302 //Workfolder actions | 2302 //Workfolder actions |
2303 hgFolderDiffAct = new QAction(QIcon(":/images/folderdiff.png"), tr("Diff"), this); | 2303 m_hgFolderDiffAct = new QAction(QIcon(":/images/folderdiff.png"), tr("Diff"), this); |
2304 hgFolderDiffAct->setStatusTip(tr("See what has changed in the working folder compared with the last committed state")); | 2304 m_hgFolderDiffAct->setStatusTip(tr("See what has changed in the working folder compared with the last committed state")); |
2305 | 2305 |
2306 hgRevertAct = new QAction(QIcon(":/images/undo.png"), tr("Revert"), this); | 2306 m_hgRevertAct = new QAction(QIcon(":/images/undo.png"), tr("Revert"), this); |
2307 hgRevertAct->setStatusTip(tr("Throw away your changes and return to the last committed state")); | 2307 m_hgRevertAct->setStatusTip(tr("Throw away your changes and return to the last committed state")); |
2308 | 2308 |
2309 hgAddAct = new QAction(QIcon(":/images/add.png"), tr("Add"), this); | 2309 m_hgAddAct = new QAction(QIcon(":/images/add.png"), tr("Add"), this); |
2310 hgAddAct -> setStatusTip(tr("Mark the selected file(s) to be added on the next commit")); | 2310 m_hgAddAct -> setStatusTip(tr("Mark the selected file(s) to be added on the next commit")); |
2311 | 2311 |
2312 //!!! needs to be modified for number | 2312 //!!! needs to be modified for number |
2313 hgRemoveAct = new QAction(QIcon(":/images/remove.png"), tr("Remove"), this); | 2313 m_hgRemoveAct = new QAction(QIcon(":/images/remove.png"), tr("Remove"), this); |
2314 hgRemoveAct -> setStatusTip(tr("Mark the selected file(s) to be removed from version control on the next commit")); | 2314 m_hgRemoveAct -> setStatusTip(tr("Mark the selected file(s) to be removed from version control on the next commit")); |
2315 | 2315 |
2316 hgUpdateAct = new QAction(QIcon(":/images/update.png"), tr("Update"), this); | 2316 m_hgUpdateAct = new QAction(QIcon(":/images/update.png"), tr("Update"), this); |
2317 hgUpdateAct->setStatusTip(tr("Update the working folder to the head of the current repository branch")); | 2317 m_hgUpdateAct->setStatusTip(tr("Update the working folder to the head of the current repository branch")); |
2318 | 2318 |
2319 //!!! needs to be modified when files selected | 2319 //!!! needs to be modified when files selected |
2320 hgCommitAct = new QAction(QIcon(":/images/commit.png"), tr("Commit"), this); | 2320 m_hgCommitAct = new QAction(QIcon(":/images/commit.png"), tr("Commit"), this); |
2321 hgCommitAct->setStatusTip(tr("Commit your changes to the local repository")); | 2321 m_hgCommitAct->setStatusTip(tr("Commit your changes to the local repository")); |
2322 | 2322 |
2323 hgMergeAct = new QAction(QIcon(":/images/merge.png"), tr("Merge"), this); | 2323 m_hgMergeAct = new QAction(QIcon(":/images/merge.png"), tr("Merge"), this); |
2324 hgMergeAct->setStatusTip(tr("Merge the two independent sets of changes in the local repository into the working folder")); | 2324 m_hgMergeAct->setStatusTip(tr("Merge the two independent sets of changes in the local repository into the working folder")); |
2325 | 2325 |
2326 //Advanced actions | 2326 //Advanced actions |
2327 //!!! needs to be modified for number | 2327 //!!! needs to be modified for number |
2328 hgAnnotateAct = new QAction(tr("Annotate"), this); | 2328 m_hgAnnotateAct = new QAction(tr("Annotate"), this); |
2329 hgAnnotateAct -> setStatusTip(tr("Show line-by-line version information for selected file")); | 2329 m_hgAnnotateAct -> setStatusTip(tr("Show line-by-line version information for selected file")); |
2330 | 2330 |
2331 hgIgnoreAct = new QAction(tr("Edit .hgignore File"), this); | 2331 m_hgIgnoreAct = new QAction(tr("Edit .hgignore File"), this); |
2332 hgIgnoreAct -> setStatusTip(tr("Edit the .hgignore file, containing the names of files that should be ignored by Mercurial")); | 2332 m_hgIgnoreAct -> setStatusTip(tr("Edit the .hgignore file, containing the names of files that should be ignored by Mercurial")); |
2333 | 2333 |
2334 hgServeAct = new QAction(tr("Serve via HTTP"), this); | 2334 m_hgServeAct = new QAction(tr("Serve via HTTP"), this); |
2335 hgServeAct -> setStatusTip(tr("Serve local repository via http for workgroup access")); | 2335 m_hgServeAct -> setStatusTip(tr("Serve local repository via http for workgroup access")); |
2336 | 2336 |
2337 //Help actions | 2337 //Help actions |
2338 aboutAct = new QAction(tr("About EasyMercurial"), this); | 2338 m_aboutAct = new QAction(tr("About EasyMercurial"), this); |
2339 | 2339 |
2340 // Miscellaneous | 2340 // Miscellaneous |
2341 QShortcut *clearSelectionsShortcut = new QShortcut(Qt::Key_Escape, this); | 2341 QShortcut *clearSelectionsShortcut = new QShortcut(Qt::Key_Escape, this); |
2342 connect(clearSelectionsShortcut, SIGNAL(activated()), | 2342 connect(clearSelectionsShortcut, SIGNAL(activated()), |
2343 this, SLOT(clearSelections())); | 2343 this, SLOT(clearSelections())); |
2344 } | 2344 } |
2345 | 2345 |
2346 void MainWindow::createMenus() | 2346 void MainWindow::createMenus() |
2347 { | 2347 { |
2348 fileMenu = menuBar()->addMenu(tr("File")); | 2348 m_fileMenu = menuBar()->addMenu(tr("File")); |
2349 | 2349 |
2350 fileMenu -> addAction(openAct); | 2350 m_fileMenu -> addAction(m_openAct); |
2351 fileMenu -> addAction(changeRemoteRepoAct); | 2351 m_fileMenu -> addAction(m_changeRemoteRepoAct); |
2352 fileMenu -> addSeparator(); | 2352 m_fileMenu -> addSeparator(); |
2353 | 2353 |
2354 advancedMenu = fileMenu->addMenu(tr("Advanced")); | 2354 m_advancedMenu = m_fileMenu->addMenu(tr("Advanced")); |
2355 | 2355 |
2356 fileMenu -> addAction(settingsAct); | 2356 m_fileMenu -> addAction(m_settingsAct); |
2357 | 2357 |
2358 fileMenu -> addSeparator(); | 2358 m_fileMenu -> addSeparator(); |
2359 fileMenu -> addAction(exitAct); | 2359 m_fileMenu -> addAction(m_exitAct); |
2360 | 2360 |
2361 advancedMenu -> addAction(hgIgnoreAct); | 2361 m_advancedMenu -> addAction(m_hgIgnoreAct); |
2362 advancedMenu -> addSeparator(); | 2362 m_advancedMenu -> addSeparator(); |
2363 advancedMenu -> addAction(hgServeAct); | 2363 m_advancedMenu -> addAction(m_hgServeAct); |
2364 | 2364 |
2365 helpMenu = menuBar()->addMenu(tr("Help")); | 2365 m_helpMenu = menuBar()->addMenu(tr("Help")); |
2366 helpMenu->addAction(aboutAct); | 2366 m_helpMenu->addAction(m_aboutAct); |
2367 } | 2367 } |
2368 | 2368 |
2369 void MainWindow::createToolBars() | 2369 void MainWindow::createToolBars() |
2370 { | 2370 { |
2371 fileToolBar = addToolBar(tr("File")); | 2371 m_fileToolBar = addToolBar(tr("File")); |
2372 fileToolBar -> setIconSize(QSize(MY_ICON_SIZE, MY_ICON_SIZE)); | 2372 m_fileToolBar -> setIconSize(QSize(MY_ICON_SIZE, MY_ICON_SIZE)); |
2373 fileToolBar -> addAction(openAct); | 2373 m_fileToolBar -> addAction(m_openAct); |
2374 fileToolBar -> addAction(hgRefreshAct); | 2374 m_fileToolBar -> addAction(m_hgRefreshAct); |
2375 fileToolBar -> addSeparator(); | 2375 m_fileToolBar -> addSeparator(); |
2376 fileToolBar -> setMovable(false); | 2376 m_fileToolBar -> setMovable(false); |
2377 | 2377 |
2378 repoToolBar = addToolBar(tr(REPOMENU_TITLE)); | 2378 m_repoToolBar = addToolBar(tr(REPOMENU_TITLE)); |
2379 repoToolBar -> setIconSize(QSize(MY_ICON_SIZE, MY_ICON_SIZE)); | 2379 m_repoToolBar -> setIconSize(QSize(MY_ICON_SIZE, MY_ICON_SIZE)); |
2380 repoToolBar->addAction(hgIncomingAct); | 2380 m_repoToolBar->addAction(m_hgIncomingAct); |
2381 repoToolBar->addAction(hgPullAct); | 2381 m_repoToolBar->addAction(m_hgPullAct); |
2382 repoToolBar->addAction(hgPushAct); | 2382 m_repoToolBar->addAction(m_hgPushAct); |
2383 repoToolBar -> setMovable(false); | 2383 m_repoToolBar -> setMovable(false); |
2384 | 2384 |
2385 workFolderToolBar = addToolBar(tr(WORKFOLDERMENU_TITLE)); | 2385 m_workFolderToolBar = addToolBar(tr(WORKFOLDERMENU_TITLE)); |
2386 addToolBar(Qt::LeftToolBarArea, workFolderToolBar); | 2386 addToolBar(Qt::LeftToolBarArea, m_workFolderToolBar); |
2387 workFolderToolBar -> setIconSize(QSize(MY_ICON_SIZE, MY_ICON_SIZE)); | 2387 m_workFolderToolBar -> setIconSize(QSize(MY_ICON_SIZE, MY_ICON_SIZE)); |
2388 workFolderToolBar->addAction(hgFolderDiffAct); | 2388 m_workFolderToolBar->addAction(m_hgFolderDiffAct); |
2389 workFolderToolBar->addSeparator(); | 2389 m_workFolderToolBar->addSeparator(); |
2390 workFolderToolBar->addAction(hgRevertAct); | 2390 m_workFolderToolBar->addAction(m_hgRevertAct); |
2391 workFolderToolBar->addAction(hgUpdateAct); | 2391 m_workFolderToolBar->addAction(m_hgUpdateAct); |
2392 workFolderToolBar->addAction(hgCommitAct); | 2392 m_workFolderToolBar->addAction(m_hgCommitAct); |
2393 workFolderToolBar->addAction(hgMergeAct); | 2393 m_workFolderToolBar->addAction(m_hgMergeAct); |
2394 workFolderToolBar->addSeparator(); | 2394 m_workFolderToolBar->addSeparator(); |
2395 workFolderToolBar->addAction(hgAddAct); | 2395 m_workFolderToolBar->addAction(m_hgAddAct); |
2396 workFolderToolBar->addAction(hgRemoveAct); | 2396 m_workFolderToolBar->addAction(m_hgRemoveAct); |
2397 workFolderToolBar -> setMovable(false); | 2397 m_workFolderToolBar -> setMovable(false); |
2398 | 2398 |
2399 updateToolBarStyle(); | 2399 updateToolBarStyle(); |
2400 } | 2400 } |
2401 | 2401 |
2402 void MainWindow::updateToolBarStyle() | 2402 void MainWindow::updateToolBarStyle() |
2425 { | 2425 { |
2426 QDir workFolder; | 2426 QDir workFolder; |
2427 | 2427 |
2428 QSettings settings; | 2428 QSettings settings; |
2429 | 2429 |
2430 remoteRepoPath = settings.value("remoterepopath", "").toString(); | 2430 m_remoteRepoPath = settings.value("remoterepopath", "").toString(); |
2431 workFolderPath = settings.value("workfolderpath", "").toString(); | 2431 m_workFolderPath = settings.value("workfolderpath", "").toString(); |
2432 if (!workFolder.exists(workFolderPath)) | 2432 if (!workFolder.exists(m_workFolderPath)) |
2433 { | 2433 { |
2434 workFolderPath = ""; | 2434 m_workFolderPath = ""; |
2435 } | 2435 } |
2436 | 2436 |
2437 QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); | 2437 QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); |
2438 QSize size = settings.value("size", QSize(400, 400)).toSize(); | 2438 QSize size = settings.value("size", QSize(400, 400)).toSize(); |
2439 firstStart = settings.value("firststart", QVariant(true)).toBool(); | 2439 m_firstStart = settings.value("firststart", QVariant(true)).toBool(); |
2440 | 2440 |
2441 //!!! initialFileTypesBits = (unsigned char) settings.value("viewFileTypes", QVariant(DEFAULT_HG_STAT_BITS)).toInt(); | 2441 //!!! initialFileTypesBits = (unsigned char) settings.value("viewFileTypes", QVariant(DEFAULT_HG_STAT_BITS)).toInt(); |
2442 resize(size); | 2442 resize(size); |
2443 move(pos); | 2443 move(pos); |
2444 } | 2444 } |
2447 void MainWindow::writeSettings() | 2447 void MainWindow::writeSettings() |
2448 { | 2448 { |
2449 QSettings settings; | 2449 QSettings settings; |
2450 settings.setValue("pos", pos()); | 2450 settings.setValue("pos", pos()); |
2451 settings.setValue("size", size()); | 2451 settings.setValue("size", size()); |
2452 settings.setValue("remoterepopath", remoteRepoPath); | 2452 settings.setValue("remoterepopath", m_remoteRepoPath); |
2453 settings.setValue("workfolderpath", workFolderPath); | 2453 settings.setValue("workfolderpath", m_workFolderPath); |
2454 settings.setValue("firststart", firstStart); | 2454 settings.setValue("firststart", m_firstStart); |
2455 //!!!settings.setValue("viewFileTypes", hgTabs -> getFileTypesBits()); | 2455 //!!!settings.setValue("viewFileTypes", m_hgTabs -> getFileTypesBits()); |
2456 } | 2456 } |
2457 | 2457 |
2458 | 2458 |
2459 | 2459 |
2460 | 2460 |