

#ifndef gui_part_h
#define gui_part_h


#include  "vmos_def.h"


//[모든것의 기본 환경]
//{
    #include  "GVmos.h"

//}

//[그림부품]
//{
    //[모든것의 기본]{---
    #include  "GVmos.h"
    //}------------------

    #include  "GBalloonBox.h"
    #include  "GHint.h"
    #include  "GButton.h"
    #include  "GBmpButton.h"
    #include  "GLabel.h"
    #include  "GTabs.h"
    #include  "GProgress.h"
    #include  "GScrollH.h"
    #include  "GScrollV.h"
    #include  "GCheckButton.h"
    #include  "GRadioButton.h"
    #include  "GMsgBox.h"
    #include  "GForm.h"
    #include  "GFindDialog.h"
    #include  "GCaret.h"
    #include  "GEdit.h"
    #include  "GEdgeBox.h"
    #include  "GEditor.h"
    #include  "GList.h"
    #include  "GPrintBox.h"

    #include  "GDotMatrix.h"

    //[2018.06.17.일][추가!!!]
    #include  "GCover.h"

//}

//[정의]
//{
    //[그림부품] 의 기본 설정값을 정의한다.

    #define  d_Form_BorderWidth        4

    #define  d_Popup_BorderWidth       1

    #define  d_Editor_GutterWidth      30

    #define  d_Editor_TopHeight        16

    //[2018.06.13.수][추가!!!]
    #define  d_Cover_BorderWidth       6

//}

//[색 지정]
//{
    //[!]{----------------------------------------------------------------------
    //향후 같은 이름의 전역 변수로 전부 대체된다.
    //모두 공통된 이름을 가지고 같은 색을 일괄 적용하게 된다.

    //기막힌녹색 : 0x00C4C400

    //나의녹색 : (clLime<<6) & 0x00ffffff
    //           (0x0000FF80<<7) & 0x00ffffff
    //맑은녹색 : (0x00FF8000>>1) & 0x00ffffff

    //진보라     : 0x00800040
    //연보라     : 0x00FF0080 (추천!!!)
    //아주연보라 : 0x00FF8080 (추천!!!)

    //자주     : clPurple
    //진홍     : 0x008000FF
    //분홍     : clFuchsia
    //홍시색   : 0x000C5BEF
    //토마토색 : clYellow>>2
    //감색     : clYellow>>1

    //연두     : 0x0000FF80
    //라임색   : clLime
    //청록색   : clTeal
    //진녹색   : 0x00004000
    //푸른녹색 : 0x00808040
    //올리브   : clOlive

    //진갈색   : 0x00000040
    //갈색     : clMaroon
    //연갈색   : 0x00004080

    //주황색   : 0x000080FF

    //흐린파랑 : 0x00FF8000 //(추천!!!)
    //흐린하늘 : 0x00C08000

    //짙은회색 : 0x003D3D3D

    //테두리 색.(caption 색)
    //#define IDE_COLOR_0           (clLime<<6) & 0x00ffffff
    //}-------------------------------------------------------------------------

    //[부품]
    //{
        //기본 부품 적용색.
        #define  d_Color_Part           clGray

        //기본 부품 밝은색.
        #define  d_Color_PartBright     clSilver

        //바탕색.
        #define  d_Color_Back           clWhite

        //[폼] 전체끝 외곽선 1 pixel 색.
        #define  d_Color_FormOutLine    clBlack

        //[폼] 의 테두리 색.
        #define  d_Color_FormBorder     clSilver


        //[2010.02.07.일][임시추가!!!]
        #define  d_Color_BreakPoint     clRed
        #define  d_Color_RunArrow       clRed

        //[2010.02.14.일][추가!!!]
        #define  d_Color_LineBox        clBlack

    //}

    //[글꼴]
    //{
        //양각 문자
        #define  d_Color_Font           clBlack

        //음각 문자.
        #define  d_Color_FontM          clWhite

        //비활성 문자.
        #define  d_Color_FontDead       clGray

    //}

    //[밝기]
    //{
        //비활성화 시 밝기.
        #define  d_Bright_Disable            200

        #define  d_Bright_Editor             225

        #define  d_Bright_EditorDebug        215

        #define  d_Bright_BreakLine          256/2

        #define  d_Bright_LineBox            256/2

        #define  d_Bright_EditorTopSelect    215

        #define  d_Bright_EditorInfoSelect   100

        #define  d_Bright_ImeHan             60
        #define  d_Bright_ImeEng             200

        #define  d_Bright_PopupMenu          215
        #define  d_Bright_PopupMenuSelect    100

        //[2010.02.13.토][추가!!!]
        #define  d_Bright_ListSelBack        80
        #define  d_Bright_ListMouseSelBack   80

        //[2010.02.18.목][추가!!!]
        #define  d_Bright_PrintBox           225



    //}

//}

//[기타정보]
//{
    #define  d_EditorEdit_BackBmpDefault    ExtractFilePath(Application->ExeName) + "image\\기계닉스.jpg"

//}


//[생성자 정보 구조]
//{
    //[2010.01.28.목][추가!!!]{------------------------------------------------------------
    //<한국형C> 에서 선언되는 그림부품의 [생성자] 정보를 정의한다.
    //[생성자] 자체는 모든 [그림부품] 에 동일하고 <unsigned char [20]> 의 크기로 선언된다.
    //}------------------------------------------------------------------------------------

    //[구조]{-------------------------------------------------------------------------
    //     <8바이트>                <8바이트>               <2바이트>       <2바이트>
    //[실제개체위치(TGxxx)] + [모체생성자위치(VMOS상)] + [부품종류식별자] + [개체 ID]
    //}-------------------------------------------------------------------------------

    //{ [실제개체위치(TGxxx)] : 8 바이트 }
    //
    //=> 실제 PC에서 동적생성된 <TGxxx> 개체의 PC 상의 [물리적인 절대주소] 를 갖는다.
    //   실제는 4바이트면 충분하지만 나중에 확장이나 PDA 용으로 만들 것을 생각하여
    //   8 바이트로 설정하였다.
    //
    //   [중요!!!]{---------------------------------------------------------------------------------------
    //   이 정보를 가장 처음에 배치한 것은
    //   ((TGButton_Form *)_GPart_) = new TGButton_Form(main_Form);
    //   와 같이 단순하게 하여 ((TGButton_Form *)&(_GPart_[x])) 와 같은 복잡한 표기를 하지 않기 위함이다.
    //   가장 처음에 있으므로 마치 일반 개체포인터처럼 사용가능하다.
    //   //}----------------------------------------------------------------------------------------------

    //{ [모체생성자위치(VMOS상)] : 8 바이트 }
    //
    //=> 이 개체가 생성된 [모체] 의 [생성자 절대주소(VMOS 상)]
    //   [생성자] 정보에 모든 것이 다 있으므로 [생성자] 위치를 관리하는 것이 좋다.
    //   이 정보는 <한국형C> 자체에서 생성된 것이므로 VMOS 상의 절대번지가 된다.

    //{ [부품종류식별자] : 2 바이트 }
    //
    //=> [그림부품] 자체의 [종류] 를 식별하기 위하여 VMOS 차원에서 이미 정의된 [식별값].
    //   <GButton>, <GList>, <Gxxx> 등 [부품종류] 자체를 식별하는 값이다.
    //   이 값은 [글꼴설정함수] 등 개체를 다루는 API 를 공통으로 사용하기 위한 것으로
    //   해당 API 는 이 정보로 [개체] 를 구분하고 해당 개체에 맞는 함수를 호출하여
    //   처리하게 된다.
    //   1바이트면 총 256 개의 개체종류를 구분할수 있으나 관리를 편리하게 하기 위하여
    //   2바이트를 사용한다.

    //{ [개체 ID] : 2 바이트 }
    //
    //=> <한국형C> 안에서 생성한 [그림부품] 을 구분하기 위하여 사용자가 지정하는
    //   개체식별값.
    //   자체는 필요가 없으나 [알림문] 이 어떤 개체의 것인지 구분하기 위하여 반드시 필요하다.
    //   [알림문] 은 64비트 단위 값인데, 이 곳에 사용자가 직접 지정한 [개체 ID] 가 들어있어
    //   [알림문] 이 어떤 [개체] 의 것인지 구분하여 쉽게 처리할수 있다.
    //   실제 생성되는 개체가 수백개가 아니므로 가장 쉽게 관리할수 있는 이 방법이 최상이다.

//}

//[그림부품 종류 ID]
//{
    //[2010.01.28.목][추가!!!]{-------------------------------------
    //[그림부품] 종류를 구분하기 위한 각각의 ID 를 정의한다.
    //서로의 구분을 위하여 필요한 것이므로 순서는 상관없다.
    //단, <한국형C> 쪽도 같은 정의를 사용해야 한다.
    //
    //[2010.02.23.화][수정!!!]--------------------------------------
    //바로 사용할 [그림부품] 을 완성하고 다시 재정의한다.
    //ID 는 <2바이트> 크기 이므로 구분하기 쉽게 10 진수로 정의한다.
    //}-------------------------------------------------------------

    #define  d_GID_NULL           0 //<이벤트처리>

    #define  d_GID_Vmos           1 //[2010.03.01.월][완료!!!]
    #define  d_GID_Form           2 //[2010.03.02.화][완료!!!]
    #define  d_GID_BalloonBox     3 //[2010.03.03.수][완료!!!]
    #define  d_GID_Hint           4 //[2010.03.03.수][완료!!!]
    #define  d_GID_Button         5 //[2010.03.04.목][완료!!!]
    #define  d_GID_BmpButton      6 //[2010.03.05.금][완료!!!]
    #define  d_GID_Label          7 //[2010.03.05.금][완료!!!]
    #define  d_GID_Tabs           8 //[2010.03.06.토][완료!!!]
    #define  d_GID_Progress       9 //[2010.03.06.토][완료!!!]
    #define  d_GID_ScrollH        10 //[2010.03.07.일][완료!!!]
    #define  d_GID_ScrollV        11 //[2010.03.07.일][완료!!!]
    #define  d_GID_CheckButton    12 //[2010.03.07.일][완료!!!]
    #define  d_GID_RadioButton    13 //[2010.03.07.일][완료!!!]
    #define  d_GID_MsgBox         14 //[2010.03.08.월][완료!!!]
    #define  d_GID_Edit           15 //[2010.03.09.화][완료!!!]
    #define  d_GID_Editor         16 //[2010.03.18.목][완료!!!]
    #define  d_GID_List           17 //[2010.03.11.목][완료!!!]
    #define  d_GID_PrintBox       18 //[2010.03.13.토][완료!!!]
    #define  d_GID_DotMatrix      19 //[2010.03.15.월][완료!!!]

    //[2010.03.04.목][추가!!!]{-----------------------------------------------
    //[전역개체] 로 사용되므로 일단 기본적인 [부품고유번호] 는 부여한다.
    #define  d_GID_FindDialog     20  //공유자원이므로 API 화 하지 않는다.
                                      //향후 필요한 경우 별도 처리한다.
                                      //현재는 오직 [편집기] 에서만 사용된다.
    //}-----------------------------------------------------------------------

    //[2021.03.27.토][추가]
    #define  d_GID_ImageBox       21


    //[내부 사용 부품]
    //{
        //[!]{-----------------------------------------------------
        //일단 내부적으로만 사용되는 것으로 ID 를 할당하지 않는다.
        //행후 Tree 등 추가 부품 완료후 필요시 ID 를 부여한다.
        //}--------------------------------------------------------

        //d_GID_Caret
        //d_GID_EdgeBox

    //}

//}

//[GVmos:전체]
//{
    //[2010.02.04.목][추가!!!]{----------------------------
    //모든 것의 [기본환경] 으로 모든 것보다 먼저 생성되고,
    //반드시 1개만 있어야 한다.
    //}----------------------------------------------------

    //[2018.06.17.일][완료!!!]
    void __fastcall GPART_GVmos_Create(void);

    //[2018.06.20.수][완료!!!]
    void __fastcall GPART_GVmos_Delete(void);

    void __fastcall GPART_GVmos_GetPtr(TGVmos_Form  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GVmos_GetPtr2(TGVmos_Form  ***rPtr);

//}

//[GBalloonBox:전체]
//{
    //[2010.01.28.목][추가!!!]{-------------------
    //전체적으로 공용되는 [풍선도움말] 관리 함수.
    //}-------------------------------------------

    //[2010.03.04.목][완료!!!]
    void __fastcall GPART_GBalloonBox_Create(void);

    void __fastcall GPART_GBalloonBox_Delete(void);

    void __fastcall GPART_GBalloonBox_GetPtr(TGBalloonBox_Form  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GBalloonBox_GetPtr2(TGBalloonBox_Form  ***rPtr);

//}

//[GHint:전체]
//{
    //[2010.01.28.목][추가!!!]{-------------------
    //전체적으로 공용되는 [풍선도움말] 관리 함수.
    //}-------------------------------------------

    //[2010.03.04.목][완료!!!]
    void __fastcall GPART_GHint_Create(void);

    void __fastcall GPART_GHint_Delete(void);

    void __fastcall GPART_GHint_GetPtr(TGHint_Form  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GHint_GetPtr2(TGHint_Form  ***rPtr);

//}

//[GMsgBox:전체]
//{
    //[2010.02.03.수][추가!!!]{---------------
    //전체적으로 공용되는 [알림창] 관리 함수.
    //}---------------------------------------

    //[2012.05.04.금][완료!!!]
    void __fastcall GPART_GMsgBox_Create(void);

    void __fastcall GPART_GMsgBox_Delete(void);

    void __fastcall GPART_GMsgBox_GetPtr(TGMsgBox_Form  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GMsgBox_GetPtr2(TGMsgBox_Form  ***rPtr);

//}

//[GFindDialog:전체]
//{
    //[2010.02.07.일][추가!!!]{---------------------
    //전체적으로 공용되는 [찾기대화상자] 관리 함수.
    //}---------------------------------------------

    //[2012.05.04.금][완료!!!]
    void __fastcall GPART_GFindDialog_Create(void);

    void __fastcall GPART_GFindDialog_Delete(void);

    void __fastcall GPART_GFindDialog_GetPtr(TGFindDialog_Form  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GFindDialog_GetPtr2(TGFindDialog_Form  ***rPtr);

//}

//[GCover:전체]
//{
    //[2018.06.17.일][추가!!!]{----------------------------
    //[폼디자인모드] 를 위한 단 한개의 <GCover> 를 만든다.
    //}----------------------------------------------------

    //[2019.02.10.일][완료!!!]
    void __fastcall GPART_GCover_Create(//대상 [그림부품].
                                        TWinControl  *pParent,
                                        //[2018.06.18.월][추가!!!]
                                        //대상 [그림부품] 의 [생성자] 위치 얻기.
                                        void         *pCreator,
                                        //[2019.02.10.일][추가]
                                        //[폼디자이너] 지원을 위한것.
                                        //[그림부품] 에 [마우스로 찍은 위치] 정보를
                                        //[알림문:FDSelect] 에 기록하기 위한것.
                                        int           pX,
                                        int           pY,
                                        int           pLMR);

    void __fastcall GPART_GCover_Delete(void);

    void __fastcall GPART_GCover_GetPtr(TGCover_Form  **rPtr);

    void __fastcall GPART_GCover_GetPtr2(TGCover_Form  ***rPtr);

    //[2018.07.17.화][완료!!!]
    void __fastcall GPART_GCover_NULL(void);

//}

//[GOpenDialog:전체]
//{
    //[2010.03.17.수][추가!!!]{-----------------------------------------------
    //전체적으로 공용되는 [열기대화상자] 관리 함수.
    //
    //[2012.07.20.금][중요수정!!!]********************************************
    //<main_Form->vmos_OpenDialogBox/vmos_SaveDialogBox> 만 [공용] 으로 사용.
    //이는 [문서] 관련 API 와 동일한 [대화상자] 를 사용하기 위한것.
    //<GVmos> 만을 위한 [공용대화상자] 는 사용하지 않는다.
    //}-----------------------------------------------------------------------

/*
    //[2010.03.04.목][완료!!!]
    void __fastcall GPART_GOpenDialog_Create(void);

    void __fastcall GPART_GOpenDialog_Delete(void);

    void __fastcall GPART_GOpenDialog_GetPtr(TOpenDialog  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GOpenDialog_GetPtr2(TOpenDialog  ***rPtr);
*/
//}

//[GSaveDialog:전체]
//{
    //[2010.03.17.수][추가!!!]{-----------------------------------------------
    //전체적으로 공용되는 [저장대화상자] 관리 함수.
    //
    //[2012.07.20.금][중요수정!!!]********************************************
    //<main_Form->vmos_OpenDialogBox/vmos_SaveDialogBox> 만 [공용] 으로 사용.
    //이는 [문서] 관련 API 와 동일한 [대화상자] 를 사용하기 위한것.
    //<GVmos> 만을 위한 [공용대화상자] 는 사용하지 않는다.
    //}-----------------------------------------------------------------------

/*
    //[2010.03.04.목][완료!!!]
    void __fastcall GPART_GSaveDialog_Create(void);

    void __fastcall GPART_GSaveDialog_Delete(void);

    void __fastcall GPART_GSaveDialog_GetPtr(TSaveDialog  **rPtr);

    //[2012.05.01.화][완료!!!]
    void __fastcall GPART_GSaveDialog_GetPtr2(TSaveDialog  ***rPtr);
*/
//}

//[그림부품 처리 관련]
//{
    //[2010.02.18.목][추가!!!]{--------------------
    //[그림부품] 처리를 위한 특수 함수를 정의한다.
    //}--------------------------------------------

    //[2010.02.18.목][완료!!!]
    void __fastcall GPART_Get_AbsTopLeft(//기준이 되는 그림부품.
                                         void  *pOrgPart,
                                         //절대위치를 구할 그림부품.
                                         void  *pPart,
                                         //그림부품의 <절대위치:Top>.
                                         int   *rTop,
                                         //그림부품의 <절대위치:Left>.
                                         int   *rLeft);

    //[2019.02.09.토][완료!!!]
    void __fastcall GPART_GetMotherInfo(//모체 생성자.
                                        void  *pMother,
                                        //[생성대상]{-------------------------------------
                                        //new() 에서 사용할 모체 <TComponent *> 포인터.
                                        void  **rOwner,
                                        //실제 <Parent> 에 사용할 <TWinControl *> 포인터.
                                        void  **rParent
                                        //}-----------------------------------------------
                                       );

    //[2010.03.28.일][완료!!!]
    void __fastcall GPART_BringToFront(void  *pCreator);

    //[2018.07.08.일][완료!!!]
    void __fastcall GPART_SetFocus(void  *pCreator);

    //[2018.07.11.수][완료!!!]
    void __fastcall GPART_GetMousePos(void  *pCreator,
                                      int   *rX,
                                      int   *rY);

    //[2018.08.07.화][완료!!!]
    void __fastcall GPART_GetPartPos(void          *pPart,
                                     void          *pOrgPart,
                                     int           *rX,
                                     int           *rY,
                                     unsigned int  *rW,
                                     unsigned int  *rH);

//}

//[GUI 알림문 관련]
//{
    //[2010.06.27.일][완료!!!]
    DTU8 __fastcall GPART_GuiEvtMsg_Make_int(DTU2  pUserID,
                                             DTU1  pEvtMsg,
                                             DTU1  pLMR,
                                             DTS4  pInt);

    //[2010.06.27.일][완료!!!]
    DTU8 __fastcall GPART_GuiEvtMsg_Make_xy(DTU2  pUserID,
                                            DTU1  pEvtMsg,
                                            DTU1  pLMR,
                                            DTS2  pX,
                                            DTS2  pY);

//}



#endif
