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