Dialog.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. {
  14. entrys = new RCArray<Text>();
  15. ids = new Array<void*>();
  16. ref = 1;
  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. {
  39. ex = true;
  40. } );
  41. f->setMausAktion( _ret1ME );
  42. f->setTastaturAktion( _ret1TE );
  43. f->erstellen( WS_OVERLAPPEDWINDOW, wc );
  44. f->setSize( 200, 200 );
  45. f->setPosition( Bildschirmmitte( f->getThis() ) );
  46. f->setVerschiebbar( 1 );
  47. f->setAnzeigeModus( 1 );
  48. Bildschirm *b = new Bildschirm2D( f->getThis() );
  49. f->setBildschirm( b->getThis() );
  50. b->update();
  51. RenderTh *r = new RenderTh();
  52. r->setBildschirm( b->getThis() );
  53. r->beginn();
  54. AuswahlBox *ab = new AuswahlBox();
  55. ab->setPosition( 10, 10 );
  56. ab->setSize( 180, 20 );
  57. ab->setHintergrundFarbe( 0xFF000000 );
  58. ab->setRahmenBreite( 1 );
  59. ab->setRahmenFarbe( 0xFFFFFFFF );
  60. ab->setMaxAuskappHeight( 120 );
  61. ab->setMausRahmenBreite( 1 );
  62. ab->setMausRahmenFarbe( 0xFF005500 );
  63. ab->setMausAlphaFeldFarbe( 0x00008700 );
  64. ab->setMausAlphaFeldStrength( -8 );
  65. ab->setAuswRahmenBreite( 1 );
  66. ab->setAuswRahmenFarbe( 0xFF00FF00 );
  67. ab->setAuswAlphaFeldFarbe( 0x0000FF00 );
  68. ab->setAuswAlphaFeldStrength( -8 );
  69. ab->setStyle( AuswahlBox::Style::Normal );
  70. ab->setSchriftZ( zSchrift->getThis() );
  71. for( auto i = entrys->getIterator(); i; i++ )
  72. ab->addEintrag( i->getText() );
  73. ab->setMausEreignis( _ret1ME );
  74. b->addMember( ab );
  75. Knopf *ok = new Knopf();
  76. ok->setStyle( Knopf::Style::Normal );
  77. ok->setPosition( 50, 150 );
  78. ok->setSize( 100, 20 );
  79. ok->setSchriftZ( zSchrift->getThis() );
  80. ok->setText( "Ok" );
  81. ok->setMausEreignis( [ this, &ex, &result, ab ]( void *p, void *o, MausEreignis me )
  82. {
  83. if( me.id == ME_RLinks )
  84. {
  85. result = ids->get( ab->getAuswahl() );
  86. ex = true;
  87. }
  88. return 1;
  89. } );
  90. b->addMember( ok );
  91. MSG msg;
  92. while( GetMessage( &msg, NULL, 0, 0 ) > 0 && !ex )
  93. {
  94. if( !ex )
  95. {
  96. TranslateMessage( &msg );
  97. DispatchMessage( &msg );
  98. }
  99. }
  100. r->beenden();
  101. r->release();
  102. b->release();
  103. f->setBildschirm( 0 );
  104. f->setAnzeigeModus( 0 );
  105. f->zerstören();
  106. f->release();
  107. ok->release();
  108. ab->release();
  109. return result;
  110. }
  111. // Reference Counting
  112. MultiplChoiceDialog *MultiplChoiceDialog::getThis()
  113. {
  114. ref++;
  115. return this;
  116. }
  117. MultiplChoiceDialog *MultiplChoiceDialog::release()
  118. {
  119. if( !--ref )
  120. delete this;
  121. return 0;
  122. }