Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
EnviroFrame.h
1 //
2 // Name: EnviroFrame.h
3 //
4 // Copyright (c) 2001-2011 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
7 
8 #ifndef FRAMEH
9 #define FRAMEH
10 
11 #include "wx/aui/aui.h"
12 #include "wx/dnd.h"
13 
14 #include "../EnviroEnum.h"
15 #include "vtlib/core/Event.h"
16 
17 // Forward declare the dialogs
18 class BuildingDlg3d;
19 class CameraDlg;
20 class DistanceDlg3d;
21 class DriveDlg;
22 class EphemDlg;
23 class FeatureTableDlg3d;
24 class InstanceDlg;
25 class LODDlg;
27 class LocationDlg;
28 class LayerDlg;
29 class PlantDlg;
31 class SceneGraphDlg;
32 class TagDlg;
33 class TimeDlg;
34 class UtilDlg;
35 class ProfileDlg;
36 class VehicleDlg;
37 class camera3kdlg;
38 class vtAbstractLayer;
39 class vtFeatureSet;
40 class vtTerrain;
41 class vtTimeEngine;
42 #ifdef NVIDIA_PERFORMANCE_MONITORING
44 #endif
45 class VIADlg;
46 
47 // some shortcuts
48 #define ADD_TOOL2(bar, id, bmp, label, type) \
49  bar->AddTool(id, label, bmp, wxNullBitmap, type, label, label)
50 
55 class EnviroFrame: public wxFrame
56 {
57 public:
58  EnviroFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size,
59  long style = wxDEFAULT_FRAME_STYLE, bool bVerticalToolbar = false, bool bEnableEarth = true);
60  ~EnviroFrame();
61 
62  void CreateMenus();
63  void CreateToolbar();
64  virtual void RefreshToolbar();
65 
66  virtual void SetMode(MouseMode mode);
67  void ToggleNavigate();
68  void ChangeFlightSpeed(float factor);
69  void SetTerrainDetail(int iMetric);
70  int GetTerrainDetail();
71  void ChangePagingRange(float prange);
72  void SetFullScreen(bool bFull);
73  ProfileDlg *ShowProfileDlg();
74  void OpenFenceDialog();
75  void ShowPopupMenu(const IPoint2 &pos);
76  void SetTimeEngine(vtTimeEngine *pEngine);
77  void Snapshot(bool bNumbered);
78  void CameraChanged();
79  void OnDrop(const wxString &str);
80 
81  virtual void SetTerrainToGUI(vtTerrain *pTerrain);
82  virtual void EarthPosUpdated(const DPoint3 &pos);
83  virtual void UpdateStatus();
84  virtual bool OnMouseEvent(vtMouseEvent &event) { return false; }
85  virtual void Setup3DScene() {}
86  virtual bool IsAcceptable(vtTerrain *pTerr) { return true; }
87  virtual void OnCreateTerrain(vtTerrain *pTerr) {}
88  virtual void FrameArgument(int i, const char *str) { }
89  virtual void PostConstruction() { }
90  virtual void AddTool(int id, const wxBitmap &bmp, const wxString &tooltip, bool tog);
91  virtual void ExtendStructure(vtStructInstance *si) {}
92  virtual void SetScenario(int num) {}
93 
94  void UpdateLODInfo();
95  void ShowTable(vtAbstractLayer *alay);
96  void OnSetDelete(vtFeatureSet *set);
97  void DeleteAllSelected();
98 
99  DriveDlg *GetDriveDlg() { return m_pDriveDlg; }
100 
101  // command handlers
102  void OnExit(wxCommandEvent& event);
103  void OnClose(wxCloseEvent &event);
104  void OnIdle(wxIdleEvent& event);
105  void OnChar(wxKeyEvent& event);
106  void OnKeyDown(wxKeyEvent& event);
107 
108 #ifdef __WXMSW__
109  // Catch special events, or calls an appropriate default window procedure
110  virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
111 #endif
112 
113 protected:
114  void OnFileLayers(wxCommandEvent& event);
115 
116  void OnLayerCreate(wxCommandEvent& event);
117  void OnLayerLoad(wxCommandEvent& event);
118  void OnSaveTerrain(wxCommandEvent& event);
119  void OnSaveTerrainAs(wxCommandEvent& event);
120 
121  void OnUpdateLayerCreate(wxUpdateUIEvent& event);
122  void OnUpdateLayerLoad(wxUpdateUIEvent& event);
123  void OnUpdateSaveTerrain(wxUpdateUIEvent& event);
124 
125  void OnViewMaintain(wxCommandEvent& event);
126  void OnViewWireframe(wxCommandEvent& event);
127  void OnViewFullscreen(wxCommandEvent& event);
128  void OnViewTopDown(wxCommandEvent& event);
129  void OnViewStats(wxCommandEvent& event);
130  void OnViewElevLegend(wxCommandEvent& event);
131  void OnViewCompass(wxCommandEvent& event);
132  void OnViewMapOverView(wxCommandEvent& event);
133  void OnViewDrive(wxCommandEvent& event);
134  void OnViewSettings(wxCommandEvent& event);
135  void OnViewLocations(wxCommandEvent& event);
136  void OnViewReset(wxCommandEvent& event);
137  void OnViewSnapshot(wxCommandEvent& event);
138  void OnViewSnapAgain(wxCommandEvent& event);
139  void OnViewSnapHigh(wxCommandEvent& event);
140  void OnViewStatusBar(wxCommandEvent& event);
141  void OnViewScenarios(wxCommandEvent& event);
142  void OnViewProfile(wxCommandEvent& event);
143  void OnViewToolCulture(wxCommandEvent& event);
144  void OnViewToolSnapshot(wxCommandEvent& event);
145  void OnViewToolTime(wxCommandEvent& event);
146 
147  void OnUpdateViewMaintain(wxUpdateUIEvent& event);
148  void OnUpdateViewWireframe(wxUpdateUIEvent& event);
149  void OnUpdateViewFullscreen(wxUpdateUIEvent& event);
150  void OnUpdateViewTopDown(wxUpdateUIEvent& event);
151  void OnUpdateViewFramerate(wxUpdateUIEvent& event);
152  void OnUpdateViewElevLegend(wxUpdateUIEvent& event);
153  void OnUpdateViewCompass(wxUpdateUIEvent& event);
154  void OnUpdateViewMapOverView(wxUpdateUIEvent& event);
155  void OnUpdateViewDrive(wxUpdateUIEvent& event);
156  void OnUpdateViewLocations(wxUpdateUIEvent& event);
157  void OnUpdateViewStatusBar(wxUpdateUIEvent& event);
158  void OnUpdateViewProfile(wxUpdateUIEvent& event);
159  void OnUpdateViewToolCulture(wxUpdateUIEvent& event);
160  void OnUpdateViewToolSnapshot(wxUpdateUIEvent& event);
161  void OnUpdateViewToolTime(wxUpdateUIEvent& event);
162 
163  void OnViewSlower(wxCommandEvent& event);
164  void OnViewFaster(wxCommandEvent& event);
165  void OnNavNormal(wxCommandEvent& event);
166  void OnNavVelo(wxCommandEvent& event);
167  void OnNavGrabPivot(wxCommandEvent& event);
168  void OnNavPano(wxCommandEvent& event);
169 
170  void OnUpdateViewSlower(wxUpdateUIEvent& event);
171  void OnUpdateViewFaster(wxUpdateUIEvent& event);
172  void OnUpdateNavNormal(wxUpdateUIEvent& event);
173  void OnUpdateNavVelo(wxUpdateUIEvent& event);
174  void OnUpdateNavGrabPivot(wxUpdateUIEvent& event);
175  void OnUpdateNavPano(wxUpdateUIEvent& event);
176 
177  void OnToolsSelect(wxCommandEvent& event);
178  void OnUpdateToolsSelect(wxUpdateUIEvent& event);
179  void OnToolsSelectBox(wxCommandEvent& event);
180  void OnUpdateToolsSelectBox(wxUpdateUIEvent& event);
181  void OnToolsSelectMove(wxCommandEvent& event);
182  void OnUpdateToolsSelectMove(wxUpdateUIEvent& event);
183  void OnToolsFences(wxCommandEvent& event);
184  void OnUpdateToolsFences(wxUpdateUIEvent& event);
185  void OnToolsBuildings(wxCommandEvent& event);
186  void OnUpdateToolsBuildings(wxUpdateUIEvent& event);
187  void OnToolsRoutes(wxCommandEvent& event);
188  void OnUpdateToolsRoutes(wxUpdateUIEvent& event);
189  void OnToolsPlants(wxCommandEvent& event);
190  void OnUpdateToolsPlants(wxUpdateUIEvent& event);
191  void OnToolsPoints(wxCommandEvent& event);
192  void OnUpdateToolsPoints(wxUpdateUIEvent& event);
193  void OnToolsInstances(wxCommandEvent& event);
194  void OnUpdateToolsInstances(wxUpdateUIEvent& event);
195  void OnToolsVehicles(wxCommandEvent& event);
196  void OnUpdateToolsVehicles(wxUpdateUIEvent& event);
197  void OnToolsMove(wxCommandEvent& event);
198  void OnUpdateToolsMove(wxUpdateUIEvent& event);
199  void OnToolsNavigate(wxCommandEvent& event);
200  void OnUpdateToolsNavigate(wxUpdateUIEvent& event);
201  void OnToolsMeasure(wxCommandEvent& event);
202  void OnUpdateToolsMeasure(wxUpdateUIEvent& event);
203  void OnToolsConstrain(wxCommandEvent& event);
204  void OnUpdateToolsConstrain(wxUpdateUIEvent& event);
205  // Visual impact submenu
206  void OnVIACalculate(wxCommandEvent& event);
207  void OnUpdateVIACalculate(wxUpdateUIEvent& event);
208  void OnVIAPlot(wxCommandEvent& event);
209  void OnUpdateVIAPlot(wxUpdateUIEvent& event);
210  void OnVIAClear(wxCommandEvent& event);
211  void OnUpdateVIAClear(wxUpdateUIEvent& event);
212 
213 
214  void OnSceneGraph(wxCommandEvent& event);
215  #ifdef NVIDIA_PERFORMANCE_MONITORING
216  void OnPerformanceMonitor(wxCommandEvent& event);
217  #endif
218  void OnSceneTerrain(wxCommandEvent& event);
219  void OnUpdateSceneTerrain(wxUpdateUIEvent& event);
220  void OnSceneSpace(wxCommandEvent& event);
221  void OnUpdateSceneSpace(wxUpdateUIEvent& event);
222  void OnSceneSave(wxCommandEvent& event);
223  void OnSceneEphemeris(wxCommandEvent& event);
224  void OnUpdateSceneEphemeris(wxUpdateUIEvent& event);
225 
226  void OnTimeDialog(wxCommandEvent& event);
227  void OnTimeStop(wxCommandEvent& event);
228  void OnTimeFaster(wxCommandEvent& event);
229 
230  void OnDynamic(wxCommandEvent& event);
231  void OnCullEvery(wxCommandEvent& event);
232  void OnCullOnce(wxCommandEvent& event);
233  void OnSky(wxCommandEvent& event);
234  void OnHorizon(wxCommandEvent& event);
235  void OnOcean(wxCommandEvent& event);
236  void OnPlants(wxCommandEvent& event);
237  void OnStructures(wxCommandEvent& event);
238  void OnRoads(wxCommandEvent& event);
239  void OnFog(wxCommandEvent& event);
240  void OnIncrease(wxCommandEvent& event);
241  void OnDecrease(wxCommandEvent& event);
242  void OnLOD(wxCommandEvent& event);
243  void OnToggleFoundations(wxCommandEvent& event);
244  void OnTerrainReshade(wxCommandEvent& event);
245  void OnTerrainChangeTexture(wxCommandEvent& event);
246  void OnTerrainDistribVehicles(wxCommandEvent& event);
247  void OnTerrainWriteElevation(wxCommandEvent& event);
248  void OnTerrainAddContour(wxCommandEvent& event);
249 
250  void OnUpdateDynamic(wxUpdateUIEvent& event);
251  void OnUpdateCullEvery(wxUpdateUIEvent& event);
252  void OnUpdateSky(wxUpdateUIEvent& event);
253  void OnUpdateHorizon(wxUpdateUIEvent& event);
254  void OnUpdateOcean(wxUpdateUIEvent& event);
255  void OnUpdatePlants(wxUpdateUIEvent& event);
256  void OnUpdateStructures(wxUpdateUIEvent& event);
257  void OnUpdateRoads(wxUpdateUIEvent& event);
258  void OnUpdateFog(wxUpdateUIEvent& event);
259  void OnUpdateLOD(wxUpdateUIEvent& event);
260  void OnUpdateSaveVeg(wxUpdateUIEvent& event);
261  void OnUpdateSaveStruct(wxUpdateUIEvent& event);
262  void OnUpdateFoundations(wxUpdateUIEvent& event);
263  void OnUpdateIsTerrainView(wxUpdateUIEvent& event);
264  void OnUpdateIsDynTerrain(wxUpdateUIEvent& event);
265 
266  void OnEarthShowShading(wxCommandEvent& event);
267  void OnEarthShowAxes(wxCommandEvent& event);
268  void OnEarthTilt(wxCommandEvent& event);
269  void OnEarthFlatten(wxCommandEvent& event);
270  void OnEarthUnfold(wxCommandEvent& event);
271  void OnEarthClouds(wxCommandEvent& event);
272  void OnEarthClouds2(wxCommandEvent& event);
273 
274  void OnUpdateEarthShowShading(wxUpdateUIEvent& event);
275  void OnUpdateEarthShowAxes(wxUpdateUIEvent& event);
276  void OnUpdateEarthTilt(wxUpdateUIEvent& event);
277  void OnUpdateEarthFlatten(wxUpdateUIEvent& event);
278  void OnUpdateEarthUnfold(wxUpdateUIEvent& event);
279  void OnUpdateInOrbit(wxUpdateUIEvent& event);
280  void OnUpdateInOrbitOrTerrain(wxUpdateUIEvent& event);
281  void OnUpdateEarthClouds(wxUpdateUIEvent& event);
282 
283  virtual void OnHelpAbout(wxCommandEvent& event);
284  virtual void OnHelpDocLocal(wxCommandEvent& event);
285  virtual void OnHelpDocOnline(wxCommandEvent& event);
286 
287  void OnPopupProperties(wxCommandEvent& event);
288  void OnPopupFlip(wxCommandEvent& event);
289  void OnPopupReload(wxCommandEvent& event);
290  void OnPopupShadow(wxCommandEvent& event);
291  void OnPopupAdjust(wxCommandEvent& event);
292  void OnPopupStart(wxCommandEvent& event);
293  void OnPopupDelete(wxCommandEvent& event);
294  void OnPopupURL(wxCommandEvent& event);
295  void OnPopupVIA(wxCommandEvent& event);
296  void OnUpdatePopupVIA(wxUpdateUIEvent& event);
297  void OnPopupVIATarget(wxCommandEvent& event);
298  void OnUpdatePopupVIATarget(wxUpdateUIEvent& event);
299 
300  void DoTestCode();
301  void LoadClouds(const char *fname);
302  void CarveTerrainToFitNode(osg::Node *node);
303 
304  void ParseCommandLine(const char *cmdstart, char **argv, char *args, int *numargs, int *numchars);
305 
306 public:
307  class vtGLCanvas *m_canvas;
308  wxToolBar *m_pToolbar;
309  wxMenuBar *m_pMenuBar;
310  class MyStatusBar *m_pStatusBar;
311 
312  wxMenu *m_pFileMenu;
313  wxMenu *m_pToolsMenu;
314  wxMenu *m_pViewMenu;
315  wxMenu *m_pNavMenu;
316  wxMenu *m_pEarthMenu;
317  wxMenu *m_pTerrainMenu;
318  wxMenu *m_pSceneMenu;
319 
320  // Modeless dialogs
321  SceneGraphDlg *m_pSceneGraphDlg;
322  PlantDlg *m_pPlantDlg;
323  LinearStructureDlg3d *m_pFenceDlg;
324  UtilDlg *m_pUtilDlg;
325  CameraDlg *m_pCameraDlg;
326  LocationDlg *m_pLocationDlg;
327  BuildingDlg3d *m_pBuildingDlg;
328  TagDlg *m_pTagDlg;
329  LayerDlg *m_pLayerDlg;
330  InstanceDlg *m_pInstanceDlg;
331  DistanceDlg3d *m_pDistanceDlg;
332  EphemDlg *m_pEphemDlg;
333  TimeDlg *m_pTimeDlg;
334  ScenarioSelectDialog *m_pScenarioSelectDialog;
335  LODDlg *m_pLODDlg;
336  ProfileDlg *m_pProfileDlg;
337  VehicleDlg *m_pVehicleDlg;
338  camera3kdlg *m_pcamera3kdlg;
339  DriveDlg *m_pDriveDlg;
340  #ifdef NVIDIA_PERFORMANCE_MONITORING
341  CPerformanceMonitorDialog *m_pPerformanceMonitorDlg;
342  #endif
343  VIADlg *m_pVIADlg;
344 
345  MouseMode m_ToggledMode;
346 
347  // There can be any number of feature dialogs, one for each abstract layer
348  std::vector<FeatureTableDlg3d*> m_FeatureDlgs;
349 
350 protected:
351  wxAuiManager m_mgr;
352 
353  bool m_bAlwaysMove;
354  bool m_bCulleveryframe;
355  bool m_bFullscreen;
356  bool m_bTopDown;
357  bool m_bEnableEarth;
358  bool m_bEarthLines;
359  bool m_bVerticalToolbar;
360 
361  // snapshot members
362  wxString m_strSnapshotFilename;
363  int m_iSnapshotNumber;
364 
365  bool m_bCloseOnIdle;
366 
367 DECLARE_EVENT_TABLE()
368 };
369 
370 #if wxUSE_DRAG_AND_DROP
371 class DnDFile : public wxFileDropTarget
372 {
373 public:
374  virtual bool OnDropFiles(wxCoord x, wxCoord y,
375  const wxArrayString& filenames);
376 };
377 #endif
378 
379 // Helper
380 EnviroFrame *GetFrame();
381 
382 #endif
383