
//[2012.06.16.토][대폭수정!!!]{*************
//[맷돌C] 용으로 <ide_editor_Form> 을 변경.
//}*****************************************

#include "font.h"

#include "GEditorEdit.h"
#include "GEditorTop.h"
#include "GEditorInfo.h"
#include "GScrollV.h"
#include "GScrollH.h"
#include "GEdgeBox.h"

//[폼디자인:모드]
//[2018.06.24.일][추가!!!]
#include "GVmos.h"
#include "GCover.h"


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


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

        __fastcall TGEditor_Form(TComponent* Owner);

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

        //[그림부품 독립구동]
        //{
            //[2018.10.13.토][추가!!!]
            void __fastcall CreateParams(TCreateParams &Params);

        //}

        //[생성자]
        //{
            //[2012.05.01.화][중요추가!!!]{-------------------------------------------
            //<GVmos> 가 <[]맷돌가상구동> 해제로 즉시 종료되는 경우
            //일부 [그림부품] 이 동작중인 경우 [동적삭제] 된 후에도
            //함수가 실행될수 있다.
            //이를 막기 위하여 이 개체의 [존재 유/무] 를 확인할 변수를 하나 둔다.
            //
            //모든 함수는 반드시 <_this_:true> 인 경우만 처리되어야 한다.
            //
            //[생성자] 에서 반드시 <true> 로 설정하고, [소멸자] 에서 <false> 로 처리.
            //true  : 생성된 상태.
            //false : 삭제된 상태.
            //}-----------------------------------------------------------------------

            bool  _this_;

        //}

        //----------------------------------------------------------------------
        //[생성자]--------------------------------------------------------------
        //----------------------------------------------------------------------

        //[생성자 정보]
        //{
            //[2010.02.25.목][추가!!!]{-----------------------------------------
            //실제 개체는 VMOS 상에서 <void *> 정보 한개(8 Byte)로 이 개체의
            //PC 상의 물리적 위치만 관리하므로 실제 다른 정보를 개체 자체적으로
            //직접 [속성] 으로 관리한다.
            //즉, VMOS 상에서도 개체는 하나의 포인터로만 관리된다.
            //}-----------------------------------------------------------------

            //[식별자]
            //{
                //[2010.02.25.목][추가!!!]{----------------------------------------------------
                //사용자가 지정한 [식별자] 로 모든 그림 부품은 모두 다른 값이 지정돼야 한다.
                //이 [식별자] 는 [알림문] 안에 들어 있어, 알림문이 어떤 [그림부품] 의 것인지
                //VMOS 쪽에서 이 [식별자] 확인 만으로 간단하게 구분할수 있게 하기 위한 것이다.
                //
                //[2012.07.09.월][중요수정!!!]*************************************************
                //
                //[생성자(12)] = { [절대주소(8)] + [부품고유ID(2)] + [GID(2)] }
                //
                //로 <GID> 가 추가 되었으므로 사용하지 않고 주석처리.
                //이는 [맷돌C:이벤트] 처리시 생성자] 만으로 쉽게 <GID> 를 구분처리하기 위한것.
                //unsigned short  _GID;
                //}----------------------------------------------------------------------------

            //}

            //[생성자]
            //{
                //[2010.03.15.월][추가!!!]{---------------------------------------------------
                //[생성자] 의 실제 물리위치를 관리한다.
                //이는 직접 해당 API 로 삭제되는 경우는 해당 함수에서 자동으로 [생성자가]
                //초기화 되지만, 다른 [그림부품] 에 생성된 경우, 이 [그림부품] 이 삭제될때
                //자동으로 같이 [삭제] 는 되지만, 해당 [생성자] 는 초기화 되지 않기 때문이다.
                //이를 위하여 [생성자] 를 관리하고, [파괴자] 부분에서 직접 해당 초기화 함수를
                //호출하여 반드시 [생성자] 정보를 초기화 해 주어야 한다.
                //}---------------------------------------------------------------------------

                void  *_GPart; //(기본값 : NULL)

            //}

            //[사용구분]
            //{
                //[2012.05.04.금][설명!!!]{----------------------------------------------------
                //[편집기] 는 [GVmos] 상의 [공용그림부품] 이 아니므로 <_GUse> 값으로
                //BCB 용으로 사용되는지 [맷돌C:그림부품] 으로 사용되는지 쉽게 구분가능하다.
                //이 구분은 일반 [그림부품] 에는 필요없고, 내부적으로 <MsgBox> 를 사용하는
                //그림부품에서만 필요하다.
                //
                //1) <_GUse==NULL> : BCB 용.
                //
                //2) <_GUse!=NULL> : [맷돌C:그림부품] 용.
                //
                //이 구분은 <MsgBox> 때문인데 [모달/유사모달] 로 처리할지를 결정하기 위한것.
                //
                //1) 의 경우는 [모달] 로 일반 적으로 보여준다.
                //2) 의 경우는 [맷돌C:그림부품] 용으로 [유사모달] 처리된다.
                //   단, 이 경우는 [맷돌C:API] 에서 VMOS 로 구동 처리된다.
                //
                //<API:_GMsgBox_기본_()> 원본 [설계묶음] 안의 설명을 참고한다.
                //
                //[중요!!!]--------------------------------------------------------------------
                //
                //[맷돌C] 용으로 사용하는 경우는 반드시 <GXXX_Create()> 함수를 사용하므로
                //이 함수안에서만 <true> 로 설정되고, 나머지는 <false> 로 설정해야 한다.
                //단, [공용그림부품] 의 경우는 <GXXX_Create()> 를 사용하지 않고 <gui_part.cpp>
                //안에 선언돼 있는 <GPART_GMsgBox_Create()> 등으로 선언되므로 반드시 이 안에서
                //<true> 로 선언해 주어야 한다.
                //
                //생성시에만 설정하면 되고 이미 삭제된 뒤에는 무의미하다.
                //}----------------------------------------------------------------------------

                //처음에는 반드시 BCB 용으로 설정.
                bool  _GUse; //(기본값:false)

            //}

        //}

        //----------------------------------------------------------------------
        //[속성]----------------------------------------------------------------
        //----------------------------------------------------------------------

        //[VAR]
        //{
            //[내부 컨트롤]
            //{
                TGEditorEdit_Form     *_editorEdit;
                TGEditorTop_Form      *_editorTop;
                TGEditorInfo_Form     *_editorInfo;
                TGScrollV_Form        *_scrollV;
                TGScrollH_Form        *_scrollH;
                TGEdgeBox_Form        *_edgeBox;

            //}

            //[속성]
            //{
                //[행지정]
                //{
                    //[2010.02.14.일][완료!!!]
                    void __fastcall _FocusLine(int  pLineNumber);

                    //[2012.08.09.목][완료!!!]
                    void __fastcall _FocusLine_Hide(void);

                //}

                //[테두리색]
                //{
                    //[2010.02.10.수][완료!!!]
                    void __fastcall _BorderColor(int  pBorderColor);

                //}

                //[줄이동자 색]
                //{
                    //[2010.02.14.일][추가!!!]{-------------------------------------------------
                    //내장된 [수직/수평 줄이동자] 의 기본색을 설정한다.
                    //테두리는 전체 [테두리색] 이 적용되므로 내부 내용의 색만 일괄 적용한다.
                    //
                    //기본적인 색은 _BorderColor() 에서 [편집기 테두리색] 과 동일하게 설정된다.
                    //그러므로, 아래 함수를 사용할때는 반드시 _BorderColor() 함수를 사용한 뒤에
                    //사용해야 한다.
                    //}-------------------------------------------------------------------------

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _ScrollVColor(int  pColor);

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _ScrollHColor(int  pColor);

                //}

                //[검증도구색]
                //{
                    //[2010.02.14.일][추가!!!]{------
                    //검증도구 각각의 색을 지정한다.
                    //}------------------------------

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _FocusLineNum(int  pLineNum);

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _FocusLineFontColor(int  pColor);

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _FocusLineBackColor(int  pColor);

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _LineArrowColor(int  pColor);

                    //[2010.02.14.일][완료!!!]
                    void __fastcall _BreakPointColor(int  pColor);

                //}

                //[색동문자 관련]
                //{
                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorKeyword(int  pColor);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorBinWord(int  pColor);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorHexWord(int  pColor);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorDirective(int  pColor);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorString(int  pColor);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorChar(int  pColor);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _Syntax_ColorComment(int  pColor);

                //}

                //[문서처리 관련]
                //{
                    //[!]{----------------------------------------------------------
                    //[문서처리관련] 함수들은 대부분 <_editorEdit> 안에 존재하므로
                    //<_editorEdit> 의 해당 함수를 연결하는 함수를 여기에 배치한다.
                    //}-------------------------------------------------------------

                    void __fastcall _Document_ReadOnly(//읽기전용 설정 : true.
                                                       bool  pReadOnly);

                    //[2010.03.16.화][완료!!!]
                    void __fastcall _Document_ReadOnlyAll(//읽기전용 설정 : true.
                                                          bool  pReadOnly);


                    void __fastcall _Document_FileKind(//[문서종류] 상수값.
                                                       int  pFileKind);

                    //[2010.03.16.화][완료!!!]
                    bool __fastcall _Document_Open(char  *pFileName);

                    //[2010.03.15.월][완료!!!]
                    bool __fastcall _Document_Delete(int  pListIndex);

                    //[2010.03.15.월][완료!!!]
                    bool __fastcall _Document_DeleteAll(void);

                    //[2010.03.16.화][완료!!!]
                    bool __fastcall _Document_DeleteThis(void);

                    //[2010.03.16.화][완료!!!]
                    int __fastcall _Document_IndexThis(void);



                    //[2010.03.15.월][완료!!!]
                    void __fastcall _Document_TitleStr(char  *rTitleStr);

                    //[2010.03.15.월][완료!!!]
                    void __fastcall _Document_ListStr(int    pListIndex,
                                                      char  *pListStr);

                    //[2010.03.17.수][완료!!!]
                    int __fastcall _Document_Count(void);

                    //[2012.07.20.금][완료!!!]
                    void __fastcall _Document_Save(void);

                    //[2012.07.20.금][완료!!!]
                    void __fastcall _Document_SaveAs(void);

                    //[2010.03.17.수][완료!!!]
                    void __fastcall _Document_SaveAll(void);

                    //[2010.03.17.수][완료!!!]
                    int __fastcall _Document_New(void);

                //}

                //[배경관련]
                //{
                    //[배경밝기] 와 [배경그림] 을 다룬다.

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _EditorBack_Brightness(int  pBrightness);

                    //[2010.02.17.수][완료!!!]
                    void __fastcall _EditorBack_SetJpeg(//맷돌 API 구성이 용이하게 <AnsiString> 으로 하지 않는다.
                                                        char  *pJpegFilePath);

                //}

                //[크기조정 관련]
                //{
                    //[2010.03.15.월][완료!!!]
                    void __fastcall _Left(int  pLeft);

                    //[2010.03.15.월][완료!!!]
                    void __fastcall _Top(int  pTop);

                    //[2010.03.15.월][완료!!!]
                    void __fastcall _Width(int  pWidth);

                    //[2010.03.15.월][완료!!!]
                    void __fastcall _Height(int  pHeight);

                    //[2018.06.24.일][완료!!!][폼디자인:모드]
                    void __fastcall _Width_Height(int  pWidth, int  pHeight);


                //}

            //}

            //[이벤트 사용 유/무]
            //{
                //[2012.07.18.수][추가!!!]{----------------------------------------------
                //[이벤트] 사용설정을 위한 것.
                //기본적으로 모두 사용하지 않는 상태이다.
                //이는 오직 [맷돌-C] 안에서 사용될때만 적용된다.
                //
                //[G.M.RC.BASiC-IDE] 를 [맷돌C] 로 제작하는 과정에서 필요성이 의해 추가.
                //
                //각 [알림문] 에 <선택항목번호:index> 도 같이 기록해 준다.
                //}----------------------------------------------------------------------

                //[편집기] 위 [문서목록] 에서 문서를 선택한 경우.
                //실제는 [문서전환] 을 알기 위한것.
                bool  _evtSelect;

                //[편집기] 위 [문서목록] 이 펼쳐진 상태로 [화면지정자] 로 문서를 [가선택] 하는 경우.
                bool  _evtMSelect;

            //}

        //}

        //[FUNCTION]
        //{
            //[2007.03.25.일][완료!!!]
            void __fastcall _Resize(void);

            //[2018.06.25.월][완료!!!]
            void __fastcall _Enable(bool  pENABLE);
        //}

        //[EVENT FUNCTION]
        //{
            //[2006.11.28.화][완료!!!]
            void __fastcall _EVENT_V_Scroll(void);
            void __fastcall _EVENT_V_MouseDown(void);
            void __fastcall _EVENT_H_Scroll(void);

            //[2007.04.05.목][완료!!!]
            void __fastcall _EVENT_H_MouseDown(void);

        //}

        //[기능함수]
        //{


            //[2007.12.01.토][완료!!!]
            void __fastcall _Line_View(int  pLineNumber);

        //}

        //[폼디자인:모드]
        //{
            //[2018.06.24.일][추가!!!]

            //[속성]
            //{
                //[그림부품] 을 [폼디자인:모드] 로 사용하는 경우는 true.
                bool  _GFormDesignMode; //(기본값:false)

            //}

            //[부품]
            //{
                //<gui_part.cpp> 에 전역변수로 선언돼 있는 포인터 위치를 참조.
                //유일하게 [한개] 만 존재하므로 초기화 할필요가 없고 관리가 편해진다.
                TGCover_Form  **_GCover;

            //}

            void __fastcall _FormDesignMode(bool  pUse);

            //[이벤트]
            //{
                void __fastcall FormDesignMode_FormMouseDown(TObject *Sender, TMouseButton Button,
                                                             TShiftState Shift, int X, int Y);

            //}

        //}

};

//[API GUI 지원함수]
//{
    //[2012.07.09.월][완료!!!]
    void __fastcall GEditor_Create(//개체 생성자.
                                   void            *pPart,
                                   //모체 생성자.
                                   void            *pMother,
                                   //사용자가 직접 지정한 [식별자].
                                   unsigned short   pID,
                                   int              pLeft,
                                   int              pTop,
                                   int              pWidth,
                                   int              pHeight,
                                   //생성후 보일것인지 아닌지.
                                   bool             pVisible);

    //[2012.07.09.월][완료!!!]
    void __fastcall GEditor_Delete(//개체 생성자.
                                   void  *pPart);

    //[2012.07.09.월][완료!!!]
    void __fastcall GEditor_CreatorInit(//개체 생성자.
                                        void  *pPart);

//}

//---------------------------------------------------------------------------
extern PACKAGE TGEditor_Form *GEditor_Form;
//---------------------------------------------------------------------------


#endif
