コード例 #1
0
ファイル: cmapwidget.cpp プロジェクト: adamfur/kmuddy
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);
}
コード例 #2
0
ファイル: cmaproom.cpp プロジェクト: adamfur/kmuddy
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;
  }
コード例 #3
0
ファイル: cmapwidget.cpp プロジェクト: adamfur/kmuddy
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;
  }
}
コード例 #4
0
/** 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;
}
コード例 #5
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);
}
コード例 #6
0
ファイル: cmapwidget.cpp プロジェクト: adamfur/kmuddy
/** 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());
  }
}
コード例 #7
0
/**
  * 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;
}
コード例 #8
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;
}