123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- #include "ShapedRecipie.h"
- #include <Bild.h>
- #include <XML.h>
- ShapedRecipieElement::ShapedRecipieElement()
- : Framework::UIMLElement()
- {}
- //! prüft, ob dieses UIML Element für ein bestimmtes xml Element zuständig
- //! ist
- bool ShapedRecipieElement::isApplicableFor(Framework::XML::Element& element)
- {
- return element.getName().istGleich("recipie")
- && element.getAttributeValue("type").istGleich("shaped");
- }
- //! erstellt eine neue Zeichnung zu einem gegebenen xml Element
- Framework::Zeichnung* ShapedRecipieElement::parseElement(
- Framework::XML::Element& element, Framework::UIMLContainer& generalFactory)
- {
- int width = (int)element.getAttributeValue("width");
- int height = (int)element.getAttributeValue("height");
- ShapedRecipie* recipie = new ShapedRecipie(width, height);
- element.selectChildsByName("ingredients")
- .selectChildren()
- .forEach([recipie, &generalFactory](Framework::XML::Element* zElement) {
- recipie->addIngredient(
- generalFactory.parseElement(*zElement, generalFactory));
- });
- element.selectChildsByName("outputs").selectChildren().forEach(
- [recipie, &generalFactory](Framework::XML::Element* zElement) {
- recipie->addOutput(
- generalFactory.parseElement(*zElement, generalFactory));
- });
- return recipie;
- }
- bool ShapedRecipieElement::updateElement(Framework::XML::Element& element,
- Framework::Zeichnung& z,
- Framework::UIMLContainer& generalFactory)
- {
- return false;
- }
- //! wendet die layout parameter zu einer Zeichnung an
- void ShapedRecipieElement::layout(Framework::XML::Element& element,
- Framework::Zeichnung& z,
- int pWidth,
- int pHeight,
- Framework::UIMLContainer& generalLayouter)
- {
- UIMLElement::layout(element, z, pWidth, pHeight, generalLayouter);
- int width = (int)element.getAttributeValue("width");
- int height = (int)element.getAttributeValue("height");
- int outputs
- = element.selectChildsByName("outputs").selectChildren().getSize();
- int outputCols = outputs / height;
- if (outputs % height != 0)
- {
- outputCols++;
- }
- if (outputCols == 0)
- {
- outputCols = 1;
- }
- z.setWidth(width * 60 + 50 + outputCols * 60 - 10);
- z.setHeight(height * 60 - 10);
- element.selectChildren().selectChildren().forEach(
- [&z, &generalLayouter](Framework::XML::Element* zElement) {
- Framework::Zeichnung* child = 0;
- if (zElement->hasAttribute("id"))
- {
- child = generalLayouter.zZeichnungById(
- zElement->getAttributeValue("id"));
- }
- if (child)
- {
- generalLayouter.layout(*zElement,
- *child,
- z.getBreite(),
- z.getHeight(),
- generalLayouter);
- }
- });
- }
- ShapedRecipie::ShapedRecipie(int width, int height)
- : Framework::ZeichnungHintergrund(),
- width(width),
- height(height)
- {
- setStyle(Framework::Zeichnung::Style::Erlaubt
- | Framework::Zeichnung::Style::Sichtbar);
- }
- void ShapedRecipie::addIngredient(Zeichnung* ingredient)
- {
- ingredients.add(ingredient);
- }
- void ShapedRecipie::addOutput(Zeichnung* output)
- {
- outputs.add(output);
- }
- bool ShapedRecipie::tick(double tickVal)
- {
- bool ret = false;
- for (Zeichnung* ingredient : ingredients)
- {
- ret |= ingredient->tick(tickVal);
- }
- for (Zeichnung* output : outputs)
- {
- ret |= output->tick(tickVal);
- }
- return ret;
- }
- void ShapedRecipie::render(Framework::Bild& rObj)
- {
- if (!hatStyle(Zeichnung::Style::Sichtbar)) return;
- ZeichnungHintergrund::render(rObj);
- if (!rObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y)) return;
- int x = 0;
- int y = 0;
- for (Zeichnung* ingredient : ingredients)
- {
- ingredient->setX(x);
- ingredient->setY(y);
- ingredient->render(rObj);
- x += 60;
- if (x >= width * 60)
- {
- x = 0;
- y += 60;
- }
- }
- rObj.fillRegion(width * 60, gr.y / 2 - 5, 25, 10, 0xFF52525E);
- rObj.drawDreieck(Framework::Punkt(width * 60 + 25, gr.y / 2 - 15),
- Framework::Punkt(width * 60 + 40, gr.y / 2),
- Framework::Punkt(width * 60 + 25, gr.y / 2 + 15),
- 0xFF52525E);
- x = width * 60 + 50;
- y = 0;
- for (Zeichnung* output : outputs)
- {
- output->setX(x);
- output->setY(y);
- output->render(rObj);
- y += 60;
- }
- rObj.releaseDrawOptions();
- }
- void ShapedRecipie::doMausEreignis(Framework::MausEreignis& me, bool userRet)
- {
- for (Zeichnung* ingredient : ingredients)
- {
- ingredient->doPublicMausEreignis(me);
- }
- for (Zeichnung* output : outputs)
- {
- output->doPublicMausEreignis(me);
- }
- }
|