#pragma once #ifdef _YMS_TREECONTROL #if WZENGINEVER < 400 #error "Impossible Build!! - Reason: WZENGINEVER < 400!!" #endif //#if WZENGINEVER >= 400 #include "TreeMenuInfoParser.h" #include "TextureListInfoParser.h" #include "ListboxScrollControlProduce.h" //------------------------------------------------------------------------------ class TreeMenuGroup : public ListboxScrollControlProduce { public: class TreeObject; #ifdef _DEBUG typedef std::list TreeObjectList; #else typedef STLX_LIST TreeObjectList; #endif //_DEBUG //! call back ÇÔ¼ö¿¡¼­ ±×¸±¶§ Ã¼Å©ÇØ¼­ ¿øÇÏ´Â ÇüÅ·Π±×¸² enum DataFlag { kDataFlag = (1 << 1), kDataFlag_Notice = (kDataFlag | 1 << 2), kDataFlag_IconBlink = (kDataFlag | 1 << 3), kDataFlag_None = (1<<31), }; class TreeObject { public: TreeObject(); TreeObject(TreeObject* _parent, BASE_TreeMenuInfo* _info, bool _visible, bool _enable, DWORD _data_flag = kDataFlag_None); ~TreeObject(); void add_data_flag(DataFlag e) { data_flag_ |= e; } void remove_data_flag(DataFlag e) { data_flag_ &= (~e); } bool is_notice() { return ((data_flag_ & kDataFlag_Notice) == kDataFlag_Notice); } bool is_icon_blink() { return ((data_flag_ & kDataFlag_IconBlink) == kDataFlag_IconBlink); } //------------------------------------------------------------------------------ TreeObject* parent; bool is_visible; bool is_enable; union { bool is_unfold; //!< BASE_TreeMenuInfo::menu_type == kMenuType_Group À϶§ bool is_check; //!< BASE_TreeMenuInfo::menu_type == kMenuType_CheckButton À϶§ }; BASE_TreeMenuInfo* info; //! ÇÏÀ§ ¸Þ´º TreeObjectList menu_list; private: //DataFlag DWORD data_flag_; }; //------------------------------------------------------------------------------ //! Æ®¸®¸Þ´º¸¦ ±×¸± ±âº» Äݹé ÇÔ¼ö //! Init¿¡¼­ ÄݹéÀ» ³ÖÁö ¾ÊÀ¸¸é ¾Æ·¡ ÇÔ¼ö »ç¿ë static void Callback_TreeRender(CCtrlListWZ* list_control, CCtrlListWZ::CListSellData* sell_data, int sell_index, RECT& render_area); public: TreeMenuGroup(); virtual ~TreeMenuGroup(); //------------------------------------------------------------------------------ //! Returns: bool //! Qualifier: ¸®¸Þ´º ÃʱâÈ­ //! Parameter: BASE_TreeMenuInfo::Group_Type tree_group : TreeMenuInfoParser.txt ÀÇ Group ¹øÈ£ //! Parameter: bool is_simple_menu : ÇÏÀ§ ¸Þ´º(Æú´õ)¸¦ Çϳª¸¸ ¿­°ÔÇÔ //! Parameter: CCtrlListWZ::fn_CallbackListBoxSellDraw fn : ¸Þ´º¸¦ ±×¸±¶§ »ç¿ëÇÒ Äݹé ÇÔ¼ö //! NULL : ±âº» Äݹé»ç¿ë(TreeMenuGroup::Callback_TreeRender) //------------------------------------------------------------------------------ bool Init(BASE_TreeMenuInfo::Group_Type tree_group, CCtrlListWZ* _list_control, CCtrlVScrollWZ* _vscroll_control, bool is_simple_menu, CCtrlListWZ::fn_CallbackListBoxSellDraw fn); bool ApplyTreeGroup(BASE_TreeMenuInfo::Group_Type tree_group); void Release(); //! Æ®¸®³»¿ë¸¸ Áö¿ò void Cleanup(); //------------------------------------------------------------------------------ //! Returns: bool : true : Æ®¸®¸Þ´º¿¡¼­ À̺¥Æ®°¡ 󸮵ǾúÀ»°æ¿ì //! Qualifier: ¸Þ¼¼Áö ó¸® //! Parameter: SI_MESSAGE * msg //! Parameter: OUT TreeObject * & tree_object : ¸Þ´º Ŭ¸¯ÀÌ ÀÏ¾î ³µÀ»¶§ ¼±ÅÃµÈ ¸Þ´º //------------------------------------------------------------------------------ bool MessageProc(SI_MESSAGE* msg, OUT TreeObject*& tree_object); void Fill(); TreeObject* CurrectTreeObject(); TreeObject* OverTreeObject(); TreeObject* Find(DWORD menu_index); TreeObject* Find(BYTE menuidx_1, BYTE menuidx_2, BYTE menuidx_3, BYTE menuidx_4); void set_menu_height_gab(int val); bool is_simple_menu() const { return simple_menu_; } void set_simple_menu(bool val) { simple_menu_ = val; } TreeMenuGroup::TreeObject& root_menu() { return root_menu_; } void set_extend_always( bool val) { extend_always_ = val; } //------------------------------------------------------------------------------ //! Returns: bool //! Qualifier: ÇØ´ç µ¥ÀÌÅͰ¡ ÀÖ´Â ¸®½ºÆ® ¼¿À» ¼±ÅÃÇÑ´Ù. //! Parameter: TreeObject * tree_object //------------------------------------------------------------------------------ bool Select(TreeObject* tree_object); bool Select(); private: void Cleanup(TreeObject& tree_object); bool Insert(TreeObject& tree_object, BASE_TreeMenuInfo* info, int menu_depth); void Fill(TreeObject& tree_object); TreeObject* Find(TreeObject& tree_object, DWORD menu_index); //------------------------------------------------------------------------------ //! Returns: TreeObject* : ¹öư Ŭ¸¯ÀÌ ÀÏ¾î ³µÀ»¶§ ¼±ÅÃµÈ ¸Þ´º ¸®ÅÏ //! Qualifier: ¸®½ºÆ® ¹Ú½º Ŭ¸¯½Ã Æ®¸®¸Þ´º À籸¼º //------------------------------------------------------------------------------ bool OnLButtonClick(SI_MESSAGE* msg, OUT TreeObject*& tree_object); bool OnLButtonDClick(SI_MESSAGE* msg, OUT TreeObject*& tree_object); //------------------------------------------------------------------------------ //! Qualifier: ÀÚ½ÅÀ» Æ÷ÇÔÇÑ ÇÏÀ§Æú´õ ¸ðµÎ ´Ý´Â´Ù. //! Parameter: TreeObject * tree_object //------------------------------------------------------------------------------ void Collapse(TreeObject* tree_object); //------------------------------------------------------------------------------ //! Qualifier: ÀÚ½ÅÀ» Æ÷ÇÔÇÑ ºÎ¸ðÆú´õ ¸ðµÎ ¿¬´Ù. //! Parameter: TreeObject * tree_object //------------------------------------------------------------------------------ void Unfold(TreeObject* tree_object); //! ·çÆ® ¸Þ´º TreeObject root_menu_; //! ÇϳªÀÇ ÇÏÀ§ ¸Þ´º¸¸ ¿­¸®°Ô bool simple_menu_; bool extend_always_; // ÀÌ¹Ì ¿­·ÁÁ® Àִ°æ¿ì Àç Ŭ¸¯½Ã Á¢È÷Áö ¾Êµµ·Ï //! ¸®½ºÆ® ¹Ú½º ¼¿ ±×¸± Äݹé CCtrlListWZ::fn_CallbackListBoxSellDraw callback_listbox_sell_draw_; }; #else // ¿¡·¯ ¾È³ª°Ô ÀÎÅÍÆäÀ̽º¸¸ ¸¸µéÀÚ. #include "TreeMenuInfoParser.h" #include "ListboxScrollControlProduce.h" class TreeMenuGroup : public ListboxScrollControlProduce { public : enum DataFlag { kDataFlag = (1 << 1), kDataFlag_Notice = (kDataFlag | 1 << 2), kDataFlag_IconBlink = (kDataFlag | 1 << 3), kDataFlag_None = (1<<31), }; class TreeObject { public: TreeObject() : info(0) {} void add_data_flag(DataFlag e) { } void remove_data_flag(DataFlag e) { } bool is_notice() { return false; } bool is_icon_blink() { return false; } BASE_TreeMenuInfo* info; }; public: void Release(){} void Cleanup(){} bool MessageProc(SI_MESSAGE* msg, OUT TreeObject*& tree_object){return false;} void Fill(){} TreeObject* CurrectTreeObject(){return NULL;} bool ApplyTreeGroup(BASE_TreeMenuInfo::Group_Type tree_group){ return false; } bool Select(TreeObject* tree_object) { return false; } bool Select() { return false; } TreeObject* Find(DWORD menu_index) { return NULL; } TreeObject* Find(BYTE menuidx_1, BYTE menuidx_2, BYTE menuidx_3, BYTE menuidx_4) { return NULL; } }; #endif //#ifdef _YMS_TREECONTROL