home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / SRCBDTO.PAK / FIELDDEF.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  6.2 KB  |  332 lines

  1. //-----------------------------------------------------------------------------
  2. // Visual Database Tools
  3. // Copyright (c) 1996 by Borland International, All Rights Reserved
  4. //
  5. // fielddef.cpp
  6. // TFieldDef and TFieldDefs wrapper classes
  7. //-----------------------------------------------------------------------------
  8.  
  9. #include <vdbt\bdto.h>
  10.  
  11. #pragma hdrstop
  12.  
  13. #include "wrapit.h"
  14. #include "misc.h"
  15.  
  16. //-----------------------------------------------------------------------------
  17.  
  18. void TFieldDef::SetTFieldDef( PIUnknown p )
  19. {
  20.     fielddef = 0;
  21.     if (p)
  22.         p->QueryInterface( IID_ITFieldDef, (void**) &fielddef );
  23. }
  24.  
  25. void TFieldDef::ClearTFieldDef( void )
  26. {
  27.     if (fielddef)
  28.     {
  29.         fielddef->Release();
  30.         fielddef = 0;
  31.     }
  32. }
  33.  
  34. TFieldDef::TFieldDef( PTFieldDefs Owner, const string& Name, TFieldType DataType, uint16 Size, bool Required, int FieldNo )
  35. {
  36.     fielddef = CreateITFieldDef( Owner ? Owner->GetPITFieldDefs() : 0, Name.c_str(), DataType, Size, MakeVariantBool( Required ), FieldNo );
  37. }
  38.  
  39. TFieldDef::TFieldDef( void )
  40. {
  41.     fielddef = CreateITFieldDef( 0, "", ftUnknown, 0, false, 0 );
  42. }
  43.  
  44. TFieldDef::TFieldDef( PITFieldDef p )
  45. {
  46.     SetTFieldDef( p );
  47. }
  48.  
  49. TFieldDef::TFieldDef( const TFieldDef& p )
  50. {
  51.     SetTFieldDef( p.fielddef );
  52. }
  53.  
  54. TFieldDef::TFieldDef( PTFieldDef p )
  55. {
  56.     SetTFieldDef( p ? p->fielddef : 0 );
  57. }
  58.  
  59. TFieldDef& TFieldDef::operator=( PITFieldDef p )
  60. {
  61.     ClearTFieldDef();
  62.     SetTFieldDef( p );
  63.     return *this;
  64. }
  65.  
  66. TFieldDef& TFieldDef::operator=( const TFieldDef& p )
  67. {
  68.     if (this != &p)
  69.     {
  70.         ClearTFieldDef();
  71.         SetTFieldDef( p.fielddef );
  72.     }
  73.     return *this;
  74. }
  75.  
  76. int TFieldDef::operator==( const TFieldDef& p ) const
  77. {
  78.     if (this == &p)
  79.         return true;
  80.     if (fielddef == p.fielddef)
  81.         return true;
  82.     return false;
  83. }
  84.  
  85. int TFieldDef::operator!=( const TFieldDef& p ) const
  86. {
  87.     return ! operator==(p);
  88. }
  89.  
  90. TFieldDef::~TFieldDef()
  91. {
  92.     ClearTFieldDef();
  93. }
  94.  
  95. void TFieldDef::SetPIT( PIUnknown p )
  96. {
  97.     ClearTFieldDef();
  98.     SetTFieldDef( p );
  99. }
  100.  
  101. void TFieldDef::Detach( void )
  102. {
  103.     if (fielddef)
  104.         fielddef->Detach();
  105. }
  106.  
  107. DEFINE_BDTO_OBJECTMETHOD1( TFieldDef, TField, PITField, CreateField, TBDTComponent& );
  108.  
  109. void TFieldDef::CallCreateField( TBDTComponent& owner, TField& f )
  110. {
  111.     if (fielddef)
  112.     {
  113.         PITField pit = fielddef->CreateField( owner.GetPITBDTComponent() );
  114.         if (pit)
  115.         {
  116.             f.SetPIT( pit );
  117.             pit->Release();
  118.         }
  119.     }
  120. }
  121.  
  122. DEFINE_BDTO_PROP_RO( TFieldDef, TFieldType, DataType );
  123. DEFINE_BDTO_PROP_RO( TFieldDef, int, FieldNo );
  124. DEFINE_BDTO_OBJECTPROP_RO( TFieldDef, string, Name );
  125. DEFINE_BDTO_PROP_RO( TFieldDef, bool, Required );
  126. DEFINE_BDTO_PROP_RO( TFieldDef, uint16, Size );
  127.  
  128. void TFieldDef::GetDataType( TFieldType& t )
  129. {
  130.     if (fielddef)
  131.         t = fielddef->get_DataType();
  132.     else
  133.         t = ftUnknown;
  134. }
  135.  
  136. void TFieldDef::GetFieldNo( int& n )
  137. {
  138.     if (fielddef)
  139.         n = fielddef->get_FieldNo();
  140.     else
  141.         n = 0;
  142. }
  143.  
  144. void TFieldDef::GetName( string& s )
  145. {
  146.     if (fielddef)
  147.         AnyString( fielddef->get_Name() ).GetString( s );
  148. }
  149.  
  150. void TFieldDef::GetRequired( bool& r )
  151. {
  152.     if (fielddef)
  153.         r = MakeBool( fielddef->get_Required() );
  154.     else
  155.         r = false;
  156. }
  157.  
  158. void TFieldDef::GetSize( uint16& s )
  159. {
  160.     if (fielddef)
  161.         s = fielddef->get_Size();
  162.     else
  163.         s = 0;
  164. }
  165.  
  166. //-----------------------------------------------------------------------------
  167.  
  168. void TFieldDefs::SetTFieldDefs( PIUnknown p )
  169. {
  170.     fielddefs = 0;
  171.     if (p)
  172.         p->QueryInterface( IID_ITFieldDefs, (void**) &fielddefs );
  173. }
  174.  
  175. void TFieldDefs::ClearTFieldDefs( void )
  176. {
  177.     if (fielddefs)
  178.     {
  179.         fielddefs->Release();
  180.         fielddefs = 0;
  181.     }
  182. }
  183.  
  184. TFieldDefs::TFieldDefs( TDataSet& DataSet )
  185. {
  186.     fielddefs = CreateITFieldDefs( DataSet.GetPITDataSet() );
  187. }
  188.  
  189. TFieldDefs::TFieldDefs( void )
  190. {
  191.     fielddefs = CreateITFieldDefs( 0 );
  192. }
  193.  
  194. TFieldDefs::TFieldDefs( PITFieldDefs p )
  195. {
  196.     SetTFieldDefs( p );
  197. }
  198.  
  199. TFieldDefs::TFieldDefs( const TFieldDefs& p )
  200. {
  201.     SetTFieldDefs( p.fielddefs );
  202. }
  203.  
  204. TFieldDefs::TFieldDefs( PTFieldDefs p )
  205. {
  206.     SetTFieldDefs( p ? p->fielddefs : 0 );
  207. }
  208.  
  209. TFieldDefs& TFieldDefs::operator=( PITFieldDefs p )
  210. {
  211.     ClearTFieldDefs();
  212.     SetTFieldDefs( p );
  213.     return *this;
  214. }
  215.  
  216. TFieldDefs& TFieldDefs::operator=( const TFieldDefs& p )
  217. {
  218.     if (this != &p)
  219.     {
  220.         ClearTFieldDefs();
  221.         SetTFieldDefs( p.fielddefs );
  222.     }
  223.     return *this;
  224. }
  225.  
  226. int TFieldDefs::operator==( const TFieldDefs& p ) const
  227. {
  228.     if (this == &p)
  229.         return true;
  230.     if (fielddefs == p.fielddefs)
  231.         return true;
  232.     return false;
  233. }
  234.  
  235. int TFieldDefs::operator!=( const TFieldDefs& p ) const
  236. {
  237.     return ! operator==(p);
  238. }
  239.  
  240. TFieldDefs::~TFieldDefs()
  241. {
  242.     ClearTFieldDefs();
  243. }
  244.  
  245. void TFieldDefs::SetPIT( PIUnknown p )
  246. {
  247.     ClearTFieldDefs();
  248.     SetTFieldDefs( p );
  249. }
  250.  
  251. void TFieldDefs::Detach( void )
  252. {
  253.     if (fielddefs)
  254.         fielddefs->Detach();
  255. }
  256.  
  257. void TFieldDefs::Add( const string& Name, TFieldType Type, uint16 Size, bool Required )
  258. {
  259.     if (fielddefs)
  260.         fielddefs->Add( AnyString(Name).GetPITAnyString(), Type, Size, MakeVariantBool( Required ) );
  261. }
  262.  
  263. void TFieldDefs::AddFieldDesc( pFLDDesc FieldDesc, bool Required, uint16 FieldNo )
  264. {
  265.     if (fielddefs)
  266.         fielddefs->AddFieldDesc( FieldDesc, MakeVariantBool( Required ), FieldNo );
  267. }
  268.  
  269. void TFieldDefs::Assign( TFieldDefs& f )
  270. {
  271.     if (fielddefs)
  272.         fielddefs->Assign( f.fielddefs );
  273. }
  274.  
  275. void TFieldDefs::Clear( void )
  276. {
  277.     if (fielddefs)
  278.         fielddefs->Clear();
  279. }
  280.  
  281. DEFINE_BDTO_OBJECTMETHOD1( TFieldDefs, TFieldDef, PITFieldDef, Find, string& );
  282.  
  283. void TFieldDefs::CallFind( string& n, TFieldDef& f )
  284. {
  285.     if (fielddefs)
  286.     {
  287.         PITFieldDef pit = fielddefs->Find( AnyString(n).GetPITAnyString() );
  288.         if (pit)
  289.         {
  290.             f.SetPIT( pit );
  291.             pit->Release();
  292.         }
  293.     }
  294. }
  295.  
  296. int TFieldDefs::IndexOf( const string& n )
  297. {
  298.     if (fielddefs)
  299.         return fielddefs->IndexOf( AnyString(n).GetPITAnyString() );
  300.     return 0;
  301. }
  302.  
  303. void TFieldDefs::Update( void )
  304. {
  305.     if (fielddefs)
  306.         fielddefs->Update();
  307. }
  308.  
  309. DEFINE_BDTO_PROP_RO( TFieldDefs, int, Count );
  310. DEFINE_BDTO_ARRAYOBJECTPROP_RO_FAST( TFieldDefs, TFieldDef, PITFieldDef, Items, int );
  311.  
  312. void TFieldDefs::GetCount( int& c )
  313. {
  314.     if (fielddefs)
  315.         c = fielddefs->get_Count();
  316.     else
  317.         c = 0;
  318. }
  319.  
  320. void TFieldDefs::GetItems( int i, TFieldDef& f )
  321. {
  322.     if (fielddefs)
  323.     {
  324.         PITFieldDef pit = fielddefs->get_Items( i );
  325.         if (pit)
  326.         {
  327.             f.SetPIT( pit );
  328.             pit->Release();
  329.         }
  330.     }
  331. }
  332.