fix compile against newer giflib
[rofl0r-obeditor.git] / src / levels__classes.h
blob35b44bf18e93b9b299abefd784c6300d008de2a7
1 /*
2 * le_classes.h
4 * Created on: 27 févr. 2009
5 * Author: pat
6 */
8 #ifndef LE_CLASSES_H_
9 #define LE_CLASSES_H_
11 #include <wx/notebook.h>
12 #include <set>
13 #include <map>
15 #include "common__tools.h"
16 #include "common__modalsFrames.h"
17 #include "common__prListBox.h"
18 #include "common__ob_controls.h"
19 #include "common__object_stage.h"
20 #include "common__wxFrameImage.h"
22 //-----------------------------------------------------------------
23 class Panel_StageView;
24 class Ob_GAtom;
25 //-----------------------------------------------------------------
27 bool FileLevels_Reload( wxWindow* _parent );
28 //-----------------------------------------------------------------
30 enum
32 LF_SETTINGS_TAGS = 0x0001,
35 //-----------------------------------------------------------------
36 //-----------------------------------------------------------------
37 class LevelEditorFrame: public wxFrame
39 public:
40 LevelEditorFrame(wxWindow *_parent, const wxString& title );
41 ~LevelEditorFrame();
43 void OnAbout(wxCommandEvent& event);
45 void Evt_Quit( wxCommandEvent& evt );
46 void EvtResize( wxSizeEvent& event );
47 void EvtClose( wxCloseEvent& event );
48 void EvtActivate( wxActivateEvent& );
49 void EvtMenu(wxCommandEvent& event);
50 void EvtCharPress(wxKeyEvent& event);
52 void Evt_STAGE__Reload( wxCommandEvent& evt_menu );
53 void Evt_STAGE__Save( wxCommandEvent& evt_menu );
54 void Evt_SAVE_LevelsTxt( wxCommandEvent& evt_menu );
55 void Evt_ReloadAll( wxCommandEvent& evt );
56 void Evt_SaveAll( wxCommandEvent& evt );
58 void Evt_SET__Select( wxCommandEvent& evt_menu );
59 void Evt_SET__Edit_Settings( wxCommandEvent& evt_menu );
60 void Evt_SET__Edit_ExtendedSettings( wxCommandEvent& evt_menu );
62 void Evt_STAGE__Edit_Declare_Settings( wxCommandEvent& evt_menu );
63 void Evt_STAGE__Edit_Settings( wxCommandEvent& evt_menu );
64 void Evt_STAGE__Edit_ExtendedSettings( wxCommandEvent& evt_menu );
65 void Evt_STAGE__Select( wxCommandEvent& evt_menu );
67 void Evt_SET__New( wxCommandEvent& evt_menu );
68 void Evt_STAGE__New( wxCommandEvent& evt_menu );
70 void Evt_LoadedEntities( wxCommandEvent& evt_menu );
71 void Evt_OpenLevelsInEditor( wxCommandEvent& evt_menu );
72 void Evt_OpenStageInEditor( wxCommandEvent& evt_menu );
74 void Evt_BACKGROUND_Click(wxCommandEvent& evt_menu );
75 void Evt_BGLayer_Add( wxCommandEvent& evt_menu );
76 void Evt_BGLayer_Click( wxCommandEvent& evt_menu );
77 void Evt_BGLayer_Order( wxCommandEvent& evt_menu );
78 void Evt_BGTest( wxCommandEvent& evt_menu );
80 void Evt_Panel_Add( wxCommandEvent& evt_menu );
81 void Evt_Panel_Order( wxCommandEvent& evt_menu );
82 void Evt_Panel_Click( wxCommandEvent& evt_menu );
84 void Evt_FrontPanels_Edit( wxCommandEvent& evt_menu );
85 void Evt_FrontPanel_Click( wxCommandEvent& evt_menu );
87 void Evt_OBJECT__Edit_Settings( wxCommandEvent& evt_menu );
88 void Evt_OBJECT__Edit_ExtendedSettings( wxCommandEvent& evt_menu );
90 void Evt_EntitiesListTypeChg( wxCommandEvent& evt_menu );
91 void Evt_EntitiesListTxtChg( wxKeyEvent& evt );
92 void Evt_EntitySelChg( wxCommandEvent& evt );
93 void Evt_EntitiesListRightClik( wxMouseEvent& evt );
94 void Evt_EntitiesAddOne(wxCommandEvent& evt );
96 void Evt_SuperType_Selection_Change( wxCommandEvent& evt_menu );
97 void Evt_SuperType_DblClick( wxMouseEvent& evt );
98 void Evt_Type_Selection_Change( wxCommandEvent& evt_menu );
99 void Evt_Type_DblClick( wxMouseEvent& evt );
100 void Evt_TYPEListRightClik( wxMouseEvent& evt );
101 void Evt_TYPEListAddOne( wxCommandEvent& evt_menu );
102 void Evt_ObjectList_Selection_Change( wxCommandEvent& evt_menu );
104 void Evt_ObjectDuplicate(wxCommandEvent& evt );
105 void Evt_ObjectDelete(wxCommandEvent& evt );
106 void Evt_ObjectProps(wxCommandEvent& evt );
107 void Evt_Object_SortAT(wxCommandEvent& evt );
109 void EvtRedo(wxCommandEvent&);
110 void EvtUndo(wxCommandEvent&);
112 void Evt_Help(wxCommandEvent& evt_menu );
114 public:
115 void UpdateTitle();
117 obFileEntity* Entity__Get( const wxString& item_name );
119 // Disable Elts : Menu, etc...
120 void Disable( const wxString& what_to_disable );
122 wxString GetModifsDone();
123 void SAVE_All();
124 void ReloadAll( bool b_quiet, bool b_save_states = true );
126 void SET__Save();
127 bool SET__Select( const wxString& _name, bool b_no_choose_stage = false );
128 void SET__New();
129 void SET__Edit_ExtendedSettings();
130 void SET__Edit_Settings();
131 void SET__Save_LastSession( const wxString& _name );
132 void SET__Select_LastSession();
133 void SET__ClearMenu_List();
134 void SET__Load_List( bool b_quiet = false);
136 bool STAGE__Save( obFileStage* _fStage );
137 bool STAGE__Reload( bool b_quiet = false );
138 bool STAGE__Select( const wxString& _name, bool b_no_saves = false );
139 void STAGE__New();
140 void STAGE__Edit_Declare_Settings();
141 void STAGE__Edit_Settings();
142 void STAGE__Edit_ExtendedSettings();
143 void STAGE__Save_LastSession( const wxString& _name );
144 void STAGE__Select_LastSession();
145 void STAGE__Clear_List();
146 void STAGE__Load_List( bool b_quiet = false );
148 void BG_ResetMenuList();
149 void BG_AddToMenu( const wxString& _name, int ind = -1, bool b_quiet = false);
150 void BG_Reload();
151 bool BG_Add();
152 bool BG_Order();
153 bool BG_Configure( ob_BG_Layer* _obj, bool b_background = false );
154 void BG_Test();
156 void Panel_ResetMenuList();
157 void Panel_AddToMenu( const wxString& _name, int ind = -1, bool b_quiet = false);
158 void Panel_Reload();
159 bool Panel_Add();
160 bool Panel_Order();
161 void Panel_Edit( int ind_panel, bool b_quiet = false);
163 void FrontPanel_ResetMenuList();
164 void FrontPanel_AddToMenu( const wxString& _name,int ind = -1, bool b_quiet = false );
165 void FrontPanel_Reload();
166 void FrontPanel_Edit_a_panel( int ind_panel, bool b_quiet = false);
167 void FrontPanel_Edit_All();
169 ///////////////////////////////////////////////////////////////////////
170 void ENTITIES__Load();
171 void ENTITIES__UnLoad();
172 void ENTITIES__FILTER__Apply();
174 ///////////////////////////////////////////////////////////////////////
175 void NOTEBOOK__Init();
176 void NOTEBOOK__UnInit();
177 void NOTEBOOK__ClearPages();
178 void NOTEBOOK__Save_Current_TypePage();
180 void NOTEBOOK__SetPage_StaticVal( const wxString& wxW_name, const wxString& val);
181 void NOTEBOOK__Evt_pspawn( wxCommandEvent& evt );
182 void NOTEBOOK__Evt_Item_pitem( wxCommandEvent& evt );
183 void NOTEBOOK__Evt_ItemName_Change( wxCommandEvent& evt );
184 void NOTEBOOK__Evt_ItemName_Valid( wxCommandEvent& evt );
185 void NOTEBOOK__Evt_ObjVisualChange(wxCommandEvent& evt );
186 void NOTEBOOK__Evt_AT_Change(wxCommandEvent& evt );
188 void NOTEBOOK__Set_MultiSelection();
189 void NOTEBOOK__Set_NoSelection(bool b_init = false);
190 void NOTEBOOK__Set_With( ob_stage_object* obj );
191 void NOTEBOOK__Update_Vals();
193 ///////////////////////////////////////////////////////////////////////
194 void OBJECT__Edit_ExtendedSettings();
195 void OBJECT__Edit_Settings();
197 ///////////////////////////////////////////////////////////////////////
198 // Objects Selections bidules
199 ///////////////////////////////////////////////////////////////////////
200 int OBJECT__Get_SelectionState( ob_stage_object* obj );
202 // Objects Selected machins
203 void OBJECT__ListSelected__Set( ob_stage_object* obj );
204 void OBJECT__ListSelected__Add( ob_stage_object* obj );
205 void OBJECT__ListSelected__Rm( ob_stage_object* obj );
206 void OBJECT__ListSelected__UpdateNoteBook();
207 void OBJECT__ListSelected__Clear();
208 bool OBJECT__ListSelected__IsIn( ob_stage_object* obj );
209 void OBJECT__ListSelected__Delete();
210 void OBJECT__ListSelected__Duplicate();
211 void OBJECT__ListSelected__Props(Ob_GAtom* obAtom = NULL );
213 // Objects Show States things
214 void OBJECT__ShowStates__Clear();
215 void OBJECT__ShowStates__Toggle_SuperType( int _st );
216 void OBJECT__ShowStates__Add_SuperType(int _st );
217 void OBJECT__ShowStates__Remove_SuperType( int _st );
218 void OBJECT__ShowStates__Toggle_TYPE( int _t );
219 void OBJECT__ShowStates__Add_TYPE(int _t );
220 void OBJECT__ShowStates__Remove_TYPE( int _t );
222 // Objects Highlighted Stuffs
223 void OBJECT__Visibilities_Update();
224 void OBJECT__Visibilities_Clear();
225 void OBJECT__Visibilities_SaveState();
226 void OBJECT__Visibilities_LoadState();
228 void SuperType__Select( int _sst );
229 void TYPE__Select( int _type, bool b_force = false );
230 void TYPE__Reselect();
231 int TYPE__Get_Current_Selected();
232 void OBJECT__CtrlList_Selection_Change();
233 void OBJECT__CtrlList_Clear();
235 // Objects Adding Stuffs
236 void OBJECT__Add_Entity( obFileEntity* ent );
237 void OBJECT__Add_Default_of_Type( int _TYPE );
239 ///////////////////////////////////////////////////////////////////////
240 void Menu_DoRedos__Update_Labels(std::_List_iterator<History_Group*>);
241 void Register_ControlsState_inHistory();
242 void Set_ControlsState_In(void*);
243 void Restore_ControlsState(void*);
245 ///////////////////////////////////////////////////////////////////////
246 void VIEW__Update( bool b_quiet = false );
247 void VIEW__Reset();
249 private:
250 // Menu Functions
251 void Disable_MenuItems( const wxString& what_to_disable );
252 void Menu_ResetListItem( int id_submenMenu_ResetListItemu, int id_startlist );
253 bool Menu_AddListItem( int id_submenu, int id_startlist
254 , const wxString& name, bool b_unique = false
255 , int ind_insert =-1 );
258 public:
259 // GENERAL PURPOSE FLAG
260 int m_flags;
262 Panel_StageView* stageView;
263 wxArrayString modificationList;
264 wxString baseTitle;
266 wxBoxSizer *sizer_bottom;
267 WndFromText* helpWin;
269 // Entities View and filters
270 wxTextCtrl *entities_filter;
271 wxComboBox *cbbox_entities_type;
272 prListBox *entities_list;
273 MyImageCtrl* entity_img;
275 // NoteBook related stuffs
276 wxNotebook *onglets;
277 GridOb_ObjectProperties * more_props;
278 std::map<int,wxWindow*> map_pages;
279 std::map<int,wxString*> map_pages_names;
280 std::map<wxString,wxWindow*> map_idPg_page;
281 std::map<int,std::list<wxString> > map_pages_elts;
282 std::map<int,int> map_type_last_active_pg;
283 int curr_page;
284 ob_stage_object* curr_associated_obj;
286 std::map<int,std::list<int> > map_type_l_pgs;
287 std::map<int,std::list<wxString> > map_type_l_disable;
288 std::map<int,std::list<wxString> > map_type_l_enable;
290 // MenuS...
291 wxMenuBar *menuBar;
292 wxPanel* mainPanel;
293 wxMenu *menuSets;
294 wxMenu *menuStage;
295 wxMenu *menuScene;
296 wxMenu *menuObjects;
297 wxMenu *menuUnRedo;
299 // Popup menus
300 wxMenu *menuAdd; // Just add item
302 // Tree like List of Type Super Type and atoms
303 prListBox *object_SuperType_list;
304 prListBox *object_Type_list;
305 prListBox *objects_List;
307 protected:
308 bool b_started;
309 bool b_closing;
311 wxString last_txt_filter;
314 public:
315 // For highlighted objects
316 int TYPE__curr_selected;
317 std::set<ob_stage_object*> aSet_Highlighted;
318 std::set<ob_stage_object*> aSet_Selected;
320 // For Show/Hide states
321 std::set<int> aSet_Hide_SuperType;
322 std::set<int> aSet_Hide_TYPE;
324 // Entities of the mod
325 size_t arr_entities__size;
326 obFileEntity** arr_entities;
328 DECLARE_EVENT_TABLE()
331 //****************************************************************
332 //****************************************************************
333 typedef struct
335 std::set<ob_stage_object*> selected;
336 }editor_level_states;
338 int level__onUndo(
339 std::list<History_Group*>::iterator it_group
340 , History_Elt* _elt
342 int level__onDo(
343 std::list<History_Group*>::iterator it_group
344 , History_Elt* _elt
346 void level__onNoMoreUndo(bool b_state);
347 void level__onNoMoreDo(bool b_state);
348 int level__onEltAdd(
349 std::list<History_Group*>::iterator it_group
350 , History_Elt* _elt
352 void level__onDeleteHistory_data(void*& _elt_datas);
353 void level__onAfterEltAdded();
356 #endif /* LE_CLASSES_H_ */