
#include <vcl.h>
#pragma hdrstop


#include  "GProgressDialog.h"

//#include "..\gui_part.h"

//#include "ide_library.h"

//#include "vmos_def.h"

//#include "vmos.h"

//#include "msg_queue.h"
//#include "event.h"

//#include "gui.h"


__fastcall GProgressDialog::GProgressDialog(void)
{
  //[2020.10.01.목][생성]

  //[VAR]
  //{
      int         width, height;

      AnsiString  bmp_path;

  //}

  //[환경변수]
  //{
      IDE_Get_Option(&_ide_option);

  //}

  //[초기화]
  //{
      _base_GForm      = NULL;
      _top_GLabel      = NULL;
      _btm_GLabel      = NULL;
      _total_GProgress = NULL;
      _one_GProgress   = NULL;
      _btn_GBtn        = NULL;

  //}

  //[_base_GForm]
  //{
      //[독립창으로 구동]
      //{
          //독립창으로 구동 설정.
          _base_GForm->_IndptForm(true);

          _base_GForm = new TGForm_Form(NULL);

          //생성후 반드시 초기화.
          _base_GForm->_IndptForm(false);

      //}

      _base_GForm->Parent  = NULL;
      _base_GForm->Visible = false;

      _base_GForm->_Left(Screen->WorkAreaWidth/2 - 400/2);
      _base_GForm->_Top(Screen->WorkAreaHeight/2 - 140/2);
      _base_GForm->_Width(400);
      _base_GForm->_Height(140);

      _base_GForm->_EVENT_ReSize = _EVENT_ReSize_base_GForm;


  //}

  //[출력 라벨]
  //{
      //[2020.10.01.목][추가]{---------------------
      //[문자열] 을 표시하는 <GLabel> 을 생성한다.
      //}------------------------------------------

      //[_topLabel]
      //{
          _top_GLabel          = new TGLabel_Form(_base_GForm);
          _top_GLabel->Parent  = _base_GForm->_baseForm;
          _top_GLabel->Visible = true;

          _top_GLabel->_Left(4);
          _top_GLabel->_Top(4);
          _top_GLabel->_Width_Height(384, 20);

          _top_GLabel->_CaptionAutoPosH(false);
          _top_GLabel->_CaptionAutoPosV(true);

          _top_GLabel->_Caption("출발 : ");

      //}

      //[_btmLabel]
      //{
          _btm_GLabel          = new TGLabel_Form(_base_GForm);
          _btm_GLabel->Parent  = _base_GForm->_baseForm;
          _btm_GLabel->Visible = true;

          _btm_GLabel->_Left(4);
          _btm_GLabel->_Top(22);
          _btm_GLabel->_Width_Height(384, 20);

          _btm_GLabel->_CaptionAutoPosH(false);
          _btm_GLabel->_CaptionAutoPosV(true);

          _btm_GLabel->_Caption("도착 : ");

      //}

  //}

  //[진행막대]
  //{
      //[2020.10.01.목][추가]

      //[_totalProgress]
      //{
          _total_GProgress          = new TGProgress_Form(_base_GForm);
          _total_GProgress->Parent  = _base_GForm->_baseForm;
          _total_GProgress->Visible = true;

          _total_GProgress->_Left(4);
          _total_GProgress->_Top(46);
          _total_GProgress->_Width_Height(384, 16);

      //}

      //[_oneProgress]
      //{
          _one_GProgress          = new TGProgress_Form(_base_GForm);
          _one_GProgress->Parent  = _base_GForm->_baseForm;
          _one_GProgress->Visible = true;

          _one_GProgress->_Left(4);
          _one_GProgress->_Top(64);
          _one_GProgress->_Width_Height(384, 16);

      //}

  //}

  //[버튼]
  //{
      _btn_GBtn          = new TGButton_Form(_base_GForm);
      _btn_GBtn->Parent  = _base_GForm->_baseForm;
      _btn_GBtn->Visible = true;

      //[초기화]
      //{
          _btn_GBtn->_down = false;

          _btn_GBtn->_Left(146);
          _btn_GBtn->_Top(86);
          _btn_GBtn->_Width(100);
          _btn_GBtn->_Height(25);

          //버튼의 중앙에 문자가 표시 되도록 한다.
          _btn_GBtn->_CaptionAutoPos(true);

          //[주의]{-----------------------------------------------
          //기본적으로 [파일이동:진행 대화상자] 로 사용하고,
          //파일 이동시 [취소] 요청에 사용하므로 "취소"  로 설정.
          _btn_GBtn->_Caption("취소");
          //}-----------------------------------------------------

          _btn_GBtn->_EVENT_Click= _EVENT_Click_btn_GBtn;

      //}

  //}
  
}

__fastcall GProgressDialog::~GProgressDialog(void)
{
  //[2020.10.01.목][생성]{-----------
  //동적 생성한 그림부품을 삭제.
  //
  //반드시 생성과 역순으로 삭제한다.
  //}--------------------------------

  if(_btn_GBtn != NULL)        { delete _btn_GBtn; _btn_GBtn = NULL; }

  if(_one_GProgress != NULL)   { delete _one_GProgress; _one_GProgress = NULL; }

  if(_total_GProgress != NULL) { delete _total_GProgress; _total_GProgress = NULL; }

  if(_btm_GLabel != NULL)      { delete _btm_GLabel; _btm_GLabel = NULL; }

  if(_top_GLabel != NULL)      { delete _top_GLabel; _top_GLabel = NULL; }

  if(_base_GForm != NULL)      { delete _base_GForm; _base_GForm = NULL; }

}


void __fastcall GProgressDialog::_Visible(bool  pVisible)
{
  //[2020.10.01.목][생성]

  _base_GForm->Visible = pVisible;

}

bool __fastcall GProgressDialog::_IsVisible(void)
{
  //[2020.10.01.목][생성]

  return(_base_GForm->Visible);

}

void __fastcall GProgressDialog::_TopLabel_Caption(char  *pCaption)
{
  //[2020.10.01.목][생성]

  _top_GLabel->_Caption(pCaption);

}

void __fastcall GProgressDialog::_BtmLabel_Caption(char  *pCaption)
{
  //[2020.10.01.목][생성]

  _btm_GLabel->_Caption(pCaption);

}

void __fastcall GProgressDialog::_TotalProgress_Max(int  pMax)
{
  //[2020.10.01.목][생성]

  _total_GProgress->_Max(pMax);

}

void __fastcall GProgressDialog::_TotalProgress_Min(int  pMin)
{
  //[2020.10.01.목][생성]

  _total_GProgress->_Min(pMin);

}

void __fastcall GProgressDialog::_TotalProgress_Progress(int  pProgress)
{
  //[2020.10.01.목][생성]

  _total_GProgress->_Progress(pProgress);

}

void __fastcall GProgressDialog::_OneProgress_Max(int  pMax)
{
  //[2020.10.01.목][생성]

  _one_GProgress->_Max(pMax);

}

void __fastcall GProgressDialog::_OneProgress_Min(int  pMin)
{
  //[2020.10.01.목][생성]
  
  _one_GProgress->_Min(pMin);

}

void __fastcall GProgressDialog::_OneProgress_Progress(int  pProgress)
{
  //[2020.10.01.목][생성]

  _one_GProgress->_Progress(pProgress);

}

void __fastcall GProgressDialog::_Mode_Single(void)
{
  //[2020.10.01.목][생성]

  //<_one_GProgress> 만 존재하는 경우.
  _total_GProgress->Visible = false;

  //크기 조정은 <GForm:ReSize()> 사용.
  _EVENT_ReSize_base_GForm();

}

void __fastcall GProgressDialog::_Mode_Multi(void)
{
  //[2020.10.01.목][생성]

  //<_total_GProgress>, <_one_GProgress> 둘다 보이는 경우.
  _total_GProgress->Visible = true;

  //크기 조정은 <GForm:ReSize()> 사용.
  _EVENT_ReSize_base_GForm();

}


//***********
//[동작함수]
//***********

void __fastcall GProgressDialog::_EVENT_ReSize_base_GForm(void)
{
  //[2020.10.01.목][생성]{---------------------------------------------
  //내부 [그림부품] 배치 수정.
  //단, [수평 변경] 만 처리.
  //
  //표시 형식에 따라 처리.
  //
  //1) [진행막대] 한개<_one_GProgress>만 있는 경우.
  //
  //2) [진행막대] 가 두개<_one_GProgress, _total_GProgress> 있는 경우.
  //
  //<_total_GProgress> 이 보이는 경우인지 아닌지로 결정.,
  //}------------------------------------------------------------------

  //내부에서 <_base_GForm> 크기변경이 있으므로 [다중이벤트] 발생을 막는다.
  _base_GForm->_EVENT_ReSize = NULL;

  //[모드에 따른 처리]
  //{
      //[!]{-----------------------------------------------------------------------
      //[진행막대] 개수에 따라 처리.
      //
      //현재 모드 구분은 <_total_GProgress> 이 보이는지 여부로 구분. 
      //
      //[방법]---------------------------------------------------------------------
      //
      //1) 다중모드(기본).
      //   <_total_GProgress>, <_one_GProgress> 모두 존재하는 경우.
      //
      //2) 단일모드.
      //   <_one_GProgress> 만 있는 경우.
      //   <_total_GProgress> 를 감추고, 이 위치에 <_one_GProgress> 를 위치시킨다.
      //   <_btn_GBtn> 위치도 수정.
      //
      //}--------------------------------------------------------------------------

      if(_total_GProgress->Visible == true)
      {
        //[다중모드] 인 경우.

        //[_base_GForm]
        //{
            _base_GForm->_Height(140);

        //}

        //[_topLabel]
        //{
            _top_GLabel->_Width(_base_GForm->Width - 8*2);

        //}

        //[_btmLabel]
        //{
            _btm_GLabel->_Width(_base_GForm->Width - 8*2);

        //}

        //[_totalProgress]
        //{
            _total_GProgress->_Top(46);
            _total_GProgress->_Width(_base_GForm->Width - 8*2);

        //}

        //[_oneProgress]
        //{
            _one_GProgress->_Top(64);
            _one_GProgress->_Width(_base_GForm->Width - 8*2);

        //}

        //[_btn_GBtn]
        //{
            _btn_GBtn->_Left(_base_GForm->Width/2 - _btn_GBtn->Width/2 - 4);
            _btn_GBtn->_Top(86);

        //}

      }
      else
      {
        //[단일모드] 인 경우.

        //[_base_GForm]
        //{
            _base_GForm->_Height(140 - (64-46));

        //}

        //[_topLabel]
        //{
            _top_GLabel->_Width(_base_GForm->Width - 8*2);

        //}

        //[_btmLabel]
        //{
            _btm_GLabel->_Width(_base_GForm->Width - 8*2);

        //}

        //[_totalProgress]
        //{
            //보이지 않지만 계속 위치/크기 지정.
            _total_GProgress->_Top(46);
            _total_GProgress->_Width(_base_GForm->Width - 8*2);

        //}

        //[_oneProgress]
        //{
            _one_GProgress->_Top(46);
            _one_GProgress->_Width(_base_GForm->Width - 8*2);

        //}

        //[_btn_GBtn]
        //{
            _btn_GBtn->_Left(_base_GForm->Width/2 - _btn_GBtn->Width/2 - 4);
            _btn_GBtn->_Top(86 - (64-46));

        //}

      }

  //}

  //[이벤트] 복구.
  _base_GForm->_EVENT_ReSize = _EVENT_ReSize_base_GForm;

}

void __fastcall GProgressDialog::_EVENT_Click_btn_GBtn(void)
{
  //[2020.10.01.목][생성]{-----------------------------------------------
  //[대화상자] 를 감추는 것으로 [버튼] 이 눌렸다는 것을 알릴수 있다.
  //일반적으로 [파일진행대화상자] 에서 [취소] 버튼 기능이므로
  //[취소] 라는 상태를 알려주는 것에 목적이 있다.
  //
  //이 경우, [X] 로 대화상자가 닫히는 경우나, [취소] 버튼으로 대화상자가
  //닫히는 경우는 동일한것으로 간주.
  //}--------------------------------------------------------------------

  _base_GForm->Visible = false;


}
