
//[2012.07.08.일][생성!!!]

//[!]{-----------------------
#include "GUI\GUI_제어기설정.h"
//}--------------------------

#include "함수묶음.h"

#include "GUI\GUI.h"

#include "일반함수.h"
#include "색상정의.h"
#include "전역정보.h"


void GUI_생성자_제어기설정(void)
{
  //[2012.07.08.일][생성!!!]

  //[VAR]
  //{

  //}

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

  //[Btn_읽기]
  //{
      _GButton_생성_(gui->제어기설정.Btn_읽기, gui->기본틀.GVmos, GID_생성(),
                    _GLabel_X_(gui->주기설정.Lb_제목, 0, d_읽기),
                    _GLabel_Y_(gui->주기설정.Lb_기본판, 0, d_읽기) + _GLabel_높이_(gui->주기설정.Lb_기본판, 0, d_읽기) + 4,
                    112, 20,
                    true);
      _GButton_제목_(gui->제어기설정.Btn_읽기, "제어기 설정읽기", d_쓰기);

      //[이벤트]
      //{
          _GButton_이벤트_MClick_(gui->제어기설정.Btn_읽기, true, d_쓰기);

      //}

      //[풍선도움말]
      //{
          _GButton_풍선도움말문자열_
          (gui->제어기설정.Btn_읽기,
           "[제어기] 안 EEprom 에 저장돼 있는 설정값을 읽어서 IDE 내부\r\n"
           "[설정 정보 저장소] 에 저장하고 관련 [그림부품] 에 반영합니다.\r\n"
           "이는 [제어기:재기동] 시에 적용되는 초기값에 해당합니다.",
           d_쓰기);

          _GButton_풍선도움말_(gui->제어기설정.Btn_읽기, false, d_쓰기);

      //}

  //}

  //[Btn_쓰기]
  //{
      _GButton_생성_(gui->제어기설정.Btn_쓰기, gui->기본틀.GVmos, GID_생성(),
                    _GLabel_X_(gui->제어기설정.Btn_읽기, 0, d_읽기) + _GLabel_폭_(gui->제어기설정.Btn_읽기, 0, d_읽기) + 4,
                    _GLabel_Y_(gui->제어기설정.Btn_읽기, 0, d_읽기),
                    114, 20,
                    true);
      _GButton_제목_(gui->제어기설정.Btn_쓰기, "제어기 설정쓰기", d_쓰기);

      //[이벤트]
      //{
          _GButton_이벤트_MClick_(gui->제어기설정.Btn_쓰기, true, d_쓰기);

      //}

      //[풍선도움말]
      //{
          _GButton_풍선도움말문자열_
          (gui->제어기설정.Btn_쓰기,
           "현재 IDE 내부 [설정 정보 저장소] 에 저장돼 있는 설정값을\r\n"
           "[제어기] 내부 EEprom 에 기록합니다.\r\n"
           "이는 [제어기:재기동] 시에 적용되는 초기값에 해당합니다.",
           d_쓰기);

          _GButton_풍선도움말_(gui->제어기설정.Btn_쓰기, false, d_쓰기);

      //}

  //}

  //[Btn_열기]
  //{
      _GButton_생성_(gui->제어기설정.Btn_열기, gui->기본틀.GVmos, GID_생성(),
                    _GLabel_X_(gui->제어기설정.Btn_읽기, 0, d_읽기),
                    _GLabel_Y_(gui->제어기설정.Btn_읽기, 0, d_읽기) + _GLabel_높이_(gui->제어기설정.Btn_읽기, 0, d_읽기) + 4,
                    112, 20,
                    true);
      _GButton_제목_(gui->제어기설정.Btn_열기, "제어기 설정열기", d_쓰기);

      //[이벤트]
      //{
          _GButton_이벤트_MClick_(gui->제어기설정.Btn_열기, true, d_쓰기);

      //}

      //[풍선도움말]
      //{
          _GButton_풍선도움말문자열_
          (gui->제어기설정.Btn_열기,
           "지정한 [제어기] 설정문서(*.gmrcconfig)를 열어 IDE 내부\r\n"
           "[설정 정보 저장소] 에 저장하고 관련 [그림부품] 에 반영합니다.\r\n"
           "이는 [제어기:재기동] 시에 적용되는 초기값에 해당합니다.",
           d_쓰기);

          _GButton_풍선도움말_(gui->제어기설정.Btn_열기, false, d_쓰기);

      //}

  //}

  //[Btn_저장]
  //{
      _GButton_생성_(gui->제어기설정.Btn_저장, gui->기본틀.GVmos, GID_생성(),
                    _GLabel_X_(gui->제어기설정.Btn_열기, 0, d_읽기) + _GLabel_폭_(gui->제어기설정.Btn_열기, 0, d_읽기) + 4,
                    _GLabel_Y_(gui->제어기설정.Btn_열기, 0, d_읽기),
                    114, 20,
                    true);
      _GButton_제목_(gui->제어기설정.Btn_저장, "제어기 설정저장", d_쓰기);

      //[이벤트]
      //{
          _GButton_이벤트_MClick_(gui->제어기설정.Btn_저장, true, d_쓰기);

      //}

      //[풍선도움말]
      //{
          _GButton_풍선도움말문자열_
          (gui->제어기설정.Btn_저장,
           "현재 IDE 내부 [설정 정보 저장소] 안의 설정값을\r\n"
           "[제어기] 설정문서(*.gmrcconfig)로 저장합니다.",
           d_쓰기);

          _GButton_풍선도움말_(gui->제어기설정.Btn_저장, false, d_쓰기);

      //}

  //}

}

void GUI_소멸자_제어기설정(void)
{
  //[2012.07.08.일][생성!!!]

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

  _GButton_삭제_(gui->제어기설정.Btn_저장);
  _GButton_삭제_(gui->제어기설정.Btn_열기);
  _GButton_삭제_(gui->제어기설정.Btn_쓰기);
  _GButton_삭제_(gui->제어기설정.Btn_읽기);

}

bool GUI_동작함수_제어기설정(struct GUI알림문64  *pGUI알림문64)
{
  //[2012.07.15.일][생성!!!]{---------
  //해당 [알림문] 만 처리.
  //처리한 알림문이 있다면 <true> 를 반환.
  //}--------------------------------

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

  if     (pGUI알림문64->식별자 == GID_읽기(gui->제어기설정.Btn_읽기))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 제어기설정_Btn_읽기_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->제어기설정.Btn_쓰기))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 제어기설정_Btn_쓰기_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->제어기설정.Btn_열기))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 제어기설정_Btn_열기_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->제어기설정.Btn_저장))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 제어기설정_Btn_저장_이벤트_MClick(); return(true); }

  }

  //여기까지 온것은 처리하지 않은 것으로 보고.
  return(false);

}


void 제어기설정_Btn_읽기_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{-----------------------------------
  //[2012.07.29.일][수정!!!]------------------------------------
  //<*.gmrcconfig> 문서로 저장되는 정보를 읽어들여 [전용 구조체] 에 저장.
  //모두 EEprom 을 대상으로 한 정보들.
  //}----------------------------------------------------------

  //[VAR]
  //{
      int  i;

  //}

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

  //[통신 포트 열림 확인]
  //{
      //[!]{---------------------------------------------
      //모두 통신포트가 열려있어야 처리 가능하므로 여기서 한번만 처리.
      //}------------------------------------------------

      if(항목줄_통신포트열림확인() != true) return;

  //}

  //[제목:시작]{---------------------------------------
  _GButton_제목_(gui->제어기설정.Btn_읽기, "...", d_쓰기);
  //}------------------------------------------------

  //[이벤트:무효화]{---------------------------------------------
  _GButton_이벤트_MClick_(gui->제어기설정.Btn_읽기, false, d_쓰기);
  //}---------------------------------------------------------

  //[설정 읽기]
  //{
      //[영점]
      //{
          for(i = 0; i < 8; i++)
          {
            if(_GMRCBASIC_Pos0TickRead(기본조정설정_제어기번호(), i, &(gv->제어기설정.영점0도[i])) != true) { Ide_통신오류알림(); goto lb끝; }

            if(_GMRCBASIC_Pos180TickRead(기본조정설정_제어기번호(), i, &(gv->제어기설정.영점180도[i])) != true) { Ide_통신오류알림(); goto lb끝; }

          }

      //}

      //[A/D 설정]
      //{
          if(_GMRCBASIC_AdRead(기본조정설정_제어기번호(), &(gv->제어기설정.AD)) != true) { Ide_통신오류알림(); goto lb끝; }

      //}

      //[PWM ON/OFF 설정]
      //{
          if(_GMRCBASIC_PwmRead(기본조정설정_제어기번호(), &(gv->제어기설정.PWM)) != true) { Ide_통신오류알림(); goto lb끝; }

      //}

      //[주기]
      //{
          if(_GMRCBASIC_PeriodRead(기본조정설정_제어기번호(), &(gv->제어기설정.주기)) != true) { Ide_통신오류알림(); goto lb끝; }

      //}

      //[문자열]
      //{
          if(_GMRCBASIC_StringRead(기본조정설정_제어기번호(), gv->제어기설정.문자열) != true) { Ide_통신오류알림(); goto lb끝; }

      //}

      //[시작 각도/속도]
      //{
          if(_GMRCBASIC_StartDegTick8Read(기본조정설정_제어기번호(), gv->제어기설정.시작각도듀티) != true) { Ide_통신오류알림(); goto lb끝; }

          if(_GMRCBASIC_StartSpd8Read(기본조정설정_제어기번호(), gv->제어기설정.시작속도) != true) { Ide_통신오류알림(); goto lb끝; }

      //}

  //}

  //[IDE 에 반영]
  //{
      //[!]{-------------------------------
      //읽어들인 [제어기 설정정보] 를 GUI 에 반영.
      //}----------------------------------

      GMRCCONFIG_IDE_반영(&(gv->제어기설정));

      //[풍선도움말 표시]
      //{
          //[!]{-----------------------------------------------------
          //현재 읽고 GUI 에 반영된 것이 현재 서보상태가 아니라 EEprom 에 저장된
          //설정정보를 보여준 것임을 알려주는 [풍선도움말] 을 버튼 아래에 표시.
          //}--------------------------------------------------------

          if(_GCheckButton_확인_(gui->항목줄.Chk_풍선도움말, NULL, d_읽기) == true)
          {
            _GBalloonBox_설정_(gui->공용풍선도움말,
                              _GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) + 16,
                              _GVmos_Y_(gui->기본틀.GVmos, NULL, d_읽기) + _GVmos_높이_(gui->기본틀.GVmos, NULL, d_읽기),
                              false,
                              "[속도/각도] 는 현재 연결돼 있는 서보 동작 상태가 아니라\r\n"
                              "[제어기] 재기동시 처음 서보에 적용되는 동작 설정 값이며\r\n"
                              "[제어기] 내부 EEprom 에 저장돼 있는 [설정값] 입니다.\r\n"
                              "현재 서보 상태를 보려면 [속도/각도] 항목의 [읽] 버튼을\r\n"
                              "누르면 됩니다."
                             );

          }

      //}

  //}

  lb끝:

  //[이벤트:유효화]{--------------------------------------------
  _GButton_이벤트_MClick_(gui->제어기설정.Btn_읽기, true, d_쓰기);
  //}--------------------------------------------------------

  //[제목:완료]{------------------------------------------------
  _GButton_제목_(gui->제어기설정.Btn_읽기, "제어기 설정읽기", d_쓰기);
  //}---------------------------------------------------------

}

void 제어기설정_Btn_쓰기_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{----------------
  //[2012.07.29.일][수정!!!]-----------------
  //[전용 구조체] 에 저장된 정보를 [제어기] 에 설정.
  //모두 EEprom 을 대상으로 한 정보들.
  //}---------------------------------------

  //[VAR]
  //{
      int  i;

  //}

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

  //[통신 포트 열림 확인]
  //{
      //[!]{---------------------------------------------
      //모두 통신포트가 열려있어야 처리 가능하므로 여기서 한번만 처리.
      //}------------------------------------------------

      if(항목줄_통신포트열림확인() != true) goto lb끝;

  //}

  //[제목:시작]{---------------------------------------
  _GButton_제목_(gui->제어기설정.Btn_쓰기, "...", d_쓰기);
  //}------------------------------------------------

  //[이벤트:무효화]{---------------------------------------------
  _GButton_이벤트_MClick_(gui->제어기설정.Btn_쓰기, false, d_쓰기);
  //}---------------------------------------------------------

  //[영점]
  //{
      for(i = 0; i < 8; i++)
      {
        if(_GMRCBASIC_Pos0TickSet(기본조정설정_제어기번호(), i, gv->제어기설정.영점0도[i]) != true) { Ide_통신오류알림(); goto lb끝; }

        if(_GMRCBASIC_Pos180TickSet(기본조정설정_제어기번호(), i, gv->제어기설정.영점180도[i]) != true) { Ide_통신오류알림(); goto lb끝; }

      }

  //}

  //[A/D 설정]
  //{
      if(_GMRCBASIC_AdSet(기본조정설정_제어기번호(), gv->제어기설정.AD) != true) { Ide_통신오류알림(); goto lb끝; }

  //}

  //[PWM ON/OFF 설정]
  //{
      if(_GMRCBASIC_PwmSet(기본조정설정_제어기번호(), gv->제어기설정.PWM) != true) { Ide_통신오류알림(); goto lb끝; }

  //}

  //[주기]
  //{
      if(_GMRCBASIC_PeriodSet(기본조정설정_제어기번호(), gv->제어기설정.주기) != true) { Ide_통신오류알림(); goto lb끝; }

  //}

  //[문자열]
  //{
      if(_GMRCBASIC_StringSet(기본조정설정_제어기번호(), gv->제어기설정.문자열) != true) { Ide_통신오류알림(); goto lb끝; }

  //}

  //[시작 각도/속도]
  //{
      if(_GMRCBASIC_StartDegTick8Set(기본조정설정_제어기번호(), gv->제어기설정.시작각도듀티) != true) { Ide_통신오류알림(); goto lb끝; }

      if(_GMRCBASIC_StartSpd8Set(기본조정설정_제어기번호(), gv->제어기설정.시작속도) != true) { Ide_통신오류알림(); goto lb끝; }

  //}

  lb끝:

  //[이벤트:유효화]{--------------------------------------------
  _GButton_이벤트_MClick_(gui->제어기설정.Btn_쓰기, true, d_쓰기);
  //}--------------------------------------------------------

  //[제목:완료]{------------------------------------------------
  _GButton_제목_(gui->제어기설정.Btn_쓰기, "제어기 설정쓰기", d_쓰기);
  //}---------------------------------------------------------

}

void 제어기설정_Btn_열기_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{--------------------
  //<*.gmrcconfig> 문서를 열어 [전용 구조체] 에 저장.
  //}-------------------------------------------

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

  //}

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

  //[열기 대화상자]
  //{
      _File_열기대화상자_확장자_("GMRCBASiC 설정문서(*.gmrcconfig)|*.gmrcconfig");
      //_File_열기대화상자_확장자_("*.gmrcconfig|*.gmrcconfig");

      if(_File_열기대화상자_() != true) return;

      //[경로이름확장자] 얻기.
      _File_열기대화상자_문서이름_(경로이름확장자);

  //}

  //[설정문서 정리]
  //{
      //[!]{--------------------
      //전용 구조체에 해당 정보 정리.
      //}-----------------------

      GMRCCONFIG_열기(&(gv->제어기설정), 경로이름확장자);

  //}

  //[IDE 에 반영]
  //{
      //[2012.07.30.월][추가!!!]{------------
      //읽어들인 [제어기 설정정보] 를 GUI 에 반영.
      //}-----------------------------------

      GMRCCONFIG_IDE_반영(&(gv->제어기설정));

      //[풍선도움말 표시]
      //{
          //[!]{-----------------------------------------------------
          //현재 읽고 GUI 에 반영된 것이 현재 서보상태가 아니라 EEprom 에 저장된
          //설정정보를 보여준 것임을 알려주는 [풍선도움말] 을 버튼 아래에 표시.
          //}--------------------------------------------------------

          if(_GCheckButton_확인_(gui->항목줄.Chk_풍선도움말, NULL, d_읽기) == true)
          {
            _GBalloonBox_설정_(gui->공용풍선도움말,
                              _GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) + 16,
                              _GVmos_Y_(gui->기본틀.GVmos, NULL, d_읽기) + _GVmos_높이_(gui->기본틀.GVmos, NULL, d_읽기),
                              false,
                              "현재 보이는 설정은 지금 연 <*.gmrcconfig> 문서 내용 입니다.\r\n"
                              "각 설정부의 [읽] 버튼을 누르면 현재 서보 상태를 볼수 있습니다."
                             );

          }

      //}

  //}

}

void 제어기설정_Btn_저장_이벤트_MClick(void)

{
  //[2012.07.22.일][생성!!!]{---------------------
  //[전용 구조체] 의 내용을 <*.gmrcconfig> 문서로 저장.
  //}--------------------------------------------

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

  //}

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

  //[열기 대화상자]
  //{
      _File_저장대화상자_확장자_("GMRCBASiC 설정문서(*.gmrcconfig)|*.gmrcconfig");
      //_File_저장대화상자_확장자_("*.gmrcconfig|*.gmrcconfig");

      if(_File_저장대화상자_() != true) return;

      //[경로이름확장자] 얻기.
      _File_저장대화상자_문서이름_(경로이름확장자);

  //}

  //[설정문서 정리]
  //{
      //[!]{--------------------
      //전용 구조체에 해당 정보 정리.
      //}-----------------------

      GMRCCONFIG_저장(&(gv->제어기설정), 경로이름확장자);

  //}

}

//----------------------------------------------------------------------------
//[함수]-----------------------------------------------------------------------
//----------------------------------------------------------------------------

void 제어기설정_풍선도움말_사용유무(bool  p사용유무)
{
  //[2012.07.31.화][생성!!!]

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

  _GButton_풍선도움말_(gui->제어기설정.Btn_읽기, p사용유무, d_쓰기);

  _GButton_풍선도움말_(gui->제어기설정.Btn_쓰기, p사용유무, d_쓰기);

  _GButton_풍선도움말_(gui->제어기설정.Btn_열기, p사용유무, d_쓰기);

  _GButton_풍선도움말_(gui->제어기설정.Btn_저장, p사용유무, d_쓰기);

}




