SpielChat.cpp 4.2 KB

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