1 //**************************************************************************************************
2 //                                         PnlAnaBase.cpp                                          *
3 //                                        ----------------                                         *
4 // Started     : 2004-04-26                                                                        *
5 // Last Update : 2015-03-29                                                                        *
6 // Copyright   : (C) 2004 by MSWaters                                                              *
7 //**************************************************************************************************
8 
9 //**************************************************************************************************
10 //                                                                                                 *
11 //      This program is free software; you can redistribute it and/or modify it under the          *
12 //      terms of the GNU General Public License as published by the Free Software Foundation;      *
13 //      either version 3 of the License, or (at your option) any later version.                    *
14 //                                                                                                 *
15 //**************************************************************************************************
16 
17 #include "PnlAnaBase.hpp"
18 
19 //**************************************************************************************************
20 // Allocate storage for static data members.
21 
22 Component  PnlAnaBase::m_oCpntSwpSrc;
23 
24 //**************************************************************************************************
25 // Implement an event table.
26 
wxBEGIN_EVENT_TABLE(PnlAnaBase,wxPanel)27 wxBEGIN_EVENT_TABLE( PnlAnaBase, wxPanel )
28 
29   EVT_CHOICE( PnlAnaBase::ID_CHO_SRCNAME, PnlAnaBase::OnSrcName )
30 
31 wxEND_EVENT_TABLE( )
32 
33 //**************************************************************************************************
34 // Constructor.
35 //
36 // Argument List :
37 //   poWin - A pointer to the parent window
38 
39 PnlAnaBase::PnlAnaBase( wxWindow * poWin ) : wxPanel( poWin )
40 {
41   m_eAnaType = eCMD_NONE;
42 
43   bClear( );
44 }
45 
46 //**************************************************************************************************
47 // Destructor.
48 
~PnlAnaBase()49 PnlAnaBase::~PnlAnaBase( )
50 {
51 }
52 
53 //**************************************************************************************************
54 // Clear the object attributes back to it's initial state.
55 //
56 // Return Values :
57 //   true  - Success
58 //   false - Failure
59 
bClear(void)60 bool  PnlAnaBase::bClear( void )
61 {
62   m_osErrMsg.Empty( ); // Clear the error string
63 
64   return( true );
65 }
66 
67 //**************************************************************************************************
68 // Create the basic display objects.
69 
CreateBase(void)70 void  PnlAnaBase::CreateBase( void )
71 {
72   wxPanel * poPnl;
73 
74   // Create the sweep panel and controls
75 #ifdef LAYOUT_MNGR
76   poPnl = new wxPanel( this );
77 #else
78   poPnl = this;
79 #endif // LAYOUT_MNGR
80 
81   // Create and add sweep parameter labels
82 #ifdef LAYOUT_MNGR
83   m_oPnlStart.bCreate( poPnl, ID_PNL_START, 120 );
84   m_oPnlStop .bCreate( poPnl, ID_PNL_STOP,  120 );
85   m_oPnlStep .bCreate( poPnl, ID_PNL_STEP,  120 );
86 #else
87   m_oSbxSwpPars.Create( poPnl, ID_UNUSED, wxT(" Sweep Parameters "), wxPoint(  6,  5 ),
88                         wxSize( 330, 167 ) );
89   m_oPnlStart.bCreate( poPnl, ID_PNL_START, 123, 95, 82,             wxPoint( 22, 26 ) );
90   m_oPnlStop .bCreate( poPnl, ID_PNL_STOP,  123, 95, 82,             wxPoint( 22, 56 ) );
91   m_oPnlStep .bCreate( poPnl, ID_PNL_STEP,  123, 95, 82,             wxPoint( 22, 86 ) );
92 #endif // LAYOUT_MNGR
93 
94   m_oPnlStart.bSetName( wxT("Start Value") );
95   m_oPnlStop .bSetName( wxT("Stop Value") );
96   m_oPnlStep .bSetName( wxT("Step Increment") );
97   m_oSbxSwpPars.SetOwnFont( FONT_SLANT );
98 
99   // Create the parameter (probe) panel and controls
100 #ifdef LAYOUT_MNGR
101   poPnl = new wxPanel( this );
102 #else
103   poPnl = this;
104 #endif // LAYOUT_MNGR
105 
106   // Create and add simulation parameter check boxes
107 #ifdef LAYOUT_MNGR
108   m_oCbxVoltage .Create( poPnl, ID_CBX_VOLT, wxT("Voltage")    );
109   m_oCbxCurrent .Create( poPnl, ID_CBX_CURR, wxT("Current")    );
110   m_oCbxPower   .Create( poPnl, ID_CBX_PWR,  wxT("Power")      );
111   m_oCbxResist  .Create( poPnl, ID_CBX_RES,  wxT("Resistance") );
112 #else
113   m_oSbxCalcPars.Create( poPnl, ID_UNUSED  , wxT(" Parameters "),    wxPoint( 343,   5 ),
114                          wxSize( 105, 122 ) );
115   m_oCbxVoltage .Create( poPnl, ID_CBX_VOLT, wxT("Voltage"),         wxPoint( 349,  25 ) );
116   m_oCbxCurrent .Create( poPnl, ID_CBX_CURR, wxT("Current"),         wxPoint( 349,  50 ) );
117   m_oCbxPower   .Create( poPnl, ID_CBX_PWR,  wxT("Power"),           wxPoint( 349,  75 ) );
118   m_oCbxResist  .Create( poPnl, ID_CBX_RES,  wxT("Resistance"),      wxPoint( 349, 100 ) );
119 #endif // LAYOUT_MNGR
120   m_oSbxCalcPars.SetOwnFont( FONT_SLANT );
121 
122   // Create and add .OPTIONS configuration dialog button
123 #ifdef LAYOUT_MNGR
124   m_oBtnOPTIONS.Create( this, ID_BTN_OPTIONS, wxT(".OPTIONS ...") );
125 #else
126   m_oBtnOPTIONS.Create( this, ID_BTN_OPTIONS, wxT(".OPTIONS ..."),   wxPoint( 343, 135 ),
127                         wxSize( 105, -1 ) );
128 #endif // LAYOUT_MNGR
129 }
130 
131 //**************************************************************************************************
132 // Create the scale display objects.
133 
CreateScale(void)134 void  PnlAnaBase::CreateScale( void )
135 {
136   wxPanel * poPnl;
137   wxString  osScale[]={ wxT("Lin  "), wxT("Log "), wxT("Dec "), wxT("Oct  ") };
138 
139   // Create and add the scale radio buttons
140   poPnl = (wxPanel *) m_oPnlStart.GetParent( );
141   m_oRbxSweep.Create( poPnl, ID_RBX_SCALE, wxT(" Step Scale "), wxPoint( 13, 123 ),
142                       wxSize( -1, 41 ), 4, osScale, 4 );
143   m_oRbxSweep.SetSelection( eSCALE_LIN );
144 }
145 
146 //**************************************************************************************************
147 // Create the initial conditions display objects.
148 
CreateInitC(void)149 void  PnlAnaBase::CreateInitC( void )
150 {
151   wxPanel * poPnl;
152   wxString  osInitC[]={ wxT("Warm "), wxT("Use ICs"), wxT("Cold  ") };
153 
154   // Create and add the initial conditions radio buttons
155   poPnl = (wxPanel *) m_oPnlStart.GetParent( );
156   m_oRbxSweep.Create( poPnl, ID_UNUSED, wxT(" Initial Conditions "), wxPoint( 13, 123 ),
157                       wxSize( -1, 41 ), 3, osInitC, 3 );
158   m_oRbxSweep.SetSelection( eINITC_WARM );
159 }
160 
161 //**************************************************************************************************
162 // Create the source component display objects.
163 
CreateSigSrc(void)164 void  PnlAnaBase::CreateSigSrc( void )
165 {
166   wxPanel * poPnl;
167 
168   // Create the input source panel and controls
169 #ifdef LAYOUT_MNGR
170   poPnl = new wxPanel( this );
171 #else
172   poPnl = this;
173 #endif // LAYOUT_MNGR
174 
175   // Create and add input source
176 #ifdef LAYOUT_MNGR
177   m_oChoSrcName.Create( poPnl, ID_CHO_SRCNAME );
178   m_oPnlSrcLvl.bCreate( poPnl, ID_PNL_SRCLVL  );
179 #else
180   m_oSbxSigSrc .Create( poPnl, ID_UNUSED, wxT(" Signal Source "), wxPoint(   6, 178 ),
181                         wxSize( 330, 60 ) );
182   m_oChoSrcName.Create( poPnl, ID_CHO_SRCNAME,                    wxPoint(  18, 200 ),
183                         wxSize( 121, GUI_CTRL_HT ) );
184   m_oPnlSrcLvl.bCreate( poPnl, ID_PNL_SRCLVL, -1, 95, 82,         wxPoint( 142, 200 ) );
185 #endif // LAYOUT_MNGR
186 
187   // Set static box font
188   m_oSbxSigSrc.SetOwnFont( FONT_SLANT );
189 }
190 
191 //**************************************************************************************************
192 // Create the simulation parameter complex part display objects.
193 
CreateCpxPrt(void)194 void  PnlAnaBase::CreateCpxPrt( void )
195 {
196   wxPanel * poPnl;
197 
198   // Create the parameter (probe) complex part panel and controls
199 #ifdef LAYOUT_MNGR
200   poPnl = new wxPanel( this );
201 #else
202   poPnl = this;
203 #endif // LAYOUT_MNGR
204 
205   // Create and add simulation parameter complex part check boxes
206 #ifdef LAYOUT_MNGR
207   m_oCbxMag   .Create( poPnl, ID_CBX_MAG  , wxT("Magnitude")  );
208   m_oCbxPhase .Create( poPnl, ID_CBX_PHASE, wxT("Phase")      );
209   m_oCbxReal  .Create( poPnl, ID_CBX_REAL , wxT("Real Part")  );
210   m_oCbxImag  .Create( poPnl, ID_CBX_IMAG , wxT("Imag. Part") );
211   m_oCbxMagDb .Create( poPnl, ID_CBX_MAGDB, wxT("Mag. in dB") );
212 #else
213   m_oSbxCpxPrt.Create( poPnl, ID_UNUSED,    wxT(" Complex Parts "), wxPoint( 455,   5 ),
214                        wxSize( 110, 146 ) );
215   m_oCbxMag   .Create( poPnl, ID_CBX_MAG,   wxT("Magnitude"),       wxPoint( 461,  24 ) );
216   m_oCbxPhase .Create( poPnl, ID_CBX_PHASE, wxT("Phase"),           wxPoint( 461,  49 ) );
217   m_oCbxReal  .Create( poPnl, ID_CBX_REAL,  wxT("Real Part"),       wxPoint( 461,  74 ) );
218   m_oCbxImag  .Create( poPnl, ID_CBX_IMAG,  wxT("Imag. Part"),      wxPoint( 461,  99 ) );
219   m_oCbxMagDb .Create( poPnl, ID_CBX_MAGDB, wxT("Mag. in dB"),      wxPoint( 461, 124 ) );
220 #endif // LAYOUT_MNGR
221 
222   // Set static box font
223   m_oSbxCpxPrt.SetOwnFont( FONT_SLANT );
224 }
225 
226 //**************************************************************************************************
227 // Create the analysis temperature display objects.
228 
CreateTemp(void)229 void  PnlAnaBase::CreateTemp( void )
230 {
231   wxPanel * poPnl;
232 
233   // Create the temperature panel and controls
234 #ifdef LAYOUT_MNGR
235   poPnl = new wxPanel( this );
236 #else
237   poPnl = this;
238 #endif // LAYOUT_MNGR
239 
240   // Create and add analysis temperature
241 #ifdef LAYOUT_MNGR
242   m_oPnlTemp.bCreate( poPnl, ID_PNL_TEMP );
243 #else
244   m_oSbxTemp. Create( poPnl, ID_UNUSED, wxT(" Temperature "), wxPoint( 343, 178 ),
245                       wxSize( 156, 60 ) );
246   m_oPnlTemp.bCreate( poPnl, ID_PNL_TEMP, 0, 95, 40,          wxPoint( 353, 200 ) );
247 #endif // LAYOUT_MNGR
248 
249   // Set static box font
250   m_oSbxTemp.SetOwnFont( FONT_SLANT );
251 
252   // Set PnlValue parameters
253   m_oPnlTemp.bShowUnits( PnlValue::eSHOW_LBL );
254   m_oPnlTemp.bSetUnitsType( eUNITS_TMPC );
255   m_oPnlTemp.Layout( );
256 }
257 
258 //**************************************************************************************************
259 // Layout the panel display objects.
260 
DoLayout(void)261 void  PnlAnaBase::DoLayout( void )
262 {
263 #ifndef LAYOUT_MNGR
264   return;
265 #endif
266 
267   wxWindow       * poWin;
268   wxSizer        * poSzr;
269   wxGridBagSizer * poSzrGB;
270   wxSizerFlags     oFlags;
271   wxGBPosition     oGBPosn;
272   wxGBSpan         oGBSpan;
273   int              iFlags;
274   int              iBorder;
275 
276   //---------------------------------------------------------------------------
277   // Create and set the sizer for the sweep panel
278   poWin = m_oPnlStart.GetParent( );
279   poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Sweep Parameters ") );
280   poWin->SetSizer( poSzr );
281 
282   // Layout the sweep panel
283   oFlags.Align( wxALIGN_LEFT );
284   oFlags.Border( wxALL & ~wxBOTTOM, 3 );
285   poSzr->Add( &m_oPnlStart, oFlags );
286   poSzr->Add( &m_oPnlStop , oFlags );
287   poSzr->Add( &m_oPnlStep , oFlags );
288   poSzr->AddSpacer( 3 );
289   poSzr->Add( &m_oRbxSweep, oFlags );
290 
291   //---------------------------------------------------------------------------
292   // If required create the signal source panel
293   poWin = m_oChoSrcName.GetParent( );
294   if( poWin != NULL )
295   {
296     // Create and set the sizer for the signal source panel
297     poSzr = new wxStaticBoxSizer( wxHORIZONTAL, poWin, wxT(" Signal Source ") );
298     poWin->SetSizer( poSzr );
299 
300     // Layout the signal source panel
301     oFlags.Align( wxALIGN_LEFT );
302     oFlags.Border( wxALL, 3 );
303     poSzr->Add( &m_oChoSrcName, oFlags );
304     poSzr->Add( &m_oPnlSrcLvl , oFlags );
305   }
306 
307   //---------------------------------------------------------------------------
308   // Create and set the sizer for the parameter (probe) panel
309   poWin = m_oCbxVoltage.GetParent( );
310   poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Parameters ") );
311   poWin->SetSizer( poSzr );
312 
313   // Layout the parameter (probe) panel
314   oFlags.Align( wxALIGN_LEFT );
315   oFlags.Border( wxALL & ~wxBOTTOM, 3 );
316   poSzr->Add( &m_oCbxVoltage, oFlags );
317   poSzr->Add( &m_oCbxCurrent, oFlags );
318   poSzr->Add( &m_oCbxPower  , oFlags );
319   poSzr->Add( &m_oCbxResist , oFlags );
320   poSzr->AddSpacer( 3 );
321 
322   //---------------------------------------------------------------------------
323   // If required create the complex parts panel
324   poWin = m_oCbxMag.GetParent( );
325   if( poWin != NULL )
326   {
327     // Create and set the sizer for the complex part panel
328     poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Complex Parts ") );
329     poWin->SetSizer( poSzr );
330 
331     // Layout the complex part panel
332     oFlags.Align( wxALIGN_LEFT );
333     oFlags.Border( wxALL & ~wxBOTTOM, 3 );
334     poSzr->Add( &m_oCbxMag  , oFlags );
335     poSzr->Add( &m_oCbxPhase, oFlags );
336     poSzr->Add( &m_oCbxReal , oFlags );
337     poSzr->Add( &m_oCbxImag , oFlags );
338     poSzr->Add( &m_oCbxMagDb, oFlags );
339     poSzr->AddSpacer( 3 );
340   }
341 
342   //---------------------------------------------------------------------------
343   // If required create the analysis temperature panel
344   poWin = m_oPnlTemp.GetParent( );
345   if( poWin != NULL )
346   {
347     // Create and set the sizer for the analysis temperature panel
348     poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Temperature ") );
349     poWin->SetSizer( poSzr );
350 
351     // Layout the complex part panel
352     oFlags.Align( wxALIGN_LEFT );
353     oFlags.Border( wxALL, 3 );
354     poSzr->Add( &m_oPnlTemp, oFlags );
355   }
356 
357   //---------------------------------------------------------------------------
358   // Create and set the underlying panel's sizer
359   poSzrGB = new wxGridBagSizer( 1, 1 );
360   SetSizer( poSzrGB );
361 
362   // Add the sweep panel
363   poWin = m_oPnlStart.GetParent( );
364   oGBPosn.SetCol( 0 );     oGBPosn.SetRow( 0 );
365   oGBSpan.SetColspan( 3 ); oGBSpan.SetRowspan( 4 );
366   iFlags  = wxALL | wxALIGN_CENTER;
367   iBorder = 5;
368   poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder );
369 
370   poWin = m_oChoSrcName.GetParent( );
371   if( poWin != NULL )
372   {
373     // Add the signal source panel
374     oGBPosn.SetCol( 0 );     oGBPosn.SetRow( 4 );
375     oGBSpan.SetColspan( 3 ); oGBSpan.SetRowspan( 1 );
376     iFlags = wxALL | wxALIGN_LEFT;
377     poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder );
378   }
379 
380   // Add the parameter (probe) panel
381   poWin = m_oCbxVoltage.GetParent( );
382   oGBPosn.SetCol( 3 );     oGBPosn.SetRow( 0 );
383   oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 3 );
384   poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder );
385 
386   // Add the options button
387   oGBPosn.SetCol( 3 );     oGBPosn.SetRow( 3 );
388   oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 1 );
389   iFlags = wxALL | wxALIGN_CENTER;
390   poSzrGB->Add( &m_oBtnOPTIONS, oGBPosn, oGBSpan, iFlags, iBorder );
391 
392   poWin = m_oCbxMag.GetParent( );
393   if( poWin != NULL )
394   {
395     // Add the complex parts panel
396     oGBPosn.SetCol( 4 );     oGBPosn.SetRow( 0 );
397     oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 4 );
398     poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder );
399   }
400 
401   poWin = m_oPnlTemp.GetParent( );
402   if( poWin != NULL )
403   {
404     // Add the temperature panel
405     oGBPosn.SetCol( 3 );     oGBPosn.SetRow( 4 );
406     oGBSpan.SetColspan( 2 ); oGBSpan.SetRowspan( 1 );
407     poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder );
408   }
409 }
410 
411 //**************************************************************************************************
412 // Set the state of the step scale radio box.
413 //
414 // Argument List :
415 //   eScale - The enumerated scale specifier
416 //
417 // Return Values :
418 //   Success - true
419 //   Failure - false
420 
bSetScale(eTypeScale eScale)421 bool  PnlAnaBase::bSetScale( eTypeScale eScale )
422 {
423   if( eScale<eSCALE_FST || eScale>eSCALE_LST )      return( false );
424 #if wxCHECK_VERSION( 2,8,0 )
425   if( m_oRbxSweep.GetCount( ) < (uint) eScale + 1 ) return( false );
426 #else
427   if( m_oRbxSweep.GetCount( ) < (int)  eScale + 1 ) return( false );
428 #endif
429 
430   m_oRbxSweep.SetSelection( (int) eScale );
431 
432   InitScale( );
433 
434   return( true );
435 }
436 
437 //**************************************************************************************************
438 // Set the state of the initial conditions radio box.
439 //
440 // Argument List :
441 //   eInitC - The enumerated initial conditions specifier
442 //
443 // Return Values :
444 //   Success - true
445 //   Failure - false
446 
bSetInitC(eTypeInitC eInitC)447 bool  PnlAnaBase::bSetInitC( eTypeInitC eInitC )
448 {
449   if( eInitC<eINITC_FST || eInitC>eINITC_LST )      return( false );
450 #if wxCHECK_VERSION( 2,8,0 )
451   if( m_oRbxSweep.GetCount( ) < (uint) eInitC + 1 ) return( false );
452 #else
453   if( m_oRbxSweep.GetCount( ) < (int)  eInitC + 1 ) return( false );
454 #endif
455 
456   m_oRbxSweep.SetSelection( (int) eInitC );
457 
458   return( true );
459 }
460 
461 //**************************************************************************************************
462 // Load the source choice box with the components names which may be chosen as
463 // a source.
464 //
465 // Argument List :
466 //   roSimn   - A reference to an array on Component objects
467 //   osPrefix - A string containing the first letter of the desired components
468 
LoadSrcNames(ArrayComponent & roaCpnts,wxString osPrefixes)469 void  PnlAnaBase::LoadSrcNames( ArrayComponent & roaCpnts, wxString osPrefixes )
470 {
471   wxArrayString  oasSrcs;
472   wxString       osTmpSrc;
473   wxString       os1;
474   wxChar         oc1;
475   uint           ui1;
476 
477   // Temporarily record the current selection
478   osTmpSrc = m_oChoSrcName.GetStringSelection( );
479 
480   // Clear the signal source choice box
481   m_oChoSrcName.Clear( );
482   m_oChoSrcName.Append( wxT("None") );
483 
484   // Load selected components into string array, sort and put them in the signal source choice box
485   for( ui1=0; ui1<roaCpnts.GetCount( ); ui1++ )
486   {
487     os1 = roaCpnts.Item( ui1 ).rosGetName( );
488     if( os1.IsEmpty( ) )                        continue;
489 
490     oc1 = os1.GetChar( 0 );
491     if( osPrefixes.Find( oc1 ) == wxNOT_FOUND ) continue;
492 
493     oasSrcs.Add( os1 );                        // Add the component label to the the string array
494     m_oaCpntSrcs.Add( roaCpnts.Item( ui1 ) );  // Add the component to the source component array
495   }
496   oasSrcs.Sort( iStrCmpSrc );
497   m_oChoSrcName.Append( oasSrcs );
498 
499   // Restore the original selection if possible
500   if( ! m_oChoSrcName.SetStringSelection( osTmpSrc ) )
501     m_oChoSrcName.SetStringSelection( wxT("None") );
502 }
503 
504 //**************************************************************************************************
505 // Set the source component.
506 //
507 // Argument List :
508 //   roCpnt - A component object
509 //
510 // Return Values :
511 //   true  - Success
512 //   false - Failure
513 
bSetSrcCpnt(Component & roCpnt)514 bool  PnlAnaBase::bSetSrcCpnt( Component & roCpnt )
515 {
516   // If the components isn't valid set default values
517   if( ! roCpnt.bIsValid( ) )
518   {
519     m_oChoSrcName.SetStringSelection( wxT("None") );
520     if( m_oPnlSrcLvl.GetParent( ) != NULL )
521     {
522       m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE );
523       m_oPnlSrcLvl.bSetValue( (float) 0.0 );
524     }
525     return( false );
526   }
527 
528   // Set the source component label, value and units
529   if( ! m_oChoSrcName.SetStringSelection( roCpnt.rosGetName( ) ) ) return( false );
530   if( m_oPnlSrcLvl.GetParent( ) != NULL )
531   {
532     if( ! m_oPnlSrcLvl.bSetUnitsType( roCpnt.eGetUnitsType( ) ) )  return( false );
533     if( ! m_oPnlSrcLvl.bSetValue( roCpnt.rosGetNumValue( ) ) )     return( false );
534   }
535 
536   return( true );
537 }
538 
539 //**************************************************************************************************
540 // Select the analysis to be performed.
541 //
542 // Argument List :
543 //   eAnalysis - The analysis type
544 //
545 // Return Values :
546 //   true  - Success
547 //   false - Failure
548 
bSetAnalysType(eTypeCmd eAnaType)549 bool  PnlAnaBase::bSetAnalysType( eTypeCmd eAnaType )
550 {
551   if( eAnaType<eCMD_ANA_FST || eAnaType>eCMD_ANA_LST ) return( false );
552 
553   m_eAnaType = eAnaType;
554 
555   return( true );
556 }
557 
558 //**************************************************************************************************
559 //                                         Event Handlers                                          *
560 //**************************************************************************************************
561 // Source component choice box event handler.
562 //
563 // Argument List :
564 //   roEvtCmd - An object holding information about the event
565 
OnSrcName(wxCommandEvent & WXUNUSED (roEvtCmd))566 void  PnlAnaBase::OnSrcName( wxCommandEvent & WXUNUSED( roEvtCmd ) )
567 {
568   // Set the sweep source component
569   if( m_oChoSrcName.GetSelection( ) > 0 )
570        m_oCpntSwpSrc.bSetName( m_oChoSrcName.GetStringSelection( ) );
571   else m_oCpntSwpSrc.bClear( );
572 }
573 
574 //**************************************************************************************************
575