UIDialog.cpp 3.1 KB

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