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

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


#include "font.h"

#include "gui_bmpbutton.h"

//[2009.05.04.월][추가!!!]
#include "gui_Label.h"
#include "gui_scroll_h.h"

//[2012.03.30-1.목][추가!!!]
#include "GBalloonBox.h"


class Teditor_top_Form : public TForm
{
__published:	// IDE-managed Components
        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 FormResize(TObject *Sender);
    
private:	// User declarations
public:		// User declarations

        __fastcall Teditor_top_Form(TComponent* Owner);

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

        //[서브클래싱]
        //{
            //[2012.05.28.월][완료!!!]
            void __fastcall WndProc(Messages::TMessage &Message);
            
        //}

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

            //}

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

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

            //사용 폰트를 적용한 한 행의 높이.
            int                 _line_height;
            //사용 폰트를 적용한 문자 한개의 넓이.
            int                 _word_width;

            //[list]
            //{
                //[선택항목]
                //{
                    //[!]{----------------------------------------------------------------
                    //이는 [목록상자] 안에서 마우스를 움직이는 경우 마우스 포인터가
                    //위치한 행을 반전하여 보여주기 위한 것이다(내부적으로만 사용).
                    //
                    //[2012.03.31.토][참고!!!]--------------------------------------------
                    //[제목줄] 인 경우역시 <-1> 값을 갖는다.
                    //
                    //[2012.05.28.월][수정!!!]--------------------------------------------
                    //[제목줄]    : <-1> 값을 갖는다.
                    //[목록]      : <0 - x> 값을 갖는다.
                    //[무선택/밖] : <-2> 를 갖는다.
                    //
                    //즉, 아예 [제목줄/목록] 밖인 경우는 <-2> 로 구분하여 확실하게 영역을
                    //구분시킨다.
                    //
                    //이는 제목줄을 <-1> 로 하는 경우는 현재 [화면지정자] 가 [제목줄] 에
                    //있는지 [밖] 에 있는지 구분할수 없기 때문에 <MouseMove()> 에서
                    //이를 구분하지 못하여 여러 [중복 처리] 가 발생하여 좋지 않다.
                    //
                    //<CM_MOUSELEAVE> 처리부에서 반드시 <-2> 로 처리한다.
                    //
                    //<기본값> 도 <-2> 로 수정.
                    //}-------------------------------------------------------------------

                    int  _list_selectindex;  //(기본값 : -2)

                //}

            //}

            //[내부 컨트롤]
            //{
                //목록 표시 버튼.
                Tgui_bmpbutton_Form  *_list_bmpbtns;
                //{
                    #define  d_LIST_down   0
                    #define  d_LIST_up     1
                //}

                //닫기 버튼.
                Tgui_bmpbutton_Form  *_close_bmpbtns;

                //[2018.05.09.수][중요추가!!!]{******************************************************
                //[X] 닫기 버튼에 [화면지정자] 가 들어와 있는 경우는 true.
                //<editor_top_Form> => [X] 버튼으로 이동시
                //
                //[윈도우] : { <editor_top_Form : MLeave> => <[X] : MEnter> } 가 되나.
                //
                //[wine]   : { <[X] : MEnter> => <editor_top_Form : MLeave> } 로 반대가 된다.
                //
                //따라서, [Linux:wine] 에서 <[X] : MEnter> 시에 [미저장 관련:풍선도움말] 을 출력하면
                //<editor_top_Form : MLeave> 에서 다시 <해제> 되는 바람에 [깜박임] 문제가 발생.
                //[보이기 => 감추기 => 보이기] 의 꼴이 되는 것이다.
                //이를 막기 위하여 [Linux:wine] 에서는 <editor_top_Form : MLeave> 시에
                //<[X] : MEnter> 인 경우는 [풍선도움말:감추기] 처리를 하지 않도록 한다.
                //이를 위하여 <_is_close_bmpbtns_MEnter> 추가.
                //
                //<[X] : MEnter> : true;
                //<[X] : MLeave> : false;
                //
                //단, 이는 [Linux:wine] 에서만 적용해야 한다.
                bool  _is_close_bmpbtns_MEnter; //(기본:false)
                //}**********************************************************************************

            //}

            //[함수 유무효 구분자]
            //{
                //[2012.03.27.화][추가!!!]{--------------
                //<true> 인 경우는 다시 그리지 않는다.
                //<Shape()> 함수를 처리할지 말지를 결정.
                //}--------------------------------------
                
                bool  _noShape; //(기본값:false).

            //}

            //[풍선 도움말]
            //{
                //[2012.03.30-1.목][추가!!!]{------------------------------------------
                //[경로...\이름.확장자] 로 [줄임] 된 문자열의 전체 [경로이름확장자] 를
                //보여주는데 사용된다.
                //
                //지정 항목의 [고정 위치] 에 표시된다.
                //
                //단, [풍선 도움말] 오른쪽이 화면에서 사라지는 영역인 경우는 [보이는]
                //영역까지로 크기를 조정하고 내부에 표시되는 문자열에 [자동행 구분]
                //처리를 해야 한다.
                //이를 위하여 새로 만든 <Str_Line_AutoLine_Width()> 함수 사용.
                //}--------------------------------------------------------------------

                TGBalloonBox_Form  *_balloonBox;

            //}

        //}

        //[FUNCTION]
        //{
            //[2012.06.06.수][완료!!!]
            void __fastcall _Shape(void);

            //[2012.06.06.수][완료!!!]
            void __fastcall _Resize(void);

            void __fastcall _Draw(void);

            //[2012.03.31.토][완료!!!]
            void __fastcall _List(void);

            //[2012.03.28.수][완료!!!]
            void __fastcall _Title(void);

            //[2006.12.18.월][완료!!!]
            void __fastcall _Count(void);

        //}

        //[기능함수]
        //{
            //[2011.05.31.화][완료!!!]
            //[2012.07.04.수][완료!!!]
            //[2019.02.17.일][완료]
            void __fastcall _List_Add(AnsiString  pFILEname);

            //[2022.06.26.일][완료]
            //[주의][2022.06.26.일]{******************************************
            //항상 보이는 문서만 삭제할수 있으므로, <_List_Add()> 함수로 먼저
            //편집기에 열어준 다음에(이미 열려있으므로 편집기에 보여주는것)
            //이 함수로 삭제해야 한다.
            //현재 이 내용은 함수 안에 추가돼 있음.
            bool __fastcall _List_Delete(int  pLISTindex);
            //}***************************************************************

            //[2009.02.01.일][완료!!!]
            bool __fastcall _List_DeleteAll(void);

            //[2009.01.25.일][완료!!!]
            void __fastcall _Get_TitleStr(char  *pTitleStr);

            //[2012.03.31.토][완료!!!]
            void __fastcall  _Blink_BalloonBox(bool  pTon_Foff);

            //[2022.05.30.월][완료]
            void __fastcall  _BalloonBox_Print(char  *pStr);

            //[2022.07.14.목][완료]
            //<pFindStr> 을 찾은 첫번째 위치의 <StartIndex> 에 해당하는 (x, y) 위치에
            //<pPrintStr> 을 [풍선도움말] 로 출력.
            void __fastcall  _BalloonBox_Print_At_FindStr(//찾을 문자열.
                                                          char  *pFindStr,
                                                          //<pFindStr:NULL> 인 경우만 의미가 있음.
                                                          int    pStartIndex,
                                                          //출력할 문자열.
                                                          char  *pPrintStr);

        //}

        //[EVENT FUNCTION]
        //{
            //[2006.11.27.월][완료!!!]
            void __fastcall _EVENT_ListButton_Click(void);

            void __fastcall _EVENT_CloseButton_Click(void);

            //[2018.05.08.화][완료!!!]
            void __fastcall _EVENT_CloseButton_Down(void);
            void __fastcall _EVENT_CloseButton_Up(void);

            //[2018.05.09.수][완료!!!]
            void __fastcall _EVENT_CloseButton_MouseEnter(void);

            //[2018.05.09.수][완료!!!]
            void __fastcall _EVENT_CloseButton_MouseLeave(void);

        //}


};

//---------------------------------------------------------------------------
extern PACKAGE Teditor_top_Form *editor_top_Form;
//---------------------------------------------------------------------------
#endif
