File indexing completed on 2024-05-12 04:03:59
0001 /*************************************************************************** 0002 cmapcmdmoveelements.cpp 0003 ------------------- 0004 begin : Mon Jun 17 2002 0005 copyright : (C) 2002 by Kmud Developer Team 0006 email : kmud-devel@kmud.de 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * This program is free software; you can redistribute it and/or modify * 0012 * it under the terms of the GNU General Public License as published by * 0013 * the Free Software Foundation; either version 2 of the License, or * 0014 * (at your option) any later version. * 0015 * * 0016 ***************************************************************************/ 0017 0018 #include "cmapcmdmoveelements.h" 0019 0020 #include <QDebug> 0021 #include <KLocalizedString> 0022 0023 #include "../../cmapmanager.h" 0024 #include "../../cmapelement.h" 0025 #include "../../cmaptext.h" 0026 #include "../../cmaplevel.h" 0027 0028 CMapCmdMoveElements::CMapCmdMoveElements(CMapManager *mapManager,QPoint offset) : CMapCommand(i18n("Move Elements")) 0029 { 0030 m_mapManager = mapManager; 0031 m_offset = offset; 0032 } 0033 0034 CMapCmdMoveElements::~CMapCmdMoveElements() 0035 { 0036 } 0037 0038 void CMapCmdMoveElements::addElement(CMapElement *element) 0039 { 0040 qDebug() << "CMapCmdMoveElements::addElement 1"; 0041 elemProp properties; 0042 properties.pos = QPoint(element->getX(),element->getY()); 0043 qDebug() << "CMapCmdMoveElements::addElement 1.0 : " << element->getX(); 0044 CMapLevel *level = element->getLevel(); 0045 if (!level) return; 0046 properties.level = level->getLevelID(); 0047 0048 qDebug() << "CMapCmdMoveElements::addElement 1.1"; 0049 if (element->getElementType()==TEXT) 0050 { 0051 qDebug() << "CMapCmdMoveElements::addElement 1.2"; 0052 CMapElement *lnkElement = ((CMapText *) element)->getLinkElement(); 0053 if (lnkElement!=nullptr) 0054 { 0055 if (lnkElement->getElementType()==ROOM) 0056 { 0057 properties.labelPos = (int)((CMapRoom *)lnkElement)->getLabelPosition(); 0058 } 0059 0060 if (lnkElement->getElementType()==ZONE) 0061 { 0062 properties.labelPos = (int)((CMapZone *)lnkElement)->getLabelPosition(); 0063 } 0064 } 0065 } 0066 else 0067 { 0068 qDebug() << "CMapCmdMoveElements::addElement 2"; 0069 properties.labelPos = 0; 0070 } 0071 0072 qDebug() << "CMapCmdMoveElements::addElement 3"; 0073 elements.push_back(properties); 0074 qDebug() << "CMapCmdMoveElements::addElement 4"; 0075 } 0076 0077 void CMapCmdMoveElements::redo() 0078 { 0079 CMapLevel *level = nullptr; 0080 for( elemProp &prop : elements ) 0081 { 0082 level = m_mapManager->findLevel(prop.level); 0083 CMapElement *elm = level->findElementAt(prop.pos); 0084 if (!elm) continue; 0085 elm->moveBy(m_offset); 0086 0087 if (elm->getElementType()==TEXT) 0088 { 0089 CMapText *text = (CMapText *)elm; 0090 if (text->getLinkElement()) 0091 { 0092 if (!text->getLinkElement()->getSelected()) 0093 { 0094 if (text->getLinkElement()->getElementType()==ROOM) 0095 { 0096 CMapRoom *room = (CMapRoom *)text->getLinkElement(); 0097 if (room->getLabelPosition()!=CMapRoom::HIDE) 0098 { 0099 room->setLabelPosition(CMapRoom::CUSTOM); 0100 } 0101 } 0102 if (text->getLinkElement()->getElementType()==ZONE) 0103 { 0104 CMapZone *zone = (CMapZone *)text->getLinkElement(); 0105 if (zone->getLabelPosition()!=CMapZone::HIDE) 0106 { 0107 zone->setLabelPosition(CMapZone::CUSTOM); 0108 } 0109 } 0110 } 0111 } 0112 } 0113 } 0114 0115 if (level) 0116 m_mapManager->levelChanged(level); 0117 } 0118 0119 void CMapCmdMoveElements::undo() 0120 { 0121 CMapLevel *level = nullptr; 0122 for( elemProp &prop : elements ) 0123 { 0124 level = m_mapManager->findLevel(prop.level); 0125 CMapElement *elm = level->findElementAt(prop.pos + m_offset); 0126 if (elm) 0127 elm->moveBy(-m_offset); 0128 } 0129 0130 if (level) 0131 m_mapManager->levelChanged(level); 0132 }