Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Frame.h
1 //
2 // Frame.h
3 //
4 // Copyright (c) 2001-2011 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
7 
8 #ifndef VTBUILDERFRAMEH
9 #define VTBUILDERFRAMEH
10 
11 #include "Builder.h"
12 #include "wx/aui/aui.h"
13 #include "wx/dnd.h"
14 #include "vtdata/WFSClient.h" // for OGCServerArray
15 #include "StatusBar.h"
16 
17 #define APPNAME "VTBuilder"
18 
19 // some shortcuts
20 #define ADD_TOOL(bar, id, bmp, label) \
21  bar->AddTool(id, label, bmp, wxNullBitmap, wxITEM_NORMAL, label, label)
22 #define ADD_TOOL2(bar, id, bmp, label, type) \
23  bar->AddTool(id, label, bmp, wxNullBitmap, type, label, label)
24 
25 class MyTreeCtrl;
26 class MyStatusBar;
27 
28 // dialogs
29 class SpeciesListDlg;
30 class FeatInfoDlg;
31 class DistanceDlg2d;
32 class LinearStructureDlg;
34 class InstanceDlg;
35 class MapServerDlg;
36 class ProfileDlg;
37 class BioRegionDlg;
38 class vtScaleBar;
39 
45 class MainFrame: public wxFrame, public Builder
46 {
47 public:
48  MainFrame(wxFrame *frame, const wxString& title,
49  const wxPoint& pos, const wxSize& size);
50  virtual ~MainFrame();
51 
52  // view
53  virtual void CreateView();
54  void ZoomAll();
55 
56  void SetupUI();
57  virtual void CreateMenus();
58  void UpdateMRU(wxMenu *menu, const vtStringArray &files, int first_id);
59  void ManageToolbar(const wxString &name, wxToolBar *bar, bool show);
60  wxToolBar *NewToolbar();
61  void CreateToolbar();
62  void RefreshToolbars();
63  virtual void AddMainToolbars();
64  virtual void SetProjection(const vtProjection &p);
65 
66 protected:
67  void OnClose(wxCloseEvent &event);
68  void OnFillIn(int method);
69 
70  // Menu commands
71  void OnProjectNew(wxCommandEvent& event);
72  void OnProjectOpen(wxCommandEvent& event);
73  void OnProjectSave(wxCommandEvent& event);
74  void OnProjectPrefs(wxCommandEvent& event);
75  void OnBatchConvert(wxCommandEvent &event);
76  void OnDymaxTexture(wxCommandEvent &event);
77  void OnDymaxMap(wxCommandEvent &event);
78  void OnProcessBillboard(wxCommandEvent &event);
79  void OnElevCopy(wxCommandEvent& event);
80  void OnElevPasteNew(wxCommandEvent& event);
81  void OnGeocode(wxCommandEvent &event);
82  void OnRunTest(wxCommandEvent &event);
83  void OnQuit(wxCommandEvent& event);
84 
85  void OnUpdateFileMRU(wxUpdateUIEvent& event);
86 
87  void OnEditDelete(wxCommandEvent& event);
88  void OnUpdateEditDelete(wxUpdateUIEvent& event);
89  void OnEditDeselectAll(wxCommandEvent& event);
90  void OnEditInvertSelection(wxCommandEvent& event);
91  void OnEditCrossingSelection(wxCommandEvent& event);
92  void OnUpdateCrossingSelection(wxUpdateUIEvent& event);
93  void OnEditOffset(wxCommandEvent& event);
94 
95  void OnUpdateEditOffset(wxUpdateUIEvent& event);
96 
97  void OnLayerNew(wxCommandEvent& event);
98  void OnLayerOpen(wxCommandEvent& event);
99  void OnLayerSave(wxCommandEvent& event);
100  void OnLayerSaveAs(wxCommandEvent& event);
101  void OnLayerImport(wxCommandEvent& event);
102  void OnLayerImportTIGER(wxCommandEvent& event);
103  void OnLayerImportNTF(wxCommandEvent& event);
104  void OnLayerImportUtil(wxCommandEvent& event);
105  void OnLayerImportMapSource(wxCommandEvent& event);
106  void OnLayerImportPoint(wxCommandEvent& event);
107  void OnLayerImportXML(wxCommandEvent& event);
108  void OnLayerImportDXF(wxCommandEvent& event);
109  void OnLayerProperties(wxCommandEvent& event);
110  void OnLayerConvert(wxCommandEvent& event);
111  void OnLayerSetProjection(wxCommandEvent& event);
112  void OnLayerCombine(wxCommandEvent& event);
113 
114  void OnUpdateLayerSave(wxUpdateUIEvent& event);
115  void OnUpdateLayerSaveAs(wxUpdateUIEvent& event);
116  void OnUpdateMRULayer(wxUpdateUIEvent& event);
117  void OnUpdateMRUImport(wxUpdateUIEvent& event);
118  void OnUpdateLayerProperties(wxUpdateUIEvent& event);
119  void OnUpdateLayerConvert(wxUpdateUIEvent& event);
120  void OnUpdateLayerCombine(wxUpdateUIEvent& event);
121 
122  void OnLayerShow(wxCommandEvent& event);
123  void OnLayerUp(wxCommandEvent& event);
124  void OnLayerDown(wxCommandEvent& event);
125  void OnViewMagnifier(wxCommandEvent& event);
126  void OnViewPan(wxCommandEvent& event);
127  void OnViewDistance(wxCommandEvent& event);
128  void OnViewSetArea(wxCommandEvent& event);
129 public:
130  void OnViewZoomIn(wxCommandEvent& event);
131  void OnViewZoomOut(wxCommandEvent& event);
132 protected:
133  void OnViewZoomAll(wxCommandEvent& event);
134  void OnViewZoomToLayer(wxCommandEvent& event);
135  void OnViewFull(wxCommandEvent& event);
136  void OnViewZoomArea(wxCommandEvent& event);
137  void OnViewToolbar(wxCommandEvent& event);
138  void OnViewLayers(wxCommandEvent& event);
139  void OnViewWorldMap(wxCommandEvent& event);
140  void OnViewUTMBounds(wxCommandEvent& event);
141  void OnViewProfile(wxCommandEvent& event);
142  void OnViewScaleBar(wxCommandEvent& event);
143  void OnViewOptions(wxCommandEvent& event);
144 
145  void OnUpdateLayerShow(wxUpdateUIEvent& event);
146  void OnUpdateLayerUp(wxUpdateUIEvent& event);
147  void OnUpdateLayerDown(wxUpdateUIEvent& event);
148  void OnUpdateMagnifier(wxUpdateUIEvent& event);
149  void OnUpdatePan(wxUpdateUIEvent& event);
150  void OnUpdateDistance(wxUpdateUIEvent& event);
151  void OnUpdateViewFull(wxUpdateUIEvent& event);
152  void OnUpdateViewZoomArea(wxUpdateUIEvent& event);
153  void OnUpdateViewToolbar(wxUpdateUIEvent& event);
154  void OnUpdateViewLayers(wxUpdateUIEvent& event);
155  void OnUpdateViewZoomToLayer(wxUpdateUIEvent& event);
156  void OnUpdateWorldMap(wxUpdateUIEvent& event);
157  void OnUpdateUTMBounds(wxUpdateUIEvent& event);
158  void OnUpdateViewProfile(wxUpdateUIEvent& event);
159  void OnUpdateViewScaleBar(wxUpdateUIEvent& event);
160 
161  void OnSelectLink(wxCommandEvent& event);
162  void OnSelectNode(wxCommandEvent& event);
163  void OnSelectWhole(wxCommandEvent& event);
164  void OnDirection(wxCommandEvent& event);
165  void OnRoadEdit(wxCommandEvent& event);
166  void OnRoadShowNodes(wxCommandEvent& event);
167  void OnSelectHwy(wxCommandEvent& event);
168  void OnRoadClean(wxCommandEvent& event);
169  void OnRoadGuess(wxCommandEvent& event);
170  void OnRoadFlatten(wxCommandEvent& event);
171 
172  void OnUpdateSelectLink(wxUpdateUIEvent& event);
173  void OnUpdateSelectNode(wxUpdateUIEvent& event);
174  void OnUpdateSelectWhole(wxUpdateUIEvent& event);
175  void OnUpdateDirection(wxUpdateUIEvent& event);
176  void OnUpdateRoadEdit(wxUpdateUIEvent& event);
177  void OnUpdateRoadShowNodes(wxUpdateUIEvent& event);
178  void OnUpdateRoadFlatten(wxUpdateUIEvent& event);
179 
180  void OnElevSelect(wxCommandEvent& event);
181  void OnRemoveElevRange(wxCommandEvent& event);
182  void OnElevComputeDiff(wxCommandEvent& event);
183  void OnElevSetUnknown(wxCommandEvent& event);
184  void OnFillFast(wxCommandEvent& event);
185  void OnFillSlow(wxCommandEvent& event);
186  void OnFillRegions(wxCommandEvent& event);
187  void OnScaleElevation(wxCommandEvent& event);
188  void OnVertOffsetElevation(wxCommandEvent& event);
189  void OnElevExport(wxCommandEvent& event);
190  void OnElevExportBitmap(wxCommandEvent& event);
191  void OnElevToTin(wxCommandEvent& event);
192  void OnElevContours(wxCommandEvent& event);
193  void OnElevExportTiles(wxCommandEvent& event);
194  void OnElevMergeTin(wxCommandEvent& event);
195  void OnElevTrimTin(wxCommandEvent& event);
196 
197  void OnUpdateElevSelect(wxUpdateUIEvent& event);
198  void OnUpdateViewSetArea(wxUpdateUIEvent& event);
199  void OnUpdateElevSetUnknown(wxUpdateUIEvent& event);
200  void OnUpdateElevMergeTin(wxUpdateUIEvent& event);
201  void OnUpdateElevTrimTin(wxUpdateUIEvent& event);
202  void OnUpdateIsElevation(wxUpdateUIEvent& event);
203  void OnUpdateIsGrid(wxUpdateUIEvent& event);
204 
205  void OnImageReplaceRGB(wxCommandEvent& event);
206  void OnImageCreateOverviews(wxCommandEvent& event);
207  void OnImageCreateOverviewsAll(wxCommandEvent& event);
208  void OnImageCreateMipMaps(wxCommandEvent& event);
209  void OnImageExportTiles(wxCommandEvent& event);
210  void OnImageExportPPM(wxCommandEvent& event);
211  void OnUpdateHaveImageLayer(wxUpdateUIEvent& event);
212  void OnUpdateHaveImageLayerInMem(wxUpdateUIEvent& event);
213 
214  void OnTowerSelect(wxCommandEvent& event);
215  void OnTowerEdit(wxCommandEvent& event);
216  void OnTowerAdd(wxCommandEvent& event);
217 
218  void OnUpdateTowerSelect(wxUpdateUIEvent& event);
219  void OnUpdateTowerEdit(wxUpdateUIEvent& event);
220  void OnUpdateTowerAdd(wxUpdateUIEvent& event);
221 
222  void OnVegPlants(wxCommandEvent& event);
223  void OnVegBioregions(wxCommandEvent& event);
224  void OnVegRemap(wxCommandEvent& event);
225  void OnVegExportSHP(wxCommandEvent& event);
226  void OnVegHTML(wxCommandEvent& event);
227  void OnUpdateVegExportSHP(wxUpdateUIEvent& event);
228 
229  void OnFeatureSelect(wxCommandEvent& event);
230  void OnFeaturePick(wxCommandEvent& event);
231  void OnFeatureTable(wxCommandEvent& event);
232  void OnBuildingEdit(wxCommandEvent& event);
233  void OnBuildingAddPoints(wxCommandEvent& event);
234  void OnBuildingDeletePoints(wxCommandEvent& event);
235  void OnStructureAddLinear(wxCommandEvent& event);
236  void OnStructureEditLinear(wxCommandEvent& event);
237  void OnStructureAddInstances(wxCommandEvent& event);
238  void OnStructureAddFoundation(wxCommandEvent& event);
239  void OnStructureConstrain(wxCommandEvent& event);
240  void OnStructureSelectUsingPolygons(wxCommandEvent& event);
241  void OnStructureColourSelectedRoofs(wxCommandEvent& event);
242  void OnStructureCleanFootprints(wxCommandEvent& event);
243  void OnStructureSelectIndex(wxCommandEvent& event);
244  void OnStructureExportFootprints(wxCommandEvent& event);
245  void OnStructureExportCanoma(wxCommandEvent& event);
246 
247  void OnUpdateFeatureSelect(wxUpdateUIEvent& event);
248  void OnUpdateFeaturePick(wxUpdateUIEvent& event);
249  void OnUpdateFeatureTable(wxUpdateUIEvent& event);
250  void OnUpdateBuildingEdit(wxUpdateUIEvent& event);
251  void OnUpdateBuildingAddPoints(wxUpdateUIEvent& event);
252  void OnUpdateBuildingDeletePoints(wxUpdateUIEvent& event);
253  void OnUpdateStructureAddLinear(wxUpdateUIEvent& event);
254  void OnUpdateStructureAddInstances(wxUpdateUIEvent& event);
255  void OnUpdateStructureEditLinear(wxUpdateUIEvent& event);
256  void OnUpdateStructureAddFoundation(wxUpdateUIEvent& event);
257  void OnUpdateStructureConstrain(wxUpdateUIEvent& event);
258  void OnUpdateStructureSelectUsingPolygons(wxUpdateUIEvent& event);
259  void OnUpdateStructureColourSelectedRoofs(wxUpdateUIEvent& event);
260  void OnUpdateStructureExportFootprints(wxUpdateUIEvent& event);
261 
262  void OnRawSetType(wxCommandEvent& event);
263  void OnRawAddPoints(wxCommandEvent& event);
264  void OnRawAddPointText(wxCommandEvent& event);
265  void OnRawAddPointsGPS(wxCommandEvent& event);
266  void OnRawAddFeatureWKT(wxCommandEvent& event);
267  void OnRawSelectCondition(wxCommandEvent& event);
268  void OnRawConvertToTIN(wxCommandEvent& event);
269  void OnRawExportImageMap(wxCommandEvent& event);
270  void OnRawExportKML(wxCommandEvent& event);
271  void OnRawGenElevation(wxCommandEvent& event);
272  void OnRawStyle(wxCommandEvent& event);
273  void OnRawScaleH(wxCommandEvent& event);
274  void OnRawScaleV(wxCommandEvent& event);
275  void OnRawOffsetV(wxCommandEvent& event);
276  void OnRawClean(wxCommandEvent& event);
277  void OnRawSelectBad(wxCommandEvent& event);
278 
279  void OnUpdateRawSetType(wxUpdateUIEvent& event);
280  void OnUpdateRawAddPoints(wxUpdateUIEvent& event);
281  void OnUpdateRawAddPointText(wxUpdateUIEvent& event);
282  void OnUpdateRawAddPointsGPS(wxUpdateUIEvent& event);
283  void OnUpdateRawIsActive(wxUpdateUIEvent& event);
284  void OnUpdateRawIsActive3D(wxUpdateUIEvent& event);
285  void OnUpdateRawIsPolygon(wxUpdateUIEvent& event);
286  void OnUpdateRawGenElevation(wxUpdateUIEvent& event);
287 
288  void OnAreaClear(wxCommandEvent& event);
289  void OnAreaZoomAll(wxCommandEvent& event);
290  void OnAreaZoomLayer(wxCommandEvent& event);
291  void OnAreaTypeIn(wxCommandEvent& event);
292  void OnAreaMatch(wxCommandEvent& event);
293  void OnAreaExportElev(wxCommandEvent& event);
294  void OnAreaOptimizedElevTileset(wxCommandEvent& event);
295  void OnAreaOptimizedImageTileset(wxCommandEvent& event);
296  void OnAreaExportImage(wxCommandEvent& event);
297  void OnAreaGenerateVeg(wxCommandEvent& event);
298  void OnAreaVegDensity(wxCommandEvent& event);
299  void OnAreaRequestWFS(wxCommandEvent& event);
300  void OnAreaRequestWMS(wxCommandEvent& event);
301  void OnAreaRequestTServe(wxCommandEvent& event);
302 
303  void OnUpdateAreaZoomAll(wxUpdateUIEvent& event);
304  void OnUpdateAreaZoomLayer(wxUpdateUIEvent& event);
305  void OnUpdateAreaMatch(wxUpdateUIEvent& event);
306  void OnUpdateAreaExportElev(wxUpdateUIEvent& event);
307  void OnUpdateAreaExportImage(wxUpdateUIEvent& event);
308  void OnUpdateAreaGenerateVeg(wxUpdateUIEvent& event);
309  void OnUpdateAreaVegDensity(wxUpdateUIEvent& event);
310  void OnUpdateAreaRequestWMS(wxUpdateUIEvent& event);
311 
312  void OnHelpAbout(wxCommandEvent& event);
313  void OnHelpDocLocal(wxCommandEvent& event);
314  void OnHelpDocOnline(wxCommandEvent& event);
315 
316  // Popup menu items
317  void OnDistanceClear(wxCommandEvent& event);
318  void OnShowAll(wxCommandEvent& event);
319  void OnHideAll(wxCommandEvent& event);
320  void OnLayerPropsPopup(wxCommandEvent& event);
321  void OnLayerToTop(wxCommandEvent& event);
322  void OnLayerToBottom(wxCommandEvent& event);
323  void OnLayerOverviewDisk(wxCommandEvent& event);
324  void OnLayerOverviewMem(wxCommandEvent& event);
325 
326  // MRU dynamic menus
327  void OnMRUFileProject(wxCommandEvent& event);
328  void OnMRUFileLayer(wxCommandEvent& event);
329  void OnMRUFileImport(wxCommandEvent& event);
330 
331  // keys (used for shortcuts)
332  void OnChar(wxKeyEvent& event);
333  void OnKeyDown(wxKeyEvent& event);
334  void OnMouseWheel(wxMouseEvent& event);
335 
336 public:
337  // project
338  bool LoadProject(const wxString &strPathName);
339  bool SaveProject(const wxString &strPathName) const;
340  void ShowOptionsDialog();
341  void OnDrop(const wxString &str);
342 
343  // Special menu
344  void DoProcessBillboard();
345  void DoElevCopy();
346  void DoElevPasteNew();
347  void DoGeocode();
348  void DoDymaxTexture();
349  void DoDymaxMap();
350 
351  // Layer methods
352  virtual bool AddLayerWithCheck(vtLayer *pLayer, bool bRefresh = true);
353  virtual void RemoveLayer(vtLayer *lp);
354  virtual void SetActiveLayer(vtLayer *lp, bool refresh = false);
355  void RefreshLayerInView(vtLayer *pLayer);
356  void ShowLayerProperties(vtLayer *lp);
357 
358  // UI
359  virtual void RefreshTreeStatus();
360  void RefreshTreeView();
361  void RefreshStatusBar();
362  BuilderView *GetView() { return m_pView; }
363  virtual void UpdateFeatureDialog(vtRawLayer *raw, vtFeatureSetPoint2D *set, int iEntity);
364  virtual void OnSetMode(LBMode m);
365  virtual void OnSelectionChanged();
366 
367  // Raw features
368  FeatInfoDlg *ShowFeatInfoDlg();
369  FeatInfoDlg *m_pFeatInfoDlg;
370 
371  // Distance and Elevation Profile
372  DistanceDlg2d *ShowDistanceDlg();
373  DistanceDlg2d *m_pDistanceDlg;
374  void UpdateDistance(const DPoint2 &p1, const DPoint2 &p2);
375  void UpdateDistance(const DLine2 &path);
376  void ClearDistance();
377  ProfileDlg *ShowProfileDlg();
378  ProfileDlg *m_pProfileDlg;
379 
380  // Structures
381  LinearStructureDlg *ShowLinearStructureDlg(bool bShow = true);
382  LinearStructureDlg2d *m_pLinearStructureDlg;
383  InstanceDlg *ShowInstanceDlg(bool bShow);
384 
385  // Vegetation
386  SpeciesListDlg *m_SpeciesListDlg;
387  BioRegionDlg *m_BioRegionDlg;
388 
389  // Web Access
390  OGCServerArray m_wms_servers;
391  OGCServerArray m_wfs_servers;
392 
393 protected:
394  // INI File
395  bool ReadINI(const char *fname);
396  //bool WriteINI();
397  bool ReadXML(const char *fname);
398  bool WriteXML(const char *fname);
399  void ApplyOptions();
400 
401  MapServerDlg *m_pMapServerDlg;
402 
403  // UI members
404  wxMenu *fileMenu;
405  wxMenu *mruMenu;
406  wxMenu *editMenu;
407  wxMenu *layerMenu;
408  wxMenu *mruLayerMenu;
409  wxMenu *mruImportMenu;
410  wxMenu *viewMenu;
411  wxMenu *elevMenu;
412  wxMenu *imgMenu;
413  wxMenu *vegMenu;
414  wxMenu *bldMenu;
415  wxMenu *roadMenu;
416  wxMenu *utilityMenu;
417  wxMenu *rawMenu;
418  wxMenu *areaMenu;
419  wxMenu *helpMenu;
420  wxMenuBar *m_pMenuBar;
421  wxToolBar *m_pToolbar; // main toolbar
422  wxToolBar *m_pLayBar[LAYER_TYPES]; // layer type-specific toolbars
423  MyStatusBar *m_statbar;
424  int m_iMainButtons;
425 
426  MyTreeCtrl *m_pTree; // left child of splitter
427  BuilderView *m_pView; // right child of splitter
428  vtScaleBar *m_pScaleBar;
429 
430  // menu numbers, for each layer type that has a corresponding menu
431  int m_iLayerMenu[LAYER_TYPES];
432 
433  wxAuiManager m_mgr;
434 
435  DECLARE_EVENT_TABLE()
436 };
437 
438 #if wxUSE_DRAG_AND_DROP
439 class DnDFile : public wxFileDropTarget
440 {
441 public:
442  virtual bool OnDropFiles(wxCoord x, wxCoord y,
443  const wxArrayString& filenames);
444 };
445 #endif
446 
447 extern MainFrame *GetMainFrame();
448 wxString GetImportFilterString(LayerType ltype);
449 float ElevLayerArrayValue(std::vector<vtElevLayer*> &elevs, const DPoint2 &p);
450 void ElevLayerArrayRange(std::vector<vtElevLayer*> &elevs,
451  float &minval, float &maxval);
452 
453 #endif // VTBUILDERFRAMEH
454