source: git/src/mainfrm.h @ d171c0c

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

lib/,src/: Add support for showing percentage gradient in the tilt
indicator in aven. Show the units (degrees, grads, or percent) for
the tilt and bearing indicators.

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