Chat.cpp 4.3 KB

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