2 * levels__myWnd_EditBackground.cpp
4 * Created on: 8 mai 2009
13 #include "common__mod.h"
14 #include "common__ob_controls.h"
16 #include "levels__globals.h"
17 #include "levels__sidesWindows.h"
18 #include "levels__wndEditBackground.h"
19 #include "levels__Ctrl_SceneView.h"
22 const wxFont
font_Alphabet( 18, wxFONTFAMILY_DEFAULT
, wxFONTSTYLE_NORMAL
, wxFONTWEIGHT_BOLD
, true );
23 const wxFont
font_Label( 16, wxFONTFAMILY_DEFAULT
, wxFONTSTYLE_NORMAL
, wxNORMAL
, true );
25 //----------------------------------------------------------------------------
26 const int MAX_LAYERS
= 20;
27 const int REPEAT_FOREVER
= 100;
29 wxString alphaChoices
[] = {wxT("0"),wxT("1"),wxT("2"),wxT("3"),wxT("4"),wxT("5"),wxT("6")};
31 //****************************************************
32 myWnd_EditBackground::myWnd_EditBackground(
35 , ob_StageDeclaration
* _stage_declaration
36 , ob_StagesSet
* _stage_set
38 :wxDialog( _parent
, wxID_ANY
, wxT("Edit Backgound"), wxDefaultPosition
, wxDefaultSize
39 ,wxMAXIMIZE_BOX
| wxRESIZE_BORDER
| wxDEFAULT_DIALOG_STYLE
)
42 stage_declaration
= _stage_declaration
;
43 stage_set
= _stage_set
;
45 b_not_update_vals
= false;
46 b_updating_vals
= false;
47 b_initialised
= false;
52 oMap_OldNew_Layers__size
= 0;
53 oMap_OldNew_Layers
= NULL
;
56 wxSizer
*t_sizer
, *t_sizer2
;
58 //-------------------------------------
59 wxSizer
* sizer_main
= new wxBoxSizer( wxVERTICAL
);
60 wxSizer
* sizer_middle
= new wxBoxSizer( wxHORIZONTAL
);
62 //-------------------------------------
64 wxSizer
* t_sizer_top
= new wxBoxSizer( wxHORIZONTAL
);
65 sizer_main
->Add( t_sizer_top
, 0, wxEXPAND
);
66 int BORDERS_SIZES
= 1;
67 // Control with current layer values
69 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
70 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("Path") )
71 ,0,wxALL
, BORDERS_SIZES
);
73 ctrl_path
= new prObFileChooserCtrl( this );
74 ctrl_path
->Connect( wxEVT_OBFILECHOOSER_CHANGE
75 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
77 ctrl_path
->Connect( wxEVT_KILL_FOCUS
78 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
80 // ctrl_path->SetMaxSize( wxSize( BTN_W + 20, wxDefaultCoord));
81 t_sizer2
->Add( ctrl_path
82 ,0,wxALL
, BORDERS_SIZES
);
83 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
86 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
87 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("xRat") )
88 ,0,wxALL
, BORDERS_SIZES
);
89 txtCtrl_Xratio
= new wxTextCtrl(this, wxID_ANY
90 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
91 , wxValidatorFloatPositive() );
92 txtCtrl_Xratio
->Connect( wxEVT_COMMAND_TEXT_ENTER
93 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
95 txtCtrl_Xratio
->Connect( wxEVT_KILL_FOCUS
96 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
98 txtCtrl_Xratio
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
99 txtCtrl_Xratio
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
100 t_sizer2
->Add( txtCtrl_Xratio
101 ,0,wxALL
, BORDERS_SIZES
);
102 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
105 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
106 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("zRat") )
107 ,0,wxALL
, BORDERS_SIZES
);
108 txtCtrl_Zratio
= new wxTextCtrl(this, wxID_ANY
109 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
110 , wxValidatorFloatPositive() );
111 txtCtrl_Zratio
->Connect( wxEVT_KILL_FOCUS
112 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
114 txtCtrl_Zratio
->Connect( wxEVT_KILL_FOCUS
115 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
117 txtCtrl_Zratio
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
118 txtCtrl_Zratio
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
119 t_sizer2
->Add( txtCtrl_Zratio
120 ,0,wxALL
, BORDERS_SIZES
);
121 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
124 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
125 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("xPos") )
126 ,0,wxALL
, BORDERS_SIZES
);
127 txtCtrl_Xpos
= new wxTextCtrl(this, wxID_ANY
128 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
129 , wxValidatorIntegerRelative() );
130 txtCtrl_Xpos
->Connect( wxEVT_KILL_FOCUS
131 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
133 txtCtrl_Xpos
->Connect( wxEVT_COMMAND_TEXT_ENTER
134 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
136 txtCtrl_Xpos
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
137 txtCtrl_Xpos
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
138 t_sizer2
->Add( txtCtrl_Xpos
139 ,0,wxALL
, BORDERS_SIZES
);
140 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
143 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
144 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("zPos") )
145 ,0,wxALL
, BORDERS_SIZES
);
146 txtCtrl_Zpos
= new wxTextCtrl(this, wxID_ANY
147 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
148 , wxValidatorIntegerRelative() );
149 txtCtrl_Zpos
->Connect( wxEVT_KILL_FOCUS
150 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
152 txtCtrl_Zpos
->Connect( wxEVT_COMMAND_TEXT_ENTER
153 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
155 txtCtrl_Zpos
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
156 txtCtrl_Zpos
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
157 t_sizer2
->Add( txtCtrl_Zpos
158 ,0,wxALL
, BORDERS_SIZES
);
159 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
162 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
163 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("xSpace") )
164 ,0,wxALL
, BORDERS_SIZES
);
165 txtCtrl_Xspace
= new wxTextCtrl(this, wxID_ANY
166 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
167 , wxValidatorIntegerRelative() );
168 txtCtrl_Xspace
->Connect( wxEVT_KILL_FOCUS
169 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
171 txtCtrl_Xspace
->Connect( wxEVT_COMMAND_TEXT_ENTER
172 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
174 txtCtrl_Xspace
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
175 txtCtrl_Xspace
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
176 t_sizer2
->Add( txtCtrl_Xspace
177 ,0,wxALL
, BORDERS_SIZES
);
178 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
181 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
182 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("zSpace") )
183 ,0,wxALL
, BORDERS_SIZES
);
184 txtCtrl_Zspace
= new wxTextCtrl(this, wxID_ANY
185 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
186 , wxValidatorIntegerRelative() );
187 txtCtrl_Zspace
->Connect( wxEVT_KILL_FOCUS
188 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
190 txtCtrl_Zspace
->Connect( wxEVT_COMMAND_TEXT_ENTER
191 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
193 txtCtrl_Zspace
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
194 txtCtrl_Zspace
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
195 t_sizer2
->Add( txtCtrl_Zspace
196 ,0,wxALL
, BORDERS_SIZES
);
197 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
200 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
201 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("xRep" ))
202 ,0,wxALL
, BORDERS_SIZES
);
203 txtCtrl_Xrepeat
= new wxTextCtrl(this, wxID_ANY
204 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
205 , wxValidatorIntegerRelative() );
206 txtCtrl_Xrepeat
->Connect( wxEVT_KILL_FOCUS
207 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
209 txtCtrl_Xrepeat
->Connect( wxEVT_COMMAND_TEXT_ENTER
210 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
212 txtCtrl_Xrepeat
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
213 txtCtrl_Xrepeat
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
214 t_sizer2
->Add( txtCtrl_Xrepeat
215 ,0,wxALL
, BORDERS_SIZES
);
216 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
219 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
220 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("zRep" ))
221 ,0,wxALL
, BORDERS_SIZES
);
222 txtCtrl_Zrepeat
= new wxTextCtrl(this, wxID_ANY
223 , wxString(), wxDefaultPosition
,wxDefaultSize
,wxTE_PROCESS_ENTER
224 , wxValidatorIntegerRelative() );
225 txtCtrl_Zrepeat
->Connect( wxEVT_KILL_FOCUS
226 , wxFocusEventHandler(myWnd_EditBackground::Evt_bgParamFocusOut
)
228 txtCtrl_Zrepeat
->Connect( wxEVT_COMMAND_TEXT_ENTER
229 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
231 txtCtrl_Zrepeat
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
232 txtCtrl_Zrepeat
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
233 t_sizer2
->Add( txtCtrl_Zrepeat
234 ,0,wxALL
, BORDERS_SIZES
);
235 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
238 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
239 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("Trans" ))
240 ,0,wxALL
, BORDERS_SIZES
);
241 chkCtrl_transparency
= new wxCheckBox(this, wxID_ANY
, wxString() );
242 chkCtrl_transparency
->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED
243 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
245 chkCtrl_transparency
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
246 chkCtrl_transparency
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
247 t_sizer2
->Add( chkCtrl_transparency
248 ,0,wxALL
, BORDERS_SIZES
);
249 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
252 t_sizer2
= new wxBoxSizer( wxVERTICAL
);
253 t_sizer2
->Add( new wxStaticText( this, wxID_ANY
, wxT("Alpha" ))
254 ,0,wxALL
, BORDERS_SIZES
);
255 comboCtrl_alpha
= new wxComboBox(this, wxID_ANY
, wxT("0")
256 , wxDefaultPosition
,wxDefaultSize
258 , wxCB_READONLY
|wxCB_DROPDOWN
);
259 comboCtrl_alpha
->Connect( wxEVT_COMMAND_TEXT_UPDATED
260 , wxCommandEventHandler(myWnd_EditBackground::Evt_bgParamChange
)
262 comboCtrl_alpha
->SetMinSize( wxSize( BTN_W
, wxDefaultCoord
));
263 comboCtrl_alpha
->SetMaxSize( wxSize( BTN_W
, wxDefaultCoord
));
264 t_sizer2
->Add( comboCtrl_alpha
265 ,0,wxALL
, BORDERS_SIZES
);
266 t_sizer_top
->Add( t_sizer2
, 0, wxALL
, 2 );
268 t_sizer_top
->AddStretchSpacer();
270 //-------------------------------------
271 sizer_main
->Add( sizer_middle
, 1, wxEXPAND
);
273 //-------------------------------------
275 t_sizer
= new wxBoxSizer( wxVERTICAL
);
276 sizer_middle
->Add( t_sizer
, 0, wxEXPAND
);
278 // List of layers avalaile + Button Add
279 t_sizer2
= new wxBoxSizer( wxHORIZONTAL
);
280 t_sizer
->Add( t_sizer2
, 0, 0 );
282 t_btn
= new wxButton( this, wxID_ANY
, wxT("Move Up") );
283 t_btn
->Connect( wxEVT_COMMAND_BUTTON_CLICKED
284 , wxCommandEventHandler(myWnd_EditBackground::Evt_MoveLayerUp
)
286 t_sizer2
->Add( t_btn
, 0, wxALL
, 3 );
288 t_btn
= new wxButton( this, wxID_ANY
, wxT("Move Down") );
289 t_btn
->Connect( wxEVT_COMMAND_BUTTON_CLICKED
290 , wxCommandEventHandler(myWnd_EditBackground::Evt_MoveLayerDown
)
292 t_sizer2
->Add( t_btn
, 0, wxALL
, 3 );
294 t_sizer2
= new wxBoxSizer( wxHORIZONTAL
);
295 t_sizer
->Add( t_sizer2
, 0, 0 );
297 t_btn
= new wxButton( this, wxID_ANY
, wxT("New Layer" ));
298 t_btn
->Connect( wxEVT_COMMAND_BUTTON_CLICKED
299 , wxCommandEventHandler(myWnd_EditBackground::Evt_NewLayer
)
301 t_sizer2
->Add( t_btn
, 0, wxALL
, 3 );
303 t_btn
= new wxButton( this, wxID_ANY
, wxT("Delete Layer") );
304 t_btn
->Connect( wxEVT_COMMAND_BUTTON_CLICKED
305 , wxCommandEventHandler(myWnd_EditBackground::Evt_DeleteLayer
)
307 t_sizer2
->Add( t_btn
, 0, wxALL
, 3 );
311 //-------------------------------------
312 // the list of Layers Here
313 listCtrl_bg
= new wxListBox( this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
,
315 wxLB_SINGLE
| wxLB_NEEDED_SB
);
316 listCtrl_bg
->Connect( wxEVT_COMMAND_LISTBOX_SELECTED
317 , wxCommandEventHandler(myWnd_EditBackground::Evt_SelectedChange
)
319 listCtrl_bg
->Connect( wxEVT_LEFT_DCLICK
320 , wxMouseEventHandler(myWnd_EditBackground::Evt_SelectedDblCick
)
322 t_sizer
->Add( listCtrl_bg
, 1, wxEXPAND
| wxALL
, 3 );
325 //-------------------------------------
326 //-------------------------------------
328 // View of the layers
329 sceneView
= new Panel_SceneView( this
330 , stage
, stage_declaration
, stage_set
332 sizer_middle
->Add( sceneView
, 1, wxEXPAND
);
334 //-------------------------------------
336 t_sizer
= new wxBoxSizer( wxHORIZONTAL
);
337 sizer_main
->Add( t_sizer
, 0, wxEXPAND
);
339 t_sizer
->AddStretchSpacer(3);
342 t_btn
= new wxButton( this, wxID_ANY
, wxT("OK") );
343 t_btn
->Connect( wxEVT_COMMAND_BUTTON_CLICKED
344 , wxCommandEventHandler(myWnd_EditBackground::Evt_OK
)
346 t_sizer
->Add( t_btn
, 0, wxALL
, 3 );
348 t_sizer
->AddStretchSpacer();
350 t_btn
= new wxButton( this, wxID_ANY
, wxT("Cancel" ));
351 t_btn
->Connect( wxEVT_COMMAND_BUTTON_CLICKED
352 , wxCommandEventHandler(myWnd_EditBackground::Evt_Cancel
)
354 t_sizer
->Add( t_btn
, 0, wxALL
, 3 );
356 t_sizer
->AddStretchSpacer(3);
359 //***********************************
360 // Finalisation of the window
361 SetMinSize( wxSize( 780,530) );
362 SetSizer( sizer_main
);
364 Frame_RestorePrevCoord( this, wxT("editBackground_frame"));
368 b_initialised
= true;
372 //****************************************************
374 myWnd_EditBackground::Init()
380 oLayers
= new ob_BG_Layer
*[MAX_LAYERS
];
382 ob_BG_Layer
** t_objs
= (ob_BG_Layer
**)
383 stage
->GetSubObjectS_ofType( OB_TYPE_BG_LAYER
, nb_layers
);
385 // On place l'objet background en premier
386 bool b_found
= false;
387 for( size_t i
= 0; i
< nb_layers
; i
++)
389 if( t_objs
[i
]->name
.Upper() == wxT("BACKGROUND" ))
393 ob_BG_Layer
* t
= t_objs
[0];
394 for( size_t j
= i
; j
> 0; j
-- )
395 t_objs
[j
] = t_objs
[j
-1];
397 t_objs
[1]->InsertObject_Before( t
);
405 if( b_found
== false )
407 wxMessageBox( wxT("No background Found !"), wxT("WARNING")
408 , wxICON_EXCLAMATION
| wxOK
);
412 // On fait des copies des objets
413 for( size_t i
= 0; i
< nb_layers
; i
++)
414 oLayers
[i
] = (ob_BG_Layer
*) t_objs
[i
]->Clone();
419 for( size_t i
= 0; i
< nb_layers
; i
++)
421 // On normalise les objets bgLayers
422 oLayers
[i
]->FillMissings();
424 // On remplit la liste avec les nom des objets
425 wxString item_str
= oLayers
[i
]->name
;
427 item_str
= oLayers
[i
]->GetName();
429 listCtrl_bg
->Append( item_str
);
432 // Fill the Association Old New array
433 oMap_OldNew_Layers__size
= nb_layers
;
436 oMap_OldNew_Layers
= new ob_BG_Layer
*[nb_layers
];
437 for( size_t i
= 0; i
< nb_layers
; i
++ )
438 oMap_OldNew_Layers
[i
] = oLayers
[i
];
441 // On selectionne le premier
442 listCtrl_bg
->Select( 0 );
444 // On Update les val des champs
447 // On assigne puis dessine les layers
448 sceneView
->Set_Background( oLayers
, nb_layers
);
449 Update_Layers_View();
453 //****************************************************
455 myWnd_EditBackground::EvtActivate( wxActivateEvent
& evt
)
460 //****************************************************
462 myWnd_EditBackground::EvtClose( wxCloseEvent
& evt
)
464 Frame_SaveCoord( this, wxT("editBackground_frame"));
469 //****************************************************
471 myWnd_EditBackground::~myWnd_EditBackground()
473 b_initialised
= false;
475 size_t t_nb_layers
= nb_layers
;
478 if( oLayers
!= NULL
)
480 for( size_t i
= 0; i
< t_nb_layers
; i
++ )
481 if( oLayers
[i
] != NULL
)
486 if( oMap_OldNew_Layers
!= NULL
)
487 delete[] oMap_OldNew_Layers
;
491 //****************************************************
493 myWnd_EditBackground::Zero_Layer_Vals()
495 ctrl_path
->SetObPath(wxT("data"));
496 txtCtrl_Xratio
->SetValue( wxT("1" ));
497 txtCtrl_Zratio
->SetValue( wxT("1" ));
498 txtCtrl_Xpos
->SetValue( wxT("0" ));
499 txtCtrl_Zpos
->SetValue( wxT("0" ));
500 txtCtrl_Xspace
->SetValue( wxT("0" ));
501 txtCtrl_Zspace
->SetValue( wxT("0" ));
502 txtCtrl_Xrepeat
->SetValue( wxT("5000") );
503 txtCtrl_Zrepeat
->SetValue( wxT("5000") );;
504 chkCtrl_transparency
->SetValue( true );;
505 comboCtrl_alpha
->SetValue( wxT("0") );
509 //****************************************************
511 myWnd_EditBackground::Update_Layer_Vals()
513 b_updating_vals
= true;
515 int num
= listCtrl_bg
->GetSelection();
516 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
)
519 b_updating_vals
= false;
526 t
= oLayers
[num
]->GetToken( i
);
527 ctrl_path
->SetObPath(t
);
530 t
= oLayers
[num
]->GetToken( i
);
532 txtCtrl_Xratio
->SetValue( t
);
534 t
= oLayers
[num
]->GetToken( i
);
536 txtCtrl_Zratio
->SetValue( t
);
538 t
= oLayers
[num
]->GetToken( i
);
540 txtCtrl_Xpos
->SetValue( t
);
542 t
= oLayers
[num
]->GetToken( i
);
544 txtCtrl_Zpos
->SetValue( t
);
546 t
= oLayers
[num
]->GetToken( i
);
548 txtCtrl_Xspace
->SetValue( t
);
550 t
= oLayers
[num
]->GetToken( i
);
552 txtCtrl_Zspace
->SetValue( t
);
554 t
= oLayers
[num
]->GetToken( i
);
556 txtCtrl_Xrepeat
->SetValue( t
);
558 t
= oLayers
[num
]->GetToken( i
);
560 txtCtrl_Zrepeat
->SetValue( t
);
562 t
= oLayers
[num
]->GetToken( i
);
564 chkCtrl_transparency
->SetValue( t
== wxT("1") );
566 t
= oLayers
[num
]->GetToken( i
);
568 comboCtrl_alpha
->SetValue( t
);
570 b_updating_vals
= false;
573 //****************************************************
575 myWnd_EditBackground::Evt_bgParamFocusOut( wxFocusEvent
& dummy
)
577 Check_Param_Change();
580 //****************************************************
582 myWnd_EditBackground::Evt_bgParamChange( wxCommandEvent
& evt_ctrl
)
584 Check_Param_Change();
587 //****************************************************
589 myWnd_EditBackground::Check_Param_Change()
591 if( b_initialised
== false || b_updating_vals
== true )
594 int num
= listCtrl_bg
->GetSelection();
595 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
)
601 bool b_update_view
= false;
605 // Check the values given
606 t
= ctrl_path
->GetObPath();
607 if( t
!= oLayers
[num
]->GetToken( i
) )
609 b_update_view
= true;
610 oLayers
[num
]->SetToken( i
, t
);
614 t
= txtCtrl_Xratio
->GetValue();
615 if( t
!= oLayers
[num
]->GetToken( i
) )
617 b_update_view
= true;
618 oLayers
[num
]->SetToken( i
, t
);
622 t
= txtCtrl_Zratio
->GetValue();
623 if( t
!= oLayers
[num
]->GetToken( i
) )
625 b_update_view
= true;
626 oLayers
[num
]->SetToken( i
, t
);
630 t
= txtCtrl_Xpos
->GetValue();
631 if( t
!= oLayers
[num
]->GetToken( i
) )
633 b_update_view
= true;
634 oLayers
[num
]->SetToken( i
, t
);
638 t
= txtCtrl_Zpos
->GetValue();
639 if( t
!= oLayers
[num
]->GetToken( i
) )
641 b_update_view
= true;
642 oLayers
[num
]->SetToken( i
, t
);
646 t
= txtCtrl_Xspace
->GetValue();
647 if( t
!= oLayers
[num
]->GetToken( i
) )
649 b_update_view
= true;
650 oLayers
[num
]->SetToken( i
, t
);
654 t
= txtCtrl_Zspace
->GetValue();
655 if( t
!= oLayers
[num
]->GetToken( i
) )
657 b_update_view
= true;
658 oLayers
[num
]->SetToken( i
, t
);
662 t
= txtCtrl_Xrepeat
->GetValue();
663 if( t
!= oLayers
[num
]->GetToken( i
) )
665 b_update_view
= true;
666 oLayers
[num
]->SetToken( i
, t
);
670 t
= txtCtrl_Zrepeat
->GetValue();
671 if( t
!= oLayers
[num
]->GetToken( i
) )
673 b_update_view
= true;
674 oLayers
[num
]->SetToken( i
, t
);
678 t
= chkCtrl_transparency
->GetValue() ? wxT("1") : wxT("0");
679 if( t
!= oLayers
[num
]->GetToken( i
) )
681 b_update_view
= true;
682 oLayers
[num
]->SetToken( i
, t
);
686 t
= comboCtrl_alpha
->GetValue();
687 if( t
!= oLayers
[num
]->GetToken( i
) )
688 oLayers
[num
]->SetToken( i
, t
);
691 if( oLayers
[num
]->name
.Upper() != wxT("BACKGROUND") )
692 listCtrl_bg
->SetString( num
, oLayers
[num
]->GetName() );
694 if( b_update_view
== true )
695 Update_Layers_View();
699 //****************************************************
701 myWnd_EditBackground::Update_Layers_View()
706 sceneView
->Update_View();
711 //****************************************************
713 myWnd_EditBackground::EvtResize( wxSizeEvent
& evt
)
718 //****************************************************
720 myWnd_EditBackground::Evt_OK( wxCommandEvent
& evt_menu
)
722 // Have to see if something is changed
723 if( stage
!= NULL
&& nb_layers
> 0 )
725 size_t orig_nb_layers
= 0;
726 ob_BG_Layer
** orig_Layers
= (ob_BG_Layer
**)
727 stage
->GetSubObjectS_ofType( OB_TYPE_BG_LAYER
, orig_nb_layers
);
729 // Update layers previously in the levels file
730 bool* b_updated
= NULL
;
732 b_updated
= new bool[nb_layers
];
734 for( size_t i
= 0; i
< nb_layers
; i
++)
736 b_updated
[i
] = false;
737 for( size_t j
= 0; j
< oMap_OldNew_Layers__size
; j
++ )
739 if( oMap_OldNew_Layers
[j
] != NULL
740 && oMap_OldNew_Layers
[j
] == oLayers
[i
] )
743 b_changed
= b_changed
||
744 orig_Layers
[j
]->Update_With( oLayers
[i
] );
750 // Delete layers previously in the levels file wich have been deleted
751 for( size_t j
= 0; j
< oMap_OldNew_Layers__size
; j
++ )
753 if( oMap_OldNew_Layers
[j
] == NULL
)
756 delete orig_Layers
[j
];
757 orig_Layers
[j
] = NULL
;
761 // Reordering previously existing layers
762 if( orig_nb_layers
> 0 )
764 // Get the remappings of the indices
765 size_t* lay_remaps
= new size_t[orig_nb_layers
];
766 for( size_t j
= 0; j
< nb_layers
; j
++ )
769 for( size_t i
= 0; i
< orig_nb_layers
; i
++ )
771 if( oMap_OldNew_Layers
[i
] == oLayers
[j
] )
774 if( lay_remaps
[j
] != i
)
781 // 0 ==> background, already there
782 ob_BG_Layer
* prev
= orig_Layers
[0];
783 for( size_t i
= 0; i
< orig_nb_layers
; i
++)
785 if( lay_remaps
[i
] == 666 )
788 prev
->InsertObject_After( orig_Layers
[lay_remaps
[i
]] );
789 prev
= orig_Layers
[lay_remaps
[i
]];
796 ob_BG_Layer
* prev_layer
= orig_Layers
[0]; // The background already exists
797 for( size_t i
= 1; i
< nb_layers
; i
++)
800 if( b_updated
[i
] == false )
802 ob_BG_Layer
* new_layer
= (ob_BG_Layer
*) oLayers
[i
]->Clone();
803 if( prev_layer
->InsertObject_After( new_layer
) == false )
805 wxMessageBox( wxT("Unable to insert bgLayer !"), wxT("ERROR !!")
806 , wxICON_EXCLAMATION
| wxOK
);
812 prev_layer
= new_layer
;
816 prev_layer
= (ob_BG_Layer
*) prev_layer
->next
;
819 if( b_updated
!= NULL
)
821 if( orig_Layers
!= NULL
)
822 delete[] orig_Layers
;
829 //****************************************************
831 myWnd_EditBackground::Evt_Cancel( wxCommandEvent
& evt_menu
)
836 //****************************************************
838 myWnd_EditBackground::Evt_SelectedChange( wxCommandEvent
& evt_menu
)
840 if( b_not_update_vals
== true )
843 int num
= listCtrl_bg
->GetSelection();
844 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
)
850 //****************************************************
852 myWnd_EditBackground::Evt_SelectedDblCick( wxMouseEvent
& evt
)
854 if( b_not_update_vals
== true )
857 int num
= listCtrl_bg
->GetSelection();
858 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
)
861 myWnd_BGProperties
t( this, oLayers
[num
], false );
864 if( t
.b_chg
== true )
867 Update_Layers_View();
872 //****************************************************
874 myWnd_EditBackground::Evt_MoveLayerUp( wxCommandEvent
& evt_menu
)
876 int num
= listCtrl_bg
->GetSelection();
877 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
|| num
<= 1 )
883 ob_BG_Layer
* t
= oLayers
[num
-1];
884 oLayers
[num
-1] = oLayers
[num
];
887 b_not_update_vals
= true;
888 listCtrl_bg
->SetString( num
-1, oLayers
[num
-1]->GetName() );
889 listCtrl_bg
->SetString( num
, oLayers
[num
]->GetName() );
890 listCtrl_bg
->Select( num
-1 );
891 b_not_update_vals
= false;
894 Update_Layers_View();
897 //****************************************************
899 myWnd_EditBackground::Evt_MoveLayerDown( wxCommandEvent
& evt_menu
)
901 int num
= listCtrl_bg
->GetSelection();
902 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
- 1 || num
== 0 )
905 if( num
== (int) nb_layers
)
908 ob_BG_Layer
* t
= oLayers
[num
+1];
909 oLayers
[num
+1] = oLayers
[num
];
912 b_not_update_vals
= true;
913 listCtrl_bg
->SetString( num
+1, oLayers
[num
+1]->GetName() );
914 listCtrl_bg
->SetString( num
, oLayers
[num
]->GetName() );
915 listCtrl_bg
->Select( num
+1 );
916 b_not_update_vals
= false;
919 Update_Layers_View();
922 //****************************************************
924 myWnd_EditBackground::Evt_NewLayer( wxCommandEvent
& evt_menu
)
926 myWnd_BGProperties
t( this, NULL
, false );
929 if( t
.theObj
== NULL
)
932 if( (int) nb_layers
>= MAX_LAYERS
)
936 wxMessageBox( wxT("TOO MUCH LAYERS !") );
940 // Add it to the layer list
941 oLayers
[nb_layers
] = (ob_BG_Layer
*) t
.theObj
;
944 // Add it to the Control list
945 listCtrl_bg
->Append( ((ob_BG_Layer
*) t
.theObj
)->GetName() );
946 listCtrl_bg
->Select( nb_layers
- 1 );
950 Update_Layers_View();
953 //****************************************************
955 myWnd_EditBackground::Evt_DeleteLayer( wxCommandEvent
& evt_menu
)
960 int num
= listCtrl_bg
->GetSelection();
961 if( num
== wxNOT_FOUND
|| num
>= (int) nb_layers
)
964 int res
= wxMessageBox( wxT("Sure to delete this layer ?"), wxT("Warning !")
965 , wxICON_EXCLAMATION
| wxYES_NO
, this );
969 // Update the associtaion memory array
970 for( size_t i
= 0; i
< oMap_OldNew_Layers__size
; i
++)
971 if( oMap_OldNew_Layers
[i
] == oLayers
[num
] )
973 oMap_OldNew_Layers
[i
] = NULL
;
979 for( int i
= num
; i
< (int)nb_layers
-1; i
++ )
980 oLayers
[i
] = oLayers
[i
+1];
983 listCtrl_bg
->Delete( num
);
987 Update_Layers_View();
991 if( num
>= (int) nb_layers
)
993 listCtrl_bg
->Select( num
);
995 Update_Layers_View();
998 //****************************************************
999 //****************************************************
1000 //****************************************************
1002 BEGIN_EVENT_TABLE(myWnd_EditBackground
, wxDialog
)
1003 EVT_ACTIVATE(myWnd_EditBackground::EvtActivate
)
1004 EVT_CLOSE( myWnd_EditBackground::EvtClose
)
1005 EVT_SIZE(myWnd_EditBackground::EvtResize
)