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

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

#include "font.h"

#include "gui_tabs.h"
#include "gui_bmpbutton.h"

//[2009.04.04.토][추가!!!]
#include "gui_check_button.h"
#include "gui_Label.h"

//[2009.04.07.화][추가!!!]
#include "gui_button.h"
#include "gui_edit.h"

//[2009.08.02.일][추가!!!]
#include "gui_Progress.h"



class Tide_buttons_Form : public TForm
{
__published:	// IDE-managed Components
        void __fastcall FormResize(TObject *Sender);
private:	// User declarations
public:		// User declarations

        __fastcall Tide_buttons_Form(TComponent* Owner);

        //[2012.04.29.일][완료!!!]
        __fastcall ~Tide_buttons_Form(void);

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

        //}

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

            //}

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

            //[속성]
            //{
                //[2009.04.08.수][추가!!!]
                //배경색을 가진다.
                int  _colorBack;

            //}

            //[내부 컨트롤]
            //{
                Tgui_tabs_Form       *_tabs;

                //[2011.04.27.수][추가!!!]{------------------------------------
                //<_ctrl_bmpbtns> 들만 [중복처리방지] 를 위한것.
                //자신뿐 아니라, 다른 버튼이 동작 중일때도 동작되지 않게 한다.
                bool  _ctrl_bmpbtns_on;
                //true  : 동작중인 버튼이 존재한다.
                //false : 모든 버튼이 대기중이다.
                //}------------------------------------------------------------

                //컨틀로 관련 버튼.
                #define  d_ctrl_bmpbtns_count  12
                Tgui_bmpbutton_Form     *_ctrl_bmpbtns[d_ctrl_bmpbtns_count];
                //{
                    #define  d_ctrl_bmpbtn_auto      0
                    #define  d_ctrl_bmpbtn_check     1
                    #define  d_ctrl_bmpbtn_compile   2
                    #define  d_ctrl_bmpbtn_link      3
                    #define  d_ctrl_bmpbtn_build     4
                    #define  d_ctrl_bmpbtn_download  5
                    #define  d_ctrl_bmpbtn_upload    6
                    #define  d_ctrl_bmpbtn_verify    7
                    #define  d_ctrl_bmpbtn_erase     8

                    #define  d_ctrl_bmpbtn_hw_run    9
                    #define  d_ctrl_bmpbtn_hw_stop   10
                    #define  d_ctrl_bmpbtn_hw_reset  11
                //}

                //디버그 관련 버튼.
                #define  d_debug_bmpbtns_count  9
                Tgui_bmpbutton_Form     *_debug_bmpbtns[d_debug_bmpbtns_count];
                //{
                    #define  d_debug_bmpbtn_reset_vector      0
                    #define  d_debug_bmpbtn_step_statement    1
                    #define  d_debug_bmpbtn_step_over         2
                    #define  d_debug_bmpbtn_step_auto         3
                    #define  d_debug_bmpbtn_step_over_auto    4
                    #define  d_debug_bmpbtn_breakpoint        5

                    //[2009.04.08.수][수정!!!]{----------------
                    //[VM] 을 대상으로 하는 기능으로 필요하다.
                    #define  d_debug_bmpbtn_run               6
                    #define  d_debug_bmpbtn_stop              7
                    #define  d_debug_bmpbtn_reset             8
                    //}----------------------------------------

                //}

                //[연결 종류 구분 버튼]
                //{
                    //[2009.04.04.토][추가!!!]{----------------------------------------------
                    //[맷돌] 을 지접 연결 대상으로 할지, [가상구동] 을 할지를 결정한다.
                    //[가상구동] 의 경우는 [가상구동] 을 켜거나 끄는 스위치 역활도 수행한다.
                    //}----------------------------------------------------------------------

                    Tgui_check_button_Form  *_vmosSim_CheckBtn,
                                            *_vmosMdl_CheckBtn;

                    //해당 [체크버튼] 의 설명을 표시한다.
                    Tgui_Label_Form         *_vmosSim_Label,
                                            *_vmosMdl_Label;

                //}

                //[검증 주기 설정]
                //{
                    //[2009.04.10.금][추가!!!]

                    Tgui_button_Form  *_debugPeriod_Btn;

                    Tgui_edit_Form    *_debugPeriod_Edit;


                //}

                //[검증 문서 종류 관련 버튼]
                //{
                    //[2009.04.07.화][추가!!!]{-------------------
                    //[검증 문서 종류] 관련 제어 기능을 추가한다.
                    //}-------------------------------------------

                    //[검증문서종류] 를 선택.
                    Tgui_button_Form        *_file_C_Btn,
                                            *_file_Asm_Btn,
                                            *_file_CAsm_Btn;

                    //[검증문서종류] 선택을 관리.
                    //이전 컨트롤 보다 나중에 생성하여 위에 위치하게 해야 한다.
                    Tgui_check_button_Form  *_file_C_CheckBtn,
                                            *_file_Asm_CheckBtn,
                                            *_file_CAsm_CheckBtn;

                //}

                //[진행막대]
                //{
                    //[2009.08.02.일][추가!!!]{---
                    //[진행막대] 를 관리한다.
                    //}---------------------------

                    Tgui_Progress_Form  *_progress;

                //}

            //}

        //}

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

            //[2009.04.09.목][완료!!!]
            void __fastcall _Shape(void);

            void __fastcall _Resize(void);

            void __fastcall _Draw(void);

            //[2009.04.04.토][완료!!!]
            void __fastcall _ControlButtons_Visible(bool  pVISIBLE);

            void __fastcall _DebugButtons_Visible(bool  pVISIBLE);

            //[2009.04.04.토][완료!!!]
            void __fastcall _Enable_Init(void);

            //[2009.04.04.토][완료!!!]
            void __fastcall _Enable_Sim(bool  pEnable);

            //[2009.04.04.토][완료!!!]
            void __fastcall _Enable_Mdl(bool  pEnable);

            //[2011.07.14.목][완료!!!]
            void __fastcall _Progress_Visible(bool  pVisible);

        //}

        //[EVENT FUNCTION]
        //{
            //[2012.09.23.일][완료!!!]
            void __fastcall _EVENT_TabSelect(void);

            //[control]
            //{
                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_AutoButton_Click(void);
                void __fastcall _EVENT_AutoButton_MouseEnter(void);

                //[2012.05.11.금][완료!!!]
                void __fastcall _EVENT_CheckButton_Click(void);
                //[2012.05.12.토][완료!!!]
                void __fastcall _EVENT_CheckButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_CompileButton_Click(void);
                void __fastcall _EVENT_CompileButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_LinkButton_Click(void);
                void __fastcall _EVENT_LinkButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_BuildButton_Click(void);
                void __fastcall _EVENT_BuildButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_DownloadButton_Click(void);
                //[2009.12.23.수][완료!!!]
                void __fastcall _EVENT_DownloadButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_UploadButton_Click(void);
                //[2013.06.19.완료!!!]
                void __fastcall _EVENT_UploadButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_VerifyButton_Click(void);
                void __fastcall _EVENT_VerifyButton_MouseEnter(void);

                //[2011.04.27.수][완료!!!]
                void __fastcall _EVENT_EraseButton_Click(void);
                void __fastcall _EVENT_EraseButton_MouseEnter(void);

            //}

            //[hw]
            //{
                void __fastcall _EVENT_HwRunButton_Click(void);
                void __fastcall _EVENT_HwRunButton_MouseEnter(void);

                void __fastcall _EVENT_HwStopButton_Click(void);
                void __fastcall _EVENT_HwStopButton_MouseEnter(void);

                void __fastcall _EVENT_HwResetButton_Click(void);
                void __fastcall _EVENT_HwResetButton_MouseEnter(void);

            //}

            //[debug]
            //{
                void __fastcall _EVENT_ResetButton_Click(void);
                void __fastcall _EVENT_ResetButton_MouseEnter(void);

                void __fastcall _EVENT_StepStatementButton_Click(void);
                void __fastcall _EVENT_StepStatementButton_MouseEnter(void);

                //[2018.05.06.일][중요수정완료!!!]
                void __fastcall _EVENT_StepOverButton_Click(void);
                void __fastcall _EVENT_StepOverButton_MouseEnter(void);
                
                void __fastcall _EVENT_StepAutoButton_Click(void);
                void __fastcall _EVENT_StepAutoButton_MouseEnter(void);

                //[2009.04.09.목][완료!!!]
                void __fastcall _EVENT_StepOverAutoButton_Click(void);
                void __fastcall _EVENT_StepOverAutoButton_MouseEnter(void);

                void __fastcall _EVENT_BreakpointButton_Click(void);
                void __fastcall _EVENT_BreakpointButton_MouseEnter(void);

                //[2019.02.14.목][완료!!!]
                void __fastcall _EVENT_DebugRunButton_Click(void);
                void __fastcall _EVENT_DebugRunButton_MouseEnter(void);

                //[2009.04.09.목][완료!!!]
                void __fastcall _EVENT_DebugStopButton_Click(void);
                void __fastcall _EVENT_DebugStopButton_MouseEnter(void);

                //[2009.04.09.목][완료!!!]
                void __fastcall _EVENT_DebugResetButton_Click(void);
                void __fastcall _EVENT_DebugResetButton_MouseEnter(void);

            //}

            //[연결 종류 구분]
            //{
                //[2010.07.06.화][완료!!!]
                void __fastcall _EVENT_Click_vmosSim_CheckBtn(void);

                //[2012.03.11.일][완료!!!]
                void __fastcall _EVENT_Click_vmosMdl_CheckBtn(void);

            //}

            //[검증 문서 종류]
            //{
                //[2011.05.28.토][완료!!!]
                void __fastcall _EVENT_Click_file_C_Btn(void);

                //[2011.05.28.토][완료!!!]
                void __fastcall _EVENT_Click_file_Asm_Btn(void);

                //[2011.05.28.토][완료!!!]
                void __fastcall _EVENT_Click_file_CAsm_Btn(void);

            //}

            //[검증 주기 설정]
            //{
                //[2009.04.10.금][완료!!!]
                void __fastcall _EVENT_Click_debugPeriod_Btn(void);

                //[2009.04.10.금][완료!!!]
                void __fastcall _EVENT_KeyEnter_debugPeriod_Edit(void);

            //}

            //[공통]
            //{
                void __fastcall _EVENT_Button_MouseLeave(void);

            //}

            //[부가함수]
            //{
                //[2012.03.12.월][완료!!!]
                void __fastcall _VmosMdl_ExUnCheck(void);

            //}

        //}

};
//---------------------------------------------------------------------------
extern PACKAGE Tide_buttons_Form *ide_buttons_Form;
//---------------------------------------------------------------------------
#endif
