bool CMapWidget::event(QEvent *e) { if (e->type() == QEvent::ToolTip) { QHelpEvent *helpEvent = static_cast<QHelpEvent *>(e); QPoint point = helpEvent->pos(); CMapView *view = getView(); CMapLevel *level = view->getCurrentlyViewedLevel(); CMapElement *element = level ? level->findElementAt(point) : 0; QString s; if (element) { if (element->getElementType() == ROOM) { s = ((CMapRoom*)element)->getLabel(); } else if (element->getElementType() == ZONE) { s = ((CMapZone*)element)->getLabel(); } if (!s.trimmed().isEmpty()) QToolTip::showText (helpEvent->globalPos(), s, this); else QToolTip::hideText (); } } return QWidget::event(e); }
CMapRoom::~CMapRoom() { CMapLevel *l = getLevel(); CMapManager *manager = getManager(); CMapRoom *swapRoom = manager->findFirstRoom(this); if (l->getRoomList()->count() > 1) { CMapRoom *firstRoom = l->getRoomList()->first(); CMapRoom *lastRoom = l->getRoomList()->last(); swapRoom = (firstRoom == this) ? lastRoom : firstRoom; } if (current) manager->setCurrentRoom(swapRoom); if (login) manager->setLoginRoom(swapRoom); // Delete the paths for the room // First make a copy, as deleting rooms alters this list QList<CMapPath *> paths = pathList; foreach (CMapPath *path, paths) { path->setOpsitePath(0); // prevents a crash delete path; }
void CMapWidget::showContexMenu(QMouseEvent *e) { CMapLevel *level = viewWidget->getCurrentlyViewedLevel(); if (!level) return; CMapView *view = mapManager->getActiveView(); view->setSelectedPos(e->pos()); selectedPos = e->pos(); view->setSelectedElement(0); CMapElement *element = level->findElementAt (e->pos()); if (!element) { showOtherContextMenu(); return; } view->setSelectedElement(element); mapManager->unsetEditElement(); switch(element->getElementType()) { case ROOM : showRoomContextMenu(); break; case PATH : showPathContextMenu(); break; case TEXT : showTextContextMenu(); break; default : showOtherContextMenu(); break; } }
/** This method is used to load all of the paths * @param pathsNode The XML node to load the paths from * @return 0 , The file was loaded without problems * -2 , If the file is corrupt */ int CMapFileFilterXML::loadPaths(QDomElement *pathsNode) { QDomNode n = pathsNode->firstChild(); while (!n.isNull() ) { QDomElement e = n.toElement(); if (e.isNull() ) { kDebug() << "Unable to find path element "; return -2; } if (e.tagName()=="Path") { int srcLevelID = e.attribute("SrcLevel","-2").toInt(); int destLevelID = e.attribute("DestLevel","-2").toInt(); if (srcLevelID == -2 || destLevelID == -2) { kDebug() << "Unable to find path end points"; return -2; } CMapLevel *srcLevel = m_mapManager->findLevel(srcLevelID); CMapLevel *destLevel = m_mapManager->findLevel(destLevelID); int srcRoomID = e.attribute("SrcRoom","-2").toInt(); int destRoomID = e.attribute("DestRoom","-2").toInt(); if (destRoomID == -2 || srcRoomID == -2) { kDebug() << "Unable to find path end points"; return -2; } CMapRoom *srcRoom = srcLevel->findRoom(srcRoomID); CMapRoom *destRoom = destLevel->findRoom(destRoomID); if (srcRoom==NULL || destRoom==NULL) { kDebug() << "Src or Dest room is NULL while creating path"; return -2; } directionTyp srcDir = (directionTyp)e.attribute("SrcDir","0").toInt(); directionTyp destDir = (directionTyp)e.attribute("DestDir","0").toInt(); CMapPath *path = m_mapManager->createPath(srcRoom,srcDir,destRoom,destDir); path->loadQDomElement(&e); loadPluginPropertiesForElement(path,&e); } n = n.nextSibling(); } kDebug() << "loadPaths Here 4"; return 0; }
void CMapCmdSpeedwalkAdd::undo() { CMapLevel *level = m_plugin->getManager()->findLevel(m_levelID); if (!level) return; CMapRoom *room = level->findRoom(m_roomID); if (!room) return; m_plugin->delSpeedwalkRoomNoCmd(room); }
/** Used to draw all the elments */ void CMapWidget::drawElements(QPainter *p) { CMapLevel *level = viewWidget->getCurrentlyViewedLevel(); if (!level) return; CMapLevel *lowerLevel = level->getPrevLevel(); CMapLevel *upperLevel = level->getNextLevel(); // Mark all paths as undrawn foreach (CMapRoom *room, *level->getRoomList()) foreach (CMapPath *path, *room->getPathList()) path->setDone(false); if (lowerLevel && mapManager->getMapData()->showLowerLevel) { foreach (CMapRoom *room, *lowerLevel->getRoomList()) foreach (CMapPath *path, *room->getPathList()) path->setDone(false); } if (upperLevel && mapManager->getMapData()->showUpperLevel) { foreach (CMapRoom *room, *upperLevel->getRoomList()) foreach (CMapPath *path, *room->getPathList()) path->setDone(false); } // Draw the upper map elements if (lowerLevel && mapManager->getMapData()->showLowerLevel) foreach (CMapElement *element, lowerLevel->getAllElements()) element->lowerPaint(p, viewWidget->getCurrentlyViewedZone()); // Paint the map elements of the current map foreach (CMapElement *element, level->getAllElements()) if (element->getDoPaint()) element->paint(p, viewWidget->getCurrentlyViewedZone()); // Draw the upper map elements if (upperLevel && mapManager->getMapData()->showUpperLevel) { foreach (CMapElement *element, upperLevel->getAllElements()) element->higherPaint(p, viewWidget->getCurrentlyViewedZone()); } }
/** * This method is used to load the zone and all of it's sub elememnts * @param zoneNode The XML node to load the zone from * @param intoLevel The level to create the zone in * @return 0 , The file was loaded without problems * -2 , If the file is corrupt */ int CMapFileFilterXML::loadZone(QDomElement *zoneNode,CMapLevel *intoLevel) { int gridWidth = m_mapManager->getMapData()->gridSize.width(); int gridHeight = m_mapManager->getMapData()->gridSize.height(); CMapZone *zone = NULL; if (intoLevel == NULL) { zone = m_mapManager->createZone(QPoint(-1,-1),NULL,false); } else { int x = zoneNode->attribute("X",QString::number(-1)).toInt(); int y = zoneNode->attribute("Y",QString::number(-1)).toInt(); if (x==-1 || y==-1) { kDebug() << "Unable to find zone pos "; return -2; } zone = m_mapManager->createZone(QPoint (x * gridWidth,y * gridHeight),intoLevel,false); zone->loadQDomElement(zoneNode); loadPluginPropertiesForElement(zone,zoneNode); } QDomNode n = zoneNode->firstChild(); while (!n.isNull() ) { QDomElement e = n.toElement(); if (e.isNull() ) { kDebug() << "Unable to find element "; return -2; } if (e.tagName()=="Level") { CMapLevel *level = m_mapManager->createLevel(UP,zone); QString id = e.attribute("ID","-2"); if (id=="-2") { kDebug() << "Unable to find level ID"; return -2; } level->setLevelID(id.toInt()); QDomNode n2 = e.firstChild(); while (!n2.isNull() ) { QDomElement e2 = n2.toElement(); if (e2.isNull() ) { kDebug() << "Unable to find element "; return -2; } int x1 = e2.attribute("X",QString::number(-1)).toInt(); int y1 = e2.attribute("Y",QString::number(-1)).toInt(); if (x1==-1 || y1==-1) { kDebug() << "Unable to find pos "; return -2; } if (e2.tagName()=="Zone") { loadZone(&e2,level); } else if (e2.tagName()=="Room") { CMapRoom *room = m_mapManager->createRoom(QPoint(x1 * gridWidth,y1 * gridHeight),level); room->loadQDomElement(&e2); loadPluginPropertiesForElement(room,&e2); } else if (e2.tagName()=="Text") { CMapText *text = m_mapManager->createText(QPoint (x1,y1),level,""); text->loadQDomElement(&e2); loadPluginPropertiesForElement(text,&e2); } else { kDebug() << "Unknown Type : " << e2.tagName(); } n2 = n2.nextSibling(); } } n = n.nextSibling(); } return 0; }
/** This method is used to load all of the links * @param pathsNode The XML node to load the links from * @return 0 , The file was loaded without problems * -2 , If the file is corrupt */ int CMapFileFilterXML::loadLinks(QDomElement *pathsNode) { QDomNode n = pathsNode->firstChild(); while (!n.isNull() ) { QDomElement e = n.toElement(); if (e.isNull() ) { kDebug() << "Unable to find link element "; return -2; } if (e.tagName()=="Link") { int srcLevelID = e.attribute("SrcLevel","-2").toInt(); int destLevelID = e.attribute("DestLevel","-2").toInt(); if (srcLevelID == -2 || destLevelID == -2) { kDebug() << "Unable to find link end points"; return -2; } CMapLevel *srcLevel = m_mapManager->findLevel(srcLevelID); CMapLevel *destLevel = m_mapManager->findLevel(destLevelID); int textID = e.attribute("SrcID","-2").toInt(); int destID = e.attribute("DestID","-2").toInt(); int labelPos = e.attribute("LabelPos","0").toInt(); int srcTyp = e.attribute("SrcType","-2").toInt(); int destTyp = e.attribute("DestType","-2").toInt(); if (textID == -2 || destID == -2 || destTyp == -2 || srcTyp == -2) { kDebug() << "Unable to find link end points"; return -2; } if (srcTyp == (int)TEXT) { CMapText *text = srcLevel->findText(textID); if (destTyp==(int)ROOM) { CMapRoom *destElement = destLevel->findRoom(destID); destElement->setLabelPosition((CMapRoom::labelPosTyp)labelPos,text); } if (destTyp==(int)ZONE) { CMapZone *destElement = m_mapManager->findZone(destID); destElement->setLabelPosition((CMapZone::labelPosTyp)labelPos,text); } } } n = n.nextSibling(); } return 0; }