Frage.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "Frage.h"
  2. #include <Schrift.h>
  3. #include <Text.h>
  4. #include "../../../Initialisierung/Initialisierung.h"
  5. // Konstructor
  6. // tr: Ein Zeiger auf die zu verwendende Schrift
  7. // frage: Die Frage die an den Benutzer gestellt werden soll
  8. // left: Die linke Antwort
  9. // right: Die rechte Antwort
  10. // leftAk: Ein Zeiger auf eine Funktion die beim wählen der Linken Antwort aufgerufen wird
  11. // rightAk: Ein Zeiger auf eine Funktion die beim wählen der Rechten Antwort aufgerufen wird
  12. // abbruchAk: Ein Zeiger auf eine Funktion die beim Schließen des Fensters aufgerufen wird
  13. // maxSize: Die Bildschirmgröße in Pixeln
  14. Frage::Frage( TextRenderer *tr, UIInit &uiFactory, char *frage, char *left, char *right, std::function< void() > leftAk, std::function< void() > rightAk, std::function< void() > abbruchAk, Punkt maxSize )
  15. : Dialog( tr )
  16. {
  17. Text *tmp = new Text( frage );
  18. tr->setSchriftSize( 12 );
  19. tr->textFormatieren( tmp, 300 );
  20. int br = tr->getTextBreite( tmp->getText() );
  21. int hö = tr->getTextHeight( tmp->getText() );
  22. setSize( br + 12, hö + 63 );
  23. setPosition( maxSize / 2 - getSize() / 2 );
  24. TextFeld *text = initTextFeld( 5, 5, br, hö, uiFactory, TextFeld::Style::Text, tmp->getText() );
  25. addMember( text );
  26. tmp->release();
  27. Knopf *r = initKnopf( br - 94, hö + 22, 100, 20, uiFactory, Knopf::Style::Normal, right );
  28. addMember( r );
  29. Knopf *l = initKnopf( br - 199, hö + 22, 100, 20, uiFactory, Knopf::Style::Normal, left );
  30. addMember( l );
  31. bool *verl = &verlassen;
  32. r->setMausEreignis( [verl, rightAk]( void *param, void *obj, MausEreignis me ) -> bool
  33. {
  34. if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
  35. {
  36. *verl = 1;
  37. if( rightAk )
  38. rightAk();
  39. }
  40. return 1;
  41. } );
  42. l->setMausEreignis( [verl, leftAk]( void *param, void *obj, MausEreignis me ) -> bool
  43. {
  44. if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
  45. {
  46. *verl = 1;
  47. if( leftAk )
  48. leftAk();
  49. }
  50. return 1;
  51. } );
  52. setClosingMe( [verl, abbruchAk]( void *param, void *obj, MausEreignis me ) -> bool
  53. {
  54. if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
  55. {
  56. *verl = 1;
  57. if( abbruchAk )
  58. abbruchAk();
  59. }
  60. return 1;
  61. } );
  62. }
  63. Frage::~Frage()
  64. {}