ItemStack.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "ItemStack.h"
  2. #include <Image.h>
  3. #include <XML.h>
  4. #include "Globals.h"
  5. #include "ItemType.h"
  6. #include "UIMLToolTip.h"
  7. ItemStackElement::ItemStackElement()
  8. : Framework::UIMLElement()
  9. {}
  10. bool ItemStackElement::isApplicableFor(Framework::XML::Element& element)
  11. {
  12. return element.getName().isEqual("itemStack");
  13. }
  14. Framework::Drawable* ItemStackElement::parseElement(
  15. Framework::XML::Element& element, Framework::UIMLContainer& generalFactory)
  16. {
  17. ItemStackView* result = new ItemStackView(dynamic_cast<Framework::Font*>(
  18. generalFactory.getFactory().initParam.font->getThis()));
  19. updateElement(element, *result, generalFactory);
  20. return result;
  21. }
  22. bool ItemStackElement::updateElement(Framework::XML::Element& element,
  23. Framework::Drawable& z,
  24. Framework::UIMLContainer& generalFactory)
  25. {
  26. ItemStackView* view = dynamic_cast<ItemStackView*>(&z);
  27. if (!view) return false;
  28. view->setCount(element.getAttributeValue("count"));
  29. auto tip = element.selectChildsByName("tip");
  30. if (tip.exists())
  31. {
  32. view->setToolTip((Framework::RCPointer<Framework::XML::Element>)
  33. tip.getFirstElement());
  34. }
  35. int type = (int)element.getAttributeValue("type");
  36. const ItemType* itemType = zItemType(type);
  37. if (itemType)
  38. {
  39. view->setBackgroundImageZ(
  40. dynamic_cast<Framework::Image*>(itemType->zIcon()->getThis()));
  41. }
  42. return true;
  43. }
  44. ItemStackView::ItemStackView(Framework::Font* font)
  45. : Framework::DrawableBackground(),
  46. count("")
  47. {
  48. setStyle(
  49. DrawableBackground::Style::Allowed | DrawableBackground::Style::Visible
  50. | DrawableBackground::Style::Background
  51. | DrawableBackground::Style::BImage | DrawableBackground::Style::BAlpha
  52. | DrawableBackground::Style::Border);
  53. setBorderWidth(1);
  54. setBorderColor(0xFF52525E);
  55. tr.setFontZ(font);
  56. tr.setFontSize(12);
  57. }
  58. void ItemStackView::setCount(Framework::Text count)
  59. {
  60. this->count = count;
  61. }
  62. void ItemStackView::setToolTip(Framework::XML::Element* zToolTipUIML)
  63. {
  64. UIMLToolTip* tip = new UIMLToolTip();
  65. tip->setUIML(zToolTipUIML->toString());
  66. setToolTipZ(tip);
  67. }
  68. void ItemStackView::render(Framework::Image& rObj)
  69. {
  70. Framework::DrawableBackground::render(rObj);
  71. if (rObj.setDrawOptions(pos, gr))
  72. {
  73. if (rObj.setDrawOptions(getBorderWidth(),
  74. getBorderWidth(),
  75. getInnerWidth(),
  76. getInnerHeight()))
  77. {
  78. tr.renderText(getInnerWidth() - 5 - tr.getTextWidth(count),
  79. getInnerHeight() - 5 - tr.getTextHeight(count),
  80. count,
  81. rObj,
  82. 0xFFFFFFFF);
  83. rObj.releaseDrawOptions();
  84. }
  85. rObj.releaseDrawOptions();
  86. }
  87. }