Chat.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include "Chat.h"
  2. #include <DateiSystem.h>
  3. #include "Game.h"
  4. #include "Globals.h"
  5. #include "ChatMessage.h"
  6. #include <AsynchronCall.h>
  7. Chat::Chat()
  8. : Fenster(),
  9. optionsAdded(0)
  10. {
  11. setStyle(
  12. Fenster::Style::Erlaubt
  13. | Fenster::Style::Rahmen | Fenster::Style::BodyHAlpha
  14. | Fenster::Style::Titel
  15. | Fenster::Style::TitelHAlpha | Fenster::Style::Closable
  16. | Fenster::Style::ClosingHAlpha | Fenster::Style::ClosingKlickBuffer
  17. | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund
  18. | Fenster::Style::ClosingHintergrund | Fenster::Style::MEIgnoreInside | Fenster::Style::HeightChangeable | Fenster::Style::BreiteChangeable | Fenster::Style::BodyMinBr | Fenster::Style::BodyMinHi | Fenster::Style::LeftPositionFixed | Fenster::Style::BottomPositionFixed);
  19. removeStyle(Fenster::Style::Sichtbar);
  20. setTitel("Chat");
  21. setClosingMe([this](void* p, void* o, Framework::MausEreignis me) {
  22. if (me.id == Framework::ME_RLinks)
  23. {
  24. removeStyle(Fenster::Style::Sichtbar);
  25. ((Game*)(Menu*)menuRegister->get("game"))->makeChatButtonVisible();
  26. }
  27. return 1;
  28. });
  29. setSize(500, 300);
  30. setPosition(5, uiFactory.initParam.bildschirm->getBackBufferSize().y - 305);
  31. setMausEreignis(Framework::_ret1ME);
  32. setTastaturEreignis(Framework::_ret1TE);
  33. setRBreite(1);
  34. setRFarbe(0xFF52525E);
  35. setKBgFarbe(0xA0000000);
  36. setTBgFarbe(0xA0000000);
  37. setSBgFarbe(0xA0000000);
  38. setTSchriftZ(
  39. dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  40. zTTextFeld()->setSize(0, 20);
  41. zTTextFeld()->addStyle(TextFeld::Style::Center);
  42. setKMin(200, 100);
  43. options = new ChatOptions();
  44. history = new ChatHistory();
  45. history->setSize(getInnenBreite(), getInnenHeight() - 20);
  46. addMember(history);
  47. commandLine = uiFactory.createTextFeld(uiFactory.initParam);
  48. commandLine->setText("");
  49. commandLine->setSize(getInnenBreite() - 40, 20);
  50. commandLine->setPosition(20, getInnenHeight() - 20);
  51. commandLine->setStyle(Framework::TextFeld::Style::TextFeld);
  52. commandLine->setTastaturEreignis(
  53. [this](void* p, void* o, Framework::TastaturEreignis te) {
  54. if (te.id == Framework::TE_Release
  55. && te.virtualKey == Framework::T_Enter)
  56. {
  57. if (commandLine->zText()->getLength() > 0)
  58. {
  59. Text* msg = new Text(*commandLine->zText());
  60. commandLine->setText("");
  61. new AsynchronCall([msg]() {
  62. World::INSTANCE->zClient()->sendChatMessage(*msg);
  63. msg->release();
  64. });
  65. }
  66. }
  67. return 1;
  68. });
  69. addMember(commandLine);
  70. LTDBDatei iconsDat;
  71. iconsDat.setDatei(new Text("data/bilder/gui_icons.ltdb"));
  72. iconsDat.leseDaten(0);
  73. sendButton = uiFactory.createKnopf(uiFactory.initParam);
  74. sendButton->setAlphaFeldFarbe(0x5F337AB7);
  75. sendButton->setToolTipText(
  76. "Send", uiFactory.initParam.bildschirm, uiFactory.initParam.schrift);
  77. sendButton->setSize(20, 20);
  78. sendButton->setPosition(getInnenBreite() - 20, getInnenHeight() - 20);
  79. sendButton->addStyle(Framework::Knopf::Style::HBild
  80. | Framework::Knopf::Style::HAlpha
  81. | Framework::Knopf::Style::Hintergrund);
  82. sendButton->setHintergrundBildZ(iconsDat.laden(0, new Text("send.png")));
  83. sendButton->setMausEreignis(
  84. [this](void* p, void* o, Framework::MausEreignis me) {
  85. if (me.id == ME_RLinks)
  86. {
  87. if (commandLine->zText()->getLength() > 0)
  88. {
  89. Text* msg = new Text(*commandLine->zText());
  90. commandLine->setText("");
  91. new AsynchronCall([msg]() {
  92. World::INSTANCE->zClient()->sendChatMessage(*msg);
  93. msg->release();
  94. });
  95. }
  96. }
  97. return 1;
  98. });
  99. addMember(sendButton);
  100. optionsButton = uiFactory.createKnopf(uiFactory.initParam);
  101. optionsButton->setAlphaFeldFarbe(0x5F337AB7);
  102. optionsButton->setToolTipText(
  103. "Options", uiFactory.initParam.bildschirm, uiFactory.initParam.schrift);
  104. optionsButton->setSize(20, 20);
  105. optionsButton->setPosition(0, getInnenHeight() - 20);
  106. optionsButton->addStyle(Framework::Knopf::Style::HBild
  107. | Framework::Knopf::Style::HAlpha
  108. | Framework::Knopf::Style::Hintergrund);
  109. optionsButton->setHintergrundBildZ(
  110. iconsDat.laden(0, new Text("options.png")));
  111. optionsButton->setMausEreignis(
  112. [this](void* p, void* o, Framework::MausEreignis me) {
  113. if (me.id == ME_RLinks)
  114. {
  115. options->addStyle(Fenster::Style::Sichtbar);
  116. }
  117. return 1;
  118. });
  119. addMember(optionsButton);
  120. }
  121. Chat ::~Chat()
  122. {
  123. options->release();
  124. }
  125. void Chat::addMessage(char* data)
  126. {
  127. history->addMessage(new ChatMessage(data));
  128. }
  129. void Chat::initOptions(char* data)
  130. {
  131. options->init(data);
  132. }
  133. bool Chat::tick(double time)
  134. {
  135. if (!optionsAdded)
  136. {
  137. optionsAdded = 1;
  138. uiFactory.initParam.bildschirm->addMember(dynamic_cast<Zeichnung*>(options->getThis()));
  139. }
  140. history->setSize(getInnenBreite(), getInnenHeight() - 20);
  141. commandLine->setSize(getInnenBreite() - 40, 20);
  142. commandLine->setPosition(20, getInnenHeight() - 20);
  143. sendButton->setPosition(getInnenBreite() - 20, getInnenHeight() - 20);
  144. optionsButton->setPosition(0, getInnenHeight() - 20);
  145. return Fenster::tick(time);
  146. }