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 }