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 "ThreePaneMapView.h" 21 22 #include "Model/PointFile.h" 23 #include "Renderer/Camera.h" 24 #include "View/CommandIds.h" 25 #include "View/CyclingMapView.h" 26 #include "View/Grid.h" 27 #include "View/MapDocument.h" 28 #include "View/MapView2D.h" 29 #include "View/MapView3D.h" 30 #include "View/SplitterWindow2.h" 31 32 #include <wx/persist.h> 33 #include <wx/sizer.h> 34 35 namespace TrenchBroom { 36 namespace View { ThreePaneMapView(wxWindow * parent,Logger * logger,MapDocumentWPtr document,MapViewToolBox & toolBox,Renderer::MapRenderer & mapRenderer,GLContextManager & contextManager)37 ThreePaneMapView::ThreePaneMapView(wxWindow* parent, Logger* logger, MapDocumentWPtr document, MapViewToolBox& toolBox, Renderer::MapRenderer& mapRenderer, GLContextManager& contextManager) : 38 MultiMapView(parent), 39 m_logger(logger), 40 m_document(document), 41 m_hSplitter(NULL), 42 m_vSplitter(NULL), 43 m_mapView3D(NULL), 44 m_mapViewXY(NULL), 45 m_mapViewZZ(NULL) { 46 createGui(toolBox, mapRenderer, contextManager); 47 } 48 createGui(MapViewToolBox & toolBox,Renderer::MapRenderer & mapRenderer,GLContextManager & contextManager)49 void ThreePaneMapView::createGui(MapViewToolBox& toolBox, Renderer::MapRenderer& mapRenderer, GLContextManager& contextManager) { 50 51 m_hSplitter = new SplitterWindow2(this); 52 m_hSplitter->setSashGravity(0.5); 53 m_hSplitter->SetName("3PaneMapViewHSplitter"); 54 55 m_vSplitter = new SplitterWindow2(m_hSplitter); 56 m_vSplitter->setSashGravity(0.5); 57 m_vSplitter->SetName("3PaneMapViewVSplitter"); 58 59 m_mapView3D = new MapView3D(m_hSplitter, m_logger, m_document, toolBox, mapRenderer, contextManager); 60 m_mapViewXY = new MapView2D(m_vSplitter, m_logger, m_document, toolBox, mapRenderer, contextManager, MapView2D::ViewPlane_XY); 61 m_mapViewZZ = new CyclingMapView(m_vSplitter, m_logger, m_document, toolBox, mapRenderer, contextManager, CyclingMapView::View_ZZ); 62 63 m_mapView3D->linkCamera(m_linkHelper); 64 m_mapViewXY->linkCamera(m_linkHelper); 65 m_mapViewZZ->linkCamera(m_linkHelper); 66 67 addMapView(m_mapView3D); 68 addMapView(m_mapViewXY); 69 addMapView(m_mapViewZZ); 70 71 m_vSplitter->splitHorizontally(m_mapViewXY, m_mapViewZZ, wxSize(100, 100), wxSize(100, 100)); 72 m_hSplitter->splitVertically(m_mapView3D, m_vSplitter, wxSize(100, 100), wxSize(100, 100)); 73 74 wxSizer* sizer = new wxBoxSizer(wxVERTICAL); 75 sizer->Add(m_hSplitter, 1, wxEXPAND); 76 77 SetSizer(sizer); 78 79 wxPersistenceManager::Get().RegisterAndRestore(m_hSplitter); 80 wxPersistenceManager::Get().RegisterAndRestore(m_vSplitter); 81 } 82 doMaximizeView(MapView * view)83 void ThreePaneMapView::doMaximizeView(MapView* view) { 84 assert(view == m_mapView3D || view == m_mapViewXY || view == m_mapViewZZ); 85 if (view == m_mapView3D) { 86 m_hSplitter->maximize(m_mapView3D); 87 } else if (view == m_mapViewXY) { 88 m_vSplitter->maximize(m_mapViewXY); 89 m_hSplitter->maximize(m_vSplitter); 90 } else if (view == m_mapViewZZ) { 91 m_vSplitter->maximize(m_mapViewZZ); 92 m_hSplitter->maximize(m_vSplitter); 93 } 94 } 95 doRestoreViews()96 void ThreePaneMapView::doRestoreViews() { 97 m_hSplitter->restore(); 98 m_vSplitter->restore(); 99 } 100 } 101 } 102