source: git/src/mainfrm.h @ af50685

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

lib/survex.pot,src/: Add "Colour by Length".

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