//---------------------------------------------------------------------------

#ifndef gmrcbasicMake_DialogBoxH
#define gmrcbasicMake_DialogBoxH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------


#include "font.h"

#include "gui_bmpbutton.h"
#include "gui_button.h"
#include "gui_check_button.h"
#include "gui_Label.h"
#include "gui_edit.h"
#include "gui_scroll_h.h"

//[2009.11.20.금]
#include "gui_radio_button.h"

//[2009.12.06.일][추가!!!]
#include "gui_Progress.h"
#include <ExtCtrls.hpp>


class TgmrcbasicMake_DialogBox_Form : public TForm
{
__published:	// IDE-managed Components
    TTimer *captionMoveTimer;
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
        void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
    void __fastcall FormShow(TObject *Sender);
    void __fastcall captionMoveTimerTimer(TObject *Sender);
private:	// User declarations
public:		// User declarations

        __fastcall TgmrcbasicMake_DialogBox_Form(TComponent* Owner);

        //[2012.04.30.월][완료!!!]
        __fastcall ~TgmrcbasicMake_DialogBox_Form(void);

        //[서브클래싱]
        //{
            void __fastcall WndProc(Messages::TMessage &Message);

        //}

        //[VAR]
        //{
            //[환경변수]
            //{
                //[2007.10.02.화][추가!!!]
                struct  IDE_OPTION   *_ide_option;

            //}

            //[실제 그리는 영역]
            //{
                Graphics::TBitmap    *_bmp_;

            //}

            //[사용글꼴]
            //{
                struct FONTPACK       _font;

            //}

            //caption 에 표시할 문자열을 기록한다.
            char               _caption[256];

            int                _caption_height;
            int                _caption_width;

            //caption 을 마우스로 끄는 경우 true.
            bool               _caption_selected;

            //[제목줄 이동 관련]
            //{
                //[2018.03.17.토][추가!!!]
                int  deltaLeft;
                int  deltaTop;

            //}

            //[기본 부품]
            //{
                //닫기 버튼.
                Tgui_bmpbutton_Form   *_close_bmpbtns;

            //}

            //[내부 부품들]
            //{
                //[제작 버튼]
                //{
                    //[2009.12.06.일][추가!!!]
                    Tgui_button_Form  *_make_Btn;

                //}

                //[포트 설정]
                //{
                    //[2009.12.06.일][추가!!!]
                    Tgui_Label_Form   *_portBase_Label;

                    //[포트번호]
                    //{
                        Tgui_Label_Form   *_portNum_Label;
                        Tgui_button_Form  *_portNum_Btn;

                    //}

                    //[MISO 비트 번호]
                    //{
                        Tgui_Label_Form   *_portMiso_Label;
                        Tgui_button_Form  *_portMiso_Btn;

                    //}

                    //[MOSI 비트 번호]
                    //{
                        Tgui_Label_Form   *_portMosi_Label;
                        Tgui_button_Form  *_portMosi_Btn;

                    //}

                    //[SCK 비트 번호]
                    //{
                        Tgui_Label_Form   *_portSck_Label;
                        Tgui_button_Form  *_portSck_Btn;

                    //}

                    //[RST 비트 번호]
                    //{
                        Tgui_Label_Form   *_portRst_Label;
                        Tgui_button_Form  *_portRst_Btn;

                    //}

                //}

                //[회로도 버튼]
                //{
                    Tgui_button_Form  *_circuit_Btn;

                //}

                //[설명 문자열]
                //{
                    Tgui_Label_Form   *_text_Label;

                //}

                //[진행 상황]
                //{
                    Tgui_Progress_Form  *_make_Progress;

                    Tgui_Label_Form     *_make_Label;

                //}

                //[가상기계(GVMX) 설치]
                //{
                    //[2011.11.13.일][추가!!!]{---------------------
                    //[맷돌(G.MTDL.X)] 에 [가상기계(GVMX)] 를 설치.
                    //}---------------------------------------------

                    Tgui_Label_Form     *_gvmxInstall_Label;

                    Tgui_button_Form    *_gvmxInstall_Btn;

                //}

            //}

            //[변수]
            //{
                //true 이면 돈다.
                bool   loop;

            //}

        //}

        //[FUNCTION]
        //{
            void __fastcall _FormCut(void);

            void __fastcall _Draw(void);

            void __fastcall _Border(void);

            void __fastcall _Shape(void);


            //[2007.12.14.금][완료!!!]
            void __fastcall _Caption(char  *pCaption);

            //[2007.12.14.금][완료!!!]
            void __fastcall _Width(int  pWidth);

            //[2007.12.14.금][완료!!!]
            void __fastcall _Height(int  pHeight);

        //}

        //[대화상자 처리 관련 함수]
        //{
            //[2018.03.06.화][완료!!!]
            bool __fastcall Dlg_Spi_Pin(DTU1  *rPortNum,
                                        DTU1  *rMisoNum,
                                        DTU1  *rMosiNum,
                                        DTU1  *rSckNum,
                                        DTU1  *rRstNum);





        //}

        //[동작함수들]
        //{
            void __fastcall _EVENT_CloseButton_Click(void);


            //[2011.11.14.월][완료!!!]
            void __fastcall _EVENT_Click_make_Btn(void);

            //[2018.03.06.화][완료!!!]
            void __fastcall _EVENT_Click_portNum_Btn(void);

            //[2018.03.06.화][완료!!!]
            void __fastcall _EVENT_Click_portMiso_Btn(void);

            //[2018.03.06.화][완료!!!]
            void __fastcall _EVENT_Click_portMosi_Btn(void);

            //[2018.03.06.화][완료!!!]
            void __fastcall _EVENT_Click_portSck_Btn(void);

            //[2018.03.06.화][완료!!!]
            void __fastcall _EVENT_Click_portRst_Btn(void);

            //[2009.12.06.일][완료!!!]
            void __fastcall _EVENT_Click_circuit_Btn(void);

            //[2018.03.06.화][완료!!!]
            void __fastcall _EVENT_Click_gvmxInstall_Btn(void);

        //}

        //[G.M.RC.BASiC 자동 제작기용]
        //{
            //[맷돌<gmrcbasic_make.gprj> 상의 배치]
            //{
                //[2009.12.05.토][추가!!!]{-----------------------------------------------------
                //맷돌의 [전역변수] 시작 위치인 @DATA 위치부터 순서대로 배치되 있다.
                //각각은 전부 [포인터] 로 8 바이트씩의 크기를 갖는다.
                //이 주소를 맷돌안의 <gmrcbasic_make.gprj> 가 main() 처음에 목록으로 이 포인터에
                //각 변수의 주소를 할당해 주므로 이 주소를 가지고 <IDE> 상에서 직접 맷돌안의
                //[전역변수] 에 접근할수 있다.
                //즉, [전역변수] 로 직접 <IDE> 와 <맷돌> 간의 통신을 수행하는 것이다.
                //자세한 내용은 <gmrcbasic_make.gprj> 설계묶음을 참고한다.
                //}-----------------------------------------------------------------------------

                //[설명]{----------------------------------------------------------------------------
                //G.M.RC.BASiC 을
                //
                //[전역변수] 에 <IDE> 상에서 직접 접근하기 위하여 반드시 @DATA 를 알아야 한다.
                //VMOS 상의 절대주소값이므로 [직렬버스:V] 로 직접 접근한다.
                //}----------------------------------------------------------------------------------

                //순서대로 배치되 있으므로 반드시 이 순서를 지켜야 한다.
                #define  d_MsgExe_1            0   //bool            *주소_명령처리요청;
                #define  d_Msg_1               1   //unsigned char   *주소_명령;
                #define  d_MsgResult_1         2   //bool            *주소_명령처리결과;

                #define  d_EorAdr_4            3   //unsigned int    *주소_오류_주소;
                #define  d_EorWrData_4         4   //unsigned int    *주소_오류_기록값;
                #define  d_EorRdData_4         5   //unsigned int    *주소_오류_읽은값;

                #define  d_FlashBuf_a2         6   //unsigned short  *주소_flash저장소; //실제는 DTU2[] 형태다.
                #define  d_EEpBuf_a1           7   //unsigned char   *주소_eep저장소;   //실제는 DTU1[] 형태다.

                #define  d_FlashPageCount_4    8   //unsigned int    *주소_flash페이지수;     //128 개.
                #define  d_EEp16Count_4        9   //unsigned int    *주소_eep16바이트단위수;  //32 개

                #define  d_PortNum_1           10  //unsigned char   *주소_포트번호;
                #define  d_MisoBit_1           11  //unsigned char   *주소_miso비트번호;
                #define  d_MosiBit_1           12  //unsigned char   *주소_mosi비트번호;
                #define  d_SckBit_1            13  //unsigned char   *주소_sck비트번호;
                #define  d_CsBit_1             14  //unsigned char   *주소_cs비트번호;

                //[명령]
                //{
                    #define  d_Msg_None            0x00
                    #define  d_MsgIspMode          0x01
                    #define  d_Msg_IsATmega88      0x02
                    #define  d_Msg_Erase           0x03
                    #define  d_Msg_FlashWrite      0x04
                    #define  d_Msg_FlashVerify     0x05
                    #define  d_Msg_EEpromWrite     0x06
                    #define  d_Msg_EEpromVerify    0x07
                    #define  d_Msg_Lock            0x08

                    #define  d_Msg_Next            0x0a
                    #define  d_Msg_Quit            0x0b

                    #define  d_Msg_SpiPortCreat    0x10
                    #define  d_Msg_SpiPortDelete   0x10

                //}

                //[@DATA 값]
                //{
                    //[2009.11.27.금][추가!!!]{---------------------------------------------------------
                    //[@DATA] 값을 가진다.
                    //이것은 실제로 위의 위치에 해당하는 변수에 바로 접근하는데 필요하다.
                    //처음 <gmrcbasic_set.gprj> 이 설치되고 이 대화상자가 보인후 바로 읽어 들어야 한다.
                    //}---------------------------------------------------------------------------------

                    DTU8  _regDATA;

                //}

                //[주소 목록]
                //{
                    //[2009.11.27.금][추가!!!]{-------------------------------------------------------
                    //@DATA 위치부터 순서대로 8바이트 단위로 해당 변수의 [VMOS:절대주소] 가 위치한다.
                    //}-------------------------------------------------------------------------------

                    //[한꺼번에 관리]
                    //{
                        DTU8  _tableX[15];

                    //}
                //}

            //}

            //[2009.12.05.토][완료!!!]
            bool __fastcall Table_VarAdrTable_Read(void);

            //[2009.12.05.토][]
            bool __fastcall Table_WR(//테이블 번호.
                                     int    pTableIndex,
                                     //쓰기/읽기.
                                     int    pWrRd,
                                     //직렬버스상 크기(2^지수 표현).
                                     //항상 pSize 보다 큰 크기여야 한다.
                                     int    pCBSize,
                                     //쓰기/읽기 자료(pTableIndex/pWrRd 에 따라 의미가 달라진다 ).
                                     void  *prStream);

            //[2009.12.07.일][완료!!!]
            bool __fastcall Mtdl_FlashBuf_Fill(void);

            //[2009.12.07.일][완료!!!]
            bool __fastcall Mtdl_EEpBuf_Fill(void);


            //[2018.03.06.화][완료!!!]
            bool __fastcall Mtdl_GMRCBASiC_Make(void);







       //}


       

};
//---------------------------------------------------------------------------
extern PACKAGE TgmrcbasicMake_DialogBox_Form *gmrcbasicMake_DialogBox_Form;
//---------------------------------------------------------------------------
#endif
