QMacInstallDialog.cxx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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.toAscii().data()))
  33. {
  34. QString message = tr("Build install does not exist, "
  35. "should I create it?")
  36. + "\n\n"
  37. + tr("Directory: ");
  38. message += installDir.path();
  39. QString title = tr("Create Directory");
  40. QMessageBox::StandardButton btn;
  41. btn = QMessageBox::information(this, title, message,
  42. QMessageBox::Yes | QMessageBox::No);
  43. if(btn == QMessageBox::Yes)
  44. {
  45. cmSystemTools::MakeDirectory(installTo.toAscii().data());
  46. }
  47. }
  48. QDir cmExecDir(QApplication::applicationDirPath());
  49. cmExecDir.cd("../bin");
  50. QFileInfoList list = cmExecDir.entryInfoList();
  51. for (int i = 0; i < list.size(); ++i)
  52. {
  53. QFileInfo fileInfo = list.at(i);
  54. QString filename = fileInfo.fileName();
  55. if(filename.size() && filename[0] == '.')
  56. {
  57. continue;
  58. }
  59. QString file = fileInfo.absoluteFilePath();
  60. QString newName = installTo;
  61. newName += "/";
  62. newName += filename;
  63. // Remove the old files
  64. if(cmSystemTools::FileExists(newName.toAscii().data()))
  65. {
  66. std::cout << "rm [" << newName.toAscii().data() << "]\n";
  67. if(!cmSystemTools::RemoveFile(newName.toAscii().data()))
  68. {
  69. QString message = tr("Failed to remove file "
  70. "installation may be incomplete: ");
  71. message += newName.toAscii().data();
  72. QString title = tr("Error Removing file");
  73. QMessageBox::StandardButton btn =
  74. QMessageBox::critical(this, title, message,
  75. QMessageBox::Ok|QMessageBox::Abort);
  76. if(btn == QMessageBox::Abort)
  77. {
  78. return;
  79. }
  80. }
  81. }
  82. std::cout << "ln -s [" << file.toAscii().data() << "] [";
  83. std::cout << newName.toAscii().data() << "]\n";
  84. if(!cmSystemTools::CreateSymlink(file.toAscii().data(),
  85. newName.toAscii().data()))
  86. {
  87. QString message = tr("Failed create symlink "
  88. "installation may be incomplete: ");
  89. message += newName.toAscii().data();
  90. QString title = tr("Error Creating Symlink");
  91. QMessageBox::StandardButton btn =
  92. QMessageBox::critical(this, title, message,
  93. QMessageBox::Ok|QMessageBox::Abort);
  94. if(btn == QMessageBox::Abort)
  95. {
  96. return;
  97. }
  98. }
  99. }
  100. this->done(0);
  101. }
  102. void QMacInstallDialog::SkipInstall()
  103. {
  104. this->done(0);
  105. }
  106. void QMacInstallDialog::ShowBrowser()
  107. {
  108. QString dir = QFileDialog::getExistingDirectory(this,
  109. tr("Enter Install Prefix"), this->Internals->InstallPrefix->text());
  110. if(!dir.isEmpty())
  111. {
  112. this->Internals->InstallPrefix->setText(dir);
  113. }
  114. }