UiChatCentre.h
Upload User: dzyhzl
Upload Date: 2019-04-29
Package Size: 56270k
Code Size: 8k
Development Platform:

C/C++

  1. /*****************************************************************************************
  2. // 界面--聊天主界面
  3. // Copyright : Kingsoft 2003
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2003-3-10
  6. ------------------------------------------------------------------------------------------
  7. *****************************************************************************************/
  8. #pragma once
  9. #include "../Elem/WndShowAnimate.h"
  10. #include "../Elem/WndLabeledButton.h"
  11. #include "../Elem/WndMessageListBox.h"
  12. #include "../Elem/WndScrollBar.h"
  13. #include "../Elem/WndList.h"
  14. #include "../Elem/PopupMenu.h"
  15. #include "../Elem/WndPureTextBtn.h"
  16. #pragma warning( disable : 4786 4800 4355 4146 4273 4503 )
  17. #include <map>
  18. #include <string>
  19. #include <list>
  20. using namespace std;
  21. #define MAX_UNIT_NUM 10
  22. #define MAX_GROUP_NUM 10 //最多允许的好友分组的数目
  23. enum UICHATCENTRE_UPDATE
  24. {
  25. UICC_U_ALL,
  26. UICC_U_GROUP,
  27. UICC_U_FRIEND,
  28. };
  29. typedef std::list<std::string> STRINGLIST;
  30. struct FriendNotify
  31. {
  32. virtual int CreateUnit(const char* Unit) = 0;
  33. virtual int DeleteUnit(const char* Unit) = 0;
  34. virtual int CreateUnitGroup(const char* Unit, const char* Name) = 0;
  35. virtual int RenameUnitGroup(const char* Unit, const char* Name, const char* NewName, const STRINGLIST& friends) = 0;
  36. virtual int DeleteUnitGroup(const char* Unit, const char* Name, const STRINGLIST& friends) = 0;
  37. virtual int MoveUnitGroup(const char* Unit, const char* Name, const char* Name2, const STRINGLIST& friends) = 0;
  38. virtual int CreateUnitMember(const char* Unit, const char* Name, const char* Group) = 0;
  39. virtual int DeleteUnitMember(const char* Unit, const char* Name) = 0;
  40. virtual int MoveUnitMember(const char* Unit, const char* Name, const char* Group) = 0;
  41. virtual int SetUnitMemberStatus(const char* Unit, const char* Name, const char* status) = 0;
  42. };
  43. struct AddinNotify : public FriendNotify
  44. {
  45. virtual int CreateUnit(const char* Unit);
  46. virtual int DeleteUnit(const char* Unit);
  47. virtual int CreateUnitGroup(const char* Unit, const char* Name);
  48. virtual int RenameUnitGroup(const char* Unit, const char* Name, const char* NewName, const STRINGLIST& friends);
  49. virtual int MoveUnitGroup(const char* Unit, const char* Name, const char* Name2, const STRINGLIST& friends);
  50. virtual int DeleteUnitGroup(const char* Unit, const char* Name, const STRINGLIST& friends);
  51. virtual int CreateUnitMember(const char* Unit, const char* Name, const char* Group);
  52. virtual int DeleteUnitMember(const char* Unit, const char* Name);
  53. virtual int MoveUnitMember(const char* Unit, const char* Name, const char* Group);
  54. virtual int SetUnitMemberStatus(const char* Unit, const char* Name, const char* status);
  55. };
  56. struct ServerNotify : public AddinNotify
  57. {
  58. virtual int CreateUnit(const char* Unit);
  59. virtual int RenameUnitGroup(const char* Unit, const char* Name, const char* NewName, const STRINGLIST& friends);
  60. virtual int MoveUnitGroup(const char* Unit, const char* Name, const char* Name2, const STRINGLIST& friends);
  61. virtual int DeleteUnitGroup(const char* Unit, const char* Name, const STRINGLIST& friends);
  62. virtual int DeleteUnitMember(const char* Unit, const char* Name);
  63. virtual int MoveUnitMember(const char* Unit, const char* Name, const char* Group);
  64. void SendSyncData(const char* Unit);
  65. void SendNotifyGroupFriend(const char* Unit, const std::string& group, const STRINGLIST& friends);
  66. void SendNotifyDeleteFriend(const char* Unit, const char* Name);
  67. int m_nRef;
  68. };
  69. struct KUiPlayerItem;
  70. class KUiChatCentre : public KWndShowAnimate
  71. {
  72. public:
  73. //----界面面板统一的接口函数----
  74. static KUiChatCentre* OpenWindow(bool bShow); //打开窗口,返回唯一的一个类对象实例
  75. static KUiChatCentre* GetIfVisible(); //如果窗口正被显示,则返回实例指针
  76. static void CloseWindow(bool bDestroy); //关闭窗口,同时可以选则是否删除对象实例
  77. static void LoadScheme(const char* pScheme);//载入界面方案
  78. static void CreateSeverUnit();
  79. static BOOL LoadPrivateSetting(KIniFile* pFile);
  80. static int SavePrivateSetting(KIniFile* pFile);
  81. static void UpdateData(UICHATCENTRE_UPDATE eFlag,
  82. unsigned int uParam, int nGroupIndex);
  83. static bool IsMyFriend(char* Name);
  84. static bool AddFriendInfo(int nUnitIndex, char* Name, char* group);
  85. static bool FriendStatus(int nUnitIndex, char* Name, BYTE state);
  86. static void DeleteFriend(int nUnitIndex, char* Name, bool bNotify);
  87. static void NewGroup(int nUnitIndex, const char* szGroup);
  88. static void ReplaceGroupName(int nUnitIndex, const char* sz, const char* szGroup);
  89. static void MoveFriendToGroup(int nUnitIndex, const char* Name, const char* group);
  90. static void MoveGroupToGroup(int nUnitIndex, const char* group, const char* group2, bool bDelgroup);
  91. static int FindUnitIndex(const char* unit);
  92. static int FindUnitIndexByRoleNameAtServerUnit(char* roleName);
  93. static int AddAddinUnit(const char* unit, FriendNotify* pNotify);
  94. static int RemoveAddinUnit(const char* unit);
  95. static int FindAddinUnitIndex(const char* unit);
  96. private:
  97. KUiChatCentre();
  98. ~KUiChatCentre() {}
  99. void Initialize(); //初始化
  100. void LoadScheme(class KIniFile* pIni);
  101. int WndProc(unsigned int uMsg, unsigned int uParam, int nParam);//窗口函数
  102. void CancelMenu();
  103. void ClearInterface();
  104. void ClearFriendList();
  105. void ClearUnitData(int nUnit);
  106. void OnClickButton(KWndWindow* pBtn);
  107. void OnSelGroupMenu(int nGroupIndex, int nCmd);
  108. void OnSelFriendMenu(int nFriendIndex, int nCmd);
  109. void OnMoveFriendToGroup(int nFriendIndex, int nNewGroupIndex);
  110. bool OnClickGroupBtn(KWndWindow* pBtn, bool bLeftClick);
  111. void OnScrollList(bool bUp);
  112. void OnSelUnit(int nUnitIndex);
  113. void PopupupGroupMenu(int nGroupIndex);
  114. void PopupFriendMenu(int nFriendIndex);
  115. void PopupSelGroupMenu(int nIndexInMenu);
  116. void PopupSelUnitMenu();
  117. void SendFriendMsg(int nFriendIndex, bool bDBClick);
  118. void UpdateAll(int nGroupIndex);
  119. void UpdateGroup(int nGroupIndex);
  120. void UpdateFriend(KUiPlayerItem* pFriend, int nGroupIndex);
  121. void UpdateInterface();
  122. void PaintWindow(); //绘制窗口
  123. void DragWndSize(int nMoveOffset);
  124. void AdjustSize(int nNumLine);
  125. int PtInWindow(int x, int y); //判断一个点是否在窗口范围内,传入的是绝对坐标
  126. private:
  127. typedef std::map<std::string, std::string> FRIENDINFOLIST;
  128. typedef std::map<std::string, BYTE> FRIENDONLINELIST;
  129. struct GROUPINFO
  130. {
  131. std::string strGroupName;
  132. BYTE nGroupMemberNum;
  133. };
  134. struct FriendUnit
  135. {
  136. std::string m_UnitName;
  137. FRIENDINFOLIST m_FriendMap;
  138. FRIENDONLINELIST m_FriendOnlineMap;
  139. GROUPINFO m_GroupInfo[MAX_GROUP_NUM];
  140. int m_nCurExpandGroup;
  141. int FindGroupIndex(const std::string& str);
  142. FriendNotify* m_pNotify;
  143. };
  144. int m_nCurentFriendUnit;
  145. FriendUnit m_AllFriendUnits[MAX_UNIT_NUM];
  146. int m_nFriendUnitCount;
  147. static ServerNotify ms_SNotify;
  148. static KUiChatCentre* m_pSelf;
  149. private:
  150. KWndImage m_TailImg;
  151. KWndButton m_FindBtn;
  152. KWndButton m_CloseBtn;
  153. KWndButton m_ScrollUpBtn, m_ScrollDownBtn;
  154. KWndPureTextBtn m_UnitBtnFriend;
  155. KWndPureTextBtn m_UnitBtnBrother;
  156. KWndPureTextBtn m_UnitBtnEnemy;
  157. KWndPureTextBtn m_UnitBtnOther;
  158. KWndLabeledButton m_GroupBtn[MAX_GROUP_NUM];
  159. KWndList m_FriendList;
  160. bool m_bValidGroup[MAX_GROUP_NUM];
  161. int m_nNumValidGroup;
  162. bool m_bPopupMenu;
  163. int m_nNumFriendInList;
  164. KUiPlayerItem* m_pFriendList;
  165. unsigned int m_uFriendOffLineColor;
  166. int m_nMaxVisibleLine, m_nMinVisibleLine;
  167. int m_nLineHeight;
  168. int m_nFirstGroupBtnLeft, m_nFirstGroupBtnTop;
  169. int m_nFirstVisibleLine;
  170. int m_nNumVisibleLine;
  171. int m_nTailImgDragOffsetY;
  172. //好友列表背景图
  173. KRUImage m_ListBgImage;
  174. int m_ListBgImgLeft;
  175. int m_ListBgImgTop;
  176. int m_ListBgImgWidth;
  177. int m_ListBgImgHeight;
  178. #define GROUP_MENU_ITEM_COUNT 3
  179. #define FRIEND_MENU_ITEM_COUNT 3
  180. //弹出菜单的内容
  181. char m_GroupMenuData[MENU_DATA_SIZE(GROUP_MENU_ITEM_COUNT)];
  182. char m_FriendMenuData[MENU_DATA_SIZE(FRIEND_MENU_ITEM_COUNT)];
  183. struct KPopupMenuData* m_pSelGrupMenu;
  184. };