#include "Einstellungen.h" #include #include #include #include "../../Global/Variablen.h" #include "../../Global/Initialisierung.h" // Inhalt der Einstellungen Klasse aus Einstellungen.h // Konstruktor Einstellungen::Einstellungen( Schrift *zSchrift, Fenster *zF ) { f = initFenster( zF->getBreite() / 2 - 250, zF->getHeight() / 2 - 250, 500, 500, zSchrift, Fenster::Style::normal | Fenster::Style::BodyHAlpha | Fenster::Style::BodyHintergrund | Fenster::Style::TitelHintergrund | Fenster::Style::TitelHAlpha, "Einstellungen" ); f->removeStyle( Fenster::Style::Sichtbar ); f->setKBgFarbe( 0xe0000000 ); f->setTBgFarbe( 0xe0000000 ); f->setSBgFarbe( 0xF0000000 ); f->setClosingMeParam( this ); f->setClosingMe( einstellungenSchließenME ); TextFeld *gat = initTextFeld( 5, 5, 300, 20, zSchrift, TextFeld::Style::Text, "Grafik Engine (Neustart erforderlich)" ); f->addMember( gat ); AuswahlBox *graphicAPI = initAuswahlBox( 5, 25, 100, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, { "Aktuellste", "DirectX 9" } ); if( DirectX11::isAvailable() ) graphicAPI->addEintrag( "DirectX 11" ); if( DirectX12::isAvailable() ) graphicAPI->addEintrag( "DirectX 12" ); graphicAPI->setAuswahl( 0 ); if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX9" ) ) graphicAPI->setAuswahl( 1 ); if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX11" ) ) graphicAPI->setAuswahl( 2 ); if( userOptions->wertExistiert( "GraphicAPI" ) && userOptions->zWert( "GraphicAPI" )->istGleich( "DX12" ) ) graphicAPI->setAuswahl( 3 ); graphicAPI->setEventAktion( [ this ]( void *p, AuswahlBox * b, int unused, int auswahl ) { userOptions->addWert( "GraphicAPI", "BEST" ); switch( auswahl ) { case 1: userOptions->setWert( "GraphicAPI", "DX9" ); break; case 2: userOptions->setWert( "GraphicAPI", "DX11" ); break; case 3: userOptions->setWert( "GraphicAPI", "DX12" ); break; default: userOptions->setWert( "GraphicAPI", "BEST" ); break; } } ); TextFeld *mft = initTextFeld( 5, 50, 200, 20, zSchrift, TextFeld::Style::Text, "Maximale FPS" ); f->addMember( mft ); maxFPS = initTextFeld( 5, 70, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "MaxFPS" ) ? userOptions->zWert( "MaxFPS" )->getText() : "30" ); maxFPS->setTastaturEreignis( _nurNummernTE ); f->addMember( maxFPS->getThis() ); TextFeld * gst = initTextFeld( 5, 95, 200, 20, zSchrift, TextFeld::Style::Text, "GUI Lautstärke (0 bis 100)" ); f->addMember( gst ); guiSound = initTextFeld( 5, 115, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "GUISound" ) ? userOptions->zWert( "GUISound" )->getText() : "100" ); guiSound->setTastaturEreignis( _nurNummernTE ); f->addMember( guiSound->getThis() ); TextFeld * mt = initTextFeld( 255, 5, 200, 20, zSchrift, TextFeld::Style::Text, "Monitor (Neustart erforderlich)" ); f->addMember( mt ); AuswahlBox * monitorAuswahl = initAuswahlBox( 255, 25, 200, 20, zSchrift, AuswahlBox::Style::Normal | AuswahlBox::Style::Hintergrund, {} ); Monitor m = getMonitor( 0 ); int index = 0; do { monitorAuswahl->addEintrag( Text( "Monitor " ) + ++index + " (" + m.breite + "x" + m.height + ")" ); m = getMonitor( index ); } while( m.existiert ); if( userOptions->wertExistiert( "Monitor" ) ) monitorAuswahl->setAuswahl( *userOptions->zWert( "Monitor" ) ); monitorAuswahl->setEventAktion( [ this ]( void *p, AuswahlBox * b, int unused, int auswahl ) { if( !userOptions->wertExistiert( "Monitor" ) ) userOptions->addWert( "Monitor", Text( auswahl ) ); else userOptions->setWert( "Monitor", Text( auswahl ) ); Monitor m = getMonitor( auswahl ); if( !userOptions->wertExistiert( "ScreenWidth" ) ) userOptions->addWert( "ScreenWidth", Text( m.breite ) ); else userOptions->setWert( "ScreenWidth", Text( m.breite ) ); if( !userOptions->wertExistiert( "ScreenWidth" ) ) userOptions->addWert( "ScreenHeight", Text( m.height ) ); else userOptions->setWert( "ScreenHeight", Text( m.height ) ); breite->setText( Text( m.breite ) ); height->setText( Text( m.height ) ); } ); TextFeld *at = initTextFeld( 255, 50, 200, 20, zSchrift, TextFeld::Style::Text, "Auflösung (Neustart erforderlich)" ); f->addMember( at ); breite = initTextFeld( 255, 70, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "ScreenWidth" ) ? userOptions->zWert( "ScreenWidth" )->getText() : Text( getMonitor( userOptions->wertExistiert( "Monitor" ) ? *userOptions->zWert( "Monitor" ) : 0 ).breite ) ); height = initTextFeld( 312, 70, 50, 20, zSchrift, TextFeld::Style::TextFeld, userOptions->wertExistiert( "ScreenHeight" ) ? userOptions->zWert( "ScreenHeight" )->getText() : Text( getMonitor( userOptions->wertExistiert( "Monitor" ) ? *userOptions->zWert( "Monitor" ) : 0 ).height ) ); breite->setTastaturEreignis( _nurNummernTE ); height->setTastaturEreignis( _nurNummernTE ); f->addMember( breite->getThis() ); f->addMember( initTextFeld( 305, 70, 5, 20, zSchrift, TextFeld::Style::Text, "x" ) ); f->addMember( height->getThis() ); ok = initKnopf( 390, 450, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Ok" ); ok->setMausEreignisParameter( this ); ok->setMausEreignis( einstellungenOkME ); f->addMember( ok->getThis() ); // add AuswahlBoxen f->addMember( graphicAPI ); f->addMember( monitorAuswahl ); zF->addMember( f->getThis() ); ref = 1; } // Destruktor Einstellungen::~Einstellungen() { maxFPS->release(); guiSound->release(); breite->release(); height->release(); f->release(); ok->release(); } // nicht constant void Einstellungen::setSichtbar() { f->setStyle( Fenster::Style::Sichtbar, f->hatStyleNicht( Fenster::Style::Sichtbar ) ); } bool Einstellungen::closeME( MausEreignis &me ) { if( me.id == ME_RLinks ) f->removeStyle( Fenster::Style::Sichtbar ); return 1; } bool Einstellungen::okME( MausEreignis & me ) { if( me.id == ME_RLinks ) { int fps = *maxFPS->zText(); int sound = *guiSound->zText(); int wi = *breite->zText(); int hi = *height->zText(); if( fps > 0 && sound >= 0 && sound <= 100 && wi > 0 && hi > 0 ) { f->removeStyle( Fenster::Style::Sichtbar ); hauptScreen->lock(); if( !userOptions->wertExistiert( "MaxFPS" ) ) userOptions->addWert( "MaxFPS", maxFPS->zText()->getText() ); else userOptions->setWert( "MaxFPS", maxFPS->zText()->getText() ); if( !userOptions->wertExistiert( "GUISound" ) ) userOptions->addWert( "GUISound", guiSound->zText()->getText() ); else userOptions->setWert( "GUISound", guiSound->zText()->getText() ); if( !userOptions->wertExistiert( "ScreenWidth" ) ) userOptions->addWert( "ScreenWidth", Text( wi ) ); else userOptions->setWert( "ScreenWidth", Text( wi ) ); if( !userOptions->wertExistiert( "ScreenHeight" ) ) userOptions->addWert( "ScreenHeight", Text( hi ) ); else userOptions->setWert( "ScreenHeight", Text( hi ) ); hauptScreen->unlock(); userOptions->speichern(); } } return 1; } // Reference Counting Einstellungen *Einstellungen::getThis() { ref++; return this; } Einstellungen *Einstellungen::release() { ref--; if( !ref ) delete this; return 0; } // Ereignisse bool einstellungenSchließenME( void *p, void *obj, MausEreignis me ) { if( !p ) return 1; return ( (Einstellungen *)p )->closeME( me ); } bool einstellungenOkME( void *p, void *obj, MausEreignis me ) { if( !p ) return 1; return ( (Einstellungen *)p )->okME( me ); }