source: git/trunk/src/mainfrm.h @ 7bb8184

Last change on this file since 7bb8184 was 7bb8184, checked in by Olly Betts <olly@…>, 13 years ago

Retagging 1.2.0

git-svn-id: file:///home/survex-svn/survex/tags/1.2.0@3664 4b37db11-9a0c-4f06-9ece-9ab7cdaee568

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