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 "TwoPaneMapView.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/MapView3D.h" 29 #include "View/SplitterWindow2.h" 30 31 #include <wx/persist.h> 32 #include <wx/sizer.h> 33 34 namespace TrenchBroom { 35 namespace View { TwoPaneMapView(wxWindow * parent,Logger * logger,MapDocumentWPtr document,MapViewToolBox & toolBox,Renderer::MapRenderer & mapRenderer,GLContextManager & contextManager)36 TwoPaneMapView::TwoPaneMapView(wxWindow* parent, Logger* logger, MapDocumentWPtr document, MapViewToolBox& toolBox, Renderer::MapRenderer& mapRenderer, GLContextManager& contextManager) : 37 MultiMapView(parent), 38 m_logger(logger), 39 m_document(document), 40 m_splitter(NULL), 41 m_mapView3D(NULL), 42 m_mapView2D(NULL) { 43 createGui(toolBox, mapRenderer, contextManager); 44 } 45 createGui(MapViewToolBox & toolBox,Renderer::MapRenderer & mapRenderer,GLContextManager & contextManager)46 void TwoPaneMapView::createGui(MapViewToolBox& toolBox, Renderer::MapRenderer& mapRenderer, GLContextManager& contextManager) { 47 48 m_splitter = new SplitterWindow2(this); 49 m_splitter->setSashGravity(0.5); 50 m_splitter->SetName("2PaneMapViewHSplitter"); 51 52 m_mapView3D = new MapView3D(m_splitter, m_logger, m_document, toolBox, mapRenderer, contextManager); 53 m_mapView2D = new CyclingMapView(m_splitter, m_logger, m_document, toolBox, mapRenderer, contextManager, CyclingMapView::View_2D); 54 55 m_mapView3D->linkCamera(m_linkHelper); 56 m_mapView2D->linkCamera(m_linkHelper); 57 58 addMapView(m_mapView3D); 59 addMapView(m_mapView2D); 60 61 m_splitter->splitVertically(m_mapView3D, m_mapView2D, wxSize(100, 100), wxSize(100, 100)); 62 63 wxSizer* sizer = new wxBoxSizer(wxVERTICAL); 64 sizer->Add(m_splitter, 1, wxEXPAND); 65 66 SetSizer(sizer); 67 68 wxPersistenceManager::Get().RegisterAndRestore(m_splitter); 69 } 70 doMaximizeView(MapView * view)71 void TwoPaneMapView::doMaximizeView(MapView* view) { 72 assert(view == m_mapView2D || view == m_mapView3D); 73 if (view == m_mapView2D) 74 m_splitter->maximize(m_mapView2D); 75 else 76 m_splitter->maximize(m_mapView3D); 77 } 78 doRestoreViews()79 void TwoPaneMapView::doRestoreViews() { 80 m_splitter->restore(); 81 } 82 } 83 } 84