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 }