Dialog.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "Dialog.h"
  2. #include "Text.h"
  3. #include "Fenster.h"
  4. #include "Bildschirm.h"
  5. #include "AsynchronCall.h"
  6. #include "RenderThread.h"
  7. #include "AuswahlBox.h"
  8. #include "Schrift.h"
  9. #include "Knopf.h"
  10. using namespace Framework;
  11. // Inhalt der MultiplChoiceDialog Klasse aus Dialog.h
  12. MultiplChoiceDialog::MultiplChoiceDialog()
  13. : ReferenceCounter()
  14. {
  15. entrys = new RCArray<Text>();
  16. ids = new Array<void *>();
  17. }
  18. MultiplChoiceDialog::~MultiplChoiceDialog()
  19. {
  20. entrys->release();
  21. ids->release();
  22. }
  23. // Fügt eine Auswahlmöglichkeit hinzu
  24. void MultiplChoiceDialog::addChoice( const char *text, void *id )
  25. {
  26. entrys->add( new Text( text ) );
  27. ids->add( id );
  28. }
  29. // Zeigt den dialog an und wartet auf benutzereingabe
  30. void *MultiplChoiceDialog::anzeigen( Schrift *zSchrift )
  31. {
  32. void *result = 0;
  33. bool ex = 0;
  34. WNDCLASS wc = F_Normal( 0 );
  35. wc.lpszClassName = "Dialog";
  36. WFenster *f = new WFenster();
  37. f->setVSchließAktion( [&ex]( void *p, void *o ) {
  38. ex = true;
  39. } );
  40. f->setMausAktion( _ret1ME );
  41. f->setTastaturAktion( _ret1TE );
  42. f->erstellen( WS_OVERLAPPEDWINDOW, wc );
  43. f->setSize( 200, 200 );
  44. f->setPosition( Bildschirmmitte( dynamic_cast<WFenster *>(f->getThis()) ) );
  45. f->setVerschiebbar( 1 );
  46. f->setAnzeigeModus( 1 );
  47. Bildschirm *b = new Bildschirm2D( dynamic_cast<WFenster *>(f->getThis()) );
  48. f->setBildschirm( dynamic_cast<Bildschirm *>(b->getThis()) );
  49. b->update();
  50. RenderTh *r = new RenderTh();
  51. r->setBildschirm( dynamic_cast<Bildschirm *>(b->getThis()) );
  52. r->beginn();
  53. AuswahlBox *ab = new AuswahlBox();
  54. ab->setPosition( 10, 10 );
  55. ab->setSize( 180, 20 );
  56. ab->setHintergrundFarbe( 0xFF000000 );
  57. ab->setRahmenBreite( 1 );
  58. ab->setRahmenFarbe( 0xFFFFFFFF );
  59. ab->setMaxAuskappHeight( 120 );
  60. ab->setMausRahmenBreite( 1 );
  61. ab->setMausRahmenFarbe( 0xFF005500 );
  62. ab->setMausAlphaFeldFarbe( 0x00008700 );
  63. ab->setMausAlphaFeldStrength( -8 );
  64. ab->setAuswRahmenBreite( 1 );
  65. ab->setAuswRahmenFarbe( 0xFF00FF00 );
  66. ab->setAuswAlphaFeldFarbe( 0x0000FF00 );
  67. ab->setAuswAlphaFeldStrength( -8 );
  68. ab->setStyle( AuswahlBox::Style::Normal );
  69. ab->setSchriftZ( dynamic_cast<Schrift *>(zSchrift->getThis()) );
  70. for( Text *i : *entrys )
  71. ab->addEintrag( i->getText() );
  72. ab->setMausEreignis( _ret1ME );
  73. b->addMember( ab );
  74. Knopf *ok = new Knopf();
  75. ok->setStyle( Knopf::Style::Normal );
  76. ok->setPosition( 50, 150 );
  77. ok->setSize( 100, 20 );
  78. ok->setSchriftZ( dynamic_cast<Schrift *>(zSchrift->getThis()) );
  79. ok->setText( "Ok" );
  80. ok->setMausEreignis( [this, &ex, &result, ab]( void *p, void *o, MausEreignis me ) {
  81. if( me.id == ME_RLinks )
  82. {
  83. result = ids->get( ab->getAuswahl() );
  84. ex = true;
  85. }
  86. return 1;
  87. } );
  88. b->addMember( ok );
  89. MSG msg;
  90. while( GetMessage( &msg, NULL, 0, 0 ) > 0 && !ex )
  91. {
  92. if( !ex )
  93. {
  94. TranslateMessage( &msg );
  95. DispatchMessage( &msg );
  96. }
  97. }
  98. r->beenden();
  99. r->release();
  100. b->release();
  101. f->setBildschirm( 0 );
  102. f->setAnzeigeModus( 0 );
  103. f->zerstören();
  104. f->release();
  105. ok->release();
  106. ab->release();
  107. return result;
  108. }