////////////////////////////////////////////////////
//      //
// .                                        //
// ---------------------------------------------- //
//                          //
////////////////////////////////////////////////////
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "mainfrm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PDX1C_OCX"
#pragma resource "*.dfm"
TMainForm       *MainForm;
long            nFields;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PagePropretiesClick(TObject *Sender)
{
   //     
   fPDX->ShowProperties();
   UpdateForm();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ExitClick(TObject *Sender)
{
   //  
   Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::EnableClick(TObject *Sender)
{
   fPDX->DeviceEnabled = Enable->Checked;
   if (fPDX->ResultCode)
   {
      DisplayError ();
   }
   UpdateForm();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
   //   
   //      
   //  ,  
   //  .

   fPDX->RaiseException = false;
   nFields = 0;

   //    
   for (int i=0; i<16; i++)
      NumberOfForm->Items->Add(IntToStr (i));
   NumberOfForm->ItemIndex = 0;

   //  
   UpdateForm ();
}
//---------------------------------------------------------------------------

void TMainForm::DisplayError ()
{
   AnsiString stData;

   stData = fPDX->ResultDescription;
   Application->MessageBox (stData.c_str(), "...", MB_OK);
}

//   
void TMainForm::UpdateForm ()
{
   Enable->Checked = fPDX->DeviceEnabled;
   if (nFields)
   {
      AddRow->Enabled = true;
      DeleteRow->Enabled = true;
      WriteData->Enabled = true;
   }
   else
   {
      AddRow->Enabled = false;
      DeleteRow->Enabled = false;
      WriteData->Enabled = false;
   }
}

void __fastcall TMainForm::ReadDataClick(TObject *Sender)
{
   int i, j;
   //    
   fPDX->FormNumber = NumberOfForm->ItemIndex;

   fPDX->BeginReport();
   if (fPDX->ResultCode)
   {
      DisplayError();
      return;
   }
   //   ,   
   //   
   if (!nFields)
   {
      nFields = fPDX->ReportFieldCount;
      //  
      List->ColCount = nFields;
      for (i = 0; i < nFields; i++)
      {
        fPDX->ReportFieldIndex = i;
        List->Cells[i][0] = fPDX->ReportFieldName;
      }
   }

   //    

   for (j=1; j <= fPDX->ReportRecordCount; j++)
   {
      fPDX->GetRecord();
      List->RowCount = j+1;
      for (i = 0; i < nFields; i++)
      {
         fPDX->ReportFieldIndex = i;
         List->Cells[i][j] = fPDX->ReportField;
      }
   }
   //    -  
   List->FixedRows = 1;
   UpdateForm();

   fPDX->EndReport();
   if (fPDX->ResultCode)
   {
      DisplayError();
      return;
   }
}
//---------------------------------------------------------------------------
bool TMainForm::GetRecord ()
{
   bool res = true;
   fPDX->GetRecord();
   if (fPDX->ResultCode == -2400)
      res = false;
   else if (fPDX->ResultCode)
   {
      res = false;
      DisplayError();
   }
   return res;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::AddRowClick(TObject *Sender)
{
   //     
   //    
   int row, i;

   row = List->RowCount;
   List->RowCount = row + 1;
   for (i = 0; i<nFields; i++)
      List->Cells[i][row] = "0";

   List->FixedRows = 1;
}

//---------------------------------------------------------------------------
void __fastcall TMainForm::DeleteRowClick(TObject *Sender)
{
   //   
   if (List->RowCount > 1)
      List->RowCount = List->RowCount - 1;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::WriteDataClick(TObject *Sender)
{
   int i, j;

   //      
   fPDX->FormNumber = NumberOfForm->ItemIndex;
   fPDX->BeginAdd();
   if (fPDX->ResultCode)
   {
      DisplayError();
      return;
   }

   //       
   for (i = 1; i < List->RowCount; i++)
   {
      for (j = 0; j < nFields; j++)
      {
         WideString wsData = List->Cells[j][i];
         fPDX->ReportFieldIndex = j;
         fPDX->ReportField = wsData.c_bstr();
      }
      //  
      fPDX->SetRecord();
      if (fPDX->ResultCode)
         DisplayError();
   }
   //    
   fPDX->EndAdd();
   if (fPDX->ResultCode)
   {
      DisplayError();
      return;
   }
   //  
   UpdateForm();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::NumberOfFormChange(TObject *Sender)
{
   //    -  
   //   
   nFields = 0;
   UpdateForm();        
}
//---------------------------------------------------------------------------

