Go to the documentation of this file.00001 #include "arenaelementtypescene.h"
00002
00003 #include "../model/arenaelementtype.h"
00004 #include "../model/arenaelement.h"
00005 #include "../model/arenaelementtyperegistry.h"
00006 #include "arenasceneelement.h"
00007
00008 #include <QGraphicsPixmapItem>
00009 #include <QGraphicsSceneMouseEvent>
00010 #include <QEvent>
00011 #include <QMoveEvent>
00012 #include <QDebug>
00013
00014 ArenaElementTypeScene::ArenaElementTypeScene(ArenaElementTypeRegistry *registry)
00015 : m_registry(registry)
00016 {
00017 }
00018
00019 void ArenaElementTypeScene::loadConfig(const QDomElement &arenaElements)
00020 {
00021 QDomNodeList childNodes = arenaElements.childNodes();
00022 int y = 0;
00023 for (int i = 0; i < childNodes.count(); i++)
00024 {
00025 QDomElement element = childNodes.at(i).toElement();
00026 if (element.tagName() != "element")
00027 {
00028 if (element.tagName() != "")
00029 qWarning() << "Warning: Ignored element \"" << element.tagName() << "\"";
00030 continue;
00031 }
00032
00033 QString elementType = element.attribute("type");
00034 if (!m_registry->hasElement(elementType))
00035 {
00036 qDebug() << "[Rescue Arena Designer] Error in config.xml: Element of type" << elementType << "doesn't seem to exist in your hector_arena_elements package";
00037 continue;
00038 }
00039 ArenaElement *elementInstance = m_registry->instantiateElement(elementType);
00040 if (element.hasAttribute("rotation"))
00041 {
00042 QString elementRotation = element.attribute("rotation");
00043 elementInstance->setRotation(elementRotation.toInt());
00044 }
00045 ArenaSceneElement *sceneElement = new ArenaSceneElement(elementInstance);
00046 sceneElement->setPos(0, y);
00047 sceneElement->setIsEditorSample(true);
00048 addItem(sceneElement);
00049
00050 int spacing = 10;
00051 y += sceneElement->boundingRect().height() + spacing;
00052 }
00053 }
00054
00055 bool ArenaElementTypeScene::event(QEvent *event)
00056 {
00057 QGraphicsSceneMouseEvent *_event = dynamic_cast<QGraphicsSceneMouseEvent*>(event);
00058 if (event->type() == QEvent::GraphicsSceneMouseMove)
00059 {
00060 QGraphicsItem *item = itemAt(_event->scenePos());
00061 if (item)
00062 {
00063 ArenaSceneElement *sceneElement = dynamic_cast<ArenaSceneElement*>(item);
00064 Q_ASSERT(sceneElement);
00065 emit elementHovered(sceneElement->element());
00066 }
00067 }
00068
00069 return QGraphicsScene::event(event);
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087