source: git/src/mainfrm.h @ cc9e2c65

RELEASE/1.2debug-cidebug-ci-sanitisersstereowalls-data
Last change on this file since cc9e2c65 was cc9e2c65, checked in by Olly Betts <olly@…>, 9 years ago

lib/,src/: Add "Colour by Gradient".

  • Property mode set to 100644
File size: 24.4 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 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 "vector3.h"
41#include "aven.h"
42//#include "prefsdlg.h"
43
44#include <list>
45#include <vector>
46
47using namespace std;
48
49#include <math.h>
50#include <time.h>
51
52#define MARK_FIRST 1
53#define MARK_NEXT 2
54#define MARK_PREV 3
55
56enum {
57    menu_FILE_LOG = 1000,
58    menu_FILE_PAGE_SETUP,
59    menu_FILE_SCREENSHOT,
60    menu_FILE_EXPORT,
61    menu_PRES_NEW,
62    menu_PRES_OPEN,
63    menu_PRES_SAVE,
64    menu_PRES_SAVE_AS,
65    menu_PRES_MARK,
66    menu_PRES_EXPORT_MOVIE,
67    menu_PRES_FREWIND,
68    menu_PRES_REWIND,
69    menu_PRES_REVERSE,
70    menu_PRES_PLAY,
71    menu_PRES_FF,
72    menu_PRES_FFF,
73    menu_PRES_PAUSE,
74    menu_ROTATION_START,
75    menu_ROTATION_STOP,
76    menu_ROTATION_TOGGLE,
77    menu_ROTATION_SPEED_UP,
78    menu_ROTATION_SLOW_DOWN,
79    menu_ROTATION_REVERSE,
80    menu_ROTATION_STEP_CCW,
81    menu_ROTATION_STEP_CW,
82    menu_ORIENT_MOVE_NORTH,
83    menu_ORIENT_MOVE_EAST,
84    menu_ORIENT_MOVE_SOUTH,
85    menu_ORIENT_MOVE_WEST,
86    menu_ORIENT_SHIFT_LEFT,
87    menu_ORIENT_SHIFT_RIGHT,
88    menu_ORIENT_SHIFT_UP,
89    menu_ORIENT_SHIFT_DOWN,
90    menu_ORIENT_PLAN,
91    menu_ORIENT_ELEVATION,
92    menu_ORIENT_HIGHER_VP,
93    menu_ORIENT_LOWER_VP,
94    menu_ORIENT_DEFAULTS,
95    menu_VIEW_SHOW_LEGS,
96    menu_VIEW_SPLAYS,
97    menu_SPLAYS_HIDE,
98    menu_SPLAYS_SHOW_FADED,
99    menu_SPLAYS_SHOW_NORMAL,   
100    menu_VIEW_SHOW_CROSSES,
101    menu_VIEW_SHOW_NAMES,
102    menu_VIEW_SHOW_SURFACE,
103    menu_VIEW_SHOW_OVERLAPPING_NAMES,
104    menu_VIEW_SHOW_ENTRANCES,
105    menu_VIEW_SHOW_FIXED_PTS,
106    menu_VIEW_SHOW_EXPORTED_PTS,
107    menu_VIEW_STATUS_BAR,
108    menu_VIEW_GRID,
109    menu_VIEW_BOUNDING_BOX,
110    menu_VIEW_SHOW_TUBES,
111    menu_VIEW_PERSPECTIVE,
112    menu_VIEW_SMOOTH_SHADING,
113    menu_VIEW_TEXTURED,
114    menu_VIEW_FOG,
115    menu_VIEW_SMOOTH_LINES,
116    menu_VIEW_FULLSCREEN,
117    menu_VIEW_COLOUR_BY_DEPTH,
118    menu_VIEW_COLOUR_BY_DATE,
119    menu_VIEW_COLOUR_BY_ERROR,
120    menu_VIEW_COLOUR_BY_GRADIENT,
121    menu_VIEW_COLOUR_BY_LENGTH,
122    menu_IND_COMPASS,
123    menu_IND_CLINO,
124    menu_IND_COLOUR_KEY,
125    menu_IND_SCALE_BAR,
126    menu_CTL_INDICATORS,
127    menu_CTL_SIDE_PANEL,
128    menu_CTL_METRIC,
129    menu_CTL_DEGREES,
130    menu_CTL_PERCENT,
131    menu_CTL_REVERSE,
132    menu_CTL_CANCEL_DIST_LINE,
133    textctrl_FIND,
134    button_HIDE,
135    listctrl_PRES
136};
137
138class PointInfo : public Point {
139    int date;
140
141public:
142    PointInfo() : Point(), date(-1) { }
143    PointInfo(const img_point & pt) : Point(pt), date(-1) { }
144    PointInfo(const img_point & pt, int date_) : Point(pt), date(date_) { }
145    PointInfo(const Point & p, int date_) : Point(p), date(date_) { }
146    int GetDate() const { return date; }
147};
148
149class XSect : public PointInfo {
150    friend class MainFrm;
151    Double l, r, u, d;
152    Double right_bearing;
153
154public:
155    XSect() : PointInfo(), l(0), r(0), u(0), d(0), right_bearing(0) { }
156    XSect(const Point &p, int date_,
157          Double l_, Double r_, Double u_, Double d_)
158        : PointInfo(p, date_), l(l_), r(r_), u(u_), d(d_), right_bearing(0) { }
159    Double GetL() const { return l; }
160    Double GetR() const { return r; }
161    Double GetU() const { return u; }
162    Double GetD() const { return d; }
163    Double get_right_bearing() const { return right_bearing; }
164    void set_right_bearing(Double right_bearing_) {
165        right_bearing = right_bearing_;
166    }
167};
168
169class AvenPresList;
170
171class traverse : public vector<PointInfo> {
172  public:
173    int n_legs;
174    bool isSplay;
175    double length;
176    double E, H, V;
177
178    traverse() : n_legs(0), length(0), E(-1), H(-1), V(-1) { }
179};
180
181class MainFrm : public wxFrame {
182    wxFileHistory m_history;
183    int m_SashPosition;
184    bool was_showing_sidepanel_before_fullscreen;
185    list<traverse> traverses;
186    list<traverse> surface_traverses;
187    list<vector<XSect> > tubes;
188    list<LabelInfo*> m_Labels;
189    Vector3 m_Ext;
190    Double m_DepthMin, m_DepthExt;
191    int m_DateMin, m_DateExt;
192    bool complete_dateinfo;
193    GfxCore* m_Gfx;
194    wxWindow* m_Log;
195    GUIControl* m_Control;
196    int m_NumEntrances;
197    int m_NumFixedPts;
198    int m_NumExportedPts;
199    int m_NumHighlighted;
200    bool m_HasUndergroundLegs;
201    bool m_HasSplays;
202    bool m_HasSurfaceLegs;
203    bool m_HasErrorInformation;
204    wxSplitterWindow* m_Splitter;
205    AvenTreeCtrl* m_Tree;
206    wxTextCtrl* m_FindBox;
207    // wxCheckBox* m_RegexpCheckBox;
208    wxNotebook* m_Notebook;
209    AvenPresList* m_PresList;
210    wxString m_File;
211    wxString m_Title, m_cs_proj, m_DateStamp;
212    time_t m_DateStamp_numeric;
213    wxChar separator; // character separating survey levels (often '.')
214    Vector3 m_Offsets;
215
216    // Strings for status bar reporting of distances.
217    wxString here_text, coords_text, dist_text, distfree_text;
218
219    bool m_IsExtendedElevation;
220    bool pending_find;
221
222    bool fullscreen_showing_menus;
223
224#ifdef PREFDLG
225    PrefsDlg* m_PrefsDlg;
226#endif
227
228    void FillTree(const wxString & root_name);
229    bool ProcessSVXFile(const wxString & file);
230//    void FixLRUD(traverse & centreline);
231    void CentreDataset(const Vector3 & vmin);
232
233    void CreateMenuBar();
234    void MakeToolBar();
235    void CreateSidePanel();
236
237    void UpdateStatusBar();
238
239public:
240    MainFrm(const wxString& title, const wxPoint& pos, const wxSize& size);
241
242    // public for CavernLog.
243    bool LoadData(const wxString& file, const wxString& prefix);
244    void AddToFileHistory(const wxString & file);
245
246    void InitialiseAfterLoad(const wxString & file);
247    void OnShowLog(wxCommandEvent& event);
248
249    void OnMRUFile(wxCommandEvent& event);
250    void OpenFile(const wxString& file, const wxString& survey = wxString());
251
252    void OnPresNewUpdate(wxUpdateUIEvent& event);
253    void OnPresOpenUpdate(wxUpdateUIEvent& event);
254    void OnPresSaveUpdate(wxUpdateUIEvent& event);
255    void OnPresSaveAsUpdate(wxUpdateUIEvent& event);
256    void OnPresMarkUpdate(wxUpdateUIEvent& event);
257    void OnPresFRewindUpdate(wxUpdateUIEvent& event);
258    void OnPresRewindUpdate(wxUpdateUIEvent& event);
259    void OnPresReverseUpdate(wxUpdateUIEvent& event);
260    void OnPresPlayUpdate(wxUpdateUIEvent& event);
261    void OnPresFFUpdate(wxUpdateUIEvent& event);
262    void OnPresFFFUpdate(wxUpdateUIEvent& event);
263    void OnPresPauseUpdate(wxUpdateUIEvent& event);
264    void OnPresStopUpdate(wxUpdateUIEvent& event);
265    void OnPresExportMovieUpdate(wxUpdateUIEvent& event);
266    //void OnFileOpenTerrainUpdate(wxUpdateUIEvent& event);
267
268    void DoFind();
269    void OnFind(wxCommandEvent& event);
270    void OnIdle(wxIdleEvent& event);
271    void OnGotoFound(wxCommandEvent& event);
272    void OnHide(wxCommandEvent& event);
273    void OnHideUpdate(wxUpdateUIEvent& ui);
274
275    void OnOpen(wxCommandEvent& event);
276    void HideLog(wxWindow * log_window);
277    void OnScreenshot(wxCommandEvent& event);
278    void OnScreenshotUpdate(wxUpdateUIEvent& event);
279    void OnFilePreferences(wxCommandEvent& event);
280    void OnFileOpenTerrain(wxCommandEvent& event);
281    void OnPrint(wxCommandEvent& event);
282    void PrintAndExit();
283    void OnPageSetup(wxCommandEvent& event);
284    void OnPresNew(wxCommandEvent& event);
285    void OnPresOpen(wxCommandEvent& event);
286    void OnPresSave(wxCommandEvent& event);
287    void OnPresSaveAs(wxCommandEvent& event);
288    void OnPresMark(wxCommandEvent& event);
289    void OnPresFRewind(wxCommandEvent& event);
290    void OnPresRewind(wxCommandEvent& event);
291    void OnPresReverse(wxCommandEvent& event);
292    void OnPresPlay(wxCommandEvent& event);
293    void OnPresFF(wxCommandEvent& event);
294    void OnPresFFF(wxCommandEvent& event);
295    void OnPresPause(wxCommandEvent& event);
296    void OnPresStop(wxCommandEvent& event);
297    void OnPresExportMovie(wxCommandEvent& event);
298    void OnExport(wxCommandEvent& event);
299    void OnQuit(wxCommandEvent& event);
300
301    void OnAbout(wxCommandEvent& event);
302    void OnClose(wxCloseEvent&);
303
304    void OnSetFocus(wxFocusEvent &) { if (m_Gfx) m_Gfx->SetFocus(); }
305
306    void OnKeyPress(wxKeyEvent &e) {
307        if (m_Gfx) {
308            m_Gfx->SetFocus();
309            m_Gfx->OnKeyPress(e);
310        }
311    }
312
313    void OnShowLogUpdate(wxUpdateUIEvent &ui) { ui.Enable(m_Log != NULL); }
314    void OnPrintUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); }
315    void OnExportUpdate(wxUpdateUIEvent &ui) { ui.Enable(!m_File.empty()); }
316
317    // temporary bodges until event handling problem is sorted out:
318    void OnDefaultsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDefaultsUpdate(event); }
319    void OnPlanUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnPlanUpdate(event); }
320    void OnElevationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnElevationUpdate(event); }
321    void OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnDisplayOverlappingNamesUpdate(event); }
322    void OnColourByDepthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDepthUpdate(event); }
323    void OnColourByDateUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByDateUpdate(event); }
324    void OnColourByErrorUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByErrorUpdate(event); }
325    void OnColourByGradientUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByGradientUpdate(event); }
326    void OnColourByLengthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnColourByLengthUpdate(event); }
327    void OnShowCrossesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowCrossesUpdate(event); }
328    void OnShowEntrancesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowEntrancesUpdate(event); }
329    void OnShowFixedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowFixedPtsUpdate(event); }
330    void OnShowExportedPtsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowExportedPtsUpdate(event); }
331    void OnShowStationNamesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowStationNamesUpdate(event); }
332    void OnShowSurveyLegsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurveyLegsUpdate(event); }
333    void OnSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnSplaysUpdate(event); }
334    void OnHideSplaysUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHideSplaysUpdate(event); }
335    void OnShowSplaysNormalUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysNormalUpdate(event); }
336    void OnShowSplaysFadedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSplaysFadedUpdate(event); }
337    void OnShowSurfaceUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShowSurfaceUpdate(event); }
338    void OnMoveEastUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveEastUpdate(event); }
339    void OnMoveNorthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveNorthUpdate(event); }
340    void OnMoveSouthUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveSouthUpdate(event); }
341    void OnMoveWestUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnMoveWestUpdate(event); }
342    void OnToggleRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleRotationUpdate(event); }
343    void OnReverseControlsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseControlsUpdate(event); }
344    void OnSlowDownUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnSlowDownUpdate(event); }
345    void OnSpeedUpUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnSpeedUpUpdate(event); }
346    void OnStepOnceUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnStepOnceUpdate(event); }
347    void OnHigherViewpointUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnHigherViewpointUpdate(event); }
348    void OnLowerViewpointUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnLowerViewpointUpdate(event); }
349    void OnShiftDisplayDownUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShiftDisplayDownUpdate(event); }
350    void OnShiftDisplayLeftUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShiftDisplayLeftUpdate(event); }
351    void OnShiftDisplayRightUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShiftDisplayRightUpdate(event); }
352    void OnShiftDisplayUpUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnShiftDisplayUpUpdate(event); }
353    void OnZoomInUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnZoomInUpdate(event); }
354    void OnZoomOutUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnZoomOutUpdate(event); }
355    void OnToggleScalebarUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleScalebarUpdate(event); }
356    void OnToggleColourKeyUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleColourKeyUpdate(event); }
357    void OnViewCompassUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewCompassUpdate(event); }
358    void OnViewGridUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewGridUpdate(event); }
359    void OnViewBoundingBoxUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewBoundingBoxUpdate(event); }
360    void OnViewClinoUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewClinoUpdate(event); }
361    void OnViewPerspectiveUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewPerspectiveUpdate(event); }
362    void OnViewSmoothShadingUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothShadingUpdate(event); }
363    void OnViewTexturedUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewTexturedUpdate(event); }
364    void OnViewFogUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFogUpdate(event); }
365    void OnViewSmoothLinesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewSmoothLinesUpdate(event); }
366    void OnViewFullScreenUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnViewFullScreenUpdate(event); }
367    void OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnReverseDirectionOfRotationUpdate(event); }
368    void OnCancelDistLineUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnCancelDistLineUpdate(event); }
369    void OnIndicatorsUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnIndicatorsUpdate(event); }
370
371    void OnDefaults(wxCommandEvent&) { if (m_Control) m_Control->OnDefaults(); }
372    void OnPlan(wxCommandEvent&) { if (m_Control) m_Control->OnPlan(); }
373    void OnElevation(wxCommandEvent&) { if (m_Control) m_Control->OnElevation(); }
374    void OnDisplayOverlappingNames(wxCommandEvent&) { if (m_Control) m_Control->OnDisplayOverlappingNames(); }
375    void OnColourByDepth(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDepth(); }
376    void OnColourByDate(wxCommandEvent&) { if (m_Control) m_Control->OnColourByDate(); }
377    void OnColourByError(wxCommandEvent&) { if (m_Control) m_Control->OnColourByError(); }
378    void OnColourByGradient(wxCommandEvent&) { if (m_Control) m_Control->OnColourByGradient(); }
379    void OnColourByLength(wxCommandEvent&) { if (m_Control) m_Control->OnColourByLength(); }
380    void OnShowCrosses(wxCommandEvent&) { if (m_Control) m_Control->OnShowCrosses(); }
381    void OnShowEntrances(wxCommandEvent&) { if (m_Control) m_Control->OnShowEntrances(); }
382    void OnShowFixedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowFixedPts(); }
383    void OnShowExportedPts(wxCommandEvent&) { if (m_Control) m_Control->OnShowExportedPts(); }
384    void OnShowStationNames(wxCommandEvent&) { if (m_Control) m_Control->OnShowStationNames(); }
385    void OnShowSurveyLegs(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurveyLegs(); }
386    void OnHideSplays(wxCommandEvent&) { if (m_Control) m_Control->OnHideSplays(); }
387    void OnShowSplaysNormal(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysNormal(); }
388    void OnShowSplaysFaded(wxCommandEvent&) { if (m_Control) m_Control->OnShowSplaysFaded(); }
389    void OnShowSurface(wxCommandEvent&) { if (m_Control) m_Control->OnShowSurface(); }
390    void OnMoveEast(wxCommandEvent&) { if (m_Control) m_Control->OnMoveEast(); }
391    void OnMoveNorth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveNorth(); }
392    void OnMoveSouth(wxCommandEvent&) { if (m_Control) m_Control->OnMoveSouth(); }
393    void OnMoveWest(wxCommandEvent&) { if (m_Control) m_Control->OnMoveWest(); }
394    void OnToggleRotation(wxCommandEvent&) { if (m_Control) m_Control->OnToggleRotation(); }
395    void OnReverseControls(wxCommandEvent&) { if (m_Control) m_Control->OnReverseControls(); }
396    void OnSlowDown(wxCommandEvent&) { if (m_Control) m_Control->OnSlowDown(); }
397    void OnSpeedUp(wxCommandEvent&) { if (m_Control) m_Control->OnSpeedUp(); }
398    void OnStepOnceAnticlockwise(wxCommandEvent&) { if (m_Control) m_Control->OnStepOnceAnticlockwise(); }
399    void OnStepOnceClockwise(wxCommandEvent&) { if (m_Control) m_Control->OnStepOnceClockwise(); }
400    void OnHigherViewpoint(wxCommandEvent&) { if (m_Control) m_Control->OnHigherViewpoint(); }
401    void OnLowerViewpoint(wxCommandEvent&) { if (m_Control) m_Control->OnLowerViewpoint(); }
402    void OnShiftDisplayDown(wxCommandEvent&) { if (m_Control) m_Control->OnShiftDisplayDown(); }
403    void OnShiftDisplayLeft(wxCommandEvent&) { if (m_Control) m_Control->OnShiftDisplayLeft(); }
404    void OnShiftDisplayRight(wxCommandEvent&) { if (m_Control) m_Control->OnShiftDisplayRight(); }
405    void OnShiftDisplayUp(wxCommandEvent&) { if (m_Control) m_Control->OnShiftDisplayUp(); }
406    void OnZoomIn(wxCommandEvent&) { if (m_Control) m_Control->OnZoomIn(); }
407    void OnZoomOut(wxCommandEvent&) { if (m_Control) m_Control->OnZoomOut(); }
408    void OnToggleScalebar(wxCommandEvent&) { if (m_Control) m_Control->OnToggleScalebar(); }
409    void OnToggleColourKey(wxCommandEvent&) { if (m_Control) m_Control->OnToggleColourKey(); }
410    void OnViewCompass(wxCommandEvent&) { if (m_Control) m_Control->OnViewCompass(); }
411    void OnViewClino(wxCommandEvent&) { if (m_Control) m_Control->OnViewClino(); }
412    void OnViewGrid(wxCommandEvent&) { if (m_Control) m_Control->OnViewGrid(); }
413    void OnViewBoundingBox(wxCommandEvent&) { if (m_Control) m_Control->OnViewBoundingBox(); }
414    void OnViewPerspective(wxCommandEvent&) { if (m_Control) m_Control->OnViewPerspective(); }
415    void OnViewSmoothShading(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothShading(); }
416    void OnViewTextured(wxCommandEvent&) { if (m_Control) m_Control->OnViewTextured(); }
417    void OnViewFog(wxCommandEvent&) { if (m_Control) m_Control->OnViewFog(); }
418    void OnViewSmoothLines(wxCommandEvent&) { if (m_Control) m_Control->OnViewSmoothLines(); }
419    void OnViewFullScreen(wxCommandEvent&) { ViewFullScreen(); }
420    void ViewFullScreen();
421    bool FullScreenModeShowingMenus() const;
422    void FullScreenModeShowMenus(bool show);
423    void OnReverseDirectionOfRotation(wxCommandEvent&) { if (m_Control) m_Control->OnReverseDirectionOfRotation(); }
424    void OnCancelDistLine(wxCommandEvent&) { if (m_Control) m_Control->OnCancelDistLine(); }
425
426    void OnToggleMetric(wxCommandEvent&) { if (m_Control) m_Control->OnToggleMetric(); }
427    void OnToggleDegrees(wxCommandEvent&) { if (m_Control) m_Control->OnToggleDegrees(); }
428    void OnTogglePercent(wxCommandEvent&) { if (m_Control) m_Control->OnTogglePercent(); }
429    void OnToggleTubes(wxCommandEvent&) { if (m_Control) m_Control->OnToggleTubes(); }
430
431    void OnToggleMetricUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleMetricUpdate(event); }
432    void OnToggleDegreesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleDegreesUpdate(event); }
433    void OnTogglePercentUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnTogglePercentUpdate(event); }
434    void OnToggleTubesUpdate(wxUpdateUIEvent& event) { if (m_Control) m_Control->OnToggleTubesUpdate(event); }
435
436    // end of horrible bodges
437
438    void OnViewSidePanelUpdate(wxUpdateUIEvent& event);
439    void OnViewSidePanel(wxCommandEvent& event);
440    void ToggleSidePanel();
441    bool ShowingSidePanel();
442
443    const Vector3 & GetExtent() const { return m_Ext; }
444    Double GetXExtent() const { return m_Ext.GetX(); }
445    Double GetYExtent() const { return m_Ext.GetY(); }
446    Double GetZExtent() const { return m_Ext.GetZ(); }
447
448    Double GetDepthExtent() const { return m_DepthExt; }
449    Double GetDepthMin() const { return m_DepthMin; }
450
451    bool HasCompleteDateInfo() const { return complete_dateinfo; }
452    int GetDateExtent() const { return m_DateExt; }
453    int GetDateMin() const { return m_DateMin; }
454
455    void SelectTreeItem(const LabelInfo* label) {
456        if (label->tree_id.IsOk())
457            m_Tree->SelectItem(label->tree_id);
458        else
459            m_Tree->UnselectAll();
460    }
461
462    void ClearTreeSelection();
463
464    int GetNumFixedPts() const { return m_NumFixedPts; }
465    int GetNumExportedPts() const { return m_NumExportedPts; }
466    int GetNumEntrances() const { return m_NumEntrances; }
467    int GetNumHighlightedPts() const { return m_NumHighlighted; }
468
469    bool HasUndergroundLegs() const { return m_HasUndergroundLegs; }
470    bool HasSplays() const { return m_HasSplays; }
471    bool HasSurfaceLegs() const { return m_HasSurfaceLegs; }
472    bool HasTubes() const { return !tubes.empty(); }
473    bool HasErrorInformation() const { return m_HasErrorInformation; }
474
475    bool IsExtendedElevation() const { return m_IsExtendedElevation; }
476
477    void ClearCoords();
478    void SetCoords(const Vector3 &v);
479    const LabelInfo * GetTreeSelection() const;
480    void SetCoords(Double x, Double y, const LabelInfo * there);
481    void SetAltitude(Double z, const LabelInfo * there);
482
483    const Vector3 & GetOffset() const { return m_Offsets; }
484
485    list<traverse>::const_iterator traverses_begin() const {
486        return traverses.begin();
487    }
488
489    list<traverse>::const_iterator traverses_end() const {
490        return traverses.end();
491    }
492
493    list<traverse>::const_iterator surface_traverses_begin() const {
494        return surface_traverses.begin();
495    }
496
497    list<traverse>::const_iterator surface_traverses_end() const {
498        return surface_traverses.end();
499    }
500
501    list<vector<XSect> >::const_iterator tubes_begin() const {
502        return tubes.begin();
503    }
504
505    list<vector<XSect> >::const_iterator tubes_end() const {
506        return tubes.end();
507    }
508
509    list<vector<XSect> >::iterator tubes_begin() {
510        return tubes.begin();
511    }
512
513    list<vector<XSect> >::iterator tubes_end() {
514        return tubes.end();
515    }
516
517    list<LabelInfo*>::const_iterator GetLabels() const {
518        return m_Labels.begin();
519    }
520
521    list<LabelInfo*>::const_iterator GetLabelsEnd() const {
522        return m_Labels.end();
523    }
524
525    list<LabelInfo*>::const_reverse_iterator GetRevLabels() const {
526        return m_Labels.rbegin();
527    }
528
529    list<LabelInfo*>::const_reverse_iterator GetRevLabelsEnd() const {
530        return m_Labels.rend();
531    }
532
533    list<LabelInfo*>::iterator GetLabelsNC() {
534        return m_Labels.begin();
535    }
536
537    list<LabelInfo*>::iterator GetLabelsNCEnd() {
538        return m_Labels.end();
539    }
540
541    void ShowInfo(const LabelInfo *here = NULL, const LabelInfo *there = NULL);
542    void DisplayTreeInfo(const wxTreeItemData* data = NULL);
543    void TreeItemSelected(const wxTreeItemData* data, bool zoom);
544    PresentationMark GetPresMark(int which);
545
546private:
547    DECLARE_EVENT_TABLE()
548};
549
550// Older wxGTK loses pop-up dialogs under the always-on-top, maximised window.
551// Not sure when this got fixed, but wx 2.8.10 definitely works properly on
552// Debian squeeze.
553//
554// To work around this issue, create this object on the stack, and it will
555// temporarily un-fullscreen the window while the dialog as a workaround.
556class AvenAllowOnTop {
557#if defined __WXGTK__ && !wxCHECK_VERSION(2,8,10)
558        MainFrm * mainfrm;
559    public:
560        AvenAllowOnTop(MainFrm * mainfrm_) {
561            if (mainfrm_ && mainfrm_->IsFullScreen()) {
562                mainfrm = mainfrm_;
563                mainfrm->ViewFullScreen();
564            } else {
565                mainfrm = 0;
566            }
567        }
568        ~AvenAllowOnTop() {
569            if (mainfrm) mainfrm->ViewFullScreen();
570        }
571#else
572    public:
573        AvenAllowOnTop(MainFrm *) { }
574#endif
575};
576
577#endif
Note: See TracBrowser for help on using the repository browser.