Fix message references for inches and feet
[survex.git] / src / mainfrm.h
blobc4d3d1b66c51c4044b2b41113b3b8986e28b1896
1 //
2 // mainfrm.h
3 //
4 // Main frame handling for Aven.
5 //
6 // Copyright (C) 2000-2003,2005 Mark R. Shinwell
7 // Copyright (C) 2001-2024 Olly Betts
8 //
9 // This program is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 2 of the License, or
12 // (at your option) any later version.
14 // This program is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #ifndef mainfrm_h
25 #define mainfrm_h
27 #include "wx.h"
28 #include <wx/docview.h> // for m_FileHistory
29 #include <wx/listctrl.h>
30 #include <wx/notebook.h>
31 #include <wx/print.h>
32 #include <wx/printdlg.h>
34 #include "aventreectrl.h"
35 #include "gfxcore.h"
36 #include "guicontrol.h"
37 #include "img_hosted.h"
38 #include "labelinfo.h"
39 #include "message.h"
40 #include "model.h"
41 #include "vector3.h"
42 #include "aven.h"
43 //#include "prefsdlg.h"
45 #include <list>
46 #include <vector>
48 using namespace std;
50 #include <math.h>
51 #include <time.h>
53 #ifdef __WXMAC__
54 // Currently on macOS, we force use of a generic toolbar, which needs to be put
55 // in a sizer.
56 # define USING_GENERIC_TOOLBAR
57 #endif
59 #define MARK_FIRST 1
60 #define MARK_NEXT 2
61 #define MARK_PREV 3
63 enum {
64 menu_FILE_LOG = 1000,
65 menu_FILE_OPEN_TERRAIN,
66 menu_FILE_OVERLAY_GEODATA,
67 menu_FILE_PAGE_SETUP,
68 menu_FILE_SCREENSHOT,
69 menu_FILE_EXPORT,
70 menu_FILE_EXTEND,
71 menu_PRES_NEW,
72 menu_PRES_OPEN,
73 menu_PRES_SAVE,
74 menu_PRES_SAVE_AS,
75 menu_PRES_MARK,
76 menu_PRES_EXPORT_MOVIE,
77 menu_PRES_FREWIND,
78 menu_PRES_REWIND,
79 menu_PRES_REVERSE,
80 menu_PRES_PLAY,
81 menu_PRES_FF,
82 menu_PRES_FFF,
83 menu_PRES_PAUSE,
84 menu_ROTATION_START,
85 menu_ROTATION_STOP,
86 menu_ROTATION_TOGGLE,
87 menu_ROTATION_REVERSE,
88 menu_ORIENT_MOVE_NORTH,
89 menu_ORIENT_MOVE_EAST,
90 menu_ORIENT_MOVE_SOUTH,
91 menu_ORIENT_MOVE_WEST,
92 menu_ORIENT_PLAN,
93 menu_ORIENT_ELEVATION,
94 menu_ORIENT_DEFAULTS,
95 menu_VIEW_SHOW_LEGS,
96 menu_VIEW_SPLAYS,
97 menu_SPLAYS_HIDE,
98 menu_SPLAYS_SHOW_DASHED,
99 menu_SPLAYS_SHOW_FADED,
100 menu_SPLAYS_SHOW_NORMAL,
101 menu_VIEW_DUPES,
102 menu_DUPES_HIDE,
103 menu_DUPES_SHOW_DASHED,
104 menu_DUPES_SHOW_FADED,
105 menu_DUPES_SHOW_NORMAL,
106 menu_VIEW_SHOW_CROSSES,
107 menu_VIEW_SHOW_NAMES,
108 menu_VIEW_SHOW_SURFACE,
109 menu_VIEW_SHOW_OVERLAPPING_NAMES,
110 menu_VIEW_SHOW_ENTRANCES,
111 menu_VIEW_SHOW_FIXED_PTS,
112 menu_VIEW_SHOW_EXPORTED_PTS,
113 menu_VIEW_STATUS_BAR,
114 menu_VIEW_GRID,
115 menu_VIEW_BOUNDING_BOX,
116 menu_VIEW_TERRAIN,
117 menu_VIEW_SHOW_TUBES,
118 menu_VIEW_PERSPECTIVE,
119 menu_VIEW_SMOOTH_SHADING,
120 menu_VIEW_TEXTURED,
121 menu_VIEW_FOG,
122 menu_VIEW_SMOOTH_LINES,
123 menu_VIEW_FULLSCREEN,
124 menu_VIEW_COLOUR_BY,
125 menu_COLOUR_BY_DEPTH,
126 menu_COLOUR_BY_DATE,
127 menu_COLOUR_BY_ERROR,
128 menu_COLOUR_BY_H_ERROR,
129 menu_COLOUR_BY_V_ERROR,
130 menu_COLOUR_BY_GRADIENT,
131 menu_COLOUR_BY_LENGTH,
132 menu_COLOUR_BY_SURVEY,
133 menu_COLOUR_BY_STYLE,
134 menu_IND_COMPASS,
135 menu_IND_CLINO,
136 menu_IND_COLOUR_KEY,
137 menu_IND_SCALE_BAR,
138 menu_CTL_INDICATORS,
139 menu_CTL_SIDE_PANEL,
140 menu_CTL_METRIC,
141 menu_CTL_DEGREES,
142 menu_CTL_PERCENT,
143 menu_CTL_REVERSE,
144 menu_CTL_CANCEL_DIST_LINE,
145 menu_SURVEY_RESTRICT,
146 menu_SURVEY_SHOW_ALL,
147 menu_SURVEY_HIDE,
148 menu_SURVEY_SHOW,
149 menu_SURVEY_HIDE_SIBLINGS,
150 textctrl_FIND,
151 button_HIDE,
152 listctrl_PRES
155 class AvenPresList;
157 class MainFrm : public wxFrame, public Model {
158 wxFileHistory m_history;
159 int m_SashPosition = -1;
160 bool was_showing_sidepanel_before_fullscreen;
161 GfxCore* m_Gfx = nullptr;
162 wxWindow* m_Log = nullptr;
163 GUIControl* m_Control;
164 wxSplitterWindow* m_Splitter;
165 AvenTreeCtrl* m_Tree;
166 wxTextCtrl* m_FindBox;
167 // wxCheckBox* m_RegexpCheckBox;
168 wxNotebook* m_Notebook;
169 AvenPresList* m_PresList;
170 wxString m_File;
171 // Processed version of data - same as m_File if m_File is processed data.
172 wxString m_FileProcessed;
173 wxString m_Survey;
175 // Strings for status bar reporting of distances.
176 wxString here_text, coords_text, dist_text, distfree_text;
178 int m_NumHighlighted = 0;
179 bool pending_find = false;
181 bool fullscreen_showing_menus = false;
183 #ifdef __WXMAC__
184 bool using_macos_full_screen_view = false;
185 #endif
187 #ifdef PREFDLG
188 PrefsDlg* m_PrefsDlg = nullptr;
189 #endif
191 bool ProcessSVXFile(const wxString & file);
192 // void FixLRUD(traverse & centreline);
194 void CreateMenuBar();
195 void MakeToolBar();
196 void CreateSidePanel();
198 void UpdateStatusBar();
200 #ifdef USING_GENERIC_TOOLBAR
201 wxToolBar * GetToolBar() const {
202 wxSizer * sizer = GetSizer();
203 if (!sizer) return NULL;
204 return (wxToolBar*)sizer->GetItem(size_t(0))->GetWindow();
206 #endif
208 public:
209 MainFrm(const wxString& title, const wxPoint& pos, const wxSize& size);
211 // public for CavernLog.
212 bool LoadData(const wxString& file, const wxString& prefix);
213 void AddToFileHistory(const wxString & file);
215 void InitialiseAfterLoad(const wxString & file, const wxString & prefix);
216 void OnShowLog(wxCommandEvent& event);
218 void OnMRUFile(wxCommandEvent& event);
219 void OpenFile(const wxString& file, const wxString& survey = wxString());
221 void OnPresNewUpdate(wxUpdateUIEvent& event);
222 void OnPresOpenUpdate(wxUpdateUIEvent& event);
223 void OnPresSaveUpdate(wxUpdateUIEvent& event);
224 void OnPresSaveAsUpdate(wxUpdateUIEvent& event);
225 void OnPresMarkUpdate(wxUpdateUIEvent& event);
226 void OnPresFRewindUpdate(wxUpdateUIEvent& event);
227 void OnPresRewindUpdate(wxUpdateUIEvent& event);
228 void OnPresReverseUpdate(wxUpdateUIEvent& event);
229 void OnPresPlayUpdate(wxUpdateUIEvent& event);
230 void OnPresFFUpdate(wxUpdateUIEvent& event);
231 void OnPresFFFUpdate(wxUpdateUIEvent& event);
232 void OnPresPauseUpdate(wxUpdateUIEvent& event);
233 void OnPresStopUpdate(wxUpdateUIEvent& event);
234 void OnPresExportMovieUpdate(wxUpdateUIEvent& event);
235 void OnOpenTerrainUpdate(wxUpdateUIEvent& event);
236 void OnOverlayGeodataUpdate(wxUpdateUIEvent& event);
238 void DoFind();
239 void OnFind(wxCommandEvent& event);
240 void OnIdle(wxIdleEvent& event);
241 void OnGotoFound(wxCommandEvent& event);
242 void OnHide(wxCommandEvent& event);
243 void OnHideUpdate(wxUpdateUIEvent& ui);
245 void OnOpen(wxCommandEvent& event);
246 void OnOpenTerrain(wxCommandEvent&);
247 void OnOverlayGeodata(wxCommandEvent&);
248 void HideLog(wxWindow * log_window);
249 void OnScreenshot(wxCommandEvent& event);
250 void OnScreenshotUpdate(wxUpdateUIEvent& event);
251 void OnFilePreferences(wxCommandEvent& event);
252 void OnPrint(wxCommandEvent& event);
253 void PrintAndExit();
254 void OnPageSetup(wxCommandEvent& event);
255 void OnPresNew(wxCommandEvent& event);
256 void OnPresOpen(wxCommandEvent& event);
257 void OnPresSave(wxCommandEvent& event);
258 void OnPresSaveAs(wxCommandEvent& event);
259 void OnPresMark(wxCommandEvent& event);
260 void OnPresFRewind(wxCommandEvent& event);
261 void OnPresRewind(wxCommandEvent& event);
262 void OnPresReverse(wxCommandEvent& event);
263 void OnPresPlay(wxCommandEvent& event);
264 void OnPresFF(wxCommandEvent& event);
265 void OnPresFFF(wxCommandEvent& event);
266 void OnPresPause(wxCommandEvent& event);
267 void OnPresStop(wxCommandEvent& event);
268 void OnPresExportMovie(wxCommandEvent& event);
269 void OnExport(wxCommandEvent& event);
270 void OnExtend(wxCommandEvent& event);
271 void OnQuit(wxCommandEvent& event);
273 void OnAbout(wxCommandEvent& event);
274 void OnClose(wxCloseEvent&);
276 void OnSetFocus(wxFocusEvent &) { if (m_Gfx) m_Gfx->SetFocus(); }
278 void OnKeyPress(wxKeyEvent &e) {
279 if (m_Gfx) {
280 m_Gfx->SetFocus();
281 m_Gfx->OnKeyPress(e);
285 void OnShowLogUpdate(wxUpdateUIEvent &ui) {
286 ui.Enable(m_Log != NULL || (m_Splitter->GetWindow1() != m_Gfx && m_Splitter->GetWindow2() != m_Gfx));
287 ui.Check(m_Log == NULL);
289 void OnPrintUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); }
290 void OnExportUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); }
291 void OnExtendUpdate(wxUpdateUIEvent &ui) {
292 ui.Enable(!IsExtendedElevation());
295 // temporary bodges until event handling problem is sorted out:
296 void OnDefaultsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDefaultsUpdate(event); }
297 void OnPlanUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnPlanUpdate(event); }
298 void OnElevationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnElevationUpdate(event); }
299 void OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDisplayOverlappingNamesUpdate(event); }
300 void OnColourByUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByUpdate(event); }
301 void OnColourByDepthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDepthUpdate(event); }
302 void OnColourByDateUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDateUpdate(event); }
303 void OnColourByErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByErrorUpdate(event); }
304 void OnColourByHErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByHErrorUpdate(event); }
305 void OnColourByVErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByVErrorUpdate(event); }
306 void OnColourByGradientUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByGradientUpdate(event); }
307 void OnColourByLengthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByLengthUpdate(event); }
308 void OnColourBySurveyUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourBySurveyUpdate(event); }
309 void OnColourByStyleUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByStyleUpdate(event); }
310 void OnShowCrossesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowCrossesUpdate(event); }
311 void OnShowEntrancesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowEntrancesUpdate(event); }
312 void OnShowFixedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowFixedPtsUpdate(event); }
313 void OnShowExportedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowExportedPtsUpdate(event); }
314 void OnShowStationNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowStationNamesUpdate(event); }
315 void OnShowSurveyLegsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurveyLegsUpdate(event); }
316 void OnSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnSplaysUpdate(event); }
317 void OnHideSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideSplaysUpdate(event); }
318 void OnShowSplaysDashedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysDashedUpdate(event); }
319 void OnShowSplaysFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysFadedUpdate(event); }
320 void OnShowSplaysNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysNormalUpdate(event); }
321 void OnDupesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDupesUpdate(event); }
322 void OnHideDupesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideDupesUpdate(event); }
323 void OnShowDupesDashedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesDashedUpdate(event); }
324 void OnShowDupesFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesFadedUpdate(event); }
325 void OnShowDupesNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesNormalUpdate(event); }
326 void OnShowSurfaceUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurfaceUpdate(event); }
327 void OnMoveEastUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveEastUpdate(event); }
328 void OnMoveNorthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveNorthUpdate(event); }
329 void OnMoveSouthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveSouthUpdate(event); }
330 void OnMoveWestUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveWestUpdate(event); }
331 void OnToggleRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleRotationUpdate(event); }
332 void OnReverseControlsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseControlsUpdate(event); }
333 void OnToggleScalebarUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleScalebarUpdate(event); }
334 void OnToggleColourKeyUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleColourKeyUpdate(event); }
335 void OnViewCompassUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewCompassUpdate(event); }
336 void OnViewGridUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewGridUpdate(event); }
337 void OnViewBoundingBoxUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewBoundingBoxUpdate(event); }
338 void OnViewTerrainUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTerrainUpdate(event); }
339 void OnViewClinoUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewClinoUpdate(event); }
340 void OnViewPerspectiveUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewPerspectiveUpdate(event); }
341 void OnViewSmoothShadingUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothShadingUpdate(event); }
342 void OnViewTexturedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTexturedUpdate(event); }
343 void OnViewFogUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFogUpdate(event); }
344 void OnViewSmoothLinesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothLinesUpdate(event); }
345 void OnViewFullScreenUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFullScreenUpdate(event); }
346 void OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseDirectionOfRotationUpdate(event); }
347 void OnCancelDistLineUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnCancelDistLineUpdate(event); }
348 void OnIndicatorsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnIndicatorsUpdate(event); }
350 void OnDefaults(wxCommandEvent&) { if (m_Control) m_Control->OnDefaults(); }
351 void OnPlan(wxCommandEvent&) { if (m_Control) m_Control->OnPlan(); }
352 void OnElevation(wxCommandEvent&) { if (m_Control) m_Control->OnElevation(); }
353 void OnDisplayOverlappingNames(wxCommandEvent&) { if (m_Control) m_Control->OnDisplayOverlappingNames(); }
354 void OnColourByDepth(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDepth(); }
355 void OnColourByDate(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDate(); }
356 void OnColourByError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByError(); }
357 void OnColourByHError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByHError(); }
358 void OnColourByVError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByVError(); }
359 void OnColourByGradient(wxCommandEvent&) { if (m_Control) m_Control->OnColourByGradient(); }
360 void OnColourByLength(wxCommandEvent&) { if (m_Control) m_Control->OnColourByLength(); }
361 void OnColourBySurvey(wxCommandEvent&) { if (m_Control) m_Control->OnColourBySurvey(); }
362 void OnColourByStyle(wxCommandEvent&) { if (m_Control) m_Control->OnColourByStyle(); }
363 void OnShowCrosses(wxCommandEvent&) { if (m_Control) m_Control->OnShowCrosses(); }
364 void OnShowEntrances(wxCommandEvent&) { if (m_Control) m_Control->OnShowEntrances(); }
365 void OnShowFixedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowFixedPts(); }
366 void OnShowExportedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowExportedPts(); }
367 void OnShowStationNames(wxCommandEvent&) { if (m_Control) m_Control->OnShowStationNames(); }
368 void OnShowSurveyLegs(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurveyLegs(); }
369 void OnHideSplays(wxCommandEvent&) { if (m_Control) m_Control->OnHideSplays(); }
370 void OnShowSplaysDashed(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysDashed(); }
371 void OnShowSplaysFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysFaded(); }
372 void OnShowSplaysNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysNormal(); }
373 void OnHideDupes(wxCommandEvent&) { if (m_Control) m_Control->OnHideDupes(); }
374 void OnShowDupesDashed(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesDashed(); }
375 void OnShowDupesFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesFaded(); }
376 void OnShowDupesNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesNormal(); }
377 void OnShowSurface(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurface(); }
378 void OnMoveEast(wxCommandEvent&) { if (m_Control) m_Control->OnMoveEast(); }
379 void OnMoveNorth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveNorth(); }
380 void OnMoveSouth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveSouth(); }
381 void OnMoveWest(wxCommandEvent&) { if (m_Control) m_Control->OnMoveWest(); }
382 void OnToggleRotation(wxCommandEvent&) { if (m_Control) m_Control->OnToggleRotation(); }
383 void OnReverseControls(wxCommandEvent&) { if (m_Control) m_Control->OnReverseControls(); }
384 void OnToggleScalebar(wxCommandEvent&) { if (m_Control) m_Control->OnToggleScalebar(); }
385 void OnToggleColourKey(wxCommandEvent&) { if (m_Control) m_Control->OnToggleColourKey(); }
386 void OnViewCompass(wxCommandEvent&) { if (m_Control) m_Control->OnViewCompass(); }
387 void OnViewClino(wxCommandEvent&) { if (m_Control) m_Control->OnViewClino(); }
388 void OnViewGrid(wxCommandEvent&) { if (m_Control) m_Control->OnViewGrid(); }
389 void OnViewBoundingBox(wxCommandEvent&) { if (m_Control) m_Control->OnViewBoundingBox(); }
390 void OnViewTerrain(wxCommandEvent&) { if (m_Control) m_Control->OnViewTerrain(); }
391 void OnViewPerspective(wxCommandEvent&) { if (m_Control) m_Control->OnViewPerspective(); }
392 void OnViewSmoothShading(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothShading(); }
393 void OnViewTextured(wxCommandEvent&) { if (m_Control) m_Control->OnViewTextured(); }
394 void OnViewFog(wxCommandEvent&) { if (m_Control) m_Control->OnViewFog(); }
395 void OnViewSmoothLines(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothLines(); }
396 void OnViewFullScreen(wxCommandEvent&) { ViewFullScreen(); }
397 void ViewFullScreen();
398 bool FullScreenModeShowingMenus() const;
399 void FullScreenModeShowMenus(bool show);
400 void OnReverseDirectionOfRotation(wxCommandEvent&) { if (m_Control) m_Control->OnReverseDirectionOfRotation(); }
401 void OnCancelDistLine(wxCommandEvent&) { if (m_Control) m_Control->OnCancelDistLine(); }
403 void OnToggleMetric(wxCommandEvent&) { if (m_Control) m_Control->OnToggleMetric(); }
404 void OnToggleDegrees(wxCommandEvent&) { if (m_Control) m_Control->OnToggleDegrees(); }
405 void OnTogglePercent(wxCommandEvent&) { if (m_Control) m_Control->OnTogglePercent(); }
406 void OnToggleTubes(wxCommandEvent&) { if (m_Control) m_Control->OnToggleTubes(); }
408 void OnToggleMetricUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleMetricUpdate(event); }
409 void OnToggleDegreesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleDegreesUpdate(event); }
410 void OnTogglePercentUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnTogglePercentUpdate(event); }
411 void OnToggleTubesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleTubesUpdate(event); }
413 // end of horrible bodges
415 void OnViewSidePanelUpdate(wxUpdateUIEvent& event);
416 void OnViewSidePanel(wxCommandEvent& event);
417 void ToggleSidePanel();
418 bool ShowingSidePanel();
420 void SelectTreeItem(const LabelInfo* label) {
421 if (label->tree_id.IsOk())
422 m_Tree->SelectItem(label->tree_id);
423 else
424 m_Tree->UnselectAll();
427 void ClearTreeSelection();
429 void ClearCoords();
430 void SetCoords(const Vector3 &v);
431 const LabelInfo * GetTreeSelection() const;
432 void SetCoords(double x, double y, const LabelInfo * there);
433 void SetAltitude(double z, const LabelInfo * there);
435 void ShowInfo(const LabelInfo *here = NULL, const LabelInfo *there = NULL);
436 void DisplayTreeInfo(const wxTreeItemData* data = NULL);
437 void TreeItemSelected(const wxTreeItemData* data);
438 PresentationMark GetPresMark(int which);
439 bool Animating() const { return m_Gfx && m_Gfx->Animating(); }
441 // Restrict to subsurvey `survey` (or show all if `survey` empty).
442 void RestrictTo(const wxString & survey);
444 wxString GetSurvey() const { return m_Survey; }
446 int GetNumHighlightedPts() const { return m_NumHighlighted; }
448 const SurveyFilter* GetTreeFilter() const { return m_Tree->GetFilter(); }
450 // Used when the tree filters change. FIXME: Overkill?
451 void ForceFullRedraw() {
452 m_Gfx->InvalidateAllLists();
453 m_Gfx->ForceRefresh();
456 void InvalidateOverlays() {
457 m_Gfx->InvalidateOverlays();
460 wxTreeItemId FirstOverlay() { return m_Tree->FirstOverlay(); }
461 wxTreeItemId NextOverlay(wxTreeItemId id) { return m_Tree->NextOverlay(id); }
462 wxTreeItemId RemoveOverlay(wxTreeItemId id) { return m_Tree->RemoveOverlay(id); }
463 const wxString& GetOverlayFilename(wxTreeItemId id) { return m_Tree->GetOverlayFilename(id); }
465 private:
466 DECLARE_EVENT_TABLE()
469 #endif