FirstConfigure.cxx 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. #include "FirstConfigure.h"
  2. #include "Compilers.h"
  3. #include <QComboBox>
  4. #include <QRadioButton>
  5. #include <QSettings>
  6. #include <QVBoxLayout>
  7. StartCompilerSetup::StartCompilerSetup(QWidget* p)
  8. : QWizardPage(p)
  9. {
  10. QVBoxLayout* l = new QVBoxLayout(this);
  11. l->addWidget(new QLabel(tr("Specify the generator for this project")));
  12. this->GeneratorOptions = new QComboBox(this);
  13. l->addWidget(this->GeneratorOptions);
  14. // Add the generator platform
  15. this->PlatformFrame = CreatePlatformWidgets();
  16. l->addWidget(PlatformFrame);
  17. // Add the ability to specify toolset (-T parameter)
  18. this->ToolsetFrame = CreateToolsetWidgets();
  19. l->addWidget(ToolsetFrame);
  20. l->addSpacing(6);
  21. this->CompilerSetupOptions[0] =
  22. new QRadioButton(tr("Use default native compilers"), this);
  23. this->CompilerSetupOptions[1] =
  24. new QRadioButton(tr("Specify native compilers"), this);
  25. this->CompilerSetupOptions[2] =
  26. new QRadioButton(tr("Specify toolchain file for cross-compiling"), this);
  27. this->CompilerSetupOptions[3] =
  28. new QRadioButton(tr("Specify options for cross-compiling"), this);
  29. l->addWidget(this->CompilerSetupOptions[0]);
  30. l->addWidget(this->CompilerSetupOptions[1]);
  31. l->addWidget(this->CompilerSetupOptions[2]);
  32. l->addWidget(this->CompilerSetupOptions[3]);
  33. this->CompilerSetupOptions[0]->setChecked(true);
  34. QObject::connect(this->CompilerSetupOptions[0], SIGNAL(toggled(bool)), this,
  35. SLOT(onSelectionChanged(bool)));
  36. QObject::connect(this->CompilerSetupOptions[1], SIGNAL(toggled(bool)), this,
  37. SLOT(onSelectionChanged(bool)));
  38. QObject::connect(this->CompilerSetupOptions[2], SIGNAL(toggled(bool)), this,
  39. SLOT(onSelectionChanged(bool)));
  40. QObject::connect(this->CompilerSetupOptions[3], SIGNAL(toggled(bool)), this,
  41. SLOT(onSelectionChanged(bool)));
  42. QObject::connect(this->GeneratorOptions,
  43. SIGNAL(currentIndexChanged(QString const&)), this,
  44. SLOT(onGeneratorChanged(QString const&)));
  45. }
  46. QFrame* StartCompilerSetup::CreateToolsetWidgets()
  47. {
  48. QFrame* frame = new QFrame(this);
  49. QVBoxLayout* l = new QVBoxLayout(frame);
  50. l->setContentsMargins(0, 0, 0, 0);
  51. ToolsetLabel = new QLabel(tr("Optional toolset to use (argument to -T)"));
  52. l->addWidget(ToolsetLabel);
  53. Toolset = new QLineEdit(frame);
  54. l->addWidget(Toolset);
  55. return frame;
  56. }
  57. QFrame* StartCompilerSetup::CreatePlatformWidgets()
  58. {
  59. QFrame* frame = new QFrame(this);
  60. QVBoxLayout* l = new QVBoxLayout(frame);
  61. l->setContentsMargins(0, 0, 0, 0);
  62. this->PlatformLabel = new QLabel(tr("Optional platform for generator"));
  63. l->addWidget(this->PlatformLabel);
  64. this->PlatformOptions = new QComboBox(frame);
  65. this->PlatformOptions->setEditable(true);
  66. l->addWidget(this->PlatformOptions);
  67. return frame;
  68. }
  69. StartCompilerSetup::~StartCompilerSetup() = default;
  70. void StartCompilerSetup::setGenerators(
  71. std::vector<cmake::GeneratorInfo> const& gens)
  72. {
  73. this->GeneratorOptions->clear();
  74. QStringList generator_list;
  75. std::vector<cmake::GeneratorInfo>::const_iterator it;
  76. for (it = gens.begin(); it != gens.end(); ++it) {
  77. generator_list.append(QString::fromLocal8Bit(it->name.c_str()));
  78. if (it->supportsPlatform) {
  79. this->GeneratorsSupportingPlatform.append(
  80. QString::fromLocal8Bit(it->name.c_str()));
  81. this
  82. ->GeneratorDefaultPlatform[QString::fromLocal8Bit(it->name.c_str())] =
  83. QString::fromLocal8Bit(it->defaultPlatform.c_str());
  84. std::vector<std::string>::const_iterator platformIt =
  85. it->supportedPlatforms.cbegin();
  86. while (platformIt != it->supportedPlatforms.cend()) {
  87. this->GeneratorSupportedPlatforms.insert(
  88. QString::fromLocal8Bit(it->name.c_str()),
  89. QString::fromLocal8Bit((*platformIt).c_str()));
  90. platformIt++;
  91. }
  92. }
  93. if (it->supportsToolset) {
  94. this->GeneratorsSupportingToolset.append(
  95. QString::fromLocal8Bit(it->name.c_str()));
  96. }
  97. }
  98. this->GeneratorOptions->addItems(generator_list);
  99. }
  100. void StartCompilerSetup::setCurrentGenerator(const QString& gen)
  101. {
  102. int idx = this->GeneratorOptions->findText(gen);
  103. if (idx != -1) {
  104. this->GeneratorOptions->setCurrentIndex(idx);
  105. }
  106. }
  107. QString StartCompilerSetup::getGenerator() const
  108. {
  109. return this->GeneratorOptions->currentText();
  110. };
  111. QString StartCompilerSetup::getPlatform() const
  112. {
  113. return this->PlatformOptions->currentText();
  114. };
  115. QString StartCompilerSetup::getToolset() const
  116. {
  117. return this->Toolset->text();
  118. };
  119. bool StartCompilerSetup::defaultSetup() const
  120. {
  121. return this->CompilerSetupOptions[0]->isChecked();
  122. }
  123. bool StartCompilerSetup::compilerSetup() const
  124. {
  125. return this->CompilerSetupOptions[1]->isChecked();
  126. }
  127. bool StartCompilerSetup::crossCompilerToolChainFile() const
  128. {
  129. return this->CompilerSetupOptions[2]->isChecked();
  130. }
  131. bool StartCompilerSetup::crossCompilerSetup() const
  132. {
  133. return this->CompilerSetupOptions[3]->isChecked();
  134. }
  135. void StartCompilerSetup::onSelectionChanged(bool on)
  136. {
  137. if (on) {
  138. emit selectionChanged();
  139. }
  140. }
  141. void StartCompilerSetup::onGeneratorChanged(QString const& name)
  142. {
  143. // Display the generator platform for the generators supporting it
  144. if (GeneratorsSupportingPlatform.contains(name)) {
  145. // Change the label title to include the default platform
  146. std::string label = "Optional platform for generator";
  147. label += "(if empty, generator uses: ";
  148. label += this->GeneratorDefaultPlatform[name].toStdString();
  149. label += ")";
  150. this->PlatformLabel->setText(tr(label.c_str()));
  151. // Regenerate the list of supported platform
  152. this->PlatformOptions->clear();
  153. QStringList platform_list;
  154. platform_list.append("");
  155. QList<QString> platforms = this->GeneratorSupportedPlatforms.values(name);
  156. platform_list.append(platforms);
  157. this->PlatformOptions->addItems(platform_list);
  158. PlatformFrame->show();
  159. } else {
  160. PlatformFrame->hide();
  161. }
  162. // Display the toolset box for the generators supporting it
  163. if (GeneratorsSupportingToolset.contains(name)) {
  164. ToolsetFrame->show();
  165. } else {
  166. ToolsetFrame->hide();
  167. }
  168. }
  169. int StartCompilerSetup::nextId() const
  170. {
  171. if (compilerSetup()) {
  172. return NativeSetup;
  173. }
  174. if (crossCompilerSetup()) {
  175. return CrossSetup;
  176. }
  177. if (crossCompilerToolChainFile()) {
  178. return ToolchainSetup;
  179. }
  180. return -1;
  181. }
  182. NativeCompilerSetup::NativeCompilerSetup(QWidget* p)
  183. : QWizardPage(p)
  184. {
  185. QVBoxLayout* l = new QVBoxLayout(this);
  186. QWidget* c = new QWidget(this);
  187. l->addWidget(c);
  188. this->setupUi(c);
  189. }
  190. NativeCompilerSetup::~NativeCompilerSetup() = default;
  191. QString NativeCompilerSetup::getCCompiler() const
  192. {
  193. return this->CCompiler->text();
  194. }
  195. void NativeCompilerSetup::setCCompiler(const QString& s)
  196. {
  197. this->CCompiler->setText(s);
  198. }
  199. QString NativeCompilerSetup::getCXXCompiler() const
  200. {
  201. return this->CXXCompiler->text();
  202. }
  203. void NativeCompilerSetup::setCXXCompiler(const QString& s)
  204. {
  205. this->CXXCompiler->setText(s);
  206. }
  207. QString NativeCompilerSetup::getFortranCompiler() const
  208. {
  209. return this->FortranCompiler->text();
  210. }
  211. void NativeCompilerSetup::setFortranCompiler(const QString& s)
  212. {
  213. this->FortranCompiler->setText(s);
  214. }
  215. CrossCompilerSetup::CrossCompilerSetup(QWidget* p)
  216. : QWizardPage(p)
  217. {
  218. this->setupUi(this);
  219. QWidget::setTabOrder(systemName, systemVersion);
  220. QWidget::setTabOrder(systemVersion, systemProcessor);
  221. QWidget::setTabOrder(systemProcessor, CrossCompilers->CCompiler);
  222. QWidget::setTabOrder(CrossCompilers->CCompiler, CrossCompilers->CXXCompiler);
  223. QWidget::setTabOrder(CrossCompilers->CXXCompiler,
  224. CrossCompilers->FortranCompiler);
  225. QWidget::setTabOrder(CrossCompilers->FortranCompiler, crossFindRoot);
  226. QWidget::setTabOrder(crossFindRoot, crossProgramMode);
  227. QWidget::setTabOrder(crossProgramMode, crossLibraryMode);
  228. QWidget::setTabOrder(crossLibraryMode, crossIncludeMode);
  229. // fill in combo boxes
  230. QStringList modes;
  231. modes << tr("Search in Target Root, then native system");
  232. modes << tr("Search only in Target Root");
  233. modes << tr("Search only in native system");
  234. crossProgramMode->addItems(modes);
  235. crossLibraryMode->addItems(modes);
  236. crossIncludeMode->addItems(modes);
  237. crossProgramMode->setCurrentIndex(2);
  238. crossLibraryMode->setCurrentIndex(1);
  239. crossIncludeMode->setCurrentIndex(1);
  240. this->registerField("systemName*", this->systemName);
  241. }
  242. CrossCompilerSetup::~CrossCompilerSetup() = default;
  243. QString CrossCompilerSetup::getCCompiler() const
  244. {
  245. return this->CrossCompilers->CCompiler->text();
  246. }
  247. void CrossCompilerSetup::setCCompiler(const QString& s)
  248. {
  249. this->CrossCompilers->CCompiler->setText(s);
  250. }
  251. QString CrossCompilerSetup::getCXXCompiler() const
  252. {
  253. return this->CrossCompilers->CXXCompiler->text();
  254. }
  255. void CrossCompilerSetup::setCXXCompiler(const QString& s)
  256. {
  257. this->CrossCompilers->CXXCompiler->setText(s);
  258. }
  259. QString CrossCompilerSetup::getFortranCompiler() const
  260. {
  261. return this->CrossCompilers->FortranCompiler->text();
  262. }
  263. void CrossCompilerSetup::setFortranCompiler(const QString& s)
  264. {
  265. this->CrossCompilers->FortranCompiler->setText(s);
  266. }
  267. QString CrossCompilerSetup::getSystem() const
  268. {
  269. return this->systemName->text();
  270. }
  271. void CrossCompilerSetup::setSystem(const QString& t)
  272. {
  273. this->systemName->setText(t);
  274. }
  275. QString CrossCompilerSetup::getVersion() const
  276. {
  277. return this->systemVersion->text();
  278. }
  279. void CrossCompilerSetup::setVersion(const QString& t)
  280. {
  281. this->systemVersion->setText(t);
  282. }
  283. QString CrossCompilerSetup::getProcessor() const
  284. {
  285. return this->systemProcessor->text();
  286. }
  287. void CrossCompilerSetup::setProcessor(const QString& t)
  288. {
  289. this->systemProcessor->setText(t);
  290. }
  291. QString CrossCompilerSetup::getFindRoot() const
  292. {
  293. return this->crossFindRoot->text();
  294. }
  295. void CrossCompilerSetup::setFindRoot(const QString& t)
  296. {
  297. this->crossFindRoot->setText(t);
  298. }
  299. int CrossCompilerSetup::getProgramMode() const
  300. {
  301. return this->crossProgramMode->currentIndex();
  302. }
  303. int CrossCompilerSetup::getLibraryMode() const
  304. {
  305. return this->crossLibraryMode->currentIndex();
  306. }
  307. int CrossCompilerSetup::getIncludeMode() const
  308. {
  309. return this->crossIncludeMode->currentIndex();
  310. }
  311. void CrossCompilerSetup::setProgramMode(int m)
  312. {
  313. this->crossProgramMode->setCurrentIndex(m);
  314. }
  315. void CrossCompilerSetup::setLibraryMode(int m)
  316. {
  317. this->crossLibraryMode->setCurrentIndex(m);
  318. }
  319. void CrossCompilerSetup::setIncludeMode(int m)
  320. {
  321. this->crossIncludeMode->setCurrentIndex(m);
  322. }
  323. ToolchainCompilerSetup::ToolchainCompilerSetup(QWidget* p)
  324. : QWizardPage(p)
  325. {
  326. QVBoxLayout* l = new QVBoxLayout(this);
  327. l->addWidget(new QLabel(tr("Specify the Toolchain file")));
  328. this->ToolchainFile = new QCMakeFilePathEditor(this);
  329. l->addWidget(this->ToolchainFile);
  330. }
  331. ToolchainCompilerSetup::~ToolchainCompilerSetup() = default;
  332. QString ToolchainCompilerSetup::toolchainFile() const
  333. {
  334. return this->ToolchainFile->text();
  335. }
  336. void ToolchainCompilerSetup::setToolchainFile(const QString& t)
  337. {
  338. this->ToolchainFile->setText(t);
  339. }
  340. FirstConfigure::FirstConfigure()
  341. {
  342. // this->setOption(QWizard::HaveFinishButtonOnEarlyPages, true);
  343. this->mStartCompilerSetupPage = new StartCompilerSetup(this);
  344. this->setPage(Start, this->mStartCompilerSetupPage);
  345. QObject::connect(this->mStartCompilerSetupPage, SIGNAL(selectionChanged()),
  346. this, SLOT(restart()));
  347. this->mNativeCompilerSetupPage = new NativeCompilerSetup(this);
  348. this->setPage(NativeSetup, this->mNativeCompilerSetupPage);
  349. this->mCrossCompilerSetupPage = new CrossCompilerSetup(this);
  350. this->setPage(CrossSetup, this->mCrossCompilerSetupPage);
  351. this->mToolchainCompilerSetupPage = new ToolchainCompilerSetup(this);
  352. this->setPage(ToolchainSetup, this->mToolchainCompilerSetupPage);
  353. }
  354. FirstConfigure::~FirstConfigure() = default;
  355. void FirstConfigure::setGenerators(
  356. std::vector<cmake::GeneratorInfo> const& gens)
  357. {
  358. this->mStartCompilerSetupPage->setGenerators(gens);
  359. }
  360. QString FirstConfigure::getGenerator() const
  361. {
  362. return this->mStartCompilerSetupPage->getGenerator();
  363. }
  364. QString FirstConfigure::getPlatform() const
  365. {
  366. return this->mStartCompilerSetupPage->getPlatform();
  367. }
  368. QString FirstConfigure::getToolset() const
  369. {
  370. return this->mStartCompilerSetupPage->getToolset();
  371. }
  372. void FirstConfigure::loadFromSettings()
  373. {
  374. QSettings settings;
  375. // restore generator
  376. settings.beginGroup("Settings/StartPath");
  377. QString lastGen = settings.value("LastGenerator").toString();
  378. this->mStartCompilerSetupPage->setCurrentGenerator(lastGen);
  379. settings.endGroup();
  380. // restore compiler setup
  381. settings.beginGroup("Settings/Compiler");
  382. this->mNativeCompilerSetupPage->setCCompiler(
  383. settings.value("CCompiler").toString());
  384. this->mNativeCompilerSetupPage->setCXXCompiler(
  385. settings.value("CXXCompiler").toString());
  386. this->mNativeCompilerSetupPage->setFortranCompiler(
  387. settings.value("FortranCompiler").toString());
  388. settings.endGroup();
  389. // restore cross compiler setup
  390. settings.beginGroup("Settings/CrossCompiler");
  391. this->mCrossCompilerSetupPage->setCCompiler(
  392. settings.value("CCompiler").toString());
  393. this->mCrossCompilerSetupPage->setCXXCompiler(
  394. settings.value("CXXCompiler").toString());
  395. this->mCrossCompilerSetupPage->setFortranCompiler(
  396. settings.value("FortranCompiler").toString());
  397. this->mToolchainCompilerSetupPage->setToolchainFile(
  398. settings.value("ToolChainFile").toString());
  399. this->mCrossCompilerSetupPage->setSystem(
  400. settings.value("SystemName").toString());
  401. this->mCrossCompilerSetupPage->setVersion(
  402. settings.value("SystemVersion").toString());
  403. this->mCrossCompilerSetupPage->setProcessor(
  404. settings.value("SystemProcessor").toString());
  405. this->mCrossCompilerSetupPage->setFindRoot(
  406. settings.value("FindRoot").toString());
  407. this->mCrossCompilerSetupPage->setProgramMode(
  408. settings.value("ProgramMode", 0).toInt());
  409. this->mCrossCompilerSetupPage->setLibraryMode(
  410. settings.value("LibraryMode", 0).toInt());
  411. this->mCrossCompilerSetupPage->setIncludeMode(
  412. settings.value("IncludeMode", 0).toInt());
  413. settings.endGroup();
  414. }
  415. void FirstConfigure::saveToSettings()
  416. {
  417. QSettings settings;
  418. // save generator
  419. settings.beginGroup("Settings/StartPath");
  420. QString lastGen = this->mStartCompilerSetupPage->getGenerator();
  421. settings.setValue("LastGenerator", lastGen);
  422. settings.endGroup();
  423. // save compiler setup
  424. settings.beginGroup("Settings/Compiler");
  425. settings.setValue("CCompiler",
  426. this->mNativeCompilerSetupPage->getCCompiler());
  427. settings.setValue("CXXCompiler",
  428. this->mNativeCompilerSetupPage->getCXXCompiler());
  429. settings.setValue("FortranCompiler",
  430. this->mNativeCompilerSetupPage->getFortranCompiler());
  431. settings.endGroup();
  432. // save cross compiler setup
  433. settings.beginGroup("Settings/CrossCompiler");
  434. settings.setValue("CCompiler",
  435. this->mCrossCompilerSetupPage->getCCompiler());
  436. settings.setValue("CXXCompiler",
  437. this->mCrossCompilerSetupPage->getCXXCompiler());
  438. settings.setValue("FortranCompiler",
  439. this->mCrossCompilerSetupPage->getFortranCompiler());
  440. settings.setValue("ToolChainFile", this->getCrossCompilerToolChainFile());
  441. settings.setValue("SystemName", this->mCrossCompilerSetupPage->getSystem());
  442. settings.setValue("SystemVersion",
  443. this->mCrossCompilerSetupPage->getVersion());
  444. settings.setValue("SystemProcessor",
  445. this->mCrossCompilerSetupPage->getProcessor());
  446. settings.setValue("FindRoot", this->mCrossCompilerSetupPage->getFindRoot());
  447. settings.setValue("ProgramMode",
  448. this->mCrossCompilerSetupPage->getProgramMode());
  449. settings.setValue("LibraryMode",
  450. this->mCrossCompilerSetupPage->getLibraryMode());
  451. settings.setValue("IncludeMode",
  452. this->mCrossCompilerSetupPage->getIncludeMode());
  453. settings.endGroup();
  454. }
  455. bool FirstConfigure::defaultSetup() const
  456. {
  457. return this->mStartCompilerSetupPage->defaultSetup();
  458. }
  459. bool FirstConfigure::compilerSetup() const
  460. {
  461. return this->mStartCompilerSetupPage->compilerSetup();
  462. }
  463. bool FirstConfigure::crossCompilerSetup() const
  464. {
  465. return this->mStartCompilerSetupPage->crossCompilerSetup();
  466. }
  467. bool FirstConfigure::crossCompilerToolChainFile() const
  468. {
  469. return this->mStartCompilerSetupPage->crossCompilerToolChainFile();
  470. }
  471. QString FirstConfigure::getCrossCompilerToolChainFile() const
  472. {
  473. return this->mToolchainCompilerSetupPage->toolchainFile();
  474. }
  475. QString FirstConfigure::getSystemName() const
  476. {
  477. return this->mCrossCompilerSetupPage->getSystem();
  478. }
  479. QString FirstConfigure::getCCompiler() const
  480. {
  481. if (this->compilerSetup()) {
  482. return this->mNativeCompilerSetupPage->getCCompiler();
  483. }
  484. if (this->crossCompilerSetup()) {
  485. return this->mCrossCompilerSetupPage->getCCompiler();
  486. }
  487. return QString();
  488. }
  489. QString FirstConfigure::getCXXCompiler() const
  490. {
  491. if (this->compilerSetup()) {
  492. return this->mNativeCompilerSetupPage->getCXXCompiler();
  493. }
  494. if (this->crossCompilerSetup()) {
  495. return this->mCrossCompilerSetupPage->getCXXCompiler();
  496. }
  497. return QString();
  498. }
  499. QString FirstConfigure::getFortranCompiler() const
  500. {
  501. if (this->compilerSetup()) {
  502. return this->mNativeCompilerSetupPage->getFortranCompiler();
  503. }
  504. if (this->crossCompilerSetup()) {
  505. return this->mCrossCompilerSetupPage->getFortranCompiler();
  506. }
  507. return QString();
  508. }
  509. QString FirstConfigure::getSystemVersion() const
  510. {
  511. return this->mCrossCompilerSetupPage->getVersion();
  512. }
  513. QString FirstConfigure::getSystemProcessor() const
  514. {
  515. return this->mCrossCompilerSetupPage->getProcessor();
  516. }
  517. QString FirstConfigure::getCrossRoot() const
  518. {
  519. return this->mCrossCompilerSetupPage->getFindRoot();
  520. }
  521. const QString CrossModes[] = { "BOTH", "ONLY", "NEVER" };
  522. QString FirstConfigure::getCrossProgramMode() const
  523. {
  524. return CrossModes[this->mCrossCompilerSetupPage->getProgramMode()];
  525. }
  526. QString FirstConfigure::getCrossLibraryMode() const
  527. {
  528. return CrossModes[this->mCrossCompilerSetupPage->getLibraryMode()];
  529. }
  530. QString FirstConfigure::getCrossIncludeMode() const
  531. {
  532. return CrossModes[this->mCrossCompilerSetupPage->getIncludeMode()];
  533. }