////////////////////////////////////////////////////////////////////////////////
// 
////////////////////////////////////////////////////////////////////////////////
#include <vcl.h>
#pragma hdrstop

#include <utilcls.h>
#include <systobj.h>

#ifdef __LIGHT_VERSION__
#include <Kl_TLB.h>
#else
#include <Ks_TLB.h>
#endif

#include <ldefin2d.h>
#include <ksConstants.h>

#include "blprj.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


TForm1 *Form1;
KompasObjectPtr kompas;
int  libraryId = 0; // HANDLE  

//---------------------------------------------------------------------------
// 
// ---
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btLoadGraphicClick(TObject *Sender)
{
  if ( !kompas ) {
#ifdef __LIGHT_VERSION__
    kompas = (IDispatch*)CreateOleObject( "KOMPASLT.Application.5" );
#else
    kompas = (IDispatch*)CreateOleObject( "KOMPAS.Application.5" );
#endif
    if ( kompas ) {
      kompas->Visible = true;           //   
//      kompas->ActivateControllerAPI();
    }
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btUnloadGraphicClick(TObject *Sender)
{
  if ( kompas ) {
    kompas->Quit();
    kompas = (IDispatch*)NULL;
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  if ( kompas ) {
    kompas->Quit();
    kompas = (IDispatch*)NULL;
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btLoadFileClick(TObject *Sender)
{
  if ( kompas ) {
    OpenDialog1->Filter = "(*.cdw)|*.cdw|(*.frw)|*.frw"
                          "|(*.m3d)|*.m3d|(*.a3d)|*.a3d|";
    OpenDialog1->FileName = "";
    if ( OpenDialog1->Execute()) {
//       
//      -   
//           " . ?"   
//      -   IDispatch,         
      WideString fileName ( OpenDialog1->FileName );
      long type =  kompas->ksGetDocumentTypeByName( fileName );
      switch (type) {
        case lt_DocPart3D:    //3d 
        case lt_DocAssemble3D: {
          ksDocument3DPtr doc3D = kompas->Document3D();
   	      if ( doc3D )
            doc3D->Open( fileName, 0 );
          break;
        }
        case lt_DocSheetStandart : //2d 
        case lt_DocFragment: {
          ksDocument2DPtr doc2D = kompas->Document2D();
   	      if ( doc2D )
            doc2D->ksOpenDocument( fileName, 0 );
          break;
        }
        case lt_DocSpc: {         //
          ksSpcDocumentPtr docSpc = kompas->SpcDocument();
   	      if ( docSpc )
            docSpc->ksOpenDocument( fileName, 0 );
          break;
        }
        case lt_DocTxtStandart: { // 
          ksDocumentTxtPtr docTxt = kompas->DocumentTxt();
   	      if ( docTxt )
            docTxt->ksOpenDocument( fileName, 0 );
          break;
        }
      }
      long err = kompas->ksReturnResult();
      if (err) {
        kompas->ksMessageBoxResult();
        kompas->ksResultNULL();
	    }
    }
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btCloseFileClick(TObject *Sender)
{
  if ( kompas ) {
    ksDocument2DPtr doc = kompas->ActiveDocument2D();
    if ( doc )
      doc->ksCloseDocument();
  }
}

//---------------------------------------------------------------------------
//   
// ---
void __fastcall TForm1::btNewFileClick(TObject *Sender)
{
  if ( kompas ) {
//        
//        -   
//        0 -  
//        1 - 
//        2 -  
//        3 - 
//        4 - 3D-
//             " . ?"   
//        -   IDispatch,         
//      -  HANDLE  
    ksDocument2DPtr doc ( kompas->Document2D() );
    if ( doc ) {
      ksDocumentParamPtr docPar = kompas->GetParamStruct( ko_DocumentParam );
      if ( docPar ) {
        docPar->Init();
        docPar->type = lt_DocSheetStandart;
        doc->ksCreateDocument( (LPDISPATCH)docPar );
	    }
    }
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btSaveFileClick(TObject *Sender)
{
  if ( kompas ) {
    ksDocument2DPtr doc = kompas->ActiveDocument2D();
    if ( doc )
      doc->ksSaveDocument( 0 );
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btLoadLibraryClick(TObject *Sender)
{
  if ( kompas ) {
    OpenDialog1->Filter = "(*.rtw)|*.rtw";
    OpenDialog1->FileName = "";
    if (OpenDialog1->Execute() ) {
//     
//    -  HANDLE  
      libraryId = kompas->ksAttachKompasLibrary( WideString( OpenDialog1->FileName ) );
    }
  }
}

//---------------------------------------------------------------------------
//   
// ---
void __fastcall TForm1::btRunLibraryCommandClick(TObject *Sender)
{
  if ( kompas ) {
    if ( !libraryId )
      btLoadLibraryClick(Sender);
    if ( libraryId )
//          
//        - HANDLE 
//        -   
      kompas->ksExecuteKompasLibraryCommand( libraryId, 1 );
  }
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::btUnloadLibraryClick(TObject *Sender)
{
  if ( kompas ) {
    if ( libraryId ) {
      kompas->ksDetachKompasLibrary( libraryId );
      libraryId = 0;
    }
  }
}

//---------------------------------------------------------------------------
//      
// ---
void __fastcall TForm1::btQuitWOUnloadClick(TObject *Sender)
{
  kompas = (IDispatch*)NULL;
  Close(); //  
}

//---------------------------------------------------------------------------
//     
// ---
void __fastcall TForm1::btQuitUnloadClick(TObject *Sender)
{
  Close(); //  
}

//---------------------------------------------------------------------------
//  
// ---
void __fastcall TForm1::ExecuteCommandClick(TObject *Sender)
{
  if ( kompas ) {
    ksDocument2DPtr doc = kompas->ActiveDocument2D();
    if  ( doc ) {
      doc->ksCircle( 50, 50, 20, 1 );
      doc->ksCircle( 50, 50, 50, 2 );
    }
    kompas->ksMessage( WideString( "" ) );
  }
}

//---------------------------------------------------------------------------
//    
// ---
void __fastcall TForm1::btActiveClick(TObject *Sender)
{
  if ( !kompas ) {
#ifdef __LIGHT_VERSION__
    kompas = (IDispatch*)GetActiveOleObject( "KOMPASLT.Application.5" );
#else
    kompas = (IDispatch*)GetActiveOleObject( "KOMPAS.Application.5" );
#endif
    if ( kompas ) {
      kompas->Visible = true;           //   
      kompas->ActivateControllerAPI();
    }
  }
}

//---------------------------------------------------------------------------
// /  
// ---
void __fastcall TForm1::btVisibleClick(TObject *Sender)
{
  if ( kompas )
    kompas->Visible = kompas->Visible ? false : true;
}

