

#include "함수묶음.h"

#include "GUI_모양만들기.h"
#include "GUI_목록줄.h"

#include "main.h"
#include "GUI.h"
#include "일반함수.h"


void Ide_모양만들기_목록줄(void)
{
  //[2011.09.24.토][생성!!!]{--
  //[목록줄] 을 구현한다.
  //}-------------------------

  //[VAR]
  //{
      //[2011.10.18.화][수정!!!]
      //[문서목록] 등 대량의 문자열을 처리 가능하도록 크기를 늘린다.
      char  문자열[1024*4];

      char  경로[1024];

  //}

  //[GUI/전역변수]{------
  struct 전역변수  *gv;
  struct GUI     *gui;
  전역변수_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[통신포트]
  //{
      //[Lb_통신포트번호]
      //{
          _GLabel_생성_(gui->Lb_통신포트번호, gui->GVmos, GID_Lb_통신포트번호,
                       2, 4,
                       100, 16,
                       true);
          _GLabel_제목_(gui->Lb_통신포트번호, "통신포트 번호:", d_쓰기);
          _GLabel_자동폭_(gui->Lb_통신포트번호, true, d_쓰기);

      //}

      //[Btn_통신포트번호]
      //{
          //[현재 설정값 변환]
          //{
              //현재 환경변수에 설정된 값을 표시하기 위하여 문자열로 변환한다.
              _Conv_Long값_문자열_(gv->통신포트번호, 0, false, false, 문자열);

          //}

          _GButton_생성_(gui->Btn_통신포트번호, gui->GVmos, GID_Btn_통신포트번호,
                        _GLabel_X_(gui->Lb_통신포트번호, 0, d_읽기) + _GLabel_폭_(gui->Lb_통신포트번호, 0, d_읽기), 4,
                        30, 16,
                        true);
          _GButton_제목_(gui->Btn_통신포트번호, 문자열, d_쓰기);

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->Btn_통신포트번호, true, d_쓰기);

          //}

          //[퐁선도움말]
          //{
              _GButton_풍선도움말문자열_
              (gui->Btn_통신포트번호,
               "제어기와 통신할 직렬통신 포트번호를 선택합니다.",
               d_쓰기);

              _GButton_풍선도움말_(gui->Btn_통신포트번호, false, d_쓰기);

          //}

      //}

      //[Btn_통신포트열기/닫기]
      //{
          _GButton_생성_(gui->Btn_통신포트열기닫기, gui->GVmos, GID_Btn_통신포트열기닫기,
                        _GButton_X_(gui->Btn_통신포트번호, 0, d_읽기) + _GButton_폭_(gui->Btn_통신포트번호, 0, d_읽기) + 2, 4,
                        30 + 30, 16, true);
          _GButton_제목_(gui->Btn_통신포트열기닫기, "열기", d_쓰기);

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->Btn_통신포트열기닫기, true, d_쓰기);

          //}

          //[퐁선도움말]
          //{
              _GButton_풍선도움말문자열_
              (gui->Btn_통신포트열기닫기,
               "지정 통신포트를 열거나 닫습니다.",
               d_쓰기);

              _GButton_풍선도움말_(gui->Btn_통신포트열기닫기, false, d_쓰기);

          //}

      //}

  //}

  //[AVR목록]
  //{
      //[Btn_AVR목록]
      //{
          _GButton_생성_(gui->Btn_AVR목록, gui->GVmos, GID_Btn_AVR목록,
                        _GButton_X_(gui->Btn_통신포트열기닫기, 0, d_읽기) + _GButton_폭_(gui->Btn_통신포트열기닫기, 0, d_읽기) + 4, 4,
                        250, 16, true);

          //[2011.10.18.화][수정!!!]
          //일단, "AVR" 로 해 놓고 <_List_AVR목록> 이 만들어 진 후 가장 첫 항목으로 다시 초기화 한다.
          _GButton_제목_(gui->Btn_AVR목록, "AVR", d_쓰기);

          _GButton_제목자동위치_(gui->Btn_AVR목록, false, d_쓰기);

          _GButton_제목위치X_(gui->Btn_AVR목록, 5, d_쓰기);
          _GButton_제목위치Y_(gui->Btn_AVR목록, 2, d_쓰기);

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->Btn_AVR목록, true, d_쓰기);

          //}

          //[퐁선도움말]
          //{
              _GButton_풍선도움말문자열_
              (gui->Btn_AVR목록,
               "AVR 종류를 선택합니다.",
               d_쓰기);

              _GButton_풍선도움말_(gui->Btn_AVR목록, false, d_쓰기);

          //}

      //}

      //[List_AVR목록]
      //{
          //[!]{--------------------------------------------------------
          //사용할수 있는 AVR 목록을 구성한다.
          //반드시, [_Btn_AVR목록] 바로 아래에 붙어서 출력되어야 한다(하위항목처럼).
          //}-----------------------------------------------------------

          _GList_생성_(gui->List_AVR목록, gui->GVmos, GID_List_AVR목록,
                      _GButton_X_(gui->Btn_AVR목록, 0, d_읽기), _GButton_Y_(gui->Btn_AVR목록, 0, d_읽기) + _GButton_높이_(gui->Btn_AVR목록, 0, d_읽기) - 1,
                      //하위 항목처럼 사용하므로 [_Btn_AVR목록] 과 같은 폭으로 설정한다.
                      _GButton_폭_(gui->Btn_AVR목록, 0, d_읽기),
                      100,
                      false);

          _GList_줄이동자보이기_(gui->List_AVR목록, true, d_쓰기);

          _GList_영점X_(gui->List_AVR목록, 4, d_쓰기);

          //[목록 만들기]
          //{
              //[2011.10.18.화][수정!!!]{-------------------------
              //새로 추가된 API 를 사용하여 직접 폴더안의 [항목] 을 얻는다.
              //}------------------------------------------------

              //[목록얻기]
              //{
                  //"[기준경로]\자료\AVR명세문서\" 안의 <*.avrisp> 의 항목을 얻으면 된다.
                  _Str_합치기_(경로, gv->기준경로, "자료\\AVR명세문서\\");

                  _Dir_폴더안의_문서전체이름목록_얻기_(경로,
                                                "avrspec",
                                                //하위폴더는 대상으로 하지 않는다.
                                                false,
                                                //순수한 [이름] 만 필요하다.
                                                d_문서|d_이름,
                                                문자열);

                  //현재 구한 목록에는 가장 마지막에 CRLF 가 하나 붙어 있는데 그대로 사용할 경우
                  //<_List_AVR목록> 은 한개 행을 하나의 항목으로 간주하여 마지막 항목이 비게 되므로
                  //여기서 마지막의 CRLF 를 제거한다.
                  //이 CR 의 위치에 '\0' 을 넣어 마무리 한다.
                  문자열[_Str_길이얻기_(문자열) - 2] = '\0';

              //}

              //위에서 얻는 목록을 그대로 출력한다.
              _GList_전체항목_(gui->List_AVR목록, 문자열, d_쓰기);

              //[<_Btn_AVR목록> 제목 설정]
              //{
                  _GList_항목얻기_(gui->List_AVR목록, 0, 문자열);

                  _GButton_제목_(gui->Btn_AVR목록, 문자열, d_쓰기);

              //}

          //}

          _GList_항목선택_(gui->List_AVR목록, 0, d_쓰기);

          _GList_배경색_(gui->List_AVR목록, _GColor_밝기_(clGray, 225), d_쓰기);

          //[이벤트]
          //{
              //[항목선택] 의 경우 발생.
              _GList_이벤트_Select_(gui->List_AVR목록, true, d_쓰기);

          //}

      //}

  //}

  //[풍선도움말]
  //{
      //[Chk_풍선도움말]
      //{
          _GCheckButton_생성_(gui->Chk_풍선도움말, gui->GVmos, GID_Chk_풍선도움말,
                             d_환경_GVmos_폭 - 179, _GButton_Y_(gui->Btn_AVR목록, 0, d_읽기) + 2,
                             true);
          _GCheckButton_확인_(gui->Chk_풍선도움말, false, d_쓰기);

          //[이벤트]
          //{
              _GCheckButton_이벤트_MClick_(gui->Chk_풍선도움말, true, d_쓰기);

          //}

      //}

      //[Lb_풍선도움말]
      //{
          _GLabel_생성_(gui->Lb_풍선도움말, gui->GVmos, GID_Lb_풍선도움말,
                       _GCheckButton_X_(gui->Chk_풍선도움말, 0, d_읽기) + 12,
                       _GCheckButton_Y_(gui->Chk_풍선도움말, 0, d_읽기) - 2,
                       100, 16,
                       true);
          _GLabel_제목_(gui->Lb_풍선도움말, "풍선 도움말", d_쓰기);
          _GLabel_자동폭_(gui->Lb_풍선도움말, true, d_쓰기);

      //}

  //}

  //[Btn_회로도]
  //{
      //[2011.11.09.수][추가!!!]

      _GButton_생성_(gui->Btn_회로도, gui->GVmos, GID_Btn_회로도,
                    _GLabel_X_(gui->Lb_풍선도움말, 0, d_읽기) + _GLabel_폭_(gui->Lb_풍선도움말, 0, d_읽기) + 8, 4,
                    76, 16, true);

      _GButton_제목_(gui->Btn_회로도, "회로도", d_쓰기);

      //[이벤트]
      //{
          _GButton_이벤트_MClick_(gui->Btn_회로도, true, d_쓰기);

      //}

      //[퐁선도움말]
      //{
          _GButton_풍선도움말문자열_
          (gui->Btn_회로도,
           "PDF 문서로된 회로도를 볼수있습니다.\r\n"
           "단, PDF 문서를 볼수 있는 도구가 PC 에 설치돼 있어야 합니다.",
           d_쓰기);

          _GButton_풍선도움말_(gui->Btn_회로도, false, d_쓰기);

      //}

  //}

}

void Ide_모양삭제_목록줄(void)
{
  //[2011.11.22.화][생성!!!]{--------
  //[목록줄] 을 삭제한다.
  //
  //[2012.04.30.월][수정!!!]---------
  //안전을 위하여 선언한 역순으로 삭제한다.
  //}-------------------------------

  //[GUI]{----------
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  _GButton_삭제_(gui->Btn_회로도);
  _GLabel_삭제_(gui->Lb_풍선도움말);
  _GCheckButton_삭제_(gui->Chk_풍선도움말);
  _GList_삭제_(gui->List_AVR목록);
  _GButton_삭제_(gui->Btn_AVR목록);
  _GButton_삭제_(gui->Btn_통신포트열기닫기);
  _GButton_삭제_(gui->Btn_통신포트번호);
  _GLabel_삭제_(gui->Lb_통신포트번호);

}

void Btn_통신포트번호_이벤트_MClick(void)
{
  //[2011.09.25.일][생성!!!]{---
  //[2011.10.22.토][수정!!!]
  //사용할 PC 의 통신포트 번호 설정.
  //}--------------------------

  //[VAR]
  //{
      char  문자열[512];
      bool  확인취소;

  //}

  //[GUI/전역변수]{------
  struct 전역변수  *gv;
  struct GUI     *gui;
  전역변수_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[대화상자 보이기]
  //{
      //대화상자 이외의 것은 동작되지 않도록 한다.
      _GVmos_유효_(gui->GVmos, false, d_쓰기);
      //{
          //[현재 설정값 출력]
          //{
              //버튼 제목이 현재 선택된 통신포트 번호다.
              _GButton_제목_(gui->Btn_통신포트번호, 문자열, d_읽기);

              //대화상자의 [한줄 편집기] 에 출력.
              _GMsgBox_한줄편집기문자열_(gui->공용알림창, 문자열, d_쓰기);

          //}

          확인취소 = _GMsgBox_한줄편집기_
                   (gui->공용알림창, d_기계닉스,
                    "사용할 통신포트 번호를 10진수로 입력합니다."
                   );

      //}
      _GVmos_유효_(gui->GVmos, true, d_쓰기);

  //}

  //[확인/취소]
  //{
      //[취소] 인 경우는 처리하지 않고 바로 종료.
      if(확인취소 == false) return;

  //}

  //[문자열 검사]
  //{
      //[한줄편집기] 의 문자열 얻기.
      _GMsgBox_한줄편집기문자열_(gui->공용알림창, 문자열, d_읽기);

      if(_Check_10진수규칙_(문자열) != true)
      {
        _GVmos_유효_(gui->GVmos, false, d_쓰기);
        //{
            _GMsgBox_기본_(gui->공용알림창, d_오류,
                          "10진수 문자열이 아닙니다.\r\n"
                          "0 - 9 의 숫자로 이루어진 10진수 문자열만 사용가능하며\r\n"
                          "앞뒤에 공백이 없어야 합니다."
                         );

        //}
        _GVmos_유효_(gui->GVmos, true, d_쓰기);

        //더이상 처리하지 않고 종료한다.
        return;

      }

  //}

  //[통신포트 번호 얻기]
  //{
      //10진수 문자열을 값으로 변환후 환경변수에 저장.
      gv->통신포트번호 = _Conv_10진수표기_Int값_(문자열);

  //}

  //[버튼 문자열 정리]
  //{
      //[!]{--------------------
      //현재 선택된 통신포트번호 표기.
      //}-----------------------

      _Conv_Long값_문자열_(gv->통신포트번호, 0, false, false, 문자열);

      _GButton_제목_(gui->Btn_통신포트번호, 문자열, d_쓰기);

  //}

}

void Btn_통신포트열기닫기_이벤트_MClick(void)
{
  //[2011.09.25.일][생성!!!]{--------------------------------
  //[2011.10.22.토][수정!!!]
  //환경변수에 지정돼 있는 통신포트를 [열기/닫기] 한다.
  //맷돌의 <SysCOM> 을 사용하므로 [통신율:115200 BPS] 로 고정 설정.
  //
  //<열기> : 통신포트 열고 [닫기] 로 버튼 문자열 전환.
  //<닫기> : 통신포트 닫고 [열기] 로 버튼 문자열 전환.
  //}-------------------------------------------------------

  //[VAR]
  //{
      char  문자열[512];

  //}

  //[GUI/전역변수]{------
  struct 전역변수  *gv;
  struct GUI     *gui;
  전역변수_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[버튼 문자열에 따른 처리]
  //{
      //버튼 문자열 얻기.
      _GButton_제목_(gui->Btn_통신포트열기닫기, 문자열, d_읽기);

      if(_Str_일치확인_(문자열, "열기", false) == true)
      {
        //[!]{----------------------------
        //통신포트 열고 버튼 제목 [닫기] 로 교체.
        //}-------------------------------

        //통신포트 열기.
        if(_Ide_통신포트_열기_(gv->통신포트번호, 115200) != true)
        {
          _GVmos_유효_(gui->GVmos, false, d_쓰기);
          //{
              _GMsgBox_기본_(gui->공용알림창, d_오류, "통신포트를 열수 없습니다.");

          //}
          _GVmos_유효_(gui->GVmos, true, d_쓰기);

          //더이상 처리하지 않고 종료.
          return;

        }

        //[버튼 제목 전환]
        //{
            _GButton_제목_(gui->Btn_통신포트열기닫기, "닫기", d_쓰기);
            _GButton_배경색_(gui->Btn_통신포트열기닫기, clGray/*0x2824bf*//*_GColor_밝기_(clRed, 0)*/, d_쓰기);
            _GButton_문자색_(gui->Btn_통신포트열기닫기, clWhite, d_쓰기);
            _GButton_테두리색_(gui->Btn_통신포트열기닫기, clBlack, d_쓰기);

        //}

      }
      else
      {
        //[!]{----------------------------
        //통신포트 닫고 버튼 제목 [열기] 로 교체.
        //}-------------------------------

        //통신포트 닫기.
        if(_Ide_통신포트_닫기_() != true)
        {
          _GVmos_유효_(gui->GVmos, false, d_쓰기);
          //{
              _GMsgBox_기본_(gui->공용알림창, d_오류, "통신포트를 닫을수 없습니다.");

          //}
          _GVmos_유효_(gui->GVmos, true, d_쓰기);

          //더이상 처리하지 않고 종료.
          return;

        }

        //[버튼 전환]
        //{
            _GButton_제목_(gui->Btn_통신포트열기닫기, "열기", d_쓰기);
            _GButton_배경색_(gui->Btn_통신포트열기닫기, clWhite, d_쓰기);
            _GButton_문자색_(gui->Btn_통신포트열기닫기, clBlack, d_쓰기);
            _GButton_테두리색_(gui->Btn_통신포트열기닫기, clGray, d_쓰기);

        //}

      }

  //}

}

void Btn_AVR목록_이벤트_MClick(int  p눌린버튼종류)
{
  //[2011.09.25.일][생성!!!]{--------------------------------------------------------
  //1) <_List_AVR목록> 을 <_Btn_AVR목록> 아래에 위치(생성시 이미 위치해있는 상태).
  //2) <_List_AVR목록> 보이기.
  //
  //[2011.09.26.월][수정!!!]---------------------------------------------------------
  //<_List_AVR목록> 는 항목이 선택되야만 사라지므로, 강제로 감추기 위하여 배타적인 속성으로 사용한다.
  //<_List_AVR목록> 이 보이는 경우는 감춘다.
  //
  //[2011.09.30.금][수정!!!]
  //}-------------------------------------------------------------------------------

  //[GUI/전역변수]{------
  struct 전역변수  *gv;
  struct GUI     *gui;
  전역변수_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[<_Btn_AVR목록> 동작 구분]
  //{
      //[2011.09.30.금][추가!!!]{-----------------------------------
      //[L/R 눌림] 의 경우에 따라 <_List_AVR목록> 의 동작을 다르게 설정한다.
      //}----------------------------------------------------------

      if(p눌린버튼종류 == d_MouseBtn_R)
      {
        //[AVR 명세문서 생성] 의 기능으로 설정한다.
        gv->목록동작구분 = d_목록동작구분_명세생성;

      }
      else
      {
        //[기본동작:AVR 선택/설정] 으로 설정.
        gv->목록동작구분 = d_목록동작구분_기본동작;

      }

  //}

  if(_GList_보이기_(gui->List_AVR목록, 0, d_읽기) == false)
  {
    //현재 보이지 않는다면 보여준다.
    _GList_보이기_(gui->List_AVR목록, true, d_쓰기);

  }
  else
  {
    //현재 보이고 있다면 감춰 준다.
    _GList_보이기_(gui->List_AVR목록, false, d_쓰기);

  }

}

void List_AVR목록_이벤트_Select(int  p선택항목번호)
{
  //[2011.09.26.월][생성!!!]{----------
  //1) 선택 항목을 <_Btn_AVR목록> 에 표시.
  //2) 해당 AVR 명세문서로 재설정.
  //}---------------------------------

  //[VAR]
  //{
      char  선택항목[256];

  //}

  //[GUI]{----------
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  //[선택 항목 표시]
  //{
      _GList_항목얻기_(gui->List_AVR목록, p선택항목번호, 선택항목);

      _GButton_제목_(gui->Btn_AVR목록, 선택항목, d_쓰기);

      _GList_보이기_(gui->List_AVR목록, false, d_쓰기);

  //}

  //[GUI 반영]
  //{
      //[2011.10.21.금][추가!!!]{-------------------------------
      //선택 AVR 의 [명세문서] 를 읽어들여 [전역:AVR설정정보] 에 저장하고
      //GUI 에 설정을 반영해 준다.
      //}------------------------------------------------------

      List_AVR목록_선택항목처리();

  //}

}

void Chk_풍선도움말_이벤트_MClick(void)
{
  //[2011.09.25.일][생성!!!]

  //[GUI]{----------
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  if(_GCheckButton_확인_(gui->Chk_풍선도움말, 0, d_읽기) == true)
  {
    //[풍선도움말] 사용.

    _GButton_풍선도움말_(gui->Btn_통신포트번호, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_통신포트열기닫기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_AVR목록, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_지우기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash_확인, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom_확인, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_AVR설정_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_AVR설정_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_자동진행, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_실행, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash문서_열기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash문서_닫기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash문서_보기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom문서_열기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom문서_닫기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom문서_보기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정보안_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정보안_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정확장_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정확장_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정상위_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정상위_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정하위_쓰기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정하위_읽기, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_명세문서값으로초기화, true, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_명세문서안에설정저장, true, d_쓰기);
    //2011.11.09.수][추가!!!]
    _GButton_풍선도움말_(gui->Btn_회로도, true, d_쓰기);
    //[2011.11.12.토][추가!!!]
    _GButton_풍선도움말_(gui->Btn_맷돌에가상기계설치, true, d_쓰기);
    //[2011.11.21.월][추가!!!]
    _GButton_풍선도움말_(gui->Btn_ISP활성화_회로도, true, d_쓰기);

  }
  else
  {
    //[풍선도움말] 미사용.

    _GButton_풍선도움말_(gui->Btn_통신포트번호, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_통신포트열기닫기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_AVR목록, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_지우기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash_확인, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom_확인, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_AVR설정_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_AVR설정_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_자동진행, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_실행, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash문서_열기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash문서_닫기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_Flash문서_보기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom문서_열기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom문서_닫기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_EEprom문서_보기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정보안_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정보안_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정확장_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정확장_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정상위_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정상위_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정하위_쓰기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_설정하위_읽기, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_명세문서값으로초기화, false, d_쓰기);
    _GButton_풍선도움말_(gui->Btn_명세문서안에설정저장, false, d_쓰기);
    //2011.11.09.수][추가!!!]
    _GButton_풍선도움말_(gui->Btn_회로도, false, d_쓰기);
    //[2011.11.12.토][추가!!!]
    _GButton_풍선도움말_(gui->Btn_맷돌에가상기계설치, false, d_쓰기);
    //[2011.11.21.월][추가!!!]
    _GButton_풍선도움말_(gui->Btn_ISP활성화_회로도, false, d_쓰기);

  }

}

void Btn_회로도_이벤트_MClick(void)
{
  //[2011.11.09.수][생성!!!]{--------------
  //"[기준경로]\자료\회로도.pdf" 문서를 열어준다.
  //}-------------------------------------

  //[VAR]
  //{
      char  경로이름확장자[1024];

  //}

  //[전역변수]{---------
  struct 전역변수  *gv;
  전역변수_위치얻기(&gv);
  //}-----------------

  //[<경로이름확장자> 합성]
  //{
      //"[기준경로]\자료\회로도.pdf" 문서의 [경로이름확장자] 를 합성.
      _Str_합치기_(경로이름확장자, gv->기준경로, "자료\\회로도.pdf");

  //}

  //[실행]
  //{
      _Sys_외부실행_(경로이름확장자);

  //}

}

void List_AVR목록_선택항목처리(void)
{
  //[2011.10.21.금][생성!!!]{---------------------------------
  //선택된 AVR 의 [명세문서] 를 읽어들여 <전역:AVR설정정보> 에 정리하고
  //이 정보대로 GUI 를 재설정해준다.
  //
  //[주의!!!]------------------------------------------------
  //선택항목 번호를 여기서 직접 구해서 사용한다.
  //}--------------------------------------------------------

  //[VAR]
  //{
      char  경로이름확장자[512];

      char  선택항목[256];

  //}

  //[GUI/전역변수]{------
  struct 전역변수  *gv;
  struct GUI     *gui;
  전역변수_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[명세문서] 경로 합성.
  _Str_합치기_(경로이름확장자, gv->기준경로, "자료\\AVR명세문서\\");

  //선택된 항목 이름 얻기.
  _GList_항목얻기_(gui->List_AVR목록, _GList_항목선택_(gui->List_AVR목록, 0, d_읽기), 선택항목);

  //[이름] 합성.
  _Str_더하기_(경로이름확장자, 선택항목);

  //[확장자] 합성.
  _Str_더하기_(경로이름확장자, ".avrspec");

  //[명세문서] 읽어들여 [전역:AVR설정정보] 에 저장.
  명세문서_AvrSpec_읽기(&(gv->AVR명세), 경로이름확장자);

  Ide_AVR설정정보를_GUI에_반영(&(gv->AVR명세));

}



