//#--------------------------------------------------------------------------
    // private member function
    //#--------------------------------------------------------------------------

    void AddPlayerCmd(string cmd, int idx)
    {
        // 맨처음 노드는 cmd용 original 탬플릿이다.
        jxE  eCmdGroup;
        bool isReloadGui = false;

        if (idx >= m_scroll_CmdList.m_jxE.size())
        {
            eCmdGroup = m_scroll_CmdList.m_jxE.begin().MakeClone();
            m_scroll_CmdList.m_jxE.InsertChild(eCmdGroup);
            isReloadGui = true;
        }
        else
        {
            eCmdGroup = m_scroll_CmdList.m_jxE.GetChild(idx);
        }

        eCmdGroup.AttrVar("Enable").Set_bool(true);
        jxA a;
        jxE eCmdText = eCmdGroup.FindByAttr("Name", "CmdRun", out a);

        a = eCmdText.AttrVar("Text");
        a.Set_string(cmd);

        if (isReloadGui)
        {
            // jGuiContorl 리로딩.
            jGuiControl ctrl = m_scroll_CmdList.GetStage().CreateRTTI(eCmdGroup);
            jDebug.jASSERT(ctrl != null);
            ctrl.m_isLayouted = m_scroll_CmdList.m_isLayouted;
            ctrl.Load(m_scroll_CmdList.GetStage()
                      , m_scroll_CmdList.GetWindow()
                      , m_scroll_CmdList
                      , eCmdGroup
                      , m_scroll_CmdList.Get_OverrideAttribute());
        }
        else
        {
            jGuiButton btn = (jGuiButton)eCmdText.m_UserData;
            btn.SetText(cmd);
        }
    }
    void OnShowModal_ServerList(jGuiWindow win)     // "ServerList"라는 모달
    {
        jxE eServerList = m_CMD.GetCurrServerList();

        if (eServerList == null)
        {
            m_CMD.LogWarning(m_CMD.m_DefaultServerListName + " is not found in ServerList xml");
            return;
        }

        int iSize = eServerList.size() - m_guiServerList.m_jxE.size();

        if (iSize > 0)        // 다운로드 받은 서버리스트 보다 gui xml의 서버리스트 컨트롤이 적다면 컨트롤 추가.
        {
            for (int i = 0; i < iSize; ++i)
            {
                jxE eServer = m_guiServerList.m_jxE.begin().MakeClone();
                m_guiServerList.m_jxE.InsertChild(eServer);

                // jGuiContorl 리로딩.
                jGuiControl new_ctrl = m_guiServerList.GetStage().CreateRTTI(eServer);
                if (new_ctrl == null)
                {
                    eServer.DebugPrint();
                    throw new System.Exception("CreateRTTI : new_ctrl==null");
                }
                new_ctrl.m_isLayouted = m_guiServerList.m_isLayouted;
                new_ctrl.Load(m_guiServerList.GetStage()
                              , m_guiServerList.GetWindow()
                              , m_guiServerList
                              , eServer
                              , m_guiServerList.Get_OverrideAttribute());
            }
        }
        int idx = 0;

        foreach (jGuiControl gui in m_guiServerList)
        {
            if (idx >= eServerList.size())
            {
                gui.SetEnabled(false);
                continue;
            }
            var    btn    = (jGuiButton)gui.FindCtrl("ServerOk");
            jxE    server = eServerList.GetChild(idx);
            string name   = server.Attr("NAME");
            string text   = name + " " + server.Attr("IP") + ":" + server.AttrVar("PORT").Get_int().ToString();
            var    lbl    = (jGuiLabel)gui.FindCtrl("ServerStatus");
            if (name == m_CMD.m_ServerName)
            {
                lbl.SetText("Selected");
            }
            else
            {
                lbl.SetText("Unkown");
            }

            btn.SetText(text);
            ++idx;
        }
        UpdateServerStatus();
    }