QMacInstallDialog.cxx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "QMacInstallDialog.h"
  2. #include <QMessageBox>
  3. #include "cmSystemTools.h"
  4. #include <iostream>
  5. #include <QFileDialog>
  6. #include "ui_MacInstallDialog.h"
  7. class QMacInstallDialog::QMacInstallDialogInternals : public Ui::Dialog
  8. {
  9. public:
  10. };
  11. QMacInstallDialog::QMacInstallDialog(QWidget*w)
  12. :QDialog(w)
  13. {
  14. this->Internals = new QMacInstallDialogInternals;
  15. this->Internals->setupUi(this);
  16. QObject::connect(this->Internals->choosePathButton, SIGNAL(pressed()),
  17. this, SLOT(ShowBrowser()));
  18. QObject::connect(this->Internals->skipInstallButton, SIGNAL(pressed()),
  19. this, SLOT(SkipInstall()));
  20. QObject::connect(this->Internals->doInstallButton, SIGNAL(pressed()),
  21. this, SLOT(DoInstall()));
  22. this->Internals->InstallPrefix->setText("/usr/bin/");
  23. }
  24. QMacInstallDialog::~QMacInstallDialog()
  25. {
  26. delete this->Internals;
  27. }
  28. void QMacInstallDialog::DoInstall()
  29. {
  30. QDir installDir(this->Internals->InstallPrefix->text());
  31. QString installTo = installDir.path();
  32. if(!cmSystemTools::FileExists(installTo.toLocal8Bit().data()))
  33. {
  34. QString message = tr("Build install does not exist, "
  35. "should I create it?\n\n"
  36. "Directory: ");
  37. message += installDir.path();
  38. QString title = tr("Create Directory");
  39. QMessageBox::StandardButton btn;
  40. btn = QMessageBox::information(this, title, message,
  41. QMessageBox::Yes | QMessageBox::No);
  42. if(btn == QMessageBox::Yes)
  43. {
  44. cmSystemTools::MakeDirectory(installTo.toLocal8Bit().data());
  45. }
  46. }
  47. QDir cmExecDir(QApplication::applicationDirPath());
  48. cmExecDir.cd("../bin");
  49. QFileInfoList list = cmExecDir.entryInfoList();
  50. for (int i = 0; i < list.size(); ++i)
  51. {
  52. QFileInfo fileInfo = list.at(i);
  53. QString filename = fileInfo.fileName();
  54. if(filename.size() && filename[0] == '.')
  55. {
  56. continue;
  57. }
  58. QString file = fileInfo.absoluteFilePath();
  59. QString newName = installTo;
  60. newName += "/";
  61. newName += filename;
  62. // Remove the old files
  63. if(cmSystemTools::FileExists(newName.toLocal8Bit().data()))
  64. {
  65. std::cout << "rm [" << newName.toLocal8Bit().data() << "]\n";
  66. if(!cmSystemTools::RemoveFile(newName.toLocal8Bit().data()))
  67. {
  68. QString message = tr("Failed to remove file "
  69. "installation may be incomplete: ");
  70. message += newName;
  71. QString title = tr("Error Removing file");
  72. QMessageBox::StandardButton btn =
  73. QMessageBox::critical(this, title, message,
  74. QMessageBox::Ok|QMessageBox::Abort);
  75. if(btn == QMessageBox::Abort)
  76. {
  77. return;
  78. }
  79. }
  80. }
  81. std::cout << "ln -s [" << file.toLocal8Bit().data() << "] [";
  82. std::cout << newName.toLocal8Bit().data() << "]\n";
  83. if(!cmSystemTools::CreateSymlink(file.toLocal8Bit().data(),
  84. newName.toLocal8Bit().data()))
  85. {
  86. QString message = tr("Failed create symlink "
  87. "installation may be incomplete: ");
  88. message += newName;
  89. QString title = tr("Error Creating Symlink");
  90. QMessageBox::StandardButton btn =
  91. QMessageBox::critical(this, title, message,
  92. QMessageBox::Ok|QMessageBox::Abort);
  93. if(btn == QMessageBox::Abort)
  94. {
  95. return;
  96. }
  97. }
  98. }
  99. this->done(0);
  100. }
  101. void QMacInstallDialog::SkipInstall()
  102. {
  103. this->done(0);
  104. }
  105. void QMacInstallDialog::ShowBrowser()
  106. {
  107. QString dir = QFileDialog::getExistingDirectory(this,
  108. tr("Enter Install Prefix"), this->Internals->InstallPrefix->text());
  109. if(!dir.isEmpty())
  110. {
  111. this->Internals->InstallPrefix->setText(dir);
  112. }
  113. }