]> git.saurik.com Git - wxWidgets.git/blame - utils/framelayout/src/cbstore.cpp
vc makefile
[wxWidgets.git] / utils / framelayout / src / cbstore.cpp
CommitLineData
bd9396d5
HH
1/////////////////////////////////////////////////////////////////////////////
2// Name: No names yet.
3// Purpose: Contrib. demo
4// Author: Aleksandras Gluchovas
5// Modified by:
6// Created: 27/10/98
7// RCS-ID: $Id$
8// Copyright: (c) Aleksandras Gluchovas
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "cbstore.h"
14// #pragma interface
15#endif
16
17// For compilers that support precompilation, includes "wx.h".
18#include "wx/wxprec.h"
19
20#ifdef __BORLANDC__
21#pragma hdrstop
22#endif
23
24#ifndef WX_PRECOMP
25#include "wx/wx.h"
26#endif
27
28#include "cbstore.h"
29
30/***** Implementation for class wxFrameLayoutSerializer *****/
31
32IMPLEMENT_SERIALIZER_CLASS( wxFrameLayout,
33 wxFrameLayoutSerializer,
34 wxFrameLayoutSerializer::Serialize,
35 wxFrameLayoutSerializer::Initialize )
36
37void wxFrameLayoutSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
38{
39 // wxFrameLayout is a "kind of" wxEvtHandler - perform
40 // serialization of the base class first
41
42 info.SerializeInherited( pObj, store );
43
44 wxFrameLayout* pLayout = (wxFrameLayout*)pObj;
45
46 store.XchgObjPtr( (wxObject**) &pLayout->mpFrame );
47 store.XchgObjPtr( (wxObject**) &pLayout->mpFrameClient );
48
49 for( int i = 0; i != MAX_PANES; ++i )
50
51 store.XchgObjPtr( (wxObject**) &(pLayout->mPanes[i]) );
52
53 // plugins are serialized _after_ panes
54
55 store.XchgObjPtr( (wxObject**) &(pLayout->mpTopPlugin) );
56
57 // and the rest will follow...
58
59 store.XchgObjArray( pLayout->mAllBars );
60
61 store.XchgObjList( pLayout->mBarSpyList );
62
63 store.XchgObjList( pLayout->mFloatedFrames );
64
65 store.XchgObjPtr( (wxObject**) &(pLayout->mpUpdatesMgr) );
66
67 store.XchgBool( pLayout->mFloatingOn );
68
69 store.XchgWxPoint( pLayout->mNextFloatedWndPos );
70
71 store.XchgWxSize( pLayout->mFloatingPosStep );
72
73 store.XchgObj( (wxObject*) &pLayout->mDarkPen );
74 store.XchgObj( (wxObject*) &pLayout->mLightPen );
75 store.XchgObj( (wxObject*) &pLayout->mGrayPen );
76 store.XchgObj( (wxObject*) &pLayout->mBlackPen );
77 store.XchgObj( (wxObject*) &pLayout->mBorderPen );
78}
79
80void wxFrameLayoutSerializer::Initialize( wxObject* pObj )
81{
82 wxFrameLayout* pLayout = (wxFrameLayout*)pObj;
83
84 // wxFrameLayout is a "kind of" wxEvtHandler - perform
85 // wxEvtHandler-specific initialization first
86
87 info.InitializeInherited( pObj );
88
89 //pLayout->RecalcLayout( TRUE );
90}
91
92/***** Implementation for class wxFrameLayoutSerializer *****/
93
94IMPLEMENT_SERIALIZER_CLASS( cbBarSpy,
95 cbBarSpySerializer,
96 cbBarSpySerializer::Serialize,
97 cbBarSpySerializer::Initialize )
98
99void cbBarSpySerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
100{
101 // cbBarSpy is a "kind of" wxEvtHandler - perform
102 // serialization of the base class first
103
104 info.SerializeInherited( pObj, store );
105
106 cbBarSpy* pSpy = (cbBarSpy*)pObj;
107
108 store.XchgObjPtr( (wxObject**) &(pSpy->mpLayout) );
109 store.XchgObjPtr( (wxObject**) &(pSpy->mpBarWnd) );
110}
111
112void cbBarSpySerializer::Initialize( wxObject* pObj )
113{
114 // cbBarSpySerializer is a "kind of" wxEvtHandler - perform
115 // wxEvtHandler-specific initialization first
116
117 info.InitializeInherited( pObj );
118
119 cbBarSpy* pSpy = (cbBarSpy*)pObj;
120
121 // is done by wxEventHandler's serializer already!
122
123 //pSpy->mpBarWnd->PushEventHandler( pSpy );
124}
125
126/***** Implementation for class cbBarDimHandlerBaseSerializer *****/
127
128IMPLEMENT_SERIALIZER_CLASS( cbBarDimHandlerBase,
129 cbBarDimHandlerBaseSerializer,
130 cbBarDimHandlerBaseSerializer::Serialize,
131 NO_CLASS_INIT )
132
133void cbBarDimHandlerBaseSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
134{
135 cbBarDimHandlerBase* pHandler = (cbBarDimHandlerBase*)pObj;
136
137 store.XchgInt( pHandler->mRefCount );
138}
139
140/***** Implementation for class cbDimInfoSerializer *****/
141
142IMPLEMENT_SERIALIZER_CLASS( cbDimInfo,
143 cbDimInfoSerializer,
144 cbDimInfoSerializer::Serialize,
145 NO_CLASS_INIT )
146
147void cbDimInfoSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
148{
149 cbDimInfo* pInfo = (cbDimInfo*)pObj;
150
151 int i = 0;
152
153 for( i = 0; i != MAX_BAR_STATES; ++i )
154
155 store.XchgWxSize( pInfo->mSizes[i] );
156
157 for( i = 0; i != MAX_BAR_STATES; ++i )
158
159 store.XchgWxRect( pInfo->mBounds[i] );
160
161 store.XchgInt ( pInfo->mLRUPane );
162 store.XchgInt ( pInfo->mHorizGap );
163 store.XchgInt ( pInfo->mVertGap );
164
165 store.XchgBool ( pInfo->mIsFixed );
166 store.XchgObjPtr( (wxObject**) &(pInfo->mpHandler) );
167}
168
169/***** Implementation for class cbRowInfoSerializer *****/
170
171IMPLEMENT_SERIALIZER_CLASS( cbRowInfo,
172 cbRowInfoSerializer,
173 cbRowInfoSerializer::Serialize,
174 NO_CLASS_INIT )
175
176void cbRowInfoSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
177{
178 cbRowInfo* pInfo = (cbRowInfo*)pObj;
179
180 store.XchgObjArray( pInfo->mBars );
181
182 store.XchgLongArray( pInfo->mSavedRatios );
183
184 store.XchgObjPtr( (wxObject**) &pInfo->mpNext );
185 store.XchgObjPtr( (wxObject**) &pInfo->mpPrev );
186 store.XchgObjPtr( (wxObject**) &pInfo->mpExpandedBar );
187
188 store.XchgBool ( pInfo->mHasUpperHandle );
189 store.XchgBool ( pInfo->mHasLowerHandle );
190 store.XchgBool ( pInfo->mHasOnlyFixedBars );
191 store.XchgInt ( pInfo->mNotFixedBarsCnt );
192
193 // other properties of the row are transient, since
194 // they are reclaculated each time the frame is resized/activated
195}
196
197/***** Implementation for class cbBarInfoSerializer *****/
198
199IMPLEMENT_SERIALIZER_CLASS( cbBarInfo,
200 cbBarInfoSerializer,
201 cbBarInfoSerializer::Serialize,
202 NO_CLASS_INIT )
203
204void cbBarInfoSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
205{
206 cbBarInfo* pInfo = (cbBarInfo*)pObj;
207
208 store.XchgWxStr ( pInfo->mName );
209
210 store.XchgWxRect( pInfo->mBounds );
211
212 store.XchgObjPtr( (wxObject**) &(pInfo->mpRow) );
213
214 store.XchgBool ( pInfo->mHasLeftHandle );
215 store.XchgBool ( pInfo->mHasRightHandle );
216
217 store.XchgObj ( (wxObject*) &(pInfo->mDimInfo ) );
218
219 store.XchgInt ( pInfo->mState );
220 store.XchgInt ( pInfo->mAlignment );
221 store.XchgInt ( pInfo->mRowNo );
222
223 store.XchgObjPtr( (wxObject**) &(pInfo->mpBarWnd) );
224
225 store.XchgDouble( pInfo->mLenRatio );
226
227 store.XchgWxPoint( pInfo->mPosIfFloated );
228
229 store.XchgObjPtr( (wxObject**) &(pInfo->mpNext) );
230 store.XchgObjPtr( (wxObject**) &(pInfo->mpPrev) );
231
232 // other properties of the bar are transient, since
233 // they are reclaculated each time the frame is resized/activated
234}
235
236/***** Implementation for class cbCommonPanePropertiesSerializer *****/
237
238IMPLEMENT_SERIALIZER_CLASS( cbCommonPaneProperties,
239 cbCommonPanePropertiesSerializer,
240 cbCommonPanePropertiesSerializer::Serialize,
241 NO_CLASS_INIT )
242
243void cbCommonPanePropertiesSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
244{
245 cbCommonPaneProperties* pProps = (cbCommonPaneProperties*)pObj;
246
247 store.XchgBool ( pProps->mRealTimeUpdatesOn );
248 store.XchgBool ( pProps->mOutOfPaneDragOn );
249 store.XchgBool ( pProps->mExactDockPredictionOn );
250 store.XchgBool ( pProps->mNonDestructFirctionOn );
251
252 store.XchgBool ( pProps->mShow3DPaneBorderOn );
253
254 store.XchgBool ( pProps->mBarFloatingOn );
255 store.XchgBool ( pProps->mRowProportionsOn );
256 store.XchgBool ( pProps->mColProportionsOn );
257 store.XchgBool ( pProps->mBarCollapseIconsOn );
258 store.XchgBool ( pProps->mBarDragHintsOn );
259
260 store.XchgWxSize( pProps->mMinCBarDim );
261
262 store.XchgInt( pProps->mResizeHandleSize );
263}
264
265/***** Implementation for class *****/
266
267IMPLEMENT_SERIALIZER_CLASS( cbDockPane,
268 cbDockPaneSerializer,
269 cbDockPaneSerializer::Serialize,
270 NO_CLASS_INIT )
271
272void cbDockPaneSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
273{
274 cbDockPane* pPane = (cbDockPane*)pObj;
275
276 store.XchgObj( (wxObject*) &(pPane->mProps) );
277
278 store.XchgInt( pPane->mLeftMargin );
279 store.XchgInt( pPane->mRightMargin );
280 store.XchgInt( pPane->mTopMargin );
281 store.XchgInt( pPane->mBottomMargin );
282
283 store.XchgInt( pPane->mAlignment );
284
285 store.XchgObjArray( pPane->mRows );
286 store.XchgObjPtr ( (wxObject**) &(pPane->mpLayout) );
287}
288
289/***** Implementation for class cbUpdatesManagerBaseSerializer *****/
290
291IMPLEMENT_SERIALIZER_CLASS( cbUpdatesManagerBase,
292 cbUpdatesManagerBaseSerializer,
293 cbUpdatesManagerBaseSerializer::Serialize,
294 NO_CLASS_INIT )
295
296void cbUpdatesManagerBaseSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
297{
298 cbUpdatesManagerBase* pMgr = (cbUpdatesManagerBase*)pObj;
299
300 // only back-reference to layout "engine"
301 store.XchgObjPtr( (wxObject**) &(pMgr->mpLayout) );
302}
303
304/***** Implementation for class cbPluginBaseSerializer *****/
305
306IMPLEMENT_SERIALIZER_CLASS( cbPluginBase,
307 cbPluginBaseSerializer,
308 cbPluginBaseSerializer::Serialize,
309 cbPluginBaseSerializer::Initialize )
310
311void cbPluginBaseSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
312{
313 // plugin is "a kind" of wxEvtHandler - perform
314 // serialization of the base class first
315
316 info.SerializeInherited( pObj, store );
317
318 cbPluginBase* pPlugin = (cbPluginBase*)pObj;
319
320 store.XchgObjPtr( (wxObject**) &(pPlugin->mpLayout) );
321
322 store.XchgInt( pPlugin->mPaneMask );
323}
324
325void cbPluginBaseSerializer::Initialize( wxObject* pObj )
326{
327 // plugins need extra-initialization, after they are
328 // attached to the frame-layout and pane mask is set
329
330 ( (cbPluginBase*)pObj )->OnInitPlugin();
331}
332
333/***** Implementation for class cbRowDragPluginSerializer *****/
334
335IMPLEMENT_SERIALIZER_CLASS( cbRowDragPlugin,
336 cbRowDragPluginSerializer,
337 cbRowDragPluginSerializer::Serialize,
338 cbRowDragPluginSerializer::Initialize )
339
340void cbRowDragPluginSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
341{
342 // plugin is "a kind" of cbPluginBaseSerializer - perform
343 // serialization of the base class first
344
345 info.SerializeInherited( pObj, store );
346
347 cbRowDragPlugin* pPlugin = (cbRowDragPlugin*)pObj;
348
349 store.XchgInt( pPlugin->mSvTopMargin );
350 store.XchgInt( pPlugin->mSvBottomMargin );
351 store.XchgInt( pPlugin->mSvLeftMargin );
352 store.XchgInt( pPlugin->mSvRightMargin );
353
354 store.XchgObjList( pPlugin->mHiddenBars );
355}
356
357void cbRowDragPluginSerializer::Initialize( wxObject* pObj )
358{
359 // plugins need extra-initialization, after they are
360 // attached to the frame-layout and pane mask is set
361
362 ( (cbPluginBase*)pObj )->OnInitPlugin();
363}
364
365/***** Implementation for class cbHiddenBarInfoSerializer *****/
366
367IMPLEMENT_SERIALIZER_CLASS( cbHiddenBarInfo,
368 cbHiddenBarInfoSerializer,
369 cbHiddenBarInfoSerializer::Serialize,
370 NO_CLASS_INIT )
371
372void cbHiddenBarInfoSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
373{
374 cbHiddenBarInfo* pInfo = (cbHiddenBarInfo*)pObj;
375
376 store.XchgObjPtr( (wxObject**) &(pInfo->mpBar) );
377 store.XchgInt( pInfo->mRowNo );
378 store.XchgInt( pInfo->mIconNo );
379 store.XchgInt( pInfo->mAlignment );
380}
381
382/***** Implementation for class cbFloatedBarWindowSerializer *****/
383
384IMPLEMENT_SERIALIZER_CLASS( cbFloatedBarWindow,
385 cbFloatedBarWindowSerializer,
386 cbFloatedBarWindowSerializer::Serialize,
387 cbFloatedBarWindowSerializer::Initialize )
388
389static wxString __gTmpFrameTitle;
390
391void cbFloatedBarWindowSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
392{
393 cbFloatedBarWindow* pWnd = (cbFloatedBarWindow*)pObj;
394
395 if ( store.IsLoading() == FALSE )
396
397 __gTmpFrameTitle = pWnd->GetTitle();
398
399 store.XchgWxStr( __gTmpFrameTitle );
400
401 // cbFloatedBarWindow is "a kind" of wxWindow - perform
402 // serialization of the base class first
403
404 wxWindowSerializer::DoSerialize( pObj, store,
405 (wndCreationFn)cbFloatedBarWindowSerializer::CreateFloatedBarWindowFn );
406
407 store.XchgObjPtr( (wxObject**) &(pWnd->mpBar) );
408 store.XchgObjPtr( (wxObject**) &(pWnd->mpLayout) );
409 store.XchgObjPtr( (wxObject**) &(pWnd->mpClientWnd) );
410}
411
412void cbFloatedBarWindowSerializer::CreateFloatedBarWindowFn( cbFloatedBarWindow* fbar, wxWindow* parent, const wxWindowID id,
413 const wxPoint& pos, const wxSize& size, long style ,
414 const wxString& name )
415{
416 fbar->Create( parent, id, __gTmpFrameTitle, pos, size, style );
417}
418
419void cbFloatedBarWindowSerializer::Initialize( wxObject* pObj )
420{
421 // FOR NOW:: nothing
422}
423
424/***** Implementation for class wxNewBitmapButtonSerializer *****/
425
426IMPLEMENT_SERIALIZER_CLASS( wxNewBitmapButton,
427 wxNewBitmapButtonSerializer,
428 wxNewBitmapButtonSerializer::Serialize,
429 wxNewBitmapButtonSerializer::Initialize )
430
431void wxNewBitmapButtonSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
432{
433 wxNewBitmapButton* pBtn = (wxNewBitmapButton*)pObj;
434
435 store.XchgInt ( pBtn->mTextToLabelGap );
436 store.XchgInt ( pBtn->mMarginX );
437 store.XchgInt ( pBtn->mMarginY );
438 store.XchgInt ( pBtn->mTextAlignment );
439 store.XchgBool( pBtn->mIsFlat );
440 store.XchgBool( pBtn->mIsSticky );
441
442 store.XchgWxStr( pBtn->mLabelText );
443 store.XchgWxStr( pBtn->mImageFileName );
444 store.XchgInt ( pBtn->mImageFileType );
445
446 store.XchgInt( pBtn->mFiredEventType );
447
448 // cbFloatedBarWindow is "a kind" of wxWindow - perform
449 // serialization of the base class
450
451 wxWindowSerializer::DoSerialize( pObj, store,
452 (wndCreationFn)wxNewBitmapButtonSerializer::CreateNewBmpBtnWindowFn );
453}
454
455void wxNewBitmapButtonSerializer::CreateNewBmpBtnWindowFn( wxNewBitmapButton* btn, wxWindow* parent, const wxWindowID id,
456 const wxPoint& pos, const wxSize& size, long style ,
457 const wxString& name )
458{
459 btn->Create( parent, id, pos, size, style, name );
460
461 //btn->Reshape();
462 btn->mIsCreated = FALSE;
463 btn->Reshape();
464}
465
466void wxNewBitmapButtonSerializer::Initialize( wxObject* pObj )
467{
468 // FOR NOW:: nothing
469 wxNewBitmapButton* pBtn = (wxNewBitmapButton*)pObj;
470
471 //pBtn->Reshape();
472}
473
474/***** Implementation for class wxDynamicToolBarSerializer *****/
475
476IMPLEMENT_SERIALIZER_CLASS( wxDynamicToolBar,
477 wxDynamicToolBarSerializer,
478 wxDynamicToolBarSerializer::Serialize,
479 wxDynamicToolBarSerializer::Initialize )
480
481void wxDynamicToolBarSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
482{
483 // cbFloatedBarWindow is "a kind" of wxWindow - perform
484 // serialization of the base class first
485
486 wxWindowSerializer::DoSerialize( pObj, store,
487 (wndCreationFn)wxDynamicToolBarSerializer::CreateDynTBarWindowFn );
488
489 wxDynamicToolBar* pTBar = (wxDynamicToolBar*)pObj;
490
491 store.XchgObjArray( pTBar->mTools );
492}
493
494void wxDynamicToolBarSerializer::CreateDynTBarWindowFn( wxDynamicToolBar* tbar, wxWindow* parent, const wxWindowID id,
495 const wxPoint& pos, const wxSize& size, long style ,
496 const wxString& name )
497{
498 tbar->Create( parent, id, pos, size, style );
499}
500
501void wxDynamicToolBarSerializer::Initialize( wxObject* pObj )
502{
503 // FOR NOW:: nothing
504}
505
506/***** Implementation for class wxDynToolInfoSerializer *****/
507
508IMPLEMENT_SERIALIZER_CLASS( wxDynToolInfo,
509 wxDynToolInfoSerializer,
510 wxDynToolInfoSerializer::Serialize,
511 NO_CLASS_INIT )
512
513void wxDynToolInfoSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
514{
515 // cbFloatedBarWindow is "a kind" of wxWindow - perform
516 // serialization of the base class first
517
518 wxDynToolInfo* pInfo = (wxDynToolInfo*)pObj;
519
520 store.XchgWxRect( pInfo->mRect );
521 store.XchgBool ( pInfo->mIsSeparator );
522
523 store.XchgObjPtr( (wxObject**) &pInfo->mpToolWnd );
524 store.XchgInt ( pInfo->mIndex );
525 store.XchgWxSize( pInfo->mRealSize );
526}
527
528#include "objstore.h" // tabbed window is serialiable
529
530/***** Implementation for class wxTabbedWindowSerializer ****/
531
532IMPLEMENT_SERIALIZER_CLASS( wxTabbedWindow,
533 wxTabbedWindowSerializer,
534 wxTabbedWindowSerializer::Serialize,
535 wxTabbedWindowSerializer::Initialize)
536
537void wxTabbedWindowSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
538{
539 wxTabbedWindow* pWnd = (wxTabbedWindow*)pObj;
540
541 // we're kind of window - serialize it first
542
543 if ( store.IsLoading() )
544
545 // FOR NOW::workaround for the mistery
546
547 pWnd->mpTabScroll = (wxScrollBar*)(-1);
548
549 wxWindowSerializer::DoSerialize( pObj, store,
550 (wndCreationFn)wxWindowSerializer::CreateWindowFn,
551 FALSE );
552
553 store.XchgObjList( pWnd->mTabs );
554
555 store.XchgInt( pWnd->mActiveTab );
556 store.XchgInt( pWnd->mTitleHeight );
557 store.XchgInt( pWnd->mLayoutType );
558 store.XchgInt( pWnd->mTitleHeight );
559
560 store.XchgObj( (wxObject*) &(pWnd->mWhitePen) );
561 store.XchgObj( (wxObject*) &(pWnd->mGrayPen) );
562 store.XchgObj( (wxObject*) &(pWnd->mDarkPen) );
563 store.XchgObj( (wxObject*) &(pWnd->mBlackPen) );
564
565 store.XchgObjPtr( (wxObject**) &(pWnd->mpTabScroll ) );
566 store.XchgObjPtr( (wxObject**) &(pWnd->mpHorizScroll) );
567 store.XchgObjPtr( (wxObject**) &(pWnd->mpVertScroll ) );
568
569 store.XchgInt( pWnd->mVertGap );
570 store.XchgInt( pWnd->mHorizGap );
571 store.XchgInt( pWnd->mTitleVertGap );
572 store.XchgInt( pWnd->mTitleHorizGap );
573 store.XchgInt( pWnd->mImageTextGap );
574 store.XchgInt( pWnd->mFirstTitleGap );
575 store.XchgInt( pWnd->mBorderOnlyWidth );
576}
577
578void wxTabbedWindowSerializer::Initialize( wxObject* pObj )
579{
580 wxTabbedWindow* pWnd = (wxTabbedWindow*)pObj;
581
582 pWnd->RecalcLayout(TRUE);
583}
584
585/***** Implementation for class twTabInfoSerializer ****/
586
587IMPLEMENT_SERIALIZER_CLASS( twTabInfo,
588 twTabInfoSerializer,
589 twTabInfoSerializer::Serialize,
590 NO_CLASS_INIT )
591
592void twTabInfoSerializer::Serialize( wxObject* pObj, wxObjectStorage& store )
593{
594 twTabInfo* pInfo = (twTabInfo*)pObj;
595
596 store.XchgObjPtr( (wxObject**) &(pInfo->mpContent) );
597
598 // NOTE:: wxSize is NOT a dynamic class unfortunately ...
599
600 store.XchgWxSize( pInfo->mDims );
601
602 store.XchgWxStr ( pInfo->mText );
603 store.XchgWxStr( pInfo->mImageFile );
604
605 store.XchgLong( pInfo->mImageType );
606
607 if ( store.IsLoading() && wxFileExists( pInfo->mImageFile ) )
608
609 pInfo->mBitMap.LoadFile( pInfo->mImageFile, pInfo->mImageType );
610}
611