168 lines
4.7 KiB
C++
168 lines
4.7 KiB
C++
|
|
#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<sArenaMenuItemControl> 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<sArenaSubMenu*> 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<sArenaMainMenu*> m_mainMenuList;
|
|
KUIWnd* m_basisYControl; /// y 값이 기준이 되는 컨트롤
|
|
};
|
|
|
|
#pragma pack(pop)
|
|
|
|
#endif
|