#ifndef _ArenaMenuSystem_h_ #define _ArenaMenuSystem_h_ //#include "SUIWnd.h" #pragma pack(push, 1) /* 아레나의 ui의 메뉴의 항목들은 다른 ui의 항목들과는 다른 시스템으로 되어 있어서 따로 분류를 함 아레나의 메뉴 항목끼리를 같은 시스템이다. sArenaMainMenu1 sArenaMenuItem sArenaSubMenu1 sArenaMenuItem1 sArenaMenuItem2 sArenaMenuItem3 ... sArenaSubMenu2 sArenaSubMenu3 ... sArenaMainMenu2 sArenaMainMenu3 . . . sArenaMenuItem sArenaMenuItemWnd1 sArenaMenuItemWnd2 sArenaMenuItemWnd3 ... */ struct sArenaMenuItemControl { sArenaMenuItemControl(KUIControl* control, int offsetY); KUIControl* m_control; int m_offsetY; }; struct sArenaMenuItem { public: ~sArenaMenuItem(); void addControl(KUIControl* control, int offsetY); void fold(); void unFold(int y); void setShow(bool show); void setEnable(bool enable); void move(int y); private: std::list m_controlList; }; struct sArenaSubMenu { public: sArenaSubMenu() : m_item(NULL), m_nameId(-1) {} ~sArenaSubMenu(); void setItem(sArenaMenuItem* item); void fold(); void unFold(int y); void setEnable(bool enable); char const* getName(); void setNameId(int nameId) { m_nameId = nameId; } void setId(int id) { m_id = id; } int getId() const { return m_id; } private: sArenaMenuItem* m_item; int m_nameId; int m_id; }; struct sArenaMainMenu { public: sArenaMainMenu(); ~sArenaMainMenu(); void setFoldButton(KUIWnd* control); /// item들을 한번에 등록해서 submenu를 추가한다. void addSubMenu(SUIWnd* wnd, int subMenuId, char const* basisControlId, int tooltipStringId, int selectNameStringId, int itemCount, ...); void addSubMenu(sArenaSubMenu* subMenu); void addItemControl(SUIWnd* wnd, char const* basisControlId, int selectStatus, int itemCount, ...); void unfold(int& y); void fold(int& y); void setSelect(int subMenuId, bool select); void setEnableSubMenu(int subMenuId, bool enable); void setEnableFold(bool enable); /// 선택되 폴드 상태에 따라서 m_foldButton의 애니 이름을 맞춘다. void syncFoldButtonAniName(); void setNextMainMenu(sArenaMainMenu* mainMenu) { m_nextMainMenu = mainMenu; } sArenaMainMenu* getNextMainMenu() const { return m_nextMainMenu; } void setFoldButton(KUIControl* control) { m_foldButton = control; } void setId(int id) { m_id = id; } int getId() const { return m_id; } bool isSelected() const { return m_isSelect; } int getSelectSubMenuId() const { return m_selectSubMenuId; } void setSelectSubMenuId(int subMenuId) { m_selectSubMenuId = subMenuId; } void setSelectNameControl(KUIWnd* control) { m_selectNameControl = control; } private: void addItemControl(KUIControl* control, int basisY, int selectStatus); void itemUnFold(int& y); void subMenuUnFold(int& y); void itemFold(int& y); /// submenu의 fold는 hide 기능과 같기 때문에 y값 입력은 필요가 없다. void subMenuFold(); /// fold, unfold, select, 에 따라서 aniname과 enable/disable 상태가 바뀐다 void checkFoldButtonStatus(); /// 선택된 subMenuId의 이름을 갖고와서 설정한다. void setSelectSubMenuName(int subMenuId); sArenaSubMenu* getSubMenu(int subMenuId); public: enum { NONSELECT_ITEM, SELECT_ITEM, COMMON_ITEM, MAX_ITEM }; private: enum { UNFOLD_STATUS, FOLD_STATUS, MAX_FOLD_STATUS }; bool m_isSelect; bool m_isFold; int m_id; sArenaMenuItem m_item[MAX_ITEM]; std::vector m_subMenuList; KUIControl* m_foldButton; KUIWnd* m_selectNameControl; sArenaMainMenu* m_nextMainMenu; int m_selectSubMenuId; }; struct sArenaMenuSystem { public: ~sArenaMenuSystem(); void addMainMenu(sArenaMainMenu* mainMenu); /// mainMenuIndex를 펼치고 다른 메인 메뉴는 접는다. void unfold(int mainMenuId); void allFold(); void setEnableFold(int mainMenuId, bool enable); void setSelect(int mainMenuId, int subMenuId, bool setSelect); void setSelectMenuItem(int mainMenuId, int subMenuId, bool& _isAllSelected); void setEnableMenuItem(int mainMenuId, int subMenuId, bool enable); void setNextUnFold(int mainMenuId); bool isAllSelected() const; bool isSelected(int mainMenuId) const; void initMenu(int unfoldMainMenuId); int getSelectSubMenuId(int mainMenuId) const; void setBasisYControl(KUIWnd* control) { m_basisYControl = control; } private: /// 선택되지 않은 메뉴를 찾아서 unfold해준다 void setUnSelectedToUnFold(); sArenaMainMenu* findMainMenu(int mainMenuId) const; int getBasisY() const; private: std::list m_mainMenuList; KUIWnd* m_basisYControl; /// y 값이 기준이 되는 컨트롤 }; #pragma pack(pop) #endif