UIDialog.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "UIDialog.h"
  2. #include "UIInitialization.h"
  3. #include "TextFeld.h"
  4. #include "Schrift.h"
  5. #include "Knopf.h"
  6. using namespace Framework;
  7. UIDialog::UIDialog( Schrift *schrift )
  8. : Fenster()
  9. {
  10. addStyle( Fenster::Style::normal | Fenster::Style::BodyHintergrund | Fenster::Style::TitelHintergrund | Fenster::Style::ClosingHintergrund );
  11. setKBgFarbe( 0xFF000000 );
  12. setTBgFarbe( 0xFF000000 );
  13. setSBgFarbe( 0xFF000000 );
  14. setMausEreignis( _ret1ME );
  15. setTastaturEreignis( _ret1TE );
  16. setRBreite( 1 );
  17. setRFarbe( 0xFFFFFFFF );
  18. setTitel( "" );
  19. setTSchriftZ( schrift );
  20. setTSFarbe( 0xFFFFFFFF );
  21. zTTextFeld()->setSize( 0, 20 );
  22. zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
  23. setTRFarbe( 0xFF00FF00 );
  24. setTRBreite( 1 );
  25. setTAfFarbe( 0x1000FF00 );
  26. setTAfStrength( -15 );
  27. setSKAfFarbe( 0xFF00FF00 );
  28. setSKAfStrength( 30 );
  29. setClosingMe( [this]( void *p, void *o, MausEreignis me )
  30. {
  31. if( me.id == ME_RLinks )
  32. removeStyle( Fenster::Style::Sichtbar );
  33. return 1;
  34. } );
  35. }
  36. UIDialog::~UIDialog()
  37. {}
  38. void UIDialog::adjustSize()
  39. {
  40. Punkt max = Punkt( 0, 0 );
  41. for( auto m = getMembers(); m; m++ )
  42. {
  43. if( m->hatStyle( Zeichnung::Style::Sichtbar ) )
  44. {
  45. max.x = MAX( max.x, m->getX() + m->getBreite() + 5 );
  46. max.y = MAX( max.y, m->getY() + m->getHeight() + 5 );
  47. }
  48. }
  49. setSize( max + Punkt( hatStyle( Fenster::Style::Rahmen ) ? getRBreite() * 2 : 0,
  50. ( hatStyle( Fenster::Style::Rahmen ) ? getRBreite() * 2 : 0 ) +
  51. ( hatStyle( Fenster::Style::Titel ) ? zTTextFeld()->getHeight() : 0 ) ) );
  52. }
  53. // Fügt dem Fenster eine Zeichnung hinzu
  54. // obj: Die Zeichnung
  55. void UIDialog::addMember( Zeichnung *obj )
  56. {
  57. Fenster::addMember( obj );
  58. adjustSize();
  59. }
  60. // Entfernt eine Zeichnung aus dem Fenster
  61. // zObj: Die Zeichnung (ohne erhöhten reference Counter)
  62. void UIDialog::removeMember( Zeichnung *zObj )
  63. {
  64. Fenster::removeMember( zObj );
  65. adjustSize();
  66. }
  67. // Entfernt alle Zeichnungen aus dem Fenster
  68. void UIDialog::removeAll()
  69. {
  70. Fenster::removeAll();
  71. adjustSize();
  72. }
  73. UIMessageDialog::UIMessageDialog( const char *titel, const char *message, Schrift *schrift )
  74. : UIDialog( schrift )
  75. {
  76. setTitel( titel );
  77. UIInit init = defaultUI( schrift, 0 );
  78. TextFeld *msg = init.createTextFeld( init.initParam );
  79. msg->setStyle( TextFeld::Style::Text );
  80. msg->setText( message );
  81. msg->setPosition( 5, 5 );
  82. TextRenderer tr( (Schrift *)schrift->getThis() );
  83. tr.textFormatieren( msg->zText(), 590 );
  84. int br = tr.getTextBreite( message );
  85. int hö = tr.getTextHeight( message );
  86. msg->setSize( br, hö );
  87. Knopf *ok = init.createKnopf( init.initParam );
  88. ok->setText( "Ok" );
  89. ok->setMausEreignis( [this]( void *p, void *o, MausEreignis me )
  90. {
  91. if( me.id == ME_RLinks )
  92. removeStyle( Fenster::Style::Sichtbar );
  93. return 1;
  94. } );
  95. ok->setPosition( br - 100, hö + 5 );
  96. ok->setSize( 100, 20 );
  97. addMember( ok );
  98. addMember( msg );
  99. setSize( br + 10, hö + 55 );
  100. }
  101. UIMessageDialog::~UIMessageDialog()
  102. {}