PageRenderTime 40ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/client/GUIEngine.cpp

https://bitbucket.org/Ogre/worldapocalypse/
C++ | 584 lines | 559 code | 4 blank | 21 comment | 94 complexity | 8616aa28ed50437d7527b42376c7f962 MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause
  1. /*
  2. This file is a part of World Apocalypse.
  3. Copyright (C) 2011 Le Sommer Leo Robin
  4. World Apocalypse is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  5. World Apocalypse is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
  6. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
  7. */
  8. #include <OgreWindowEventUtilities.h>
  9. #include "GUIEngine.h"
  10. #include "socket.h"
  11. #include "sleep.h"
  12. #include <mysql.h>
  13. #include <string>
  14. #include <cstdlib>
  15. #include "GameEngine.h"
  16. #include "ConfigGlobalObject.h"
  17. Ogre::UTFString convertToUTF(Ogre::String string)
  18. {
  19. Ogre::UTFString UTFString;
  20. Ogre::UTFString::code_point cp;
  21. for(auto elem : string)
  22. {
  23. cp = elem;
  24. cp &= 0xFF;
  25. UTFString.append(1, cp);
  26. }
  27. return UTFString;
  28. }
  29. bool isNotEmpty(const char* string)
  30. {
  31. int i = 0;
  32. while(string[i] != '\0')
  33. {
  34. if(string[i] != ' ')
  35. return true;
  36. i++;
  37. }
  38. return false;
  39. }
  40. namespace gui
  41. {
  42. GUIEngine::GUIEngine()
  43. {
  44. m_isInitiated = false;
  45. }
  46. GUIEngine::~GUIEngine()
  47. {
  48. }
  49. void GUIEngine::init(Ogre::RenderWindow* win, Ogre::SceneManager* sceneManager, audio::AudioEngine* audioEngine)
  50. {
  51. m_window = win;
  52. m_sceneManager = sceneManager;
  53. m_audioEngine = audioEngine;
  54. m_platform = new MyGUI::OgrePlatform();
  55. m_platform->initialise(win, sceneManager, "GUI");
  56. m_gui = new MyGUI::Gui();
  57. m_gui->initialise("media/gui/MyGUI_Core.xml");
  58. //m_gui->showPointer();
  59. //event focus
  60. m_hasEventKeyboardFocus = false;
  61. m_hasEventMouseFocus = false;
  62. //pointers initialisation
  63. //menu
  64. m_menuList = 0;
  65. m_menuButton = 0;
  66. //sous menus
  67. m_inventaire = 0;
  68. m_groupDialog = 0;
  69. m_questLog = 0;
  70. m_magasin = 0;
  71. m_questDialog = 0;
  72. m_textDialog = 0;
  73. m_choiceDialog = 0;
  74. m_chatBox = 0;
  75. m_quitter = 0;
  76. m_configurationDialog = 0;
  77. m_isInitiated = true;
  78. }
  79. void GUIEngine::remove()
  80. {
  81. if(!m_isInitiated)
  82. return;
  83. //sous menus
  84. m_gui->shutdown();
  85. delete m_gui;
  86. m_platform->shutdown();
  87. delete m_platform;
  88. }
  89. void GUIEngine::setNetEngine(network::NetEngine* netEngine)
  90. {
  91. m_netEngine = netEngine;
  92. }
  93. MyGUI::Gui* GUIEngine::getGUI()
  94. {
  95. return m_gui;
  96. }
  97. MyGUI::OgrePlatform* GUIEngine::getMyGUIOgrePlateform()
  98. {
  99. return m_platform;
  100. }
  101. void GUIEngine::initGUI(game::GameEngine* gameEngine)
  102. {
  103. //menu
  104. m_menuIsButtonPressed = false;
  105. m_menuButton = createButton(820, 720, 200, 46, "Menu");
  106. m_menuButton->setFontHeight(40);
  107. m_menuList = 0;
  108. //sous menus
  109. m_inventaire = new Inventaire(this, m_netEngine, gameEngine);
  110. m_groupDialog = new GroupDialog(this, m_netEngine, gameEngine);
  111. m_questLog = new QuestLog(this, m_netEngine);
  112. m_magasin = new Magasin(this, m_netEngine, gameEngine);
  113. m_questDialog = new QuestDialog(this, m_netEngine);
  114. m_textDialog = new TextDialog(this);
  115. m_choiceDialog = new ChoiceDialog(this);
  116. m_chatBox = new ChatBox(this, m_netEngine);
  117. m_chatBox->init();
  118. m_configurationDialog = new ConfigurationDialog(this, gameEngine);
  119. m_quitter = new WindowQuit(this, gameEngine);
  120. }
  121. void GUIEngine::cleanGUI()
  122. {
  123. //menu
  124. if(m_menuList != 0)
  125. deleteWidget(m_menuList);
  126. m_menuList = 0;
  127. if(m_menuButton != 0)
  128. deleteWidget(m_menuButton);
  129. m_menuButton = 0;
  130. //sous menus
  131. if(m_inventaire != 0)
  132. delete m_inventaire;
  133. m_inventaire = 0;
  134. if(m_groupDialog != 0)
  135. delete m_groupDialog;
  136. m_groupDialog = 0;
  137. if(m_questLog != 0)
  138. delete m_questLog;
  139. m_questLog = 0;
  140. if(m_magasin != 0)
  141. delete m_magasin;
  142. m_magasin = 0;
  143. if(m_textDialog != 0)
  144. delete m_textDialog;
  145. m_textDialog = 0;
  146. if(m_questDialog != 0)
  147. delete m_questDialog;
  148. m_questDialog = 0;
  149. if(m_choiceDialog != 0)
  150. delete m_choiceDialog;
  151. m_choiceDialog = 0;
  152. if(m_chatBox != 0)
  153. delete m_chatBox;
  154. m_chatBox = 0;
  155. if(m_quitter != 0)
  156. delete m_quitter;
  157. m_quitter = 0;
  158. }
  159. void GUIEngine::update()
  160. {
  161. if(m_inventaire != 0)
  162. m_inventaire->update();
  163. if(m_groupDialog != 0)
  164. m_groupDialog->update();
  165. if(m_questLog != 0)
  166. m_questLog->update();
  167. if(m_magasin != 0)
  168. m_magasin->update();
  169. if(m_chatBox != 0)
  170. m_chatBox->update();
  171. if(m_configurationDialog != 0)
  172. m_configurationDialog->update();
  173. if(m_quitter != 0)
  174. m_quitter->update();
  175. if(m_questDialog != 0)
  176. m_questDialog->update();
  177. if(m_menuButton)
  178. {
  179. if(m_menuButton->getStateSelected())
  180. {
  181. if(m_menuIsButtonPressed == false)
  182. {
  183. m_menuIsButtonPressed = true;
  184. if(m_menuList == 0)
  185. {
  186. m_menuList = createList(0, 0, 0, 0);
  187. m_menuList->addItem("Personnage (non disponible)");
  188. m_menuList->addItem("Chat Box");
  189. m_menuList->addItem("Compétences (non disponible)");
  190. m_menuList->addItem("Quete (non disponible)");
  191. m_menuList->addItem("Inventaire (en cour)");
  192. m_menuList->addItem("Groupe (en cour)");
  193. m_menuList->addItem("Configuration (en cour)");
  194. m_menuList->addItem("Quitter (en cour)");
  195. m_menuList->setPosition(m_menuButton->getPosition().left, m_menuButton->getPosition().top - m_menuList->getOptimalHeight());
  196. m_menuList->setSize(200, m_menuList->getOptimalHeight());
  197. }
  198. else
  199. {
  200. deleteWidget(m_menuList);
  201. m_menuList = 0;
  202. }
  203. }
  204. }
  205. else
  206. {
  207. m_menuIsButtonPressed = false;
  208. }
  209. if(m_menuList != 0)
  210. {
  211. if(m_menuList->getIndexSelected() < m_menuList->getItemCount())
  212. {
  213. switch(m_menuList->getIndexSelected())
  214. {
  215. case 0 :
  216. break;
  217. case 1 : //chatBox
  218. m_chatBox->init();
  219. break;
  220. case 2 :
  221. break;
  222. case 3 : //quetes
  223. //m_questLog->init();
  224. break;
  225. case 4 : //inventaire
  226. m_inventaire->init();
  227. break;
  228. case 5 : //group
  229. m_groupDialog->init();
  230. break;
  231. case 6 : //configuration
  232. m_configurationDialog->init();
  233. break;
  234. case 7 :
  235. m_quitter->init();
  236. break;
  237. }
  238. m_menuList->clearIndexSelected();
  239. }
  240. }
  241. }
  242. }
  243. bool GUIEngine::keyPressed(const OIS::KeyEvent &arg)
  244. {
  245. MyGUI::InputManager::getInstance().injectKeyPress(MyGUI::KeyCode::Enum(arg.key), arg.text);
  246. return true;
  247. }
  248. bool GUIEngine::keyReleased(const OIS::KeyEvent &arg)
  249. {
  250. MyGUI::InputManager::getInstance().injectKeyRelease(MyGUI::KeyCode::Enum(arg.key));
  251. return true;
  252. }
  253. bool GUIEngine::mouseMoved(const OIS::MouseEvent &arg)
  254. {
  255. MyGUI::InputManager::getInstance().injectMouseMove(arg.state.X.abs, arg.state.Y.abs, arg.state.Z.abs);
  256. return true;
  257. }
  258. bool GUIEngine::mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
  259. {
  260. MyGUI::InputManager::getInstance().injectMousePress(arg.state.X.abs, arg.state.Y.abs, MyGUI::MouseButton::Enum(id));
  261. return true;
  262. }
  263. bool GUIEngine::mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
  264. {
  265. MyGUI::InputManager::getInstance().injectMouseRelease(arg.state.X.abs, arg.state.Y.abs, MyGUI::MouseButton::Enum(id));
  266. return true;
  267. }
  268. void GUIEngine::windowMovedOrResized(int left, int top, unsigned int width, unsigned int height)
  269. {
  270. if(m_menuButton != 0)
  271. m_menuButton->setPosition(width - 200, height - 40);
  272. }
  273. bool GUIEngine::getIfHasEventKeyboardFocus()
  274. {
  275. return m_hasEventKeyboardFocus;
  276. }
  277. bool GUIEngine::getIfHasEventMouseFocus()
  278. {
  279. return m_hasEventMouseFocus;
  280. }
  281. void GUIEngine::showLoadingScreen(Ogre::Root* root)
  282. {
  283. std::string image = "loadingScreen.jpg";
  284. m_loadingScreenWidget = createImageArea(0, 0, m_platform->getRenderManagerPtr()->getViewSize().width, m_platform->getRenderManagerPtr()->getViewSize().height, image.c_str());
  285. root->renderOneFrame();
  286. }
  287. void GUIEngine::hideLoadingScreen()
  288. {
  289. deleteWidget(m_loadingScreenWidget);
  290. }
  291. MyGUI::Window* GUIEngine::createWindow(int posX, int posY, int dimX, int dimY, const char* text, MyGUI::Widget* parent, MyGUI::Align align)
  292. {
  293. MyGUI::Window* widget;
  294. if(parent == 0)
  295. widget = m_gui->createWidget<MyGUI::Window>("WindowC", posX, posY, dimX, dimY, align, "Main");
  296. else
  297. widget = parent->createWidget<MyGUI::Window>("WindowC", posX, posY, dimX, dimY, align, "Main");
  298. widget->setCaption(text);
  299. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  300. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  301. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  302. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  303. return widget;
  304. }
  305. MyGUI::Window* GUIEngine::createMovableWindow(int posX, int posY, int dimX, int dimY, const char* text, MyGUI::Widget* parent, MyGUI::Align align)
  306. {
  307. MyGUI::Window* widget;
  308. if(parent == 0)
  309. widget = m_gui->createWidget<MyGUI::Window>("WindowCSX", posX, posY, dimX, dimY, align, "Main");
  310. else
  311. widget = parent->createWidget<MyGUI::Window>("WindowCSX", posX, posY, dimX, dimY, align, "Main");
  312. widget->setCaption(text);
  313. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  314. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  315. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  316. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  317. return widget;
  318. }
  319. void buttonPressed(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
  320. {
  321. (static_cast<MyGUI::Button*>(widget))->setStateSelected(true);
  322. }
  323. void buttonReleased(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
  324. {
  325. (static_cast<MyGUI::Button*>(widget))->setStateSelected(false);
  326. }
  327. MyGUI::Button* GUIEngine::createButton(int posX, int posY, int dimX, int dimY, const char* text, MyGUI::Widget* parent, MyGUI::Align align)
  328. {
  329. MyGUI::Button* widget;
  330. if(parent == 0)
  331. widget = m_gui->createWidget<MyGUI::Button>("Button", posX, posY, dimX, dimY, align, "Main");
  332. else
  333. widget = parent->createWidget<MyGUI::Button>("Button", posX, posY, dimX, dimY, align, "Main");
  334. widget->setCaption(text);
  335. widget->eventMouseButtonPressed += MyGUI::newDelegate<MyGUI::Widget*, int, int, MyGUI::MouseButton>(&buttonPressed);
  336. widget->eventMouseButtonReleased += MyGUI::newDelegate<MyGUI::Widget*, int, int, MyGUI::MouseButton>(&buttonReleased);
  337. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  338. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  339. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  340. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  341. return widget;
  342. }
  343. MyGUI::EditBox* GUIEngine::createEditArea(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, const char* text, MyGUI::Align align)
  344. {
  345. MyGUI::EditBox* widget;
  346. if(parent == 0)
  347. widget = m_gui->createWidget<MyGUI::EditBox>("EditBox", posX, posY, dimX, dimY, align, "Main");
  348. else
  349. widget = parent->createWidget<MyGUI::EditBox>("EditBox", posX, posY, dimX, dimY, align, "Main");
  350. widget->setCaption(text);
  351. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  352. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  353. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  354. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  355. return widget;
  356. }
  357. MyGUI::ListBox* GUIEngine::createList(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  358. {
  359. MyGUI::ListBox* widget;
  360. if(parent == 0)
  361. widget = m_gui->createWidget<MyGUI::ListBox>("ListBox", posX, posY, dimX, dimY, align, "Main");
  362. else
  363. widget = parent->createWidget<MyGUI::ListBox>("ListBox", posX, posY, dimX, dimY, align, "Main");
  364. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  365. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  366. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  367. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  368. return widget;
  369. }
  370. MyGUI::MultiList* GUIEngine::createMultiList(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  371. {
  372. MyGUI::MultiList* widget;
  373. if(parent == 0)
  374. widget = m_gui->createWidget<MyGUI::MultiList>("MultiList", posX, posY, dimX, dimY, align, "Main");
  375. else
  376. widget = parent->createWidget<MyGUI::MultiList>("MultiList", posX, posY, dimX, dimY, align, "Main");
  377. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  378. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  379. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  380. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  381. return widget;
  382. }
  383. MyGUI::Tab* GUIEngine::createTab(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  384. {
  385. MyGUI::Tab* widget;
  386. if(parent == 0)
  387. widget = m_gui->createWidget<MyGUI::Tab>("TabControl", posX, posY, dimX, dimY, align, "Main");
  388. else
  389. widget = parent->createWidget<MyGUI::Tab>("TabControl", posX, posY, dimX, dimY, align, "Main");
  390. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  391. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  392. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  393. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  394. return widget;
  395. }
  396. MyGUI::ItemBox* GUIEngine::createItemBox(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  397. {
  398. MyGUI::ItemBox* widget;
  399. if(parent == 0)
  400. widget = m_gui->createWidget<MyGUI::ItemBox>("ItemBox", posX, posY, dimX, dimY, align, "Main");
  401. else
  402. widget = parent->createWidget<MyGUI::ItemBox>("ItemBox", posX, posY, dimX, dimY, align, "Main");
  403. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  404. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  405. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  406. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  407. return widget;
  408. }
  409. void checkBoxPressed(MyGUI::Widget* widget, int x, int y, MyGUI::MouseButton button)
  410. {
  411. (static_cast<MyGUI::Button*>(widget))->setStateSelected(!(static_cast<MyGUI::Button*>(widget))->getStateSelected());
  412. }
  413. MyGUI::Button* GUIEngine::createCheckBox(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  414. {
  415. MyGUI::Button* widget;
  416. if(parent == 0)
  417. widget = m_gui->createWidget<MyGUI::Button>("CheckBox", posX, posY, dimX, dimY, align, "Main");
  418. else
  419. widget = parent->createWidget<MyGUI::Button>("CheckBox", posX, posY, dimX, dimY, align, "Main");
  420. widget->eventMouseButtonPressed += MyGUI::newDelegate<MyGUI::Widget*, int, int, MyGUI::MouseButton>(&checkBoxPressed);
  421. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  422. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  423. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  424. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  425. return widget;
  426. }
  427. MyGUI::ComboBox* GUIEngine::createComboBox(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  428. {
  429. MyGUI::ComboBox* widget;
  430. if(parent == 0)
  431. widget = m_gui->createWidget<MyGUI::ComboBox>("ComboBox", posX, posY, dimX, dimY, align, "Main");
  432. else
  433. widget = parent->createWidget<MyGUI::ComboBox>("ComboBox", posX, posY, dimX, dimY, align, "Main");
  434. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  435. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  436. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  437. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  438. return widget;
  439. }
  440. MyGUI::StaticText* GUIEngine::createTextArea(int posX, int posY, int dimX, int dimY, const char* text, MyGUI::Widget* parent, MyGUI::Align align)
  441. {
  442. MyGUI::EditBox* widget;
  443. if(parent == 0)
  444. widget = m_gui->createWidget<MyGUI::EditBox>("WordWrapEmpty", posX, posY, dimX, dimY, align, "Main");
  445. else
  446. widget = parent->createWidget<MyGUI::EditBox>("WordWrapEmpty", posX, posY, dimX, dimY, align, "Main");
  447. widget->setCaption(convertToUTF(text).c_str());
  448. widget->setEditStatic(true);
  449. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  450. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  451. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  452. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  453. return widget;
  454. }
  455. MyGUI::ImageBox* GUIEngine::createImageArea(int posX, int posY, int dimX, int dimY, const char* image, MyGUI::Widget* parent, MyGUI::Align align)
  456. {
  457. MyGUI::ImageBox* widget;
  458. if(parent == 0)
  459. widget = m_gui->createWidget<MyGUI::ImageBox>("ImageBox", posX, posY, dimX, dimY, align, "Main");
  460. else
  461. widget = parent->createWidget<MyGUI::ImageBox>("ImageBox", posX, posY, dimX, dimY, align, "Main");
  462. if(image != 0)
  463. widget->setImageTexture(image);
  464. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  465. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  466. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  467. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  468. return widget;
  469. }
  470. MyGUI::ScrollBar* GUIEngine::createHSlider(int posX, int posY, int dimX, int dimY, int max, MyGUI::Widget* parent, MyGUI::Align align)
  471. {
  472. MyGUI::ScrollBar* widget;
  473. if(parent == 0)
  474. widget = m_gui->createWidget<MyGUI::ScrollBar>("SliderH", posX, posY, dimX, dimY, align, "Main");
  475. else
  476. widget = parent->createWidget<MyGUI::ScrollBar>("SliderH", posX, posY, dimX, dimY, align, "Main");
  477. widget->setScrollRange(max);
  478. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  479. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  480. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  481. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  482. return widget;
  483. }
  484. MyGUI::Widget* GUIEngine::createSimpleWidget(int posX, int posY, int dimX, int dimY, MyGUI::Widget* parent, MyGUI::Align align)
  485. {
  486. MyGUI::ComboBox* widget;
  487. if(parent == 0)
  488. widget = m_gui->createWidget<MyGUI::ComboBox>("List", posX, posY, dimX, dimY, align, "Main");
  489. else
  490. widget = parent->createWidget<MyGUI::ComboBox>("List", posX, posY, dimX, dimY, align, "Main");
  491. widget->eventKeySetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetKeyboardFocus);
  492. widget->eventKeyLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostKeyboardFocus);
  493. widget->eventMouseSetFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetGetMouseFocus);
  494. widget->eventMouseLostFocus += MyGUI::newDelegate(this, &GUIEngine::aWidgetLostMouseFocus);
  495. return widget;
  496. }
  497. void GUIEngine::aWidgetGetKeyboardFocus(MyGUI::Widget* _sender, MyGUI::Widget* _new)
  498. {
  499. m_hasEventKeyboardFocus = true;
  500. }
  501. void GUIEngine::aWidgetLostKeyboardFocus(MyGUI::Widget* _sender, MyGUI::Widget* _new)
  502. {
  503. m_hasEventKeyboardFocus = false;
  504. }
  505. void GUIEngine::aWidgetGetMouseFocus(MyGUI::Widget* _sender, MyGUI::Widget* _new)
  506. {
  507. m_hasEventMouseFocus = true;
  508. }
  509. void GUIEngine::aWidgetLostMouseFocus(MyGUI::Widget* _sender, MyGUI::Widget* _new)
  510. {
  511. m_hasEventMouseFocus = false;
  512. }
  513. void GUIEngine::deleteWidget(MyGUI::Widget* widget)
  514. {
  515. m_gui->destroyWidget(widget);
  516. m_hasEventKeyboardFocus = false;
  517. m_hasEventMouseFocus = false;
  518. }
  519. void GUIEngine::createErrorMessage(const char* error, Ogre::Root* root, io::EventEngine* eventEngine)
  520. {
  521. MyGUI::Window* win = createWindow(50, 50, 300, 140, "An Error Was Occured");
  522. MyGUI::StaticText* text = createTextArea(10, 10, 280, 52, error, win);
  523. MyGUI::Button* button = createButton(10, 70, 280, 26, "Cancel", win);
  524. while(eventEngine->update())
  525. {
  526. Ogre::WindowEventUtilities::messagePump();
  527. if(m_window->isClosed() || button->getStateSelected() || eventEngine->isDown(io::E_FORM_ENTER))
  528. break;
  529. root->renderOneFrame();
  530. if(eventEngine->getTimeSinceLastFrame() < (1.0 / GLOBAL_ConfigEngine->m_FPS))
  531. sleep((1.0 / GLOBAL_ConfigEngine->m_FPS) - eventEngine->getTimeSinceLastFrame());
  532. }
  533. deleteWidget(text);
  534. deleteWidget(button);
  535. deleteWidget(win);
  536. }
  537. void GUIEngine::addMessageToChatBox(std::string message)
  538. {
  539. m_chatBox->addMessageToChatBox(message);
  540. }
  541. Magasin* GUIEngine::getMagasin()
  542. {
  543. return m_magasin;
  544. }
  545. QuestDialog* GUIEngine::getQuestDialog()
  546. {
  547. return m_questDialog;
  548. }
  549. TextDialog* GUIEngine::getTextDialog()
  550. {
  551. return m_textDialog;
  552. }
  553. ChoiceDialog* GUIEngine::getChoiceDialog()
  554. {
  555. return m_choiceDialog;
  556. }
  557. void GUIEngine::refreshInventaire()
  558. {
  559. if(m_inventaire == 0)
  560. return;
  561. if(m_inventaire->isOpen())
  562. {
  563. m_inventaire->clean();
  564. m_inventaire->init();
  565. }
  566. }
  567. void GUIEngine::refreshGroupDialog()
  568. {
  569. if(m_groupDialog == 0)
  570. return;
  571. if(m_groupDialog->isOpen())
  572. {
  573. m_groupDialog->clean();
  574. m_groupDialog->init();
  575. }
  576. }
  577. }