arenaelementtypescene.cpp
Go to the documentation of this file.
2 
3 #include "../model/arenaelementtype.h"
4 #include "../model/arenaelement.h"
5 #include "../model/arenaelementtyperegistry.h"
6 #include "arenasceneelement.h"
7 
8 #include <QGraphicsPixmapItem>
9 #include <QGraphicsSceneMouseEvent>
10 #include <QEvent>
11 #include <QMoveEvent>
12 #include <QDebug>
13 
15  : m_registry(registry)
16 {
17 }
18 
19 void ArenaElementTypeScene::loadConfig(const QDomElement &arenaElements)
20 {
21  QDomNodeList childNodes = arenaElements.childNodes();
22  int y = 0;
23  for (int i = 0; i < childNodes.count(); i++)
24  {
25  QDomElement element = childNodes.at(i).toElement();
26  if (element.tagName() != "element")
27  {
28  if (element.tagName() != "")
29  qWarning() << "Warning: Ignored element \"" << element.tagName() << "\"";
30  continue;
31  }
32 
33  QString elementType = element.attribute("type");
34  if (!m_registry->hasElement(elementType))
35  {
36  qDebug() << "[Rescue Arena Designer] Error in config.xml: Element of type" << elementType << "doesn't seem to exist in your hector_arena_elements package";
37  continue;
38  }
39  ArenaElement *elementInstance = m_registry->instantiateElement(elementType);
40  if (element.hasAttribute("rotation"))
41  {
42  QString elementRotation = element.attribute("rotation");
43  elementInstance->setRotation(elementRotation.toInt());
44  }
45  ArenaSceneElement *sceneElement = new ArenaSceneElement(elementInstance);
46  sceneElement->setPos(0, y);
47  sceneElement->setIsEditorSample(true);
48  addItem(sceneElement);
49 
50  int spacing = 10;
51  y += sceneElement->boundingRect().height() + spacing;
52  }
53 }
54 
56 {
57  QGraphicsSceneMouseEvent *_event = dynamic_cast<QGraphicsSceneMouseEvent*>(event);
58  if (event->type() == QEvent::GraphicsSceneMouseMove)
59  {
60  QGraphicsItem *item = itemAt(_event->scenePos(), QTransform());
61  if (item)
62  {
63  ArenaSceneElement *sceneElement = dynamic_cast<ArenaSceneElement*>(item);
64  Q_ASSERT(sceneElement);
65  emit elementHovered(sceneElement->element());
66  }
67  }
68 
69  return QGraphicsScene::event(event);
70 }
71 
72 //ArenaElementTypeScene::ArenaElementTypeScene()
73 //{
74 // int posY = 0;
75 // int spacing = 10;
76 // foreach (ArenaElementType* type, registry->elementTypes())
77 // {
78 // ArenaElement *element = type->createInstance();
79 // ArenaSceneElement *sceneElement = new ArenaSceneElement(element);
80 // sceneElement->setIsEditorSample(true);
81 // sceneElement->setPos(0, posY);
82 
83 // addItem(sceneElement);
84 
85 // posY += sceneElement->pixmap().height() + spacing;
86 // }
87 //}
void loadConfig(const QDomElement &arenaElements)
ArenaElementTypeScene(ArenaElementTypeRegistry *registry)
void elementHovered(ArenaElement *element)
Emitted when mouse hovers over element.
ArenaElementTypeRegistry * m_registry
void setIsEditorSample(bool isEditorSample)
ArenaElement * element() const
void setRotation(int rotation)
Sets the rotation in degrees.
ArenaElement * instantiateElement(const QString &typeName)
bool hasElement(const QString &typeName)


hector_nist_arena_designer
Author(s): Stefan Kohlbrecher , Johannes Simon
autogenerated on Fri Aug 21 2020 10:45:27