/**********************************************************************

  WrappedType.h

  James Crook
  (C) Audacity Developers, 2007

  wxWidgets license. See Licensing.txt

*************************************************************************/

#ifndef __WRAPPED_TYPE__
#define __WRAPPED_TYPE__

#include "Audacity.h"

enum teWrappedType 
{
   eWrappedNotSet,
   eWrappedString,
   eWrappedInt,
   eWrappedDouble,
   eWrappedBool,
   eWrappedEnum
};

class wxString;
class wxArrayString;
class ShuttlePrefs;

class AUDACITY_DLL_API WrappedType
{
public:

   WrappedType( wxString & InStr ){ SetTo(InStr);   };
   WrappedType( int & InInt ){      SetTo(InInt);   };
   WrappedType( double & InDouble ){SetTo(InDouble);};
   WrappedType( bool & InBool ){    SetTo(InBool);  };
   WrappedType(){ Init();}

   void SetTo( wxString & InStr ){ Init();mpStr=&InStr;       eWrappedType = eWrappedString;}
   void SetTo( int & InInt ){      Init();mpInt=&InInt;       eWrappedType = eWrappedInt;};
   void SetTo( double & InDouble ){Init();mpDouble=&InDouble; eWrappedType = eWrappedDouble;};
   void SetTo( bool & InBool ){    Init();mpBool=&InBool;     eWrappedType = eWrappedBool;};

   bool IsString();

   wxString ReadAsString();
   int ReadAsInt();
   double ReadAsDouble();
   bool ReadAsBool();

   void WriteToAsString( const wxString & InStr);
   void WriteToAsInt( const int InInt);
   void WriteToAsDouble( const double InDouble);
   void WriteToAsBool( const bool InBool);

   bool ValuesMatch( const WrappedType & W );
   void WriteToAsWrappedType( const WrappedType & W ); 

public : 
   void Init();

   teWrappedType eWrappedType;
   wxString * mpStr;
   int * mpInt;
   double * mpDouble;
   bool * mpBool;

};

#endif
