File indexing completed on 2023-10-01 04:14:06
0001 /*************************************************************************** 0002 cmapelementutil.cpp 0003 ------------------- 0004 begin : Thu Jan 10 2002 0005 copyright : (C) 2002 by Kmud Developer Team 0006 (C) 2014-2015 by Tomas Mecir <mecirt@gmail.com> 0007 email : kmud-devel@kmud.de 0008 ***************************************************************************/ 0009 0010 /*************************************************************************** 0011 * * 0012 * This program is free software; you can redistribute it and/or modify * 0013 * it under the terms of the GNU General Public License as published by * 0014 * the Free Software Foundation; either version 2 of the License, or * 0015 * (at your option) any later version. * 0016 * * 0017 ***************************************************************************/ 0018 0019 #include "cmapelementutil.h" 0020 0021 #include "cmapmanager.h" 0022 #include "cmaplevel.h" 0023 #include "cmaproom.h" 0024 #include "cmaptext.h" 0025 #include "cmapzone.h" 0026 #include "cmappath.h" 0027 #include "cmapelement.h" 0028 #include "cmapview.h" 0029 0030 #include "dialogs/dlgmappathproperties.h" 0031 0032 #include <kdebug.h> 0033 0034 CMapElementUtil::CMapElementUtil(CMapManager *mapManager) 0035 { 0036 manager = mapManager; 0037 } 0038 0039 CMapElementUtil::~CMapElementUtil() 0040 { 0041 } 0042 0043 void CMapElementUtil::deleteElement(KConfigGroup grp,bool delOpsite) 0044 { 0045 CMapElement *element = manager->findElement(grp); 0046 0047 if (element) 0048 { 0049 switch (element->getElementType()) 0050 { 0051 case PATH : deletePath((CMapPath *)element,delOpsite); break; 0052 case ZONE : delete ((CMapZone *)element); break; 0053 case TEXT : delete ((CMapText *)element); break; 0054 case ROOM : delete ((CMapRoom *)element); break; 0055 default: break; 0056 } 0057 } 0058 } 0059 0060 CMapElement *CMapElementUtil::createElement(KConfigGroup grp) 0061 { 0062 CMapElement *result = nullptr; 0063 QString text; 0064 0065 elementTyp type = (elementTyp)grp.readEntry("Type",(int)OTHER); 0066 0067 if (type!=OTHER) 0068 { 0069 if (type==PATH) 0070 { 0071 CMapLevel *srcLevel = manager->findLevel(grp.readEntry("SrcLevel",-1)); 0072 CMapLevel *destLevel = manager->findLevel(grp.readEntry("DestLevel",-1)); 0073 CMapRoom *srcRoom = srcLevel->findRoom(grp.readEntry("SrcRoom",-1)); 0074 CMapRoom *destRoom = destLevel->findRoom(grp.readEntry("DestRoom",-1)); 0075 0076 directionTyp srcDir = (directionTyp)grp.readEntry("SrcDir",0); 0077 directionTyp destDir = (directionTyp)grp.readEntry("DestDir",0); 0078 bool twoWay = grp.readEntry("PathTwoWay", manager->getMapData()->defaultPathTwoWay); 0079 0080 result = new CMapPath(manager,srcRoom,srcDir,destRoom,destDir,twoWay); 0081 0082 ((CMapPath *)result)->loadProperties(grp); 0083 } 0084 else 0085 { 0086 CMapLevel *level = nullptr; 0087 if (grp.hasKey("Level")) 0088 { 0089 level = manager->findLevel(grp.readEntry("Level",-1)); 0090 } 0091 0092 QPoint lowPos(-5,-5); 0093 lowPos.setX(grp.readEntry("X",-5)); 0094 lowPos.setY(grp.readEntry("Y",-5)); 0095 0096 switch (type) 0097 { 0098 case ROOM : result = createRoom(manager,lowPos,level); 0099 if (result) 0100 { 0101 if (!grp.hasKey("RoomID")) 0102 { 0103 grp.writeEntry("RoomID",((CMapRoom *)result)->getRoomID()); 0104 } 0105 else 0106 { 0107 ((CMapRoom *)result)->setRoomID(grp.readEntry("RoomID",-1)); 0108 } 0109 } 0110 break; 0111 case TEXT : text = grp.readEntry("Text",""); 0112 if (grp.hasKey("Font") && grp.hasKey("Color")) 0113 { 0114 QColor color=Qt::black; 0115 color=grp.readEntry("Color",color); 0116 QFont font = manager->getMapData()->defaultTextFont; 0117 font = grp.readEntry("Font",font); 0118 result = createText(manager, lowPos, level, text, font, color); 0119 } 0120 else 0121 { 0122 result = createText(manager, lowPos, level, text); 0123 } 0124 if (!grp.hasKey("TextID")) 0125 grp.writeEntry("TextID",((CMapText *)result)->getTextID()); 0126 else 0127 ((CMapText *)result)->setTextID(grp.readEntry("TextID",-1)); 0128 break; 0129 default : ; 0130 } 0131 0132 // FIXME_jp: This should problay load the elements propties into the new element. 0133 // Calls to loadProperties else were in the code will not then be need after 0134 // creating the new element 0135 } 0136 } 0137 0138 return result; 0139 } 0140 0141 /** Used to create a new room */ 0142 CMapRoom *CMapElementUtil::createRoom(CMapManager *manager, QPoint pos, CMapLevel *level) 0143 { 0144 if ((!level) || level->findElementAt(pos)) 0145 return nullptr; 0146 0147 QRect rect(pos,manager->getMapData()->gridSize); 0148 0149 CMapRoom *room = new CMapRoom(manager,rect,level); 0150 0151 return room; 0152 } 0153 0154 CMapText *CMapElementUtil::createText(CMapManager *manager, QPoint pos, CMapLevel *level, QString str) 0155 { 0156 return new CMapText(str, manager, pos, level); 0157 } 0158 0159 CMapText *CMapElementUtil::createText(CMapManager *manager, QPoint pos, CMapLevel *level, QString str, QFont f, QColor col) 0160 { 0161 return new CMapText(str, f, col, manager, pos, level); 0162 } 0163 0164 /** Delete a path map element */ 0165 void CMapElementUtil::deletePath(CMapPath *path,bool delOpsite) 0166 { 0167 if (!delOpsite) path->setOpsitePath(nullptr); 0168 delete path; 0169 }