Dialog.cpp 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <XML.h>
  2. #include <TextFeld.h>
  3. #include <TastaturEreignis.h>
  4. #include "Dialog.h"
  5. #include "InventoryView.h"
  6. #include "Equipment.h"
  7. #include "CraftingGrid.h"
  8. #include "CraftingRecipies.h"
  9. #include "RecipieIngredient.h"
  10. #include "RecipieOutput.h"
  11. #include "ShapedRecipie.h"
  12. #include "UnshapedRecipie.h"
  13. #include "Globals.h"
  14. using namespace Framework;
  15. UIMLDialog::UIMLDialog(Framework::Text uiml, std::function<void(UIMLDialog* self)> onClose)
  16. : Fenster()
  17. {
  18. XML::Element* xml = new XML::Element(uiml);
  19. view = new UIMLView("<v/>", uiFactory);
  20. view->setStyle(UIMLView::Style::Erlaubt | UIMLView::Style::Sichtbar);
  21. view->setMausEreignis(_ret1ME);
  22. view->addKnownElement(new InventoryElement());
  23. view->addKnownElement(new EquipmentElement());
  24. view->addKnownElement(new CraftingGridElement());
  25. view->addKnownElement(new CraftingRecipiesElement());
  26. view->addKnownElement(new RecipieIngredientElement());
  27. view->addKnownElement(new RecipieOutputElement());
  28. view->addKnownElement(new ShapedRecipieElement());
  29. view->addKnownElement(new UnshapedRecipieElement());
  30. view->setUIML(xml);
  31. view->setSize((int)xml->getAttributeValue("width"), (int)xml->getAttributeValue("height"));
  32. name = xml->getAttributeValue("id");
  33. view->layout();
  34. if (!xml->hasAttribute("width"))
  35. {
  36. view->setSize(view->calculateContentSize().x, view->getHeight());
  37. }
  38. if (!xml->hasAttribute("height"))
  39. {
  40. view->setSize(view->getBreite(), view->calculateContentSize().y);
  41. }
  42. addMember(view);
  43. setStyle(Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::BodyHAlpha | Fenster::Style::Beweglich | Fenster::Style::Titel | Fenster::Style::TitelHAlpha | Fenster::Style::Closable | Fenster::Style::ClosingHAlpha | Fenster::Style::ClosingKlickBuffer | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund | Fenster::Style::ClosingHintergrund | Fenster::Style::MEIgnoreInside);
  44. setKBgFarbe(0xA0000000);
  45. setTBgFarbe(0xA0000000);
  46. setSBgFarbe(0xA0000000);
  47. setSize(view->getBreite() + 4, view->getHeight() + 24);
  48. setPosition(window->zBildschirm()->getBackBufferSize() / 2 - getSize() / 2);
  49. setRBreite(2);
  50. setClosingMe([onClose, this](void* p, void* o, MausEreignis me)
  51. {
  52. if (me.id == ME_RLinks)
  53. onClose(this);
  54. return 1;
  55. });
  56. setRFarbe(0xFF52525E);
  57. setTitel(xml->getAttributeValue("title"));
  58. setTSchriftZ(dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  59. zTTextFeld()->setSize(0, 20);
  60. zTTextFeld()->addStyle(TextFeld::Style::Center);
  61. setTastaturEreignis(_ret1TE);
  62. }
  63. UIMLDialog::~UIMLDialog()
  64. {}
  65. void UIMLDialog::api(char* message)
  66. {
  67. short idLen = *(short*)message;
  68. char* id = new char[idLen + 1];
  69. memcpy(id, message + 2, idLen);
  70. id[idLen] = 0;
  71. NetworkAPIProcessor* processor = dynamic_cast<NetworkAPIProcessor*>(view->zZeichnungById(id));
  72. if (processor)
  73. processor->api(message + 2 + idLen);
  74. delete[] id;
  75. }
  76. const Framework::Text& UIMLDialog::getName() const
  77. {
  78. return name;
  79. }