source: git/src/mainfrm.h @ 3bb963aa

RELEASE/1.2debug-cidebug-ci-sanitiserswalls-datawalls-data-hanging-as-warning
Last change on this file since 3bb963aa was 17a38ded, checked in by Olly Betts <olly@…>, 6 years ago

Move code to fill survey tree into AvenTreeCtrl?

  • Property mode set to 100644
File size: 20.6 KB
Line 
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-2003,2004,2005,2006,2010,2011,2012,2013,2014,2015,2016,2018 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.
13//
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.
18//
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
22//
23
24#ifndef mainfrm_h
25#define mainfrm_h
26
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>
33
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"
44
45#include <list>
46#include <vector>
47
48using namespace std;
49
50#include <math.h>
51#include <time.h>
52
53#ifdef __WXMAC__
54// Currently on OS X, we force use of a generic toolbar, which needs to be put
55// in a sizer.
56# define USING_GENERIC_TOOLBAR
57#endif
58
59#define MARK_FIRST 1
60#define MARK_NEXT 2
61#define MARK_PREV 3
62
63enum {
64    menu_FILE_LOG = 1000,
65    menu_FILE_OPEN_TERRAIN,
66    menu_FILE_PAGE_SETUP,
67    menu_FILE_SCREENSHOT,
68    menu_FILE_EXPORT,
69    menu_FILE_EXTEND,
70    menu_PRES_NEW,
71    menu_PRES_OPEN,
72    menu_PRES_SAVE,
73    menu_PRES_SAVE_AS,
74    menu_PRES_MARK,
75    menu_PRES_EXPORT_MOVIE,
76    menu_PRES_FREWIND,
77    menu_PRES_REWIND,
78    menu_PRES_REVERSE,
79    menu_PRES_PLAY,
80    menu_PRES_FF,
81    menu_PRES_FFF,
82    menu_PRES_PAUSE,
83    menu_ROTATION_START,
84    menu_ROTATION_STOP,
85    menu_ROTATION_TOGGLE,
86    menu_ROTATION_REVERSE,
87    menu_ORIENT_MOVE_NORTH,
88    menu_ORIENT_MOVE_EAST,
89    menu_ORIENT_MOVE_SOUTH,
90    menu_ORIENT_MOVE_WEST,
91    menu_ORIENT_PLAN,
92    menu_ORIENT_ELEVATION,
93    menu_ORIENT_DEFAULTS,
94    menu_VIEW_SHOW_LEGS,
95    menu_VIEW_SPLAYS,
96    menu_SPLAYS_HIDE,
97    menu_SPLAYS_SHOW_DASHED,
98    menu_SPLAYS_SHOW_FADED,
99    menu_SPLAYS_SHOW_NORMAL,
100    menu_VIEW_DUPES,
101    menu_DUPES_HIDE,
102    menu_DUPES_SHOW_DASHED,
103    menu_DUPES_SHOW_FADED,
104    menu_DUPES_SHOW_NORMAL,
105    menu_VIEW_SHOW_CROSSES,
106    menu_VIEW_SHOW_NAMES,
107    menu_VIEW_SHOW_SURFACE,
108    menu_VIEW_SHOW_OVERLAPPING_NAMES,
109    menu_VIEW_SHOW_ENTRANCES,
110    menu_VIEW_SHOW_FIXED_PTS,
111    menu_VIEW_SHOW_EXPORTED_PTS,
112    menu_VIEW_STATUS_BAR,
113    menu_VIEW_GRID,
114    menu_VIEW_BOUNDING_BOX,
115    menu_VIEW_TERRAIN,
116    menu_VIEW_SHOW_TUBES,
117    menu_VIEW_PERSPECTIVE,
118    menu_VIEW_SMOOTH_SHADING,
119    menu_VIEW_TEXTURED,
120    menu_VIEW_FOG,
121    menu_VIEW_SMOOTH_LINES,
122    menu_VIEW_FULLSCREEN,
123    menu_VIEW_COLOUR_BY,
124    menu_COLOUR_BY_DEPTH,
125    menu_COLOUR_BY_DATE,
126    menu_COLOUR_BY_ERROR,
127    menu_COLOUR_BY_GRADIENT,
128    menu_COLOUR_BY_LENGTH,
129    menu_IND_COMPASS,
130    menu_IND_CLINO,
131    menu_IND_COLOUR_KEY,
132    menu_IND_SCALE_BAR,
133    menu_CTL_INDICATORS,
134    menu_CTL_SIDE_PANEL,
135    menu_CTL_METRIC,
136    menu_CTL_DEGREES,
137    menu_CTL_PERCENT,
138    menu_CTL_REVERSE,
139    menu_CTL_CANCEL_DIST_LINE,
140    menu_SURVEY_RESTRICT,
141    menu_SURVEY_SHOW_ALL,
142    menu_SURVEY_HIDE,
143    menu_SURVEY_SHOW,
144    menu_SURVEY_HIDE_SIBLINGS,
145    textctrl_FIND,
146    button_HIDE,
147    listctrl_PRES
148};
149
150class AvenPresList;
151
152class MainFrm : public wxFrame, public Model {
153    wxFileHistory m_history;
154    int m_SashPosition;
155    bool was_showing_sidepanel_before_fullscreen;
156    GfxCore* m_Gfx;
157    wxWindow* m_Log;
158    GUIControl* m_Control;
159    wxSplitterWindow* m_Splitter;
160    AvenTreeCtrl* m_Tree;
161    wxTextCtrl* m_FindBox;
162    // wxCheckBox* m_RegexpCheckBox;
163    wxNotebook* m_Notebook;
164    AvenPresList* m_PresList;
165    wxString m_File;
166    // Processed version of data - same as m_File if m_File is processed data.
167    wxString m_FileProcessed;
168    wxString m_Survey;
169
170    // Strings for status bar reporting of distances.
171    wxString here_text, coords_text, dist_text, distfree_text;
172
173    int m_NumHighlighted = 0;
174    bool pending_find;
175
176    bool fullscreen_showing_menus;
177
178#ifdef PREFDLG
179    PrefsDlg* m_PrefsDlg;
180#endif
181
182    bool ProcessSVXFile(const wxString & file);
183//    void FixLRUD(traverse & centreline);
184
185    void CreateMenuBar();
186    void MakeToolBar();
187    void CreateSidePanel();
188
189    void UpdateStatusBar();
190
191#ifdef USING_GENERIC_TOOLBAR
192    wxToolBar * GetToolBar() const {
193        wxSizer * sizer = GetSizer();
194        if (!sizer) return NULL;
195        return (wxToolBar*)sizer->GetItem(size_t(0))->GetWindow();
196    }
197#endif
198
199public:
200    MainFrm(const wxString& title, const wxPoint& pos, const wxSize& size);
201
202    // public for CavernLog.
203    bool LoadData(const wxString& file, const wxString& prefix);
204    void AddToFileHistory(const wxString & file);
205
206    void InitialiseAfterLoad(const wxString & file, const wxString & prefix);
207    void OnShowLog(wxCommandEvent& event);
208
209    void OnMRUFile(wxCommandEvent& event);
210    void OpenFile(const wxString& file, const wxString& survey = wxString());
211
212    void OnPresNewUpdate(wxUpdateUIEvent& event);
213    void OnPresOpenUpdate(wxUpdateUIEvent& event);
214    void OnPresSaveUpdate(wxUpdateUIEvent& event);
215    void OnPresSaveAsUpdate(wxUpdateUIEvent& event);
216    void OnPresMarkUpdate(wxUpdateUIEvent& event);
217    void OnPresFRewindUpdate(wxUpdateUIEvent& event);
218    void OnPresRewindUpdate(wxUpdateUIEvent& event);
219    void OnPresReverseUpdate(wxUpdateUIEvent& event);
220    void OnPresPlayUpdate(wxUpdateUIEvent& event);
221    void OnPresFFUpdate(wxUpdateUIEvent& event);
222    void OnPresFFFUpdate(wxUpdateUIEvent& event);
223    void OnPresPauseUpdate(wxUpdateUIEvent& event);
224    void OnPresStopUpdate(wxUpdateUIEvent& event);
225    void OnPresExportMovieUpdate(wxUpdateUIEvent& event);
226    void OnOpenTerrainUpdate(wxUpdateUIEvent& event);
227
228    void DoFind();
229    void OnFind(wxCommandEvent& event);
230    void OnIdle(wxIdleEvent& event);
231    void OnGotoFound(wxCommandEvent& event);
232    void OnHide(wxCommandEvent& event);
233    void OnHideUpdate(wxUpdateUIEvent& ui);
234
235    void OnOpen(wxCommandEvent& event);
236    void OnOpenTerrain(wxCommandEvent&);
237    void HideLog(wxWindow * log_window);
238    void OnScreenshot(wxCommandEvent& event);
239    void OnScreenshotUpdate(wxUpdateUIEvent& event);
240    void OnFilePreferences(wxCommandEvent& event);
241    void OnPrint(wxCommandEvent& event);
242    void PrintAndExit();
243    void OnPageSetup(wxCommandEvent& event);
244    void OnPresNew(wxCommandEvent& event);
245    void OnPresOpen(wxCommandEvent& event);
246    void OnPresSave(wxCommandEvent& event);
247    void OnPresSaveAs(wxCommandEvent& event);
248    void OnPresMark(wxCommandEvent& event);
249    void OnPresFRewind(wxCommandEvent& event);
250    void OnPresRewind(wxCommandEvent& event);
251    void OnPresReverse(wxCommandEvent& event);
252    void OnPresPlay(wxCommandEvent& event);
253    void OnPresFF(wxCommandEvent& event);
254    void OnPresFFF(wxCommandEvent& event);
255    void OnPresPause(wxCommandEvent& event);
256    void OnPresStop(wxCommandEvent& event);
257    void OnPresExportMovie(wxCommandEvent& event);
258    void OnExport(wxCommandEvent& event);
259    void OnExtend(wxCommandEvent& event);
260    void OnQuit(wxCommandEvent& event);
261
262    void OnAbout(wxCommandEvent& event);
263    void OnClose(wxCloseEvent&);
264
265    void OnSetFocus(wxFocusEvent &) { if (m_Gfx) m_Gfx->SetFocus(); }
266
267    void OnKeyPress(wxKeyEvent &e) {
268        if (m_Gfx) {
269            m_Gfx->SetFocus();
270            m_Gfx->OnKeyPress(e);
271        }
272    }
273
274    void OnShowLogUpdate(wxUpdateUIEvent &ui) {
275        ui.Enable(m_Log != NULL || (m_Splitter->GetWindow1() != m_Gfx && m_Splitter->GetWindow2() != m_Gfx));
276        ui.Check(m_Log == NULL);
277    }
278    void OnPrintUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); }
279    void OnExportUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); }
280    void OnExtendUpdate(wxUpdateUIEvent &ui) {
281        ui.Enable(!IsExtendedElevation());
282    }
283
284    // temporary bodges until event handling problem is sorted out:
285    void OnDefaultsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDefaultsUpdate(event); }
286    void OnPlanUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnPlanUpdate(event); }
287    void OnElevationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnElevationUpdate(event); }
288    void OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDisplayOverlappingNamesUpdate(event); }
289    void OnColourByUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByUpdate(event); }
290    void OnColourByDepthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDepthUpdate(event); }
291    void OnColourByDateUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDateUpdate(event); }
292    void OnColourByErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByErrorUpdate(event); }
293    void OnColourByGradientUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByGradientUpdate(event); }
294    void OnColourByLengthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByLengthUpdate(event); }
295    void OnShowCrossesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowCrossesUpdate(event); }
296    void OnShowEntrancesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowEntrancesUpdate(event); }
297    void OnShowFixedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowFixedPtsUpdate(event); }
298    void OnShowExportedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowExportedPtsUpdate(event); }
299    void OnShowStationNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowStationNamesUpdate(event); }
300    void OnShowSurveyLegsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurveyLegsUpdate(event); }
301    void OnSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnSplaysUpdate(event); }
302    void OnHideSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideSplaysUpdate(event); }
303    void OnShowSplaysDashedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysDashedUpdate(event); }
304    void OnShowSplaysFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysFadedUpdate(event); }
305    void OnShowSplaysNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysNormalUpdate(event); }
306    void OnDupesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDupesUpdate(event); }
307    void OnHideDupesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideDupesUpdate(event); }
308    void OnShowDupesDashedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesDashedUpdate(event); }
309    void OnShowDupesFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesFadedUpdate(event); }
310    void OnShowDupesNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowDupesNormalUpdate(event); }
311    void OnShowSurfaceUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurfaceUpdate(event); }
312    void OnMoveEastUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveEastUpdate(event); }
313    void OnMoveNorthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveNorthUpdate(event); }
314    void OnMoveSouthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveSouthUpdate(event); }
315    void OnMoveWestUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveWestUpdate(event); }
316    void OnToggleRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleRotationUpdate(event); }
317    void OnReverseControlsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseControlsUpdate(event); }
318    void OnToggleScalebarUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleScalebarUpdate(event); }
319    void OnToggleColourKeyUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleColourKeyUpdate(event); }
320    void OnViewCompassUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewCompassUpdate(event); }
321    void OnViewGridUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewGridUpdate(event); }
322    void OnViewBoundingBoxUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewBoundingBoxUpdate(event); }
323    void OnViewTerrainUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTerrainUpdate(event); }
324    void OnViewClinoUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewClinoUpdate(event); }
325    void OnViewPerspectiveUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewPerspectiveUpdate(event); }
326    void OnViewSmoothShadingUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothShadingUpdate(event); }
327    void OnViewTexturedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTexturedUpdate(event); }
328    void OnViewFogUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFogUpdate(event); }
329    void OnViewSmoothLinesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothLinesUpdate(event); }
330    void OnViewFullScreenUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFullScreenUpdate(event); }
331    void OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseDirectionOfRotationUpdate(event); }
332    void OnCancelDistLineUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnCancelDistLineUpdate(event); }
333    void OnIndicatorsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnIndicatorsUpdate(event); }
334
335    void OnDefaults(wxCommandEvent&) { if (m_Control) m_Control->OnDefaults(); }
336    void OnPlan(wxCommandEvent&) { if (m_Control) m_Control->OnPlan(); }
337    void OnElevation(wxCommandEvent&) { if (m_Control) m_Control->OnElevation(); }
338    void OnDisplayOverlappingNames(wxCommandEvent&) { if (m_Control) m_Control->OnDisplayOverlappingNames(); }
339    void OnColourByDepth(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDepth(); }
340    void OnColourByDate(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDate(); }
341    void OnColourByError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByError(); }
342    void OnColourByGradient(wxCommandEvent&) { if (m_Control) m_Control->OnColourByGradient(); }
343    void OnColourByLength(wxCommandEvent&) { if (m_Control) m_Control->OnColourByLength(); }
344    void OnShowCrosses(wxCommandEvent&) { if (m_Control) m_Control->OnShowCrosses(); }
345    void OnShowEntrances(wxCommandEvent&) { if (m_Control) m_Control->OnShowEntrances(); }
346    void OnShowFixedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowFixedPts(); }
347    void OnShowExportedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowExportedPts(); }
348    void OnShowStationNames(wxCommandEvent&) { if (m_Control) m_Control->OnShowStationNames(); }
349    void OnShowSurveyLegs(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurveyLegs(); }
350    void OnHideSplays(wxCommandEvent&) { if (m_Control) m_Control->OnHideSplays(); }
351    void OnShowSplaysDashed(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysDashed(); }
352    void OnShowSplaysFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysFaded(); }
353    void OnShowSplaysNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysNormal(); }
354    void OnHideDupes(wxCommandEvent&) { if (m_Control) m_Control->OnHideDupes(); }
355    void OnShowDupesDashed(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesDashed(); }
356    void OnShowDupesFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesFaded(); }
357    void OnShowDupesNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowDupesNormal(); }
358    void OnShowSurface(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurface(); }
359    void OnMoveEast(wxCommandEvent&) { if (m_Control) m_Control->OnMoveEast(); }
360    void OnMoveNorth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveNorth(); }
361    void OnMoveSouth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveSouth(); }
362    void OnMoveWest(wxCommandEvent&) { if (m_Control) m_Control->OnMoveWest(); }
363    void OnToggleRotation(wxCommandEvent&) { if (m_Control) m_Control->OnToggleRotation(); }
364    void OnReverseControls(wxCommandEvent&) { if (m_Control) m_Control->OnReverseControls(); }
365    void OnToggleScalebar(wxCommandEvent&) { if (m_Control) m_Control->OnToggleScalebar(); }
366    void OnToggleColourKey(wxCommandEvent&) { if (m_Control) m_Control->OnToggleColourKey(); }
367    void OnViewCompass(wxCommandEvent&) { if (m_Control) m_Control->OnViewCompass(); }
368    void OnViewClino(wxCommandEvent&) { if (m_Control) m_Control->OnViewClino(); }
369    void OnViewGrid(wxCommandEvent&) { if (m_Control) m_Control->OnViewGrid(); }
370    void OnViewBoundingBox(wxCommandEvent&) { if (m_Control) m_Control->OnViewBoundingBox(); }
371    void OnViewTerrain(wxCommandEvent&) { if (m_Control) m_Control->OnViewTerrain(); }
372    void OnViewPerspective(wxCommandEvent&) { if (m_Control) m_Control->OnViewPerspective(); }
373    void OnViewSmoothShading(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothShading(); }
374    void OnViewTextured(wxCommandEvent&) { if (m_Control) m_Control->OnViewTextured(); }
375    void OnViewFog(wxCommandEvent&) { if (m_Control) m_Control->OnViewFog(); }
376    void OnViewSmoothLines(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothLines(); }
377    void OnViewFullScreen(wxCommandEvent&) { ViewFullScreen(); }
378    void ViewFullScreen();
379    bool FullScreenModeShowingMenus() const;
380    void FullScreenModeShowMenus(bool show);
381    void OnReverseDirectionOfRotation(wxCommandEvent&) { if (m_Control) m_Control->OnReverseDirectionOfRotation(); }
382    void OnCancelDistLine(wxCommandEvent&) { if (m_Control) m_Control->OnCancelDistLine(); }
383
384    void OnToggleMetric(wxCommandEvent&) { if (m_Control) m_Control->OnToggleMetric(); }
385    void OnToggleDegrees(wxCommandEvent&) { if (m_Control) m_Control->OnToggleDegrees(); }
386    void OnTogglePercent(wxCommandEvent&) { if (m_Control) m_Control->OnTogglePercent(); }
387    void OnToggleTubes(wxCommandEvent&) { if (m_Control) m_Control->OnToggleTubes(); }
388
389    void OnToggleMetricUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleMetricUpdate(event); }
390    void OnToggleDegreesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleDegreesUpdate(event); }
391    void OnTogglePercentUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnTogglePercentUpdate(event); }
392    void OnToggleTubesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleTubesUpdate(event); }
393
394    // end of horrible bodges
395
396    void OnViewSidePanelUpdate(wxUpdateUIEvent& event);
397    void OnViewSidePanel(wxCommandEvent& event);
398    void ToggleSidePanel();
399    bool ShowingSidePanel();
400
401    void SelectTreeItem(const LabelInfo* label) {
402        if (label->tree_id.IsOk())
403            m_Tree->SelectItem(label->tree_id);
404        else
405            m_Tree->UnselectAll();
406    }
407
408    void ClearTreeSelection();
409
410    void ClearCoords();
411    void SetCoords(const Vector3 &v);
412    const LabelInfo * GetTreeSelection() const;
413    void SetCoords(Double x, Double y, const LabelInfo * there);
414    void SetAltitude(Double z, const LabelInfo * there);
415
416    void ShowInfo(const LabelInfo *here = NULL, const LabelInfo *there = NULL);
417    void DisplayTreeInfo(const wxTreeItemData* data = NULL);
418    void TreeItemSelected(const wxTreeItemData* data);
419    PresentationMark GetPresMark(int which);
420    bool Animating() const { return m_Gfx && m_Gfx->Animating(); }
421
422    // Restrict to subsurvey `survey` (or show all if `survey` empty).
423    void RestrictTo(const wxString & survey);
424
425    wxString GetSurvey() const { return m_Survey; }
426
427    int GetNumHighlightedPts() const { return m_NumHighlighted; }
428
429    const SurveyFilter* GetTreeFilter() const { return m_Tree->GetFilter(); }
430
431    // Used when the tree filters change.  FIXME: Overkill?
432    void ForceFullRedraw() {
433        m_Gfx->InvalidateAllLists();
434        m_Gfx->ForceRefresh();
435    }
436
437private:
438    DECLARE_EVENT_TABLE()
439};
440
441// Older wxGTK loses pop-up dialogs under the always-on-top, maximised window.
442// Not sure when this got fixed, but wx 2.8.10 definitely works properly on
443// Debian squeeze.
444//
445// To work around this issue, create this object on the stack, and it will
446// temporarily un-fullscreen the window while the dialog as a workaround.
447class AvenAllowOnTop {
448#if defined __WXGTK__ && !wxCHECK_VERSION(2,8,10)
449        MainFrm * mainfrm;
450    public:
451        explicit AvenAllowOnTop(MainFrm * mainfrm_) {
452            if (mainfrm_ && mainfrm_->IsFullScreen()) {
453                mainfrm = mainfrm_;
454                mainfrm->ViewFullScreen();
455            } else {
456                mainfrm = 0;
457            }
458        }
459        ~AvenAllowOnTop() {
460            if (mainfrm) mainfrm->ViewFullScreen();
461        }
462#else
463    public:
464        AvenAllowOnTop(MainFrm *) { }
465#endif
466};
467
468#endif
Note: See TracBrowser for help on using the repository browser.