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