Chat.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "Chat.h"
  2. #include <Rahmen.h>
  3. #include <MausEreignis.h>
  4. #include <TastaturEreignis.h>
  5. #include <Text.h>
  6. #include <Schrift.h>
  7. #include <Punkt.h>
  8. #include <Bild.h>
  9. // Inhalt der SpielChat Klasse aus Chat.h
  10. // Konstruktor
  11. SpielChat::SpielChat(UIInit& factory)
  12. : ReferenceCounter()
  13. {
  14. rahmen = new LRahmen();
  15. rahmen->setFarbe(0xFF909090);
  16. rahmen->setRamenBreite(1);
  17. rahmen->setSize(450, 200);
  18. rahmen->setPosition(10, BildschirmGröße().y - 210);
  19. verlauf = factory.createTextFeld(factory.initParam);
  20. verlauf->setStyle(TextFeld::Style::TextGebiet & ~(TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen));
  21. verlauf->setText("");
  22. verlauf->setPosition(rahmen->getX() + 2, rahmen->getY() + 2);
  23. verlauf->setSize(446, 174);
  24. nachricht = factory.createTextFeld(factory.initParam);
  25. nachricht->setStyle(TextFeld::Style::TextFeld & ~TextFeld::Style::Buffered);
  26. nachricht->setText("");
  27. nachricht->setSchriftFarbe(0xFF909090);
  28. nachricht->setRahmenBreite(1);
  29. nachricht->setRahmenFarbe(0xFF909090);
  30. nachricht->setPosition(rahmen->getX() + 2, rahmen->getY() + 178);
  31. nachricht->setSize(446, 20);
  32. }
  33. // Destruktor
  34. SpielChat::~SpielChat()
  35. {
  36. rahmen->release();
  37. verlauf->release();
  38. nachricht->release();
  39. }
  40. // nicht constant
  41. void SpielChat::addNachricht(const char* nachricht)
  42. {
  43. verlauf->addZeile(nachricht, 0xFFFFFFFF);
  44. verlauf->updateVScroll();
  45. }
  46. void SpielChat::addNachricht(const char* nachricht, int farbe)
  47. {
  48. verlauf->addZeile(nachricht, farbe);
  49. verlauf->updateVScroll();
  50. }
  51. void SpielChat::doPublicMausEreignis(MausEreignis& me)
  52. {
  53. bool vera = me.verarbeitet;
  54. verlauf->doPublicMausEreignis(me);
  55. nachricht->doPublicMausEreignis(me);
  56. if (!vera && me.verarbeitet)
  57. {
  58. nachricht->setRahmenFarbe(0xFFFFFFFF);
  59. nachricht->setSchriftFarbe(0xFFFFFFFF);
  60. verlauf->setVertikalScrollFarbe(0xFF808080, 0);
  61. rahmen->setFarbe(0xFFFFFFFF);
  62. }
  63. else
  64. {
  65. nachricht->setRahmenFarbe(0xFF909090);
  66. nachricht->setSchriftFarbe(0xFF909090);
  67. verlauf->setVertikalScrollFarbe(0xFF404040, 0);
  68. rahmen->setFarbe(0xFF909090);
  69. }
  70. }
  71. void SpielChat::doTastaturEreignis(TastaturEreignis& te, KSGClient::SpielServerClient* zKlient)
  72. {
  73. if (te.id == TE_Release && te.taste == T_Enter && !te.verarbeitet)
  74. {
  75. if (nachricht->hatStyle(TextFeld::Style::Fokus))
  76. {
  77. if (nachricht->zText()->getLength())
  78. {
  79. short län = 1 + nachricht->zText()->getLength();
  80. char* bytes = new char[län + 1];
  81. *bytes = 4;
  82. for (int i = 1; i <= län; i++)
  83. bytes[i] = nachricht->zText()->getText()[i - 1];
  84. nachricht->setText("");
  85. nachricht->setAuswahl(0, 0);
  86. nachricht->removeStyle(TextFeld::Style::Fokus);
  87. zKlient->spielNachricht(län, bytes);
  88. delete[] bytes;
  89. te.verarbeitet = 1;
  90. }
  91. }
  92. else
  93. {
  94. nachricht->addStyle(TextFeld::Style::Fokus);
  95. nachricht->setAuswahl(0, nachricht->zText()->getLength());
  96. te.verarbeitet = 1;
  97. }
  98. }
  99. if (!te.verarbeitet)
  100. nachricht->doTastaturEreignis(te);
  101. if (nachricht->hatStyle(TextFeld::Style::Fokus))
  102. {
  103. nachricht->setRahmenFarbe(0xFFFFFFFF);
  104. nachricht->setSchriftFarbe(0xFFFFFFFF);
  105. verlauf->setVertikalScrollFarbe(0xFF808080, 0);
  106. rahmen->setFarbe(0xFFFFFFFF);
  107. }
  108. else
  109. {
  110. nachricht->setRahmenFarbe(0xFF909090);
  111. nachricht->setSchriftFarbe(0xFF909090);
  112. verlauf->setVertikalScrollFarbe(0xFF404040, 0);
  113. rahmen->setFarbe(0xFF909090);
  114. }
  115. }
  116. void SpielChat::tick(double z)
  117. {
  118. nachricht->tick(z);
  119. }
  120. void SpielChat::render(Bild& zRObj)
  121. {
  122. rahmen->render(zRObj);
  123. verlauf->render(zRObj);
  124. nachricht->render(zRObj);
  125. }