arenaelementtypescene.cpp
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 //ArenaElementTypeScene::ArenaElementTypeScene()
00073 //{
00074 //    int posY = 0;
00075 //    int spacing = 10;
00076 //    foreach (ArenaElementType* type, registry->elementTypes())
00077 //    {
00078 //        ArenaElement *element = type->createInstance();
00079 //        ArenaSceneElement *sceneElement = new ArenaSceneElement(element);
00080 //        sceneElement->setIsEditorSample(true);
00081 //        sceneElement->setPos(0, posY);
00082 
00083 //        addItem(sceneElement);
00084 
00085 //        posY += sceneElement->pixmap().height() + spacing;
00086 //    }
00087 //}


hector_nist_arena_designer
Author(s): Johannes Simon, Stefan Kohlbrecher
autogenerated on Mon Oct 6 2014 00:26:31