Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
frame.h
1 //
2 // Name: 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 FRAMEH
9 #define FRAMEH
10 
11 #include <wx/dnd.h> // for wxFileDropTarget
12 #include <wx/splitter.h> // for wxSplitterWindow
13 #include "vtlib/core/Content3d.h"
14 #include "vtdata/FilePath.h"
15 #include <map>
16 
17 class MyTreeCtrl;
18 class vtTransform;
19 class SceneGraphDlg;
20 class PropPanel;
21 class ModelPanel;
22 class LightDlg;
23 class vtGroup;
24 class vtLOD;
25 class vtGeode;
26 class vtTransform;
27 class ItemGroup;
28 
29 class Splitter2 : public wxSplitterWindow
30 {
31 public:
32  Splitter2(wxWindow *parent, wxWindowID id = -1,
33  const wxPoint& pos = wxDefaultPosition,
34  const wxSize& size = wxDefaultSize,
35  long style = wxSP_3D|wxCLIP_CHILDREN,
36  const wxString& name = _T("splitter")) :
37  wxSplitterWindow(parent, id, pos, size, style, name)
38  {
39  bResetting = false;
40  }
41  virtual void SizeWindows();
42 
43  bool bResetting;
44  int m_last;
45 };
46 
47 class vtFrame: public wxFrame
48 {
49 public:
50  vtFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size,
51  long style = wxDEFAULT_FRAME_STYLE);
52  ~vtFrame();
53 
54 protected:
55  void CreateMenus();
56  void CreateToolbar();
57 
58  void ReadDataPath();
59 
60  // command handlers
61  void OnExit(wxCommandEvent& event);
62  void OnClose(wxCloseEvent &event);
63  void OnIdle(wxIdleEvent& event);
64 
65  void OnOpen(wxCommandEvent& event);
66  void OnSave(wxCommandEvent& event);
67  void OnTestXML(wxCommandEvent& event);
68  void OnItemNew(wxCommandEvent& event);
69  void OnItemDelete(wxCommandEvent& event);
70  void OnItemAddModel(wxCommandEvent& event);
71  void OnItemRemoveModel(wxCommandEvent& event);
72  void OnItemModelProps(wxCommandEvent& event);
73  void OnItemRotModel(wxCommandEvent& event);
74  void OnItemSetAmbient(wxCommandEvent& event);
75  void OnItemSmoothing(wxCommandEvent& event);
76  void OnItemSaveSOG(wxCommandEvent& event);
77  void OnItemSaveOSG(wxCommandEvent& event);
78  void OnItemSaveIVE(wxCommandEvent& event);
79  void OnSceneGraph(wxCommandEvent& event);
80  void OnViewOrigin(wxCommandEvent& event);
81  void OnUpdateViewOrigin(wxUpdateUIEvent& event);
82  void OnViewRulers(wxCommandEvent& event);
83  void OnUpdateViewRulers(wxUpdateUIEvent& event);
84  void OnViewWireframe(wxCommandEvent& event);
85  void OnUpdateViewWireframe(wxUpdateUIEvent& event);
86  void OnViewLights(wxCommandEvent& event);
87  void OnHelpAbout(wxCommandEvent& event);
88 
89  void OnUpdateItemAddModel(wxUpdateUIEvent& event);
90  void OnUpdateItemModelExists(wxUpdateUIEvent& event);
91  void OnUpdateItemSaveSOG(wxUpdateUIEvent& event);
92 
93  void SaveContentsFile(const wxString &fname);
94  void FreeContents();
95 
96  void DisplayMessageBox(const wxString &str);
97  void AddTool(int id, const wxBitmap &bmp, const wxString &tooltip, bool tog) {
98  m_pToolbar->AddTool(id, wxEmptyString, bmp, wxNullBitmap,
99  tog ? wxITEM_CHECK : wxITEM_NORMAL, tooltip, tooltip, NULL);
100  }
101 
102 public:
103  class vtGLCanvas *m_canvas;
104  wxToolBar *m_pToolbar;
105 
106  wxSplitterWindow *m_splitter;
107  Splitter2 *m_splitter2;
108  wxWindow *m_blank;
109  MyTreeCtrl *m_pTree; // left child of splitter
110 
111  // Modeless dialogs
112  SceneGraphDlg *m_pSceneGraphDlg;
113  PropPanel *m_pPropDlg;
114  ModelPanel *m_pModelDlg;
115  LightDlg *m_pLightDlg;
116 
117 public:
118  void RenderingPause();
119  void RenderingResume();
120  void AddModelFromFile(const wxString &fname);
121  void ModelNameChanged(vtModel *model);
122  int GetModelTriCount(vtModel *model);
123  void OnChar(wxKeyEvent& event);
124  void UseLight(vtTransform *pLight);
125  void LoadContentsFile(const wxString &fname);
126  void UpdateStatusText();
127 
128 public:
129  void UpdateCurrentModelLOD();
130  void UpdateScale(vtModel *model);
131  void UpdateTransform(vtModel *model);
132  void RefreshTreeItems();
133  void SetItemName(vtItem *item, const vtString &name);
134 
135  // Models
136  void SetCurrentItemAndModel(vtItem *item, vtModel *model);
137  void SetCurrentItem(vtItem *item);
138  void SetCurrentModel(vtModel *mod);
139  vtModel *AddModel(const wxString &fname);
140  vtTransform *AttemptLoad(vtModel *model);
141  ItemGroup *GetItemGroup(vtItem *item);
142  void UpdateItemGroup(vtItem *item);
143  void ShowItemGroupLOD(bool bTrue);
144  void AddNewItem();
145  void DisplayCurrentModel();
146  void ZoomToCurrentModel();
147  void ZoomToModel(vtModel *model);
148  void UpdateWidgets();
149 
150  void DisplayCurrentItem();
151  void ZoomToCurrentItem();
152 
153  vtContentManager3d m_Man;
154  vtItem *m_pCurrentItem;
155  vtModel *m_pCurrentModel;
156  vtFontPtr m_pFont;
157 
158  std::map<vtItem *, ItemGroup *> m_itemmap;
159  std::map<vtModel *, vtTransformPtr> m_nodemap;
160 
161  bool m_bShowOrigin;
162  bool m_bShowRulers;
163  bool m_bWireframe;
164 
165  bool m_bCloseOnIdle;
166 
167  DECLARE_EVENT_TABLE()
168 };
169 
170 class DnDFile : public wxFileDropTarget
171 {
172 public:
173  virtual bool OnDropFiles(wxCoord x, wxCoord y,
174  const wxArrayString &filenames);
175 };
176 
177 // Helper
178 extern vtFrame *GetMainFrame();
179 
180 #endif // FRAMEH
181