comparison mainwindow.cpp @ 239:661f5808aa0a

* Overhaul settings-defaults mechanism, and add Restore Defaults button to settings dialog
author Chris Cannam
date Mon, 10 Jan 2011 15:18:21 +0000
parents e2f2c6e3c01b
children 4e98950f72e8
comparison
equal deleted inserted replaced
238:e2f2c6e3c01b 239:661f5808aa0a
111 111
112 if (firstStart) { 112 if (firstStart) {
113 startupDialog(); 113 startupDialog();
114 } 114 }
115 115
116 (void)findDiffBinaryName(); 116 SettingsDialog::findDefaultLocations(m_myDirPath);
117 (void)findMergeBinaryName();
118 (void)findEditorBinaryName();
119 117
120 ColourSet *cs = ColourSet::instance(); 118 ColourSet *cs = ColourSet::instance();
121 cs->clearDefaultNames(); 119 cs->clearDefaultNames();
122 cs->addDefaultName(""); 120 cs->addDefaultName("");
123 cs->addDefaultName("default"); 121 cs->addDefaultName("default");
495 hgIgnorePath = workFolderPath; 493 hgIgnorePath = workFolderPath;
496 hgIgnorePath += "/.hgignore"; 494 hgIgnorePath += "/.hgignore";
497 495
498 params << hgIgnorePath; 496 params << hgIgnorePath;
499 497
500 QString editor = findEditorBinaryName(); 498 QString editor = getEditorBinaryName();
501 499
502 if (editor == "") { 500 if (editor == "") {
503 DEBUG << "Failed to find a text editor" << endl; 501 DEBUG << "Failed to find a text editor" << endl;
504 //!!! visible error! 502 //!!! visible error!
505 return; 503 return;
509 action.executable = editor; 507 action.executable = editor;
510 508
511 runner->requestAction(action); 509 runner->requestAction(action);
512 } 510 }
513 511
514 QString MainWindow::findDiffBinaryName() 512 QString MainWindow::getDiffBinaryName()
515 { 513 {
516 QSettings settings; 514 QSettings settings;
517 settings.beginGroup("Locations"); 515 settings.beginGroup("Locations");
518 QString diff = settings.value("extdiffbinary", "").toString(); 516 return settings.value("extdiffbinary", "").toString();
519 if (diff == "") { 517 }
520 QStringList bases; 518
521 #ifdef Q_OS_MAC 519 QString MainWindow::getMergeBinaryName()
522 bases << "easyhg-extdiff-osx.sh";
523 #endif
524 bases << "kompare" << "kdiff3" << "meld";
525 bool found = false;
526 foreach (QString base, bases) {
527 diff = findInPath(base, m_myDirPath, true);
528 if (diff != "") {
529 found = true;
530 break;
531 }
532 }
533 if (found) {
534 settings.setValue("extdiffbinary", diff);
535 } else {
536 diff = "";
537 }
538 }
539 return diff;
540 }
541
542 QString MainWindow::findMergeBinaryName()
543 { 520 {
544 QSettings settings; 521 QSettings settings;
545 settings.beginGroup("Locations"); 522 settings.beginGroup("Locations");
546 if (settings.contains("mergebinary")) { 523 return settings.value("mergebinary", "").toString();
547 // use it even if empty: user may have specified no external tool 524 }
548 QVariant v = settings.value("mergebinary"); 525
549 DEBUG << "v = " << v << endl; 526 QString MainWindow::getEditorBinaryName()
550 return v.toString();
551 }
552 QString merge;
553 QStringList bases;
554 #ifdef Q_OS_MAC
555 bases << "easyhg-merge-osx.sh";
556 #endif
557 // I think this is too dangerous, given command line ordering
558 // differences and suchlike. Need to make sure the hg
559 // installation is configured OK instead
560 // bases << "meld" << "diffuse" << "kdiff3";
561 bool found = false;
562 foreach (QString base, bases) {
563 merge = findInPath(base, m_myDirPath, true);
564 if (merge != "") {
565 found = true;
566 break;
567 }
568 }
569 if (found) {
570 settings.setValue("mergebinary", merge);
571 } else {
572 merge = "";
573 }
574 return merge;
575 }
576
577 QString MainWindow::findEditorBinaryName()
578 { 527 {
579 QSettings settings; 528 QSettings settings;
580 settings.beginGroup("Locations"); 529 settings.beginGroup("Locations");
581 QString editor = settings.value("editorbinary", "").toString(); 530 return settings.value("editorbinary", "").toString();
582 if (editor == "") {
583 QStringList bases;
584 bases
585 #if defined Q_OS_WIN32
586 << "wordpad.exe"
587 << "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe"
588 << "notepad.exe"
589 #elif defined Q_OS_MAC
590 << "/Applications/TextEdit.app/Contents/MacOS/TextEdit"
591 #else
592 << "gedit" << "kate"
593 #endif
594 ;
595 bool found = false;
596 foreach (QString base, bases) {
597 editor = findInPath(base, m_myDirPath, true);
598 if (editor != "") {
599 found = true;
600 break;
601 }
602 }
603 if (found) {
604 settings.setValue("editorbinary", editor);
605 } else {
606 editor = "";
607 }
608 }
609 return editor;
610 } 531 }
611 532
612 void MainWindow::hgShowSummary() 533 void MainWindow::hgShowSummary()
613 { 534 {
614 QStringList params; 535 QStringList params;
618 runner->requestAction(HgAction(ACT_DIFF_SUMMARY, workFolderPath, params)); 539 runner->requestAction(HgAction(ACT_DIFF_SUMMARY, workFolderPath, params));
619 } 540 }
620 541
621 void MainWindow::hgFolderDiff() 542 void MainWindow::hgFolderDiff()
622 { 543 {
623 QString diff = findDiffBinaryName(); 544 QString diff = getDiffBinaryName();
624 if (diff == "") return; 545 if (diff == "") return;
625 546
626 QStringList params; 547 QStringList params;
627 548
628 // Diff parent against working folder (folder diff) 549 // Diff parent against working folder (folder diff)
636 } 557 }
637 558
638 559
639 void MainWindow::hgDiffToCurrent(QString id) 560 void MainWindow::hgDiffToCurrent(QString id)
640 { 561 {
641 QString diff = findDiffBinaryName(); 562 QString diff = getDiffBinaryName();
642 if (diff == "") return; 563 if (diff == "") return;
643 564
644 QStringList params; 565 QStringList params;
645 566
646 // Diff given revision against working folder 567 // Diff given revision against working folder
653 } 574 }
654 575
655 576
656 void MainWindow::hgDiffToParent(QString child, QString parent) 577 void MainWindow::hgDiffToParent(QString child, QString parent)
657 { 578 {
658 QString diff = findDiffBinaryName(); 579 QString diff = getDiffBinaryName();
659 if (diff == "") return; 580 if (diff == "") return;
660 581
661 QStringList params; 582 QStringList params;
662 583
663 // Diff given revision against working folder 584 // Diff given revision against working folder
784 { 705 {
785 QStringList params; 706 QStringList params;
786 707
787 params << "resolve"; 708 params << "resolve";
788 709
789 QString merge = findMergeBinaryName(); 710 QString merge = getMergeBinaryName();
790 if (merge != "") { 711 if (merge != "") {
791 params << "--tool" << merge; 712 params << "--tool" << merge;
792 } 713 }
793 714
794 QStringList files = hgTabs->getSelectedUnresolvedFiles(); 715 QStringList files = hgTabs->getSelectedUnresolvedFiles();
817 738
818 QStringList params; 739 QStringList params;
819 740
820 params << "merge"; 741 params << "merge";
821 742
822 QString merge = findMergeBinaryName(); 743 QString merge = getMergeBinaryName();
823 if (merge != "") { 744 if (merge != "") {
824 params << "--tool" << merge; 745 params << "--tool" << merge;
825 } 746 }
826 747
827 if (currentParents.size() == 1) { 748 if (currentParents.size() == 1) {
839 QStringList params; 760 QStringList params;
840 761
841 params << "merge"; 762 params << "merge";
842 params << "--rev" << Changeset::hashOf(id); 763 params << "--rev" << Changeset::hashOf(id);
843 764
844 QString merge = findMergeBinaryName(); 765 QString merge = getMergeBinaryName();
845 if (merge != "") { 766 if (merge != "") {
846 params << "--tool" << merge; 767 params << "--tool" << merge;
847 } 768 }
848 769
849 if (currentParents.size() == 1) { 770 if (currentParents.size() == 1) {