UIDialog.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. setStyle( 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( getRBreite() * 2, getRBreite() * 2 + zTTextFeld()->getHeight() ) );
  50. }
  51. // Fügt dem Fenster eine Zeichnung hinzu
  52. // obj: Die Zeichnung
  53. void UIDialog::addMember( Zeichnung *obj )
  54. {
  55. Fenster::addMember( obj );
  56. adjustSize();
  57. }
  58. // Entfernt eine Zeichnung aus dem Fenster
  59. // zObj: Die Zeichnung (ohne erhöhten reference Counter)
  60. void UIDialog::removeMember( Zeichnung *zObj )
  61. {
  62. Fenster::removeMember( zObj );
  63. adjustSize();
  64. }
  65. // Entfernt alle Zeichnungen aus dem Fenster
  66. void UIDialog::removeAll()
  67. {
  68. Fenster::removeAll();
  69. adjustSize();
  70. }
  71. UIMessageDialog::UIMessageDialog( const char *titel, const char *message, Schrift *schrift )
  72. : UIDialog( schrift )
  73. {
  74. setTitel( titel );
  75. UIInit init = defaultUI( schrift, 0 );
  76. TextFeld *msg = init.createTextFeld( init.initParam );
  77. msg->setStyle( TextFeld::Style::Text );
  78. msg->setText( message );
  79. msg->setPosition( 5, 5 );
  80. TextRenderer tr( schrift->getThis() );
  81. tr.textFormatieren( msg->zText(), 590 );
  82. int br = tr.getTextBreite( message );
  83. int hö = tr.getTextHeight( message );
  84. msg->setSize( br, hö );
  85. Knopf *ok = init.createKnopf( init.initParam );
  86. ok->setText( "Ok" );
  87. ok->setMausEreignis( [ this ]( void *p, void *o, MausEreignis me )
  88. {
  89. if( me.id == ME_RLinks )
  90. removeStyle( Fenster::Style::Sichtbar );
  91. return 1;
  92. } );
  93. ok->setPosition( br - 100, hö + 5 );
  94. ok->setSize( 100, 20 );
  95. addMember( ok );
  96. addMember( msg );
  97. setSize( br + 10, hö + 55 );
  98. }
  99. UIMessageDialog::~UIMessageDialog()
  100. {}