UIMainFrame.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  2. // Please see LICENSE.md in repository root for license information
  3. // https://github.com/AtomicGameEngine/AtomicEditor
  4. #include "AtomicEditor.h"
  5. #include <Atomic/Core/ProcessUtils.h>
  6. #include <Atomic/UI/TBUI.h>
  7. #include <Atomic/IO/Log.h>
  8. #include <Atomic/Core/Context.h>
  9. #include <Atomic/Input/Input.h>
  10. #include <Atomic/Input/InputEvents.h>
  11. #include <Atomic/Graphics/Graphics.h>
  12. #include <Atomic/Graphics/GraphicsEvents.h>
  13. #include <Atomic/Resource/ResourceCache.h>
  14. #include <Atomic/IO/File.h>
  15. #include <Atomic/IO/FileSystem.h>
  16. #include "UIMainFrame.h"
  17. #include "UIMainToolbar.h"
  18. #include "UIProjectFrame.h"
  19. #include "UIPlayerWidget.h"
  20. #include "UIResourceFrame.h"
  21. #include "UIWelcomeFrame.h"
  22. #include "UI/Modal/UIModalOps.h"
  23. #include "UI/Modal/UIMessageModal.h"
  24. #include "UIFindTextWidget.h"
  25. #include "../AEEvents.h"
  26. #include "../AEEditor.h"
  27. #include "../AEJavascript.h"
  28. #include "../Player/AEPlayer.h"
  29. #include "../Project/AEProject.h"
  30. #include "../Project/ProjectUtils.h"
  31. #include <TurboBadger/tb_message_window.h>
  32. #include <TurboBadger/tb_editfield.h>
  33. using namespace tb;
  34. namespace AtomicEditor
  35. {
  36. MainFrame::MainFrame(Context* context) :
  37. AEWidget(context),
  38. consoletext_(0),
  39. resourceviewcontainer_(0),
  40. platformIndicator_(0)
  41. {
  42. context->RegisterSubsystem(this);
  43. menuAtomicEditorSource.AddItem(new TBGenericStringItem("About Atomic Editor", TBIDC("about atomic editor")));
  44. menuAtomicEditorSource.AddItem(new TBGenericStringItem("-"));
  45. menuAtomicEditorSource.AddItem(new TBGenericStringItem("Manage License", TBIDC("manage license")));
  46. menuAtomicEditorSource.AddItem(new TBGenericStringItem("-"));
  47. menuAtomicEditorSource.AddItem(new TBGenericStringItem("Quit", TBIDC("quit")));
  48. menuFileSource.AddItem(new TBGenericStringItem("New Project", TBIDC("new project")));
  49. menuFileSource.AddItem(new TBGenericStringItem("Open Project", TBIDC("open project")));
  50. menuFileSource.AddItem(new TBGenericStringItem("Save Project", TBIDC("save project")));
  51. menuFileSource.AddItem(new TBGenericStringItem("-"));
  52. menuFileSource.AddItem(new TBGenericStringItem("Close Project", TBIDC("close project")));
  53. menuEditSource.AddItem(new TBGenericStringItem("Undo", TBIDC("edit undo")));
  54. menuEditSource.AddItem(new TBGenericStringItem("Redo", TBIDC("edit redo")));
  55. menuEditSource.AddItem(new TBGenericStringItem("-"));
  56. menuEditSource.AddItem(new TBGenericStringItem("Cut", TBIDC("edit cut")));
  57. menuEditSource.AddItem(new TBGenericStringItem("Copy", TBIDC("edit copy")));
  58. menuEditSource.AddItem(new TBGenericStringItem("Paste", TBIDC("edit paste")));
  59. menuEditSource.AddItem(new TBGenericStringItem("-"));
  60. menuEditSource.AddItem(new TBGenericStringItem("Find", TBIDC("edit find")));
  61. menuEditSource.AddItem(new TBGenericStringItem("-"));
  62. menuEditSource.AddItem(new TBGenericStringItem("Format Code", TBIDC("format code")));
  63. menuResourcesSource.AddItem(new TBGenericStringItem("Create", &menuResourcesCreateSource));
  64. menuResourcesSource.AddItem(new TBGenericStringItem("-"));
  65. menuResourcesSource.AddItem(new TBGenericStringItem("Reveal in Finder", TBIDC("reveal")));
  66. menuResourcesCreateSource.AddItem(new TBGenericStringItem("Component", TBIDC("create_component")));
  67. menuResourcesCreateSource.AddItem(new TBGenericStringItem("2D Level", TBIDC("create_tmx")));
  68. menuResourcesCreateSource.AddItem(new TBGenericStringItem("-"));
  69. menuResourcesCreateSource.AddItem(new TBGenericStringItem("Javascript", TBIDC("create_javascript")));
  70. menuResourcesCreateSource.AddItem(new TBGenericStringItem("-"));
  71. menuResourcesCreateSource.AddItem(new TBGenericStringItem("Folder", TBIDC("create_folder")));
  72. menuProjectSource.AddItem(new TBGenericStringItem("Build", TBIDC("project_build")));
  73. menuProjectSource.AddItem(new TBGenericStringItem("Build Settings", TBIDC("project_build_settings")));
  74. menuHelpSource.AddItem(new TBGenericStringItem("API Documentation", TBIDC("help_api")));
  75. menuHelpSource.AddItem(new TBGenericStringItem("-"));
  76. menuHelpSource.AddItem(new TBGenericStringItem("Forums", TBIDC("help_forums")));
  77. TBUI* tbui = GetSubsystem<TBUI>();
  78. tbui->LoadResourceFile(delegate_, "AtomicEditor/editor/ui/mainframe.tb.txt");
  79. Graphics* graphics = GetSubsystem<Graphics>();
  80. delegate_->SetSize(graphics->GetWidth(), graphics->GetHeight());
  81. tbui->GetRootWidget()->AddChild(delegate_);
  82. maintoolbar_ = new MainToolbar(context_);
  83. TBLayout* maintoolbarcontainer = delegate_->GetWidgetByIDAndType<TBLayout>(TBIDC("maintoolbarcontainer"));
  84. assert(maintoolbarcontainer);
  85. TBWidget* wd = maintoolbar_->GetWidgetDelegate();
  86. TBRect rect = maintoolbarcontainer->GetRect();
  87. wd->SetSize(rect.w, rect.h);
  88. maintoolbarcontainer->AddChild(wd);
  89. projectframe_ = new ProjectFrame(context_);
  90. TBLayout* projectviewcontainer = delegate_->GetWidgetByIDAndType<TBLayout>(TBIDC("projectviewcontainer"));
  91. assert(projectviewcontainer);
  92. // better way to do this? projectviewcontainer isn't a layout
  93. wd = projectframe_->GetWidgetDelegate();
  94. rect = projectviewcontainer->GetRect();
  95. wd->SetSize(rect.w, rect.h);
  96. projectviewcontainer->AddChild(wd);
  97. resourceviewcontainer_ = delegate_->GetWidgetByIDAndType<TBLayout>(TBIDC("resourceviewcontainer"));
  98. assert(resourceviewcontainer_);
  99. rect = resourceviewcontainer_->GetRect();
  100. // player widget
  101. playerwidget_ = new PlayerWidget(context_);
  102. wd = playerwidget_->GetWidgetDelegate();
  103. wd->SetSize(rect.w, rect.h);
  104. // welcome frame
  105. welcomeframe_ = new WelcomeFrame(context_);
  106. wd = welcomeframe_->GetWidgetDelegate();
  107. wd->SetSize(rect.w, rect.h);
  108. resourceframe_ = new ResourceFrame(context_);
  109. // better way to do this? projectviewcontainer isn't a layout
  110. wd = resourceframe_->GetWidgetDelegate();
  111. wd->SetSize(rect.w, rect.h);
  112. //resourceviewcontainer->AddChild(wd);
  113. platformIndicator_ = delegate_->GetWidgetByIDAndType<TBSkinImage>(TBIDC("current_platform_indicator"));
  114. assert(platformIndicator_);
  115. consoletext_ = delegate_->GetWidgetByIDAndType<TBEditField>(TBIDC("consoletext"));
  116. consoletext_->SetText("Atomic Editor Initialized");
  117. TBContainer* consolecontainer = delegate_->GetWidgetByIDAndType<TBContainer>(TBIDC("consolecontainer"));
  118. assert(consolecontainer);
  119. consolecontainer->SetVisibilility(WIDGET_VISIBILITY_INVISIBLE);
  120. consolecontainer->GetParent()->RemoveChild(consolecontainer);
  121. findtextwidget_ = new FindTextWidget(context_);
  122. UpdateFindTextWidget();
  123. SubscribeToEvent(E_KEYDOWN, HANDLER(MainFrame, HandleKeyDown));
  124. SubscribeToEvent(E_KEYUP, HANDLER(MainFrame, HandleKeyUp));
  125. SubscribeToEvent(E_SCREENMODE, HANDLER(MainFrame, HandleScreenMode));
  126. SubscribeToEvent(E_JAVASCRIPTSAVED, HANDLER(MainFrame, HandleJavascriptSaved));
  127. SubscribeToEvent(E_PLATFORMCHANGE, HANDLER(MainFrame, HandlePlatformChange));
  128. messageModal_ = new MessageModal(context_);
  129. uiModalOps_ = new UIModalOps(context_);
  130. // show welcome frame to start
  131. ShowWelcomeFrame();
  132. }
  133. MainFrame::~MainFrame()
  134. {
  135. }
  136. ProjectFrame* MainFrame::GetProjectFrame()
  137. {
  138. return projectframe_;
  139. }
  140. ResourceFrame* MainFrame::GetResourceFrame()
  141. {
  142. return resourceframe_;
  143. }
  144. FindTextWidget* MainFrame::GetFindTextWidget()
  145. {
  146. return findtextwidget_;
  147. }
  148. MainToolbar* MainFrame::GetMainToolbar()
  149. {
  150. return maintoolbar_;
  151. }
  152. PlayerWidget* MainFrame::GetPlayerWidget()
  153. {
  154. return playerwidget_;
  155. }
  156. MessageModal* MainFrame::GetMessageModal()
  157. {
  158. return messageModal_;
  159. }
  160. UIModalOps* MainFrame::GetUIModalOps()
  161. {
  162. return uiModalOps_;
  163. }
  164. void MainFrame::HandleJavascriptSaved(StringHash eventType, VariantMap& eventData)
  165. {
  166. UpdateJavascriptErrors();
  167. }
  168. void MainFrame::HandleKeyDown(StringHash eventType, VariantMap& eventData)
  169. {
  170. using namespace KeyDown;
  171. int keycode = eventData[P_KEY].GetInt();
  172. int scancode = eventData[P_SCANCODE].GetInt();
  173. }
  174. bool MainFrame::UpdateJavascriptErrors()
  175. {
  176. // parse errors
  177. bool hasErrors = false;
  178. AEJavascript* aejs = GetSubsystem<AEJavascript>();
  179. aejs->CheckJSErrors();
  180. const Vector<JSError>& errors = aejs->GetJSErrors();
  181. if (errors.Size())
  182. {
  183. hasErrors = true;
  184. resourceframe_->ShowIssuesWidget();
  185. }
  186. else
  187. {
  188. resourceframe_->ShowIssuesWidget(false);
  189. }
  190. AEPlayer* player = GetSubsystem<AEPlayer>();
  191. if (player)
  192. {
  193. const Vector<AEPlayerError>& playererrors = player->GetErrors();
  194. if (playererrors.Size())
  195. {
  196. hasErrors = true;
  197. resourceframe_->ShowErrorsWidget();
  198. }
  199. else
  200. resourceframe_->ShowErrorsWidget(false);
  201. }
  202. return hasErrors;
  203. }
  204. void MainFrame::HandleKeyUp(StringHash eventType, VariantMap& eventData)
  205. {
  206. using namespace KeyUp;
  207. Input* input = context_->GetSubsystem<Input>();
  208. Editor* editor = context_->GetSubsystem<Editor>();
  209. #ifdef ATOMIC_PLATFORM_WINDOWS
  210. bool cmdKey = (input->GetKeyDown(KEY_LCTRL) || input->GetKeyDown(KEY_RCTRL));
  211. #else
  212. bool cmdKey = (input->GetKeyDown(KEY_LGUI) || input->GetKeyDown(KEY_RGUI));
  213. #endif
  214. int keycode = eventData[P_KEY].GetInt();
  215. if (cmdKey && keycode == KEY_P)
  216. {
  217. if (!editor->IsPlayingProject())
  218. {
  219. VariantMap eventData;
  220. eventData[EditorPlayRequest::P_MODE] = (unsigned) AE_PLAYERMODE_WIDGET;
  221. SendEvent(E_EDITORPLAYREQUEST, eventData);
  222. }
  223. else
  224. {
  225. SendEvent(E_EDITORPLAYSTOP);
  226. }
  227. }
  228. }
  229. bool MainFrame::ResourceFrameVisible()
  230. {
  231. TBWidget *child;
  232. for (child = resourceviewcontainer_->GetFirstChild(); child; child = child->GetNext())
  233. {
  234. if (child == resourceframe_->GetWidgetDelegate())
  235. break;
  236. }
  237. return child != NULL;
  238. }
  239. bool MainFrame::WelcomeFrameVisible()
  240. {
  241. TBWidget *child;
  242. for (child = resourceviewcontainer_->GetFirstChild(); child; child = child->GetNext())
  243. {
  244. if (child == welcomeframe_->GetWidgetDelegate())
  245. break;
  246. }
  247. return child != NULL;
  248. }
  249. void MainFrame::ShowResourceFrame(bool show)
  250. {
  251. if (show && ResourceFrameVisible())
  252. return;
  253. if (show && WelcomeFrameVisible())
  254. ShowWelcomeFrame(false);
  255. TBWidget *child;
  256. for (child = resourceviewcontainer_->GetFirstChild(); child; child = child->GetNext())
  257. {
  258. if (child == resourceframe_->GetWidgetDelegate())
  259. break;
  260. }
  261. if (show)
  262. {
  263. if (!child)
  264. {
  265. resourceviewcontainer_->AddChild(resourceframe_->GetWidgetDelegate());
  266. }
  267. }
  268. else
  269. {
  270. if (child)
  271. resourceviewcontainer_->RemoveChild(child);
  272. }
  273. }
  274. void MainFrame::ShowWelcomeFrame(bool show)
  275. {
  276. if (show && WelcomeFrameVisible())
  277. return;
  278. if (show && ResourceFrameVisible())
  279. ShowResourceFrame(false);
  280. TBWidget *child;
  281. for (child = resourceviewcontainer_->GetFirstChild(); child; child = child->GetNext())
  282. {
  283. if (child == welcomeframe_->GetWidgetDelegate())
  284. break;
  285. }
  286. if (show)
  287. {
  288. if (!child)
  289. {
  290. resourceviewcontainer_->AddChild(welcomeframe_->GetWidgetDelegate());
  291. }
  292. }
  293. else
  294. {
  295. if (child)
  296. resourceviewcontainer_->RemoveChild(child);
  297. }
  298. }
  299. bool MainFrame::IsProjectLoaded()
  300. {
  301. Editor* editor = GetSubsystem<Editor>();
  302. Project* project = editor->GetProject();
  303. if (!project)
  304. return false;
  305. return true;
  306. }
  307. bool MainFrame::OnEvent(const TBWidgetEvent &ev)
  308. {
  309. if (ev.type == EVENT_TYPE_CLICK)
  310. {
  311. if (ev.target->GetID() == TBIDC("file popup"))
  312. {
  313. Editor* editor = GetSubsystem<Editor>();
  314. if (ev.ref_id == TBIDC("new project"))
  315. {
  316. if (editor->IsProjectLoaded())
  317. {
  318. editor->PostModalError("Close Project", "Please close the current project before creating a new one");
  319. }
  320. else
  321. {
  322. uiModalOps_->ShowNewProject();
  323. }
  324. }
  325. else if (ev.ref_id == TBIDC("open project"))
  326. {
  327. if (editor->IsProjectLoaded())
  328. {
  329. editor->PostModalError("Close Project", "Please close the current project before opening a new one");
  330. }
  331. else
  332. {
  333. GetSubsystem<ProjectUtils>()->OpenProjectFileDialog();
  334. return true;
  335. }
  336. }
  337. else if (ev.ref_id == TBIDC("close project"))
  338. {
  339. //TODO: Confirmation
  340. editor->CloseProject();
  341. }
  342. return true;
  343. }
  344. if (ev.target->GetID() == TBIDC("atomic editor popup"))
  345. {
  346. if (ev.ref_id == TBIDC("about atomic editor"))
  347. {
  348. uiModalOps_->ShowAbout();
  349. return true;
  350. }
  351. else if (ev.ref_id == TBIDC("manage license"))
  352. {
  353. uiModalOps_->ShowManageLicense();
  354. return true;
  355. }
  356. else if (ev.ref_id == TBIDC("quit"))
  357. {
  358. // TODO: confirmation
  359. SendEvent(E_EXITREQUESTED);
  360. return true;
  361. }
  362. }
  363. if (ev.target->GetID() == TBIDC("project popup"))
  364. {
  365. if (!IsProjectLoaded())
  366. return true;
  367. if (ev.ref_id == TBIDC("project_build_settings"))
  368. {
  369. uiModalOps_->ShowBuildSettings();
  370. }
  371. else if (ev.ref_id == TBIDC("project_build"))
  372. {
  373. uiModalOps_->ShowBuild();
  374. }
  375. return true;
  376. }
  377. if (ev.target->GetID() == TBIDC("edit popup"))
  378. {
  379. if (ev.ref_id == TBIDC("format code"))
  380. {
  381. }
  382. }
  383. if (ev.target->GetID() == TBIDC("resources popup"))
  384. {
  385. if (ev.ref_id == TBIDC("create_component"))
  386. {
  387. ShowResourceCreateWindow("Component");
  388. return true;
  389. }
  390. else if (ev.ref_id == TBIDC("reveal"))
  391. {
  392. RevealInFinder();
  393. }
  394. }
  395. if (ev.target->GetID() == TBIDC("help popup"))
  396. {
  397. FileSystem* fileSystem = GetSubsystem<FileSystem>();
  398. if (ev.ref_id == TBIDC("help_forums"))
  399. {
  400. fileSystem->SystemOpen("http://www.atomicgameengine.com/forum");
  401. }
  402. else if (ev.ref_id == TBIDC("help_api"))
  403. {
  404. #ifdef ATOMIC_PLATFORM_OSX
  405. String docSourceDir = fileSystem->GetAppBundleResourceFolder();
  406. #else
  407. String docSourceDir = fileSystem->GetProgramDir();
  408. #endif
  409. docSourceDir += "Docs/index.html";
  410. fileSystem->SystemOpen("file://" + docSourceDir);
  411. }
  412. return true;
  413. }
  414. if (ev.target->GetID() == TBIDC("menu atomic editor"))
  415. {
  416. if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("atomic editor popup")))
  417. menu->Show(&menuAtomicEditorSource, TBPopupAlignment());
  418. return true;
  419. }
  420. else if (ev.target->GetID() == TBIDC("menu file"))
  421. {
  422. if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("file popup")))
  423. menu->Show(&menuFileSource, TBPopupAlignment());
  424. return true;
  425. }
  426. else if (ev.target->GetID() == TBIDC("menu edit"))
  427. {
  428. if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("edit popup")))
  429. menu->Show(&menuEditSource, TBPopupAlignment());
  430. return true;
  431. }
  432. else if (ev.target->GetID() == TBIDC("menu project"))
  433. {
  434. if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("project popup")))
  435. menu->Show(&menuProjectSource, TBPopupAlignment());
  436. return true;
  437. }
  438. else if (ev.target->GetID() == TBIDC("menu resources"))
  439. {
  440. if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("resources popup")))
  441. menu->Show(&menuResourcesSource, TBPopupAlignment());
  442. return true;
  443. }
  444. else if (ev.target->GetID() == TBIDC("menu issues"))
  445. {
  446. resourceframe_->ShowIssuesWidget(!resourceframe_->IssuesWidgetVisible());
  447. return true;
  448. }
  449. else if (ev.target->GetID() == TBIDC("menu console"))
  450. {
  451. resourceframe_->ShowConsoleWidget(!resourceframe_->ConsoleWidgetVisible());
  452. return true;
  453. }
  454. else if (ev.target->GetID() == TBIDC("menu errors"))
  455. {
  456. resourceframe_->ShowErrorsWidget(!resourceframe_->ErrorsWidgetVisible());
  457. return true;
  458. }
  459. else if (ev.target->GetID() == TBIDC("unsaved_modifications_dialog"))
  460. {
  461. resourceframe_->FocusCurrentTab();
  462. return true;
  463. }
  464. else if (ev.target->GetID() == TBIDC("menu help"))
  465. {
  466. if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("help popup")))
  467. menu->Show(&menuHelpSource, TBPopupAlignment());
  468. return true;
  469. }
  470. }
  471. return false;
  472. }
  473. void MainFrame::UpdateFindTextWidget()
  474. {
  475. TBRect rect = delegate_->GetRect();
  476. findtextwidget_->SetUISize(rect.w, rect.h);
  477. }
  478. void MainFrame::HandleScreenMode(StringHash eventType, VariantMap& eventData)
  479. {
  480. using namespace ScreenMode;
  481. int width = eventData[P_WIDTH].GetInt();
  482. int height = eventData[P_HEIGHT].GetInt();
  483. delegate_->SetSize(width, height);
  484. UpdateFindTextWidget();
  485. }
  486. void MainFrame::RevealInFinder()
  487. {
  488. Editor* editor = context_->GetSubsystem<Editor>();
  489. Project* project = editor->GetProject();
  490. if (!project)
  491. return;
  492. String resourcePath = projectframe_->GetCurrentContentFolder();
  493. if (!resourcePath.Length())
  494. resourcePath = project->GetResourcePath();
  495. ProjectUtils* utils = context_->GetSubsystem<ProjectUtils>();
  496. utils->RevealInFinder(resourcePath);
  497. }
  498. void MainFrame::ShowResourceCreateWindow(const String& resourceType)
  499. {
  500. Editor* editor = context_->GetSubsystem<Editor>();
  501. Project* project = editor->GetProject();
  502. if (!project)
  503. return;
  504. //new ResourceCreateWindow(resourceType, context_);
  505. }
  506. void MainFrame::HandlePlatformChange(StringHash eventType, VariantMap& eventData)
  507. {
  508. using namespace PlatformChange;
  509. AEEditorPlatform platform = (AEEditorPlatform) eventData[P_PLATFORM].GetUInt();
  510. if (platform == AE_PLATFORM_MAC)
  511. platformIndicator_->SetSkinBg(TBIDC("LogoMac"));
  512. else if (platform == AE_PLATFORM_WINDOWS)
  513. platformIndicator_->SetSkinBg(TBIDC("LogoWindows"));
  514. else if (platform == AE_PLATFORM_ANDROID)
  515. platformIndicator_->SetSkinBg(TBIDC("LogoAndroid"));
  516. else if (platform == AE_PLATFORM_HTML5)
  517. platformIndicator_->SetSkinBg(TBIDC("LogoHTML5"));
  518. }
  519. }