123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #include "Bestenliste.h"
- #include "Initialisierung.h"
- Bestenliste::Bestenliste( int id, UIInit& uiFactory )
- : Variable( BESTENLISTE )
- {
- this->uiFactory = uiFactory;
- this->id = id;
- ram.setFarbe( 0xFFFFFFFF );
- ram.setRamenBreite( 1 );
- sichtbar = 1;
- }
- Bestenliste::~Bestenliste()
- {}
- int Bestenliste::getSpaltenBreite( int j ) const
- {
- if( j == -1 )
- {
- int maxBr = 0;
- for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
- {
- if( maxBr < zeilen.z( i )->getBreite() )
- maxBr = zeilen.z( i )->getBreite();
- }
- return maxBr;
- }
- int maxBr = spalten.z( j )->getBreite();
- for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
- {
- if( werte.z( i ) && werte.z( i )->z( j ) )
- {
- if( maxBr < werte.z( i )->z( j )->getBreite() )
- maxBr = werte.z( i )->z( j )->getBreite();
- }
- }
- return maxBr;
- }
- void Bestenliste::setSichtbar( bool sichtbar )
- {
- this->sichtbar = sichtbar;
- }
- void Bestenliste::addSpalte( const char* name )
- {
- spalten.add( initTextFeld( 0, 0, -1, -1, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, name ) );
- }
- void Bestenliste::addZeile( const char* name )
- {
- zeilen.add( initTextFeld( 0, 0, -1, -1, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, name ) );
- }
- void Bestenliste::setWert( const char* spalte, const char* zeile, const char* wert )
- {
- int spalteI = 0;
- for( auto s = spalten.begin(); s; s++, spalteI++ )
- {
- if( s->zText() && s->zText()->istGleich( spalte ) )
- break;
- }
- int zeileI = 0;
- for( auto z = zeilen.begin(); z; z++, zeileI++ )
- {
- if( z->zText() && z->zText()->istGleich( zeile ) )
- break;
- }
- if( !werte.z( zeileI ) )
- werte.set( new RCArray< TextFeld >(), zeileI );
- werte.z( zeileI )->set( initTextFeld( 0, 0, -1, 20, uiFactory, TextFeld::Style::Text | TextFeld::Style::Center, wert ), spalteI );
- }
- const char* Bestenliste::getWert( const char* spalte, const char* zeile )
- {
- int spalteI = 0;
- for( auto s = spalten.begin(); s; s++, spalteI++ )
- {
- if( s->zText() && s->zText()->istGleich( spalte ) )
- break;
- }
- int zeileI = 0;
- for( auto z = zeilen.begin(); z; z++, spalteI++ )
- {
- if( z->zText() && z->zText()->istGleich( zeile ) )
- break;
- }
- if( !werte.z( zeileI ) || !werte.z( zeileI )->hat( spalteI ) || !werte.z( zeileI )->z( spalteI )->zText() )
- return "";
- return werte.z( zeileI )->z( spalteI )->zText()->getText();
- }
- void Bestenliste::render( int x, int y, Bild& rObj )
- {
- ram.setPosition( x, y );
- ram.setSize( getBreite(), getHeight() );
- ram.render( rObj );
- Array<int> spaltenBr;
- x += 1;
- y += 1;
- int startX = x;
- int br = getBreite();
- int hi = getHeight();
- int ssbr = getSpaltenBreite( -1 );
- x += ssbr;
- for( int i = 0; i < spalten.getEintragAnzahl(); i++ )
- {
- rObj.drawLinieV( x++, y, hi - 2, 0xFFFFFFFF );
- int sbr = getSpaltenBreite( i );
- TextFeld* tf = spalten.z( i );
- tf->setSize( sbr, 20 );
- tf->setPosition( x, y );
- tf->render( rObj );
- x += sbr;
- spaltenBr.add( sbr );
- }
- x = startX;
- y += 20;
- for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
- {
- rObj.drawLinieH( x, y++, br - 2, 0xFFFFFFFF );
- TextFeld* tf = zeilen.z( i );
- tf->setSize( ssbr, 20 );
- tf->setPosition( x, y );
- tf->render( rObj );
- x += ssbr + 1;
- for( int j = 0; j < spalten.getEintragAnzahl(); j++ )
- {
- int sbr = spaltenBr.get( j );
- TextFeld* tf = werte.z( i ) ? werte.z( i )->z( j ) : 0;
- if( tf )
- {
- tf->setSize( sbr, 20 );
- tf->setPosition( x, y );
- tf->render( rObj );
- }
- x += sbr + 1;
- }
- x = startX;
- y += 20;
- }
- }
- int Bestenliste::getBreite() const
- {
- int br = 1;
- for( int i = -1; i < spalten.getEintragAnzahl(); i++ )
- br += getSpaltenBreite( i ) + 1;
- return br;
- }
- int Bestenliste::getHeight() const
- {
- int hi = 22;
- for( int i = 0; i < zeilen.getEintragAnzahl(); i++ )
- hi += 21;
- return hi;
- }
|