ChatOptions.cpp 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. #include "ChatOptions.h"
  2. #include <DateiSystem.h>
  3. #include "Globals.h"
  4. #include "Initialisierung.h"
  5. ChatOptions::ChatOptions()
  6. : Fenster()
  7. {
  8. setStyle(
  9. Fenster::Style::Erlaubt | Fenster::Style::Rahmen
  10. | Fenster::Style::BodyHAlpha | Fenster::Style::Titel
  11. | Fenster::Style::TitelHAlpha | Fenster::Style::Closable
  12. | Fenster::Style::ClosingHAlpha | Fenster::Style::ClosingKlickBuffer
  13. | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund
  14. | Fenster::Style::ClosingHintergrund | Fenster::Style::MEIgnoreInside
  15. | Fenster::Style::Beweglich);
  16. removeStyle(Fenster::Style::Sichtbar);
  17. setTitel("Chat options");
  18. setClosingMe([this](void* p, void* o, Framework::MausEreignis me) {
  19. if (me.id == Framework::ME_RLinks)
  20. {
  21. removeStyle(Fenster::Style::Sichtbar);
  22. }
  23. return 1;
  24. });
  25. setSize(262, 367);
  26. setPosition(5, uiFactory.initParam.bildschirm->getBackBufferSize().y - 680);
  27. setMausEreignis(Framework::_ret1ME);
  28. setTastaturEreignis(Framework::_ret1TE);
  29. setRBreite(1);
  30. setRFarbe(0xFF52525E);
  31. setKBgFarbe(0xA0000000);
  32. setTBgFarbe(0xA0000000);
  33. setSBgFarbe(0xA0000000);
  34. setTSchriftZ(
  35. dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  36. zTTextFeld()->setSize(0, 20);
  37. zTTextFeld()->addStyle(TextFeld::Style::Center);
  38. infoChannel = initKontrollKnopf(5,
  39. 5,
  40. 250,
  41. 20,
  42. Framework::KontrollKnopf::Style::Normal
  43. & ~Framework::KontrollKnopf::Style::Rahmen,
  44. "Show info messages");
  45. infoChannel->setNMausEreignis([this](void* p, void* o, MausEreignis me) {
  46. if (me.id == ME_RLinks)
  47. {
  48. char msg[13];
  49. msg[0]
  50. = infoChannel->hatStyle(KontrollKnopf::Style::Selected) ? 1 : 2;
  51. msg[1] = 11;
  52. memcpy(msg + 2, "system:INFO", 11);
  53. World::INSTANCE->zClient()->chatAPIRequest(msg, 13);
  54. }
  55. return 1;
  56. });
  57. addMember(infoChannel);
  58. warningChannel = initKontrollKnopf(5,
  59. 30,
  60. 250,
  61. 20,
  62. Framework::KontrollKnopf::Style::Normal
  63. & ~Framework::KontrollKnopf::Style::Rahmen,
  64. "Show warning messages");
  65. warningChannel->setNMausEreignis([this](void* p, void* o, MausEreignis me) {
  66. if (me.id == ME_RLinks)
  67. {
  68. char msg[16];
  69. msg[0] = warningChannel->hatStyle(KontrollKnopf::Style::Selected)
  70. ? 1
  71. : 2;
  72. msg[1] = 14;
  73. memcpy(msg + 2, "system:WARNING", 14);
  74. World::INSTANCE->zClient()->chatAPIRequest(msg, 16);
  75. }
  76. return 1;
  77. });
  78. addMember(warningChannel);
  79. errorChannel = initKontrollKnopf(5,
  80. 55,
  81. 250,
  82. 20,
  83. Framework::KontrollKnopf::Style::Normal
  84. & ~Framework::KontrollKnopf::Style::Rahmen,
  85. "Show error messages");
  86. errorChannel->setNMausEreignis([this](void* p, void* o, MausEreignis me) {
  87. if (me.id == ME_RLinks)
  88. {
  89. char msg[14];
  90. msg[0] = errorChannel->hatStyle(KontrollKnopf::Style::Selected) ? 1
  91. : 2;
  92. msg[1] = 12;
  93. memcpy(msg + 2, "system:ERROR", 12);
  94. World::INSTANCE->zClient()->chatAPIRequest(msg, 14);
  95. }
  96. return 1;
  97. });
  98. addMember(errorChannel);
  99. TextFeld* blackListLabel = initTextFeld(5,
  100. 90,
  101. 250,
  102. 20,
  103. Framework::TextFeld::Style::Text | Framework::TextFeld::Style::VCenter,
  104. "Ignored players:");
  105. addMember(blackListLabel);
  106. LTDBDatei dat;
  107. dat.setDatei(new Text("data/bilder/gui_icons.ltdb"));
  108. dat.leseDaten(0);
  109. plus = dat.laden(0, new Text("plus.png"));
  110. trash = dat.laden(0, new Text("trash.png"));
  111. playerName = initTextFeld(
  112. 5, 115, 225, 20, Framework::TextFeld::Style::TextFeld, "");
  113. playerName->setTastaturEreignis(
  114. [this](void* o, void* p, TastaturEreignis te) {
  115. if (te.id == TE_Release && te.virtualKey == T_Enter)
  116. {
  117. if (playerName->zText()->getLength())
  118. {
  119. addIgnoredPlayer(playerName->zText()->getText(), 1);
  120. playerName->setText("");
  121. }
  122. }
  123. return 1;
  124. });
  125. addMember(playerName);
  126. addButton = initKnopf(235,
  127. 115,
  128. 20,
  129. 20,
  130. Framework::Knopf::Style::HBild | Framework::Knopf::Style::HAlpha
  131. | Framework::Knopf::Style::Hintergrund,
  132. "");
  133. addButton->setAlphaFeldFarbe(0x5F337AB7);
  134. addButton->setToolTipText("Add player to list of ignored players",
  135. uiFactory.initParam.bildschirm,
  136. uiFactory.initParam.schrift);
  137. addButton->setHintergrundBildZ(dynamic_cast<Bild*>(plus->getThis()));
  138. addButton->setMausEreignis([this](void* o, void* p, MausEreignis me) {
  139. if (me.id == ME_RLinks)
  140. {
  141. if (playerName->zText()->getLength())
  142. {
  143. addIgnoredPlayer(playerName->zText()->getText(), 1);
  144. playerName->setText("");
  145. }
  146. }
  147. return 1;
  148. });
  149. addMember(addButton);
  150. blackList = initObjTabelle(5,
  151. 140,
  152. 250,
  153. 200,
  154. Framework::ObjTabelle::Style::normal
  155. | Framework::ObjTabelle::Style::VScroll,
  156. {
  157. {"Player", 212, 212, 212},
  158. {"Remove", 20, 20, 20 }
  159. },
  160. 0);
  161. addMember(blackList);
  162. }
  163. ChatOptions::~ChatOptions()
  164. {
  165. if (plus) plus->release();
  166. if (trash) trash->release();
  167. }
  168. void ChatOptions::init(char* data)
  169. {
  170. infoChannel->removeStyle(KontrollKnopf::Style::Selected);
  171. warningChannel->removeStyle(KontrollKnopf::Style::Selected);
  172. errorChannel->removeStyle(KontrollKnopf::Style::Selected);
  173. int len = *(int*)data;
  174. data += 4;
  175. for (int i = 0; i < len; i++)
  176. {
  177. char len = *(data++);
  178. data += len;
  179. if (len == 11)
  180. {
  181. infoChannel->addStyle(KontrollKnopf::Style::Selected);
  182. }
  183. if (len == 12)
  184. {
  185. errorChannel->addStyle(KontrollKnopf::Style::Selected);
  186. }
  187. if (len == 14)
  188. {
  189. warningChannel->addStyle(KontrollKnopf::Style::Selected);
  190. }
  191. }
  192. uiFactory.initParam.bildschirm->postAction([this]() {
  193. while (blackList->getZeilenAnzahl())
  194. {
  195. blackList->removeZeile(0);
  196. }
  197. });
  198. len = *(int*)data;
  199. data += 4;
  200. for (int i = 0; i < len; i++)
  201. {
  202. char len = *(data++);
  203. char* name = new char[len + 1];
  204. memcpy(name, data, len);
  205. name[len] = 0;
  206. data += len;
  207. addIgnoredPlayer(name, 0);
  208. delete[] name;
  209. }
  210. }
  211. void ChatOptions::addIgnoredPlayer(Framework::Text playerName, bool msg)
  212. {
  213. if (blackList->getZeilenNummer(playerName) >= 0) return;
  214. if (msg)
  215. {
  216. char* msg = new char[2 + playerName.getLength()];
  217. msg[0] = 3;
  218. msg[1] = (char)playerName.getLength();
  219. memcpy(msg + 2, playerName, playerName.getLength());
  220. World::INSTANCE->zClient()->chatAPIRequest(
  221. msg, 2 + playerName.getLength());
  222. delete[] msg;
  223. }
  224. uiFactory.initParam.bildschirm->postAction([this, playerName]() {
  225. if (blackList->getZeilenNummer(playerName) >= 0) return;
  226. blackList->addZeile(playerName);
  227. blackList->setZeichnungZ("Player",
  228. playerName,
  229. initTextFeld(0,
  230. 0,
  231. 0,
  232. 0,
  233. TextFeld::Style::Text | TextFeld::Style::VCenter,
  234. playerName.getText()));
  235. Knopf* removeButton = initKnopf(0,
  236. 0,
  237. 0,
  238. 0,
  239. Framework::Knopf::Style::HBild | Framework::Knopf::Style::HAlpha
  240. | Framework::Knopf::Style::Hintergrund,
  241. "");
  242. removeButton->removeStyle(Knopf::Style::Rahmen);
  243. removeButton->setAlphaFeldFarbe(0x5F337AB7);
  244. removeButton->setToolTipText(
  245. "Remove player from list of ignored players",
  246. uiFactory.initParam.bildschirm,
  247. uiFactory.initParam.schrift);
  248. removeButton->setHintergrundBildZ(
  249. dynamic_cast<Bild*>(trash->getThis()));
  250. removeButton->setMausEreignis(
  251. [this, playerName](void* o, void* p, MausEreignis me) {
  252. if (me.id == ME_RLinks)
  253. {
  254. uiFactory.initParam.bildschirm->postAction(
  255. [this, playerName]() {
  256. char* msg = new char[2 + playerName.getLength()];
  257. msg[0] = 4;
  258. msg[1] = (char)playerName.getLength();
  259. memcpy(msg + 2, playerName, playerName.getLength());
  260. World::INSTANCE->zClient()->chatAPIRequest(
  261. msg, 2 + playerName.getLength());
  262. delete[] msg;
  263. blackList->removeZeile(playerName);
  264. });
  265. }
  266. return 1;
  267. });
  268. blackList->setZeichnungZ("Remove", playerName, removeButton);
  269. });
  270. }