ItemStack.cpp 2.7 KB

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