File indexing completed on 2024-05-19 05:40:35
0001 /*************************************************************************** 0002 * Copyright (C) 2020 by Renaud Guezennec * 0003 * http://www.rolisteam.org/contact * 0004 * * 0005 * This software is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include "controller/item_controllers/vmapitemfactory.h" 0021 0022 #include "controller/item_controllers/characteritemcontroller.h" 0023 #include "controller/item_controllers/ellipsecontroller.h" 0024 #include "controller/item_controllers/imageitemcontroller.h" 0025 #include "controller/item_controllers/linecontroller.h" 0026 #include "controller/item_controllers/pathcontroller.h" 0027 #include "controller/item_controllers/rectcontroller.h" 0028 #include "controller/item_controllers/textcontroller.h" 0029 #include "controller/view_controller/vectorialmapcontroller.h" 0030 0031 #include "network/networkmessagereader.h" 0032 #include "worker/messagehelper.h" 0033 0034 vmap::VisualItemController* vmap::VmapItemFactory::createVMapItem(VectorialMapController* mapCtrl, 0035 Core::SelectableTool tool, 0036 const std::map<QString, QVariant>& param) 0037 { 0038 vmap::VisualItemController* ctrl= nullptr; 0039 switch(tool) 0040 { 0041 case Core::SelectableTool::LINE: 0042 ctrl= new LineController(param, mapCtrl); 0043 break; 0044 case Core::SelectableTool::FILLEDELLIPSE: 0045 case Core::SelectableTool::EMPTYELLIPSE: 0046 ctrl= new vmap::EllipseController(param, mapCtrl); 0047 break; 0048 case Core::SelectableTool::EMPTYRECT: 0049 case Core::SelectableTool::FILLRECT: 0050 ctrl= new vmap::RectController(param, mapCtrl); 0051 break; 0052 case Core::SelectableTool::TEXT: 0053 case Core::SelectableTool::TEXTBORDER: 0054 ctrl= new vmap::TextController(param, mapCtrl); 0055 break; 0056 case Core::SelectableTool::NonPlayableCharacter: 0057 case Core::SelectableTool::PlayableCharacter: 0058 ctrl= new vmap::CharacterItemController(param, mapCtrl); 0059 break; 0060 case Core::SelectableTool::IMAGE: 0061 ctrl= new vmap::ImageItemController(param, mapCtrl); 0062 break; 0063 case Core::SelectableTool::PEN: 0064 case Core::SelectableTool::PATH: 0065 ctrl= new vmap::PathController(param, mapCtrl); 0066 break; 0067 case Core::SelectableTool::HANDLER: 0068 case Core::SelectableTool::RULE: 0069 case Core::SelectableTool::ANCHOR: 0070 case Core::SelectableTool::PIPETTE: 0071 case Core::SelectableTool::BUCKET: 0072 case Core::SelectableTool::HIGHLIGHTER: 0073 break; 0074 } 0075 if(ctrl == nullptr) 0076 { 0077 qDebug() << "it was null"; 0078 auto it= param.find(Core::vmapkeys::KEY_ITEMTYPE); 0079 if(it != param.end()) 0080 { 0081 auto type= it->second.value<vmap::VisualItemController::ItemType>(); 0082 switch(type) 0083 { 0084 case vmap::VisualItemController::LINE: 0085 ctrl= new LineController(param, mapCtrl); 0086 break; 0087 case vmap::VisualItemController::ELLIPSE: 0088 ctrl= new vmap::EllipseController(param, mapCtrl); 0089 break; 0090 case vmap::VisualItemController::RECT: 0091 ctrl= new vmap::RectController(param, mapCtrl); 0092 break; 0093 case vmap::VisualItemController::TEXT: 0094 ctrl= new vmap::TextController(param, mapCtrl); 0095 break; 0096 case vmap::VisualItemController::CHARACTER: 0097 ctrl= new vmap::CharacterItemController(param, mapCtrl); 0098 break; 0099 case vmap::VisualItemController::IMAGE: 0100 ctrl= new vmap::ImageItemController(param, mapCtrl); 0101 break; 0102 case vmap::VisualItemController::PATH: 0103 ctrl= new vmap::PathController(param, mapCtrl); 0104 break; 0105 case vmap::VisualItemController::HIGHLIGHTER: 0106 case vmap::VisualItemController::RULE: 0107 case vmap::VisualItemController::GRID: 0108 case vmap::VisualItemController::ANCHOR: 0109 case vmap::VisualItemController::SIGHT: 0110 break; 0111 } 0112 } 0113 } 0114 Q_ASSERT(ctrl != nullptr); 0115 return ctrl; 0116 } 0117 0118 vmap::VisualItemController* vmap::VmapItemFactory::createRemoteVMapItem(VectorialMapController* mapCtrl, 0119 NetworkMessageReader* msg) 0120 { 0121 auto restore= msg->pos(); 0122 auto itemType= static_cast<vmap::VisualItemController::ItemType>(msg->uint8()); 0123 msg->resetToPos(restore); 0124 0125 vmap::VisualItemController* ctrl= nullptr; 0126 switch(itemType) 0127 { 0128 case vmap::VisualItemController::LINE: 0129 { 0130 auto param= MessageHelper::readLine(msg); 0131 ctrl= new LineController(param, mapCtrl); 0132 } 0133 break; 0134 case vmap::VisualItemController::ELLIPSE: 0135 { 0136 auto param= MessageHelper::readEllipse(msg); 0137 ctrl= new vmap::EllipseController(param, mapCtrl); 0138 } 0139 break; 0140 case vmap::VisualItemController::RECT: 0141 { 0142 auto param= MessageHelper::readRect(msg); 0143 ctrl= new vmap::RectController(param, mapCtrl); 0144 } 0145 break; 0146 case vmap::VisualItemController::TEXT: 0147 { 0148 auto param= MessageHelper::readText(msg); 0149 ctrl= new vmap::TextController(param, mapCtrl); 0150 } 0151 break; 0152 case vmap::VisualItemController::CHARACTER: 0153 { 0154 auto param= MessageHelper::readCharacter(msg); 0155 ctrl= new vmap::CharacterItemController(param, mapCtrl); 0156 } 0157 break; 0158 case vmap::VisualItemController::IMAGE: 0159 { 0160 auto param= MessageHelper::readImage(msg); 0161 ctrl= new vmap::ImageItemController(param, mapCtrl); 0162 } 0163 break; 0164 case vmap::VisualItemController::PATH: 0165 { 0166 auto param= MessageHelper::readPath(msg); 0167 ctrl= new vmap::PathController(param, mapCtrl); 0168 } 0169 break; 0170 default: 0171 break; 0172 } 0173 Q_ASSERT(ctrl != nullptr); 0174 ctrl->setRemote(true); 0175 return ctrl; 0176 }