

#include "함수묶음.h"

#include "GUI/GUI_보기창.h"

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

#include "기계닉스_이름정의.h"

#include "GUI\GUI_모양만들기.h"
#include "AVR-ISP\AVR-ISP.h"
#include "AVR-ISP\AVR-병렬접근.h"


void Ide_모양만들기_보기창(void)
{
  //[2011.11.03.목][생성!!!]{----------
  //[Flash/EEprom] 의 내용을 보여주는 창.
  //}---------------------------------

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

  //[Form_보기창]
  //{
      //[전체화면] 을 모체로 생성-------v
      _GForm_생성_(gui->Form_보기창, NULL, GID_Form_보기창,
                  //임의위치.
                  10, 10,
                  748, 330, //738
                  //처음에는 보이지 않고 시작.
                  false);

      _GForm_제목줄문자열_(gui->Form_보기창, "::: FLASH 내용 보기 :::", d_쓰기);

      //[위치]
      //{
          //화면 중간에 위치.
          _GForm_X_(gui->Form_보기창, _Sys_화면폭_()/2 - _GForm_폭_(gui->Form_보기창, 0, d_읽기)/2, d_쓰기);
          _GForm_Y_(gui->Form_보기창, _Sys_화면높이_()/2 - _GForm_높이_(gui->Form_보기창, 0, d_읽기)/2, d_쓰기);

      //}

      //[이벤트]
      //{
          _GForm_이벤트_Resize_(gui->Form_보기창, true, d_쓰기);

      //}

  //}

  //[Lb_보기창_열주소]
  //{
      _GLabel_생성_(gui->Lb_보기창_열주소, gui->Form_보기창, GID_Lb_보기창_열주소,
                   3, 3,
                   734, 18,
                   true);

      _GLabel_제목_(gui->Lb_보기창_열주소, "            +0   +1   +2   +3   +4   +5   +6   +7   +8   +9   +A   +B   +C   +D   +E   +F", d_쓰기);

      _GLabel_테두리_(gui->Lb_보기창_열주소, true, d_쓰기);
      _GLabel_제목위치X_(gui->Lb_보기창_열주소, 2, d_쓰기);

      _GLabel_배경색_(gui->Lb_보기창_열주소, _GColor_밝기_(clGray, 100), d_쓰기);
      _GLabel_문자색_(gui->Lb_보기창_열주소, clWhite, d_쓰기);

  //}

  //[List_보기창_내용]
  //{
      _GList_생성_(gui->List_보기창_내용, gui->Form_보기창, GID_List_보기창_내용,
                  _GLabel_X_(gui->Lb_보기창_열주소, 0, d_읽기), _GLabel_Y_(gui->Lb_보기창_열주소, 0, d_읽기) + _GLabel_높이_(gui->Lb_보기창_열주소, 0, d_읽기) - 1,
                  _GLabel_폭_(gui->Lb_보기창_열주소, 0, d_읽기),
                  _GForm_높이_(gui->Form_보기창, 0, d_읽기) - _GLabel_높이_(gui->Lb_보기창_열주소, 0, d_읽기) - 28,
                  true);

      _GList_줄이동자보이기_(gui->List_보기창_내용, true, d_쓰기);

      _GList_영점X_(gui->List_보기창_내용, 4, d_쓰기);

      _GList_전체항목_(gui->List_보기창_내용, "", d_쓰기);
      //_GList_전체항목_(gui->List_보기창_내용, "00000000: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX ", 쓰기);

  //}

}

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

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

  _GList_삭제_(gui->List_보기창_내용);
  _GLabel_삭제_(gui->Lb_보기창_열주소);
  _GForm_삭제_(gui->Form_보기창);

}

void Form_보기창_Flash_보기(void)
{
  //[2011.11.03.목][생성!!!]{------------------------------------
  //<Form_보기창> 을 Flash 내용보기로 구성하고 보여준다.
  //
  //[2011.11.26.토][수정!!!]-------------------------------------
  //이미 <FLASH 내용 보기> 상태로 보이고 있는 경우는 환경을 새로 만들지 않고
  //다시 내용만 재출력하는 것으로 수정.
  //}-----------------------------------------------------------

  //[VAR]
  //{
      //실제 <전역변수:flash[]> 의 내용을 문자열로 바꾸므로 3배 크기면 넉넉하다.
      char  문자열[d_flash_최대크기*3];

  //}

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

  //[이미 보이고 있나?]
  //{
      //2011.11.26.토][추가!!!]{----------
      //보이고 있는지 여부를 얻기.
      //단, <FLASH 내용 보기> 인 경우가 해당.
      //}--------------------------------

      //현재창의 제목줄 얻기.
      _GForm_제목줄문자열_(gui->Form_보기창, 문자열, d_읽기);

      if((_Str_일치확인_(문자열, "::: FLASH 내용 보기 :::", false) == true) &&
         (_GForm_보이기_(gui->Form_보기창, NULL, d_읽기) == true))
      {
        //이미 모든 환경이 설정돼 있으므로 바로 [내용출력] 부분으로 넘어간다.
        goto lbFlash내용표시;

      }

  //}

  //[감추기]
  //{
      _GForm_보이기_(gui->Form_보기창, false, d_쓰기);

  //}

  //[Form_보기창]
  //{
      _GForm_폭_(gui->Form_보기창, 748, d_쓰기);
      _GForm_높이_(gui->Form_보기창, 330, d_쓰기);

      _GForm_제목줄문자열_(gui->Form_보기창, "::: FLASH 내용 보기 :::", d_쓰기);

      //화면 중간에 위치.
      //[2011.11.26.토][수정!!!]
      //계속 보이는 경우도 전환이 돼야 하며 위치가 변경되는 경우 짜증이 날수 있으므로 주석처리한다.
      //_GForm_X_(gui->Form_보기창, _Sys_화면폭_()/2 - _GForm_폭_(gui->Form_보기창, 0, 읽기)/2, 쓰기);
      //_GForm_Y_(gui->Form_보기창, _Sys_화면높이_()/2 - _GForm_높이_(gui->Form_보기창, 0, 읽기)/2, 쓰기);

  //}

  //[Lb_보기창_열주소]
  //{
      _GLabel_폭_(gui->Lb_보기창_열주소, 734, d_쓰기);
      _GLabel_높이_(gui->Lb_보기창_열주소, 18, d_쓰기);

      _GLabel_제목_(gui->Lb_보기창_열주소, "            +0   +1   +2   +3   +4   +5   +6   +7   +8   +9   +A   +B   +C   +D   +E   +F", d_쓰기);

  //}

  //[List_보기창_내용]
  //{
      _GList_폭_(gui->List_보기창_내용, _GLabel_폭_(gui->Lb_보기창_열주소, 0, d_읽기), d_쓰기);
      _GList_높이_(gui->List_보기창_내용, _GForm_높이_(gui->Form_보기창, 0, d_읽기) - _GLabel_높이_(gui->Lb_보기창_열주소, 0, d_읽기) - 28, d_쓰기);

  //}

  lbFlash내용표시:

  //[Flash 내용 표시]
  //{
      Ide_Flash_문자열로변환((unsigned short *)(gv->flash),
                          0,
                          //AVR 은 [1주소:2바이트].
                          gv->AVR명세.flash크기/2,
                          //앞에 [주소] 붙이기.
                          true,
                          문자열);

      _GList_전체항목_(gui->List_보기창_내용, 문자열, d_쓰기);

  //}

  //[보이기]
  //{
      _GForm_보이기_(gui->Form_보기창, true, d_쓰기);

  //}

}

void Form_보기창_EEprom_보기(void)
{
  //[2011.11.03.목][생성!!!]{-------------------------------------
  //<Form_보기창> 을 EEprom 내용보기로 구성하고 보여준다.
  //
  //[2011.11.26.토][수정!!!]--------------------------------------
  //이미 <EEPROM 내용 보기> 상태로 보이고 있는 경우는 환경을 새로 만들지 않고
  //다시 내용만 재출력하는 것으로 수정.
  //}------------------------------------------------------------

  //[VAR]
  //{
      //실제 <전역변수:eeprom[]> 의 내용을 문자열로 바꾸므로 3배 크기면 넉넉하다.
      char  문자열[d_eeprom_최대크기*3];

  //}

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

  //[이미 보이고 있나?]
  //{
      //2011.11.26.토][추가!!!]{-----------
      //보이고 있는지 여부를 얻기.
      //단, <EEPROM 내용 보기> 인 경우가 해당.
      //}---------------------------------

      //현재창의 제목줄 얻기.
      _GForm_제목줄문자열_(gui->Form_보기창, 문자열, d_읽기);

      if((_Str_일치확인_(문자열, "::: EEPROM 내용 보기 :::", false) == true) &&
         (_GForm_보이기_(gui->Form_보기창, NULL, d_읽기) == true))
      {
        //이미 모든 환경이 설정돼 있으므로 바로 [내용출력] 부분으로 넘어간다.
        goto lbEEprom내용표시;

      }

  //}

  //[감추기]
  //{
      _GForm_보이기_(gui->Form_보기창, false, d_쓰기);

  //}

  //[Form_보기창]
  //{
      _GForm_폭_(gui->Form_보기창, 748 - 252, d_쓰기);
      _GForm_높이_(gui->Form_보기창, 330, d_쓰기);

      _GForm_제목줄문자열_(gui->Form_보기창, "::: EEPROM 내용 보기 :::", d_쓰기);

      //화면 중간에 위치.
      //[2011.11.26.토][수정!!!]
      //계속 보이는 경우도 전환이 돼야 하며 위치가 변경되는 경우 짜증이 날수 있으므로 주석처리한다.
      //_GForm_X_(gui->Form_보기창, _Sys_화면폭_()/2 - _GForm_폭_(gui->Form_보기창, 0, 읽기)/2, 쓰기);
      //_GForm_Y_(gui->Form_보기창, _Sys_화면높이_()/2 - _GForm_높이_(gui->Form_보기창, 0, 읽기)/2, 쓰기);

  //}

  //[Lb_보기창_열주소]
  //{
      _GLabel_폭_(gui->Lb_보기창_열주소, 734 - 252, d_쓰기);
      _GLabel_높이_(gui->Lb_보기창_열주소, 18, d_쓰기);

      _GLabel_제목_(gui->Lb_보기창_열주소, "          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F", d_쓰기);

  //}

  //[List_보기창_내용]
  //{
      _GList_폭_(gui->List_보기창_내용, _GLabel_폭_(gui->Lb_보기창_열주소, 0, d_읽기), d_쓰기);
      _GList_높이_(gui->List_보기창_내용, _GForm_높이_(gui->Form_보기창, 0, d_읽기) - _GLabel_높이_(gui->Lb_보기창_열주소, 0, d_읽기) - 28, d_쓰기);

  //}

  lbEEprom내용표시:

  //[EEprom 내용 표시]
  //{
      Ide_EEprom_문자열로변환(gv->eeprom,
                           0,
                           //AVR 은 [1주소:2바이트].
                           gv->AVR명세.eep크기,
                           //앞에 [주소] 붙이기.
                           true,
                           문자열);

      _GList_전체항목_(gui->List_보기창_내용, 문자열, d_쓰기);

  //}

  //[보이기]
  //{
      _GForm_보이기_(gui->Form_보기창, true, d_쓰기);

  //}

}

void Form_보기창_이벤트_Resize(int  pForm_보기창_폭,
                            int  pForm_보기창_높이)
{
  //[2011.11.03.목][생성!!!]{-------------------------
  //<Form_보기창> 크기 변경시 내부 그림부품의 크기도 같이 조정.
  //
  //단, <Flash/EEprom> 에 따라 처리를 다르게 해야 한다.
  //}------------------------------------------------

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

  //}

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

  _GForm_제목줄문자열_(gui->Form_보기창, 문자열, d_읽기);

  if(_Str_일치확인_(문자열, "::: FLASH 내용 보기 :::", false) == true)
  {
    //[!]{--------------
    //[Flash] 보기로 처리.
    //}-----------------

    //[폭]
    //{
        if(pForm_보기창_폭 != _Sys_화면폭_())
        {
          //<Form_보기창> 의 폭은 고정.
          _GForm_폭_(gui->Form_보기창, 748, d_쓰기);

        }

    //}

    //[높이]
    //{
        //[주의!!!]{---------------------------------------------
        //높이는 최소 높이 이하로 줄어들어서는 안된다.
        //<List_보기창_내용> 의 [높이] 는 <Form_보기창> 과 연동되어 변경.
        //}-----------------------------------------------------

        if(pForm_보기창_높이 < 104)
        {
          //최소크기를 유지.
          _GForm_높이_(gui->Form_보기창, 104, d_쓰기);

        }
        else
        {
          _GList_높이_(gui->List_보기창_내용,
                      _GForm_높이_(gui->Form_보기창, 0, d_읽기) - _GLabel_높이_(gui->Lb_보기창_열주소, 0, d_읽기) - 28,
                      d_쓰기);

        }

    //}

  }
  else
  {
    //[!]{---------------
    //[EEprom] 보기로 처리.
    //}------------------

    //[폭]
    //{
        if(pForm_보기창_폭 != _Sys_화면폭_())
        {
          //<Form_보기창> 의 폭은 고정.
          _GForm_폭_(gui->Form_보기창, 748 - 252, d_쓰기);

        }

    //}

    //[높이]
    //{
        //[주의!!!]{---------------------------------------------
        //높이는 최소 높이 이하로 줄어들어서는 안된다.
        //<List_보기창_내용> 의 [높이] 는 <Form_보기창> 과 연동되어 변경.
        //}-----------------------------------------------------

        if(pForm_보기창_높이 < 104)
        {
          //최소크기를 유지.
          _GForm_높이_(gui->Form_보기창, 104, d_쓰기);

        }
        else
        {
          _GList_높이_(gui->List_보기창_내용,
                      _GForm_높이_(gui->Form_보기창, 0, d_읽기) - _GLabel_높이_(gui->Lb_보기창_열주소, 0, d_읽기) - 28,
                      d_쓰기);

        }

    //}

  }

}





