Frage.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "Frage.h"
  2. #include <Schrift.h>
  3. #include <Text.h>
  4. #include "../../../Initialisierung/Initialisierung.h"
  5. // Konstructor
  6. // zS: 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( Schrift *zS, char *frage, char *left, char *right, std::function< void() > leftAk, std::function< void() > rightAk, std::function< void() > abbruchAk, Punkt maxSize )
  15. : Dialog( zS )
  16. {
  17. Text *tmp = new Text( frage );
  18. zS->lock();
  19. zS->setSchriftSize( 12 );
  20. zS->textFormatieren( tmp, 300, 12 );
  21. int br = zS->getTextBreite( tmp );
  22. int hö = zS->getTextHeight( tmp );
  23. zS->unlock();
  24. setSize( br + 12, hö + 63 );
  25. setPosition( maxSize / 2 - getSize() / 2 );
  26. this->text = initTextFeld( 5, 5, br, hö, zS, TextFeld::Style::Text, tmp->getText() );
  27. addMember( text );
  28. tmp->release();
  29. this->right = initKnopf( br - 94, hö + 22, 100, 20, zS, Knopf::Style::Normal, right );
  30. addMember( this->right );
  31. this->left = initKnopf( br - 199, hö + 22, 100, 20, zS, Knopf::Style::Normal, left );
  32. addMember( this->left );
  33. bool *verl = &verlassen;
  34. this->right->setMausEreignis( [ verl, rightAk ]( void *param, void *obj, MausEreignis me ) -> bool
  35. {
  36. if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
  37. {
  38. *verl = 1;
  39. if( rightAk )
  40. rightAk();
  41. }
  42. return 1;
  43. } );
  44. this->left->setMausEreignis( [ verl, leftAk ]( void *param, void *obj, MausEreignis me ) -> bool
  45. {
  46. if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
  47. {
  48. *verl = 1;
  49. if( leftAk )
  50. leftAk();
  51. }
  52. return 1;
  53. } );
  54. setClosingMe( [ verl, abbruchAk ]( void *param, void *obj, MausEreignis me ) -> bool
  55. {
  56. if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
  57. {
  58. *verl = 1;
  59. if( abbruchAk )
  60. abbruchAk();
  61. }
  62. return 1;
  63. } );
  64. }
  65. Frage::~Frage()
  66. {
  67. text->release();
  68. left->release();
  69. right->release();
  70. }