123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #include "Bestenliste.h"
- #include "Initialisierung.h"
- Bestenliste::Bestenliste( int id, Schrift *schrift )
- : Variable( BESTENLISTE )
- {
- this->schrift = schrift;
- this->id = id;
- ram.setFarbe( 0xFFFFFFFF );
- ram.setRamenBreite( 1 );
- sichtbar = 1;
- }
- Bestenliste::~Bestenliste()
- {
- schrift->release();
- }
- 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, schrift, TextFeld::Style::Text | TextFeld::Style::Center, name ) );
- }
- void Bestenliste::addZeile( const char *name )
- {
- zeilen.add( initTextFeld( 0, 0, -1, -1, schrift, 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.getIterator(); s; s++, spalteI++ )
- {
- if( s->zText() && s->zText()->istGleich( spalte ) )
- break;
- }
- int zeileI = 0;
- for( auto z = zeilen.getIterator(); 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, schrift, 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.getIterator(); s; s++, spalteI++ )
- {
- if( s->zText() && s->zText()->istGleich( spalte ) )
- break;
- }
- int zeileI = 0;
- for( auto z = zeilen.getIterator(); 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;
- }
|