Bestenliste.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include "Bestenliste.h"
  2. #include "Initialisierung.h"
  3. Bestenliste::Bestenliste( int id, UIInit &uiFactory )
  4. : Variable( BESTENLISTE )
  5. {
  6. this->uiFactory = uiFactory;
  7. this->id = id;
  8. ram.setFarbe( 0xFFFFFFFF );
  9. ram.setRamenBreite( 1 );
  10. sichtbar = 1;
  11. }
  12. Bestenliste::~Bestenliste()
  13. {}
  14. int Bestenliste::getSpaltenBreite( int j ) const
  15. {
  16. if( j == -1 )
  17. {
  18. int maxBr = 0;
  19. for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
  20. {
  21. if( maxBr < zeilen.z( i )->getBreite() )
  22. maxBr = zeilen.z( i )->getBreite();
  23. }
  24. return maxBr;
  25. }
  26. int maxBr = spalten.z( j )->getBreite();
  27. for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
  28. {
  29. if( werte.z( i ) && werte.z( i )->z( j ) )
  30. {
  31. if( maxBr < werte.z( i )->z( j )->getBreite() )
  32. maxBr = werte.z( i )->z( j )->getBreite();
  33. }
  34. }
  35. return maxBr;
  36. }
  37. void Bestenliste::setSichtbar( bool sichtbar )
  38. {
  39. this->sichtbar = sichtbar;
  40. }
  41. void Bestenliste::addSpalte( const char *name )
  42. {
  43. spalten.add( initTextFeld( 0, 0, -1, -1, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, name ) );
  44. }
  45. void Bestenliste::addZeile( const char *name )
  46. {
  47. zeilen.add( initTextFeld( 0, 0, -1, -1, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, name ) );
  48. }
  49. void Bestenliste::setWert( const char *spalte, const char *zeile, const char *wert )
  50. {
  51. int spalteI = 0;
  52. for( auto s = spalten.getIterator(); s; s++, spalteI++ )
  53. {
  54. if( s->zText() && s->zText()->istGleich( spalte ) )
  55. break;
  56. }
  57. int zeileI = 0;
  58. for( auto z = zeilen.getIterator(); z; z++, zeileI++ )
  59. {
  60. if( z->zText() && z->zText()->istGleich( zeile ) )
  61. break;
  62. }
  63. if( !werte.z( zeileI ) )
  64. werte.set( new RCArray< TextFeld >(), zeileI );
  65. werte.z( zeileI )->set( initTextFeld( 0, 0, -1, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, wert ), spalteI );
  66. }
  67. const char *Bestenliste::getWert( const char *spalte, const char *zeile )
  68. {
  69. int spalteI = 0;
  70. for( auto s = spalten.getIterator(); s; s++, spalteI++ )
  71. {
  72. if( s->zText() && s->zText()->istGleich( spalte ) )
  73. break;
  74. }
  75. int zeileI = 0;
  76. for( auto z = zeilen.getIterator(); z; z++, spalteI++ )
  77. {
  78. if( z->zText() && z->zText()->istGleich( zeile ) )
  79. break;
  80. }
  81. if( !werte.z( zeileI ) || !werte.z( zeileI )->hat( spalteI ) || !werte.z( zeileI )->z( spalteI )->zText() )
  82. return "";
  83. return werte.z( zeileI )->z( spalteI )->zText()->getText();
  84. }
  85. void Bestenliste::render( int x, int y, Bild &rObj )
  86. {
  87. ram.setPosition( x, y );
  88. ram.setSize( getBreite(), getHeight() );
  89. ram.render( rObj );
  90. Array<int> spaltenBr;
  91. x += 1;
  92. y += 1;
  93. int startX = x;
  94. int br = getBreite();
  95. int hi = getHeight();
  96. int ssbr = getSpaltenBreite( -1 );
  97. x += ssbr;
  98. for( int i = 0; i < spalten.getEintragAnzahl(); i++ )
  99. {
  100. rObj.drawLinieV( x++, y, hi - 2, 0xFFFFFFFF );
  101. int sbr = getSpaltenBreite( i );
  102. TextFeld *tf = spalten.z( i );
  103. tf->setSize( sbr, 20 );
  104. tf->setPosition( x, y );
  105. tf->render( rObj );
  106. x += sbr;
  107. spaltenBr.add( sbr );
  108. }
  109. x = startX;
  110. y += 20;
  111. for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
  112. {
  113. rObj.drawLinieH( x, y++, br - 2, 0xFFFFFFFF );
  114. TextFeld *tf = zeilen.z( i );
  115. tf->setSize( ssbr, 20 );
  116. tf->setPosition( x, y );
  117. tf->render( rObj );
  118. x += ssbr + 1;
  119. for( int j = 0; j < spalten.getEintragAnzahl(); j++ )
  120. {
  121. int sbr = spaltenBr.get( j );
  122. TextFeld *tf = werte.z( i ) ? werte.z( i )->z( j ) : 0;
  123. if( tf )
  124. {
  125. tf->setSize( sbr, 20 );
  126. tf->setPosition( x, y );
  127. tf->render( rObj );
  128. }
  129. x += sbr + 1;
  130. }
  131. x = startX;
  132. y += 20;
  133. }
  134. }
  135. int Bestenliste::getBreite() const
  136. {
  137. int br = 1;
  138. for( int i = -1; i < spalten.getEintragAnzahl(); i++ )
  139. br += getSpaltenBreite( i ) + 1;
  140. return br;
  141. }
  142. int Bestenliste::getHeight() const
  143. {
  144. int hi = 22;
  145. for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
  146. hi += 21;
  147. return hi;
  148. }