$search
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 //}