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 "ResizeBrushesCommand.h"
21 
22 #include "View/MapDocumentCommandFacade.h"
23 
24 #include <cassert>
25 
26 namespace TrenchBroom {
27     namespace View {
28         const Command::CommandType ResizeBrushesCommand::Type = Command::freeType();
29 
resize(const Model::BrushFaceList & faces,const Vec3 & delta)30         ResizeBrushesCommand::Ptr ResizeBrushesCommand::resize(const Model::BrushFaceList& faces, const Vec3& delta) {
31             return Ptr(new ResizeBrushesCommand(faces, delta));
32         }
33 
ResizeBrushesCommand(const Model::BrushFaceList & faces,const Vec3 & delta)34         ResizeBrushesCommand::ResizeBrushesCommand(const Model::BrushFaceList& faces, const Vec3& delta) :
35         DocumentCommand(Type, "Resize Brushes"),
36         m_faces(faces),
37         m_delta(delta) {
38             assert(!m_faces.empty());
39         }
40 
doPerformDo(MapDocumentCommandFacade * document)41         bool ResizeBrushesCommand::doPerformDo(MapDocumentCommandFacade* document) {
42             return document->performResizeBrushes(m_faces, m_delta);
43         }
44 
doPerformUndo(MapDocumentCommandFacade * document)45         bool ResizeBrushesCommand::doPerformUndo(MapDocumentCommandFacade* document) {
46             return document->performResizeBrushes(m_faces, -m_delta);
47         }
48 
doIsRepeatable(MapDocumentCommandFacade * document) const49         bool ResizeBrushesCommand::doIsRepeatable(MapDocumentCommandFacade* document) const {
50             return false;
51         }
52 
doCollateWith(UndoableCommand::Ptr command)53         bool ResizeBrushesCommand::doCollateWith(UndoableCommand::Ptr command) {
54             ResizeBrushesCommand* other = static_cast<ResizeBrushesCommand*>(command.get());
55             if (m_faces != other->m_faces)
56                 return false;
57 
58             m_delta += other->m_delta;
59             return true;
60         }
61     }
62 }
63