1 /* 2 Copyright (C) 2010-2014 Kristian Duske 3 4 This file is part of TrenchBroom. 5 6 TrenchBroom is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 TrenchBroom is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with TrenchBroom. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #include "CreateEntityToolController.h" 21 22 #include "View/CreateEntityTool.h" 23 #include "View/InputState.h" 24 25 #include <cassert> 26 27 namespace TrenchBroom { 28 namespace View { CreateEntityToolController(CreateEntityTool * tool)29 CreateEntityToolController::CreateEntityToolController(CreateEntityTool* tool) : 30 m_tool(tool) { 31 assert(m_tool != NULL); 32 } 33 ~CreateEntityToolController()34 CreateEntityToolController::~CreateEntityToolController() {} 35 doGetTool()36 Tool* CreateEntityToolController::doGetTool() { 37 return m_tool; 38 } 39 doDragEnter(const InputState & inputState,const String & payload)40 bool CreateEntityToolController::doDragEnter(const InputState& inputState, const String& payload) { 41 const StringList parts = StringUtils::split(payload, ':'); 42 if (parts.size() != 2) 43 return false; 44 if (parts[0] != "entity") 45 return false; 46 47 if (m_tool->createEntity(parts[1])) { 48 doUpdateEntityPosition(inputState); 49 return true; 50 } 51 return false; 52 } 53 doDragMove(const InputState & inputState)54 bool CreateEntityToolController::doDragMove(const InputState& inputState) { 55 doUpdateEntityPosition(inputState); 56 return true; 57 } 58 doDragLeave(const InputState & inputState)59 void CreateEntityToolController::doDragLeave(const InputState& inputState) { 60 m_tool->removeEntity(); 61 } 62 doDragDrop(const InputState & inputState)63 bool CreateEntityToolController::doDragDrop(const InputState& inputState) { 64 m_tool->commitEntity(); 65 return true; 66 } 67 doCancel()68 bool CreateEntityToolController::doCancel() { 69 return false; 70 } 71 CreateEntityToolController2D(CreateEntityTool * tool)72 CreateEntityToolController2D::CreateEntityToolController2D(CreateEntityTool* tool) : 73 CreateEntityToolController(tool) {} 74 doUpdateEntityPosition(const InputState & inputState)75 void CreateEntityToolController2D::doUpdateEntityPosition(const InputState& inputState) { 76 m_tool->updateEntityPosition2D(inputState.pickRay()); 77 } 78 CreateEntityToolController3D(CreateEntityTool * tool)79 CreateEntityToolController3D::CreateEntityToolController3D(CreateEntityTool* tool) : 80 CreateEntityToolController(tool) {} 81 doUpdateEntityPosition(const InputState & inputState)82 void CreateEntityToolController3D::doUpdateEntityPosition(const InputState& inputState) { 83 m_tool->updateEntityPosition3D(inputState.pickRay(), inputState.pickResult()); 84 } 85 } 86 } 87