tizengbskitinformation.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #include "tizengbskitinformation.h"
  2. #include "tizenconstants.h"
  3. #include "tizendebug.h"
  4. #include <utils/elidinglabel.h>
  5. #include <utils/environment.h>
  6. #include <utils/pathchooser.h>
  7. #include <QPushButton>
  8. #include <QDir>
  9. #include <QVBoxLayout>
  10. #include <QFormLayout>
  11. #include <QDialogButtonBox>
  12. #include <QDialog>
  13. #include <QLineEdit>
  14. using namespace ProjectExplorer;
  15. using namespace Utils;
  16. namespace Tizen {
  17. namespace Internal {
  18. static const char *gbsKitInformationId = "Tizen.Gbs.Information";
  19. static const char *gbsProfileId = "Tizen.Gbs.Information.Profile";
  20. static const char *gbsArchitectureId = "Tizen.Gbs.Information.Architecture";
  21. static const char *gbsBuildrootId = "Tizen.Gbs.Information.Buildroot";
  22. static const char *gbsConfigFileId = "Tizen.Gbs.Information.ConfigFile";
  23. static const char *gbsAdditionalParametersId = "Tizen.Gbs.Information.AdditionalParameters";
  24. TizenGbsKitInformation::TizenGbsKitInformation()
  25. {
  26. setId(TizenGbsKitInformation::id());
  27. setPriority(3000);
  28. }
  29. QVariant TizenGbsKitInformation::defaultValue(ProjectExplorer::Kit *kit) const
  30. {
  31. return autoDetect(kit).toString();
  32. }
  33. QList<ProjectExplorer::Task> TizenGbsKitInformation::validate(const ProjectExplorer::Kit *) const
  34. {
  35. return QList<Task>();
  36. }
  37. ProjectExplorer::KitInformation::ItemList TizenGbsKitInformation::toUserOutput(const ProjectExplorer::Kit *kit) const
  38. {
  39. return KitInformation::ItemList()
  40. << qMakePair(tr("Gbs binary"), TizenGbsKitInformation::gbsPath(kit).toString());
  41. }
  42. ProjectExplorer::KitConfigWidget *TizenGbsKitInformation::createConfigWidget(ProjectExplorer::Kit * kit) const
  43. {
  44. return new TizenGbsKitInformationWidget(kit, this);
  45. }
  46. FileName TizenGbsKitInformation::gbsPath(const ProjectExplorer::Kit *kit)
  47. {
  48. return FileName::fromString(kit->value(TizenGbsKitInformation::id()).toString());
  49. }
  50. FileName TizenGbsKitInformation::autoDetect(Kit *)
  51. {
  52. QStringList path = Environment::systemEnvironment().path();
  53. foreach (const QString &base, path) {
  54. QDir dir(base);
  55. QLatin1Literal gbs("gbs");
  56. if (dir.exists(gbs)) {
  57. return FileName::fromString(dir.absoluteFilePath(gbs));
  58. }
  59. }
  60. return FileName();
  61. }
  62. QString TizenGbsKitInformation::gbsProfile(Kit *kit)
  63. {
  64. return kit->value(gbsProfileId).toString();
  65. }
  66. QString TizenGbsKitInformation::gbsArchitecture(Kit *kit)
  67. {
  68. return kit->value(gbsArchitectureId).toString();
  69. }
  70. FileName TizenGbsKitInformation::gbsBuildroot(Kit *kit)
  71. {
  72. return FileName::fromString(kit->value(gbsBuildrootId).toString());
  73. }
  74. FileName TizenGbsKitInformation::gbsConfigFile(Kit *kit)
  75. {
  76. return FileName::fromString(kit->value(gbsConfigFileId).toString());
  77. }
  78. QString TizenGbsKitInformation::gbsAdditionalParameters(Kit *kit)
  79. {
  80. return kit->value(gbsArchitectureId).toString();
  81. }
  82. Core::Id TizenGbsKitInformation::id()
  83. {
  84. return Core::Id(gbsKitInformationId);
  85. }
  86. void TizenGbsKitInformation::setGbsPath(Kit *kit, Utils::FileName gbsPath)
  87. {
  88. kit->setValue(TizenGbsKitInformation::id(), gbsPath.toString());
  89. }
  90. void TizenGbsKitInformation::setGbsProfile(Kit *kit, QString profileName)
  91. {
  92. kit->setValue(Core::Id(gbsProfileId), profileName);
  93. }
  94. void TizenGbsKitInformation::setGbsArchitecture(Kit *kit, QString architecture)
  95. {
  96. kit->setValue(Core::Id(gbsArchitectureId), architecture);
  97. }
  98. void TizenGbsKitInformation::setGbsBuildroot(Kit *kit, QString buildroot)
  99. {
  100. kit->setValue(Core::Id(gbsBuildrootId), buildroot);
  101. }
  102. void TizenGbsKitInformation::setGbsConfigFile(Kit *kit, QString configFilePath)
  103. {
  104. kit->setValue(Core::Id(gbsConfigFileId), configFilePath);
  105. }
  106. void TizenGbsKitInformation::setGbsAdditionalParameters(Kit *kit, QString additionalParameters)
  107. {
  108. kit->setValue(Core::Id(gbsAdditionalParametersId), additionalParameters);
  109. }
  110. TizenGbsKitInformationWidget::TizenGbsKitInformationWidget(ProjectExplorer::Kit *kit, const ProjectExplorer::KitInformation *ki):
  111. KitConfigWidget(kit, ki),
  112. m_label(new ElidingLabel),
  113. m_button(new QPushButton(tr("Manage...")))
  114. {
  115. m_label->setWordWrap(true);
  116. connect(m_button, SIGNAL(clicked()), this, SLOT(showDialog()));
  117. refresh();
  118. }
  119. TizenGbsKitInformationWidget::~TizenGbsKitInformationWidget()
  120. {
  121. delete m_label;
  122. delete m_button;
  123. }
  124. QString TizenGbsKitInformationWidget::displayName() const
  125. {
  126. return tr("Gbs build configuration");
  127. }
  128. QString TizenGbsKitInformationWidget::toolTip() const
  129. {
  130. return tr("Gbs binary to use with this kit");
  131. }
  132. void TizenGbsKitInformationWidget::makeReadOnly()
  133. {
  134. m_button->setEnabled(false);
  135. }
  136. void TizenGbsKitInformationWidget::refresh()
  137. {
  138. QString gbsPath = TizenGbsKitInformation::gbsPath(m_kit).toString();
  139. QString profile = TizenGbsKitInformation::gbsProfile(m_kit);
  140. QString architecture = TizenGbsKitInformation::gbsArchitecture(m_kit);
  141. QString buildroot = TizenGbsKitInformation::gbsBuildroot(m_kit).toString();
  142. QString configFile = TizenGbsKitInformation::gbsConfigFile(m_kit).toString();
  143. QString additionalParameters = TizenGbsKitInformation::gbsAdditionalParameters(m_kit);
  144. QStringList result;
  145. result << gbsPath << QLatin1Literal("build");
  146. if (!configFile.isEmpty())
  147. result << QLatin1Literal("-D") << configFile;
  148. if (!buildroot.isEmpty())
  149. result << QLatin1Literal("-B") << buildroot;
  150. if (!profile.isEmpty())
  151. result << QLatin1Literal("-P") << profile;
  152. if (!architecture.isEmpty())
  153. result << QLatin1Literal("-C") << architecture;
  154. if (!additionalParameters.isEmpty())
  155. result << additionalParameters;
  156. m_label->setText(result.join(QLatin1Literal(" ")));
  157. }
  158. bool TizenGbsKitInformationWidget::visibleInKit()
  159. {
  160. return DeviceTypeKitInformation::deviceTypeId(m_kit) == Constants::TIZEN_DEVICE_TYPE;
  161. }
  162. QWidget *TizenGbsKitInformationWidget::mainWidget() const
  163. {
  164. return m_label;
  165. }
  166. QWidget *TizenGbsKitInformationWidget::buttonWidget() const
  167. {
  168. return m_button;
  169. }
  170. void TizenGbsKitInformationWidget::showDialog()
  171. {
  172. QDialog dialog;
  173. QVBoxLayout *layout = new QVBoxLayout(&dialog);
  174. QFormLayout *formLayout = new QFormLayout;
  175. formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
  176. QLabel *binaryLabel = new QLabel(tr("&Gbs binary:"), &dialog);
  177. PathChooser *chooser = new PathChooser(&dialog);
  178. chooser->setExpectedKind(PathChooser::ExistingCommand);
  179. chooser->setPath(TizenGbsKitInformation::gbsPath(m_kit).toString());
  180. binaryLabel->setBuddy(chooser);
  181. formLayout->addRow(binaryLabel, chooser);
  182. QLabel *profileLabel = new QLabel(tr("&Profile:"), &dialog);
  183. QLineEdit *profileLineEdit = new QLineEdit(TizenGbsKitInformation::gbsProfile(m_kit), &dialog);
  184. profileLabel->setBuddy(profileLineEdit);
  185. formLayout->addRow(profileLabel, profileLineEdit);
  186. layout->addLayout(formLayout);
  187. QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog);
  188. connect(buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
  189. connect(buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
  190. layout->addWidget(buttonBox);
  191. dialog.setWindowTitle(tr("Gbs for \"%1\"").arg(m_kit->displayName()));
  192. if (dialog.exec() == QDialog::Accepted) {
  193. TizenGbsKitInformation::setGbsPath(m_kit, chooser->fileName());
  194. TizenGbsKitInformation::setGbsProfile(m_kit, profileLineEdit->text());
  195. }
  196. }
  197. } //namespace Internal
  198. } //namespace Tizen