llbottomtray.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:7k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2. * @file llbottomtray.h
  3. * @brief LLBottomTray class header file
  4. *
  5. * $LicenseInfo:firstyear=2009&license=viewergpl$
  6. * Copyright (c) 2009-2010, Linden Research, Inc.
  7. * Second Life Viewer Source Code
  8. * The source code in this file ("Source Code") is provided by Linden Lab
  9. * to you under the terms of the GNU General Public License, version 2.0
  10. * ("GPL"), unless you have obtained a separate licensing agreement
  11. * ("Other License"), formally executed by you and Linden Lab.  Terms of
  12. * the GPL can be found in doc/GPL-license.txt in this distribution, or
  13. * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  14. * There are special exceptions to the terms and conditions of the GPL as
  15. * it is applied to this Source Code. View the full text of the exception
  16. * in the file doc/FLOSS-exception.txt in this software distribution, or
  17. * online at
  18. * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  19. * By copying, modifying or distributing this software, you acknowledge
  20. * that you have read and understood your obligations described above,
  21. * and agree to abide by those obligations.
  22. * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  23. * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  24. * COMPLETENESS OR PERFORMANCE.
  25. * $/LicenseInfo$
  26. */
  27. #ifndef LL_LLBOTTOMPANEL_H
  28. #define LL_LLBOTTOMPANEL_H
  29. #include "llmenugl.h"
  30. #include "llpanel.h"
  31. #include "llimview.h"
  32. #include "llcombobox.h"
  33. class LLChicletPanel;
  34. class LLLineEditor;
  35. class LLLayoutStack;
  36. class LLNotificationChiclet;
  37. class LLSpeakButton;
  38. class LLNearbyChatBar;
  39. class LLIMChiclet;
  40. class LLBottomTrayLite;
  41. // Build time optimization, generate once in .cpp file
  42. #ifndef LLBOTTOMTRAY_CPP
  43. extern template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();
  44. #endif
  45. class LLBottomTray 
  46. : public LLSingleton<LLBottomTray>
  47. , public LLPanel
  48. , public LLIMSessionObserver
  49. , public LLVoiceClientStatusObserver
  50. {
  51. LOG_CLASS(LLBottomTray);
  52. friend class LLSingleton<LLBottomTray>;
  53. friend class LLBottomTrayLite;
  54. public:
  55. ~LLBottomTray();
  56. BOOL postBuild();
  57. LLChicletPanel* getChicletPanel() {return mChicletPanel;}
  58. LLNearbyChatBar* getNearbyChatBar();
  59. void onCommitGesture(LLUICtrl* ctrl);
  60. // LLIMSessionObserver observe triggers
  61. virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id);
  62. virtual void sessionRemoved(const LLUUID& session_id);
  63. void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
  64. S32 getTotalUnreadIMCount();
  65. virtual void reshape(S32 width, S32 height, BOOL called_from_parent);
  66. virtual void setVisible(BOOL visible);
  67. // Implements LLVoiceClientStatusObserver::onChange() to enable the speak
  68. // button when voice is available
  69. /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
  70. void showBottomTrayContextMenu(S32 x, S32 y, MASK mask);
  71. void showGestureButton(BOOL visible);
  72. void showMoveButton(BOOL visible);
  73. void showCameraButton(BOOL visible);
  74. void showSnapshotButton(BOOL visible);
  75. void toggleMovementControls();
  76. void toggleCameraControls();
  77. void onMouselookModeIn();
  78. void onMouselookModeOut();
  79. /**
  80.  * Creates IM Chiclet based on session type (IM chat or Group chat)
  81.  */
  82. LLIMChiclet* createIMChiclet(const LLUUID& session_id);
  83. private:
  84. typedef enum e_resize_status_type
  85. {
  86.   RS_NORESIZE = 0x0000
  87. , RS_CHICLET_PANEL = 0x0001
  88. , RS_CHATBAR_INPUT = 0x0002
  89. , RS_BUTTON_SNAPSHOT = 0x0004
  90. , RS_BUTTON_CAMERA = 0x0008
  91. , RS_BUTTON_MOVEMENT = 0x0010
  92. , RS_BUTTON_GESTURES = 0x0020
  93. , RS_BUTTON_SPEAK = 0x0040
  94. /**
  95.  * Specifies buttons which can be hidden when bottom tray is shrunk.
  96.  * They are: Gestures, Movement (Move), Camera (View), Snapshot
  97.  */
  98. , RS_BUTTONS_CAN_BE_HIDDEN = RS_BUTTON_SNAPSHOT | RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES
  99. }EResizeState;
  100. S32 processWidthDecreased(S32 delta_width);
  101. void processWidthIncreased(S32 delta_width);
  102. void log(LLView* panel, const std::string& descr);
  103. bool processShowButton(EResizeState shown_object_type, S32* available_width);
  104. void processHideButton(EResizeState processed_object_type, S32* required_width, S32* buttons_freed_width);
  105. /**
  106.  * Shrinks shown buttons to reduce total taken space.
  107.  *
  108.  * @param - required_width - width which buttons can use to be shrunk. It is a negative value.
  109.  * It is increased on the value processed by buttons.
  110.  */
  111. void processShrinkButtons(S32* required_width, S32* buttons_freed_width);
  112. void processShrinkButton(EResizeState processed_object_type, S32* required_width);
  113. /**
  114.  * Extends shown buttons to increase total taken space.
  115.  *
  116.  * @param - available_width - width which buttons can use to be extended. It is a positive value.
  117.  * It is decreased on the value processed by buttons.
  118.  */
  119. void processExtendButtons(S32* available_width);
  120. void processExtendButton(EResizeState processed_object_type, S32* available_width);
  121. /**
  122.  * Determines if specified by type object can be shown. It should be hidden by shrink before.
  123.  *
  124.  * Processes buttons a such way to show buttons in constant order:
  125.  *   - Gestures, Move, View, Snapshot
  126.  */
  127. bool canButtonBeShown(EResizeState processed_object_type) const;
  128. void initStateProcessedObjectMap();
  129. /**
  130.  * Sets passed visibility to object specified by resize type.
  131.  */
  132. void setTrayButtonVisible(EResizeState shown_object_type, bool visible);
  133. /**
  134.  * Sets passed visibility to object specified by resize type if it is possible.
  135.  *
  136.  * If it is impossible to show required button due to there is no enough room in bottom tray
  137.  * it will no be shown. Is called via context menu commands.
  138.  * In this case Alert Dialog will be shown to notify user about that.
  139.  *
  140.  * Method also stores resize state to be processed while future bottom tray extending:
  141.  *  - if hidden while resizing button should be hidden it will not be shown while extending;
  142.  *  - if hidden via context menu button should be shown but there is no enough room for now
  143.  *    it will be shown while extending.
  144.  */
  145. void setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification = true);
  146. /**
  147.  * Sets passed visibility to required button and fit widths of shown
  148.  * buttons(notice that method can shrink widths to
  149.  * allocate needed room in bottom tray).
  150.  * Returns true if visibility of required button was set.
  151.  */
  152. bool setVisibleAndFitWidths(EResizeState object_type, bool visible);
  153. MASK mResizeState;
  154. typedef std::map<EResizeState, LLPanel*> state_object_map_t;
  155. state_object_map_t mStateProcessedObjectMap;
  156. typedef std::map<EResizeState, S32> state_object_width_map_t;
  157. state_object_width_map_t mObjectDefaultWidthMap;
  158. typedef std::map<EResizeState, LLUICtrl*> dummies_map_t;
  159. dummies_map_t mDummiesMap;
  160. protected:
  161. LLBottomTray(const LLSD& key = LLSD());
  162. void onChicletClick(LLUICtrl* ctrl);
  163. static void* createNearbyChatBar(void* userdata);
  164. void updateContextMenu(S32 x, S32 y, MASK mask);
  165. void onContextMenuItemClicked(const LLSD& userdata);
  166. bool onContextMenuItemEnabled(const LLSD& userdata);
  167. LLChicletPanel*  mChicletPanel;
  168. LLPanel* mSpeakPanel;
  169. LLSpeakButton*  mSpeakBtn;
  170. LLNearbyChatBar* mNearbyChatBar;
  171. LLLayoutStack* mToolbarStack;
  172. LLMenuGL* mBottomTrayContextMenu;
  173. LLPanel* mMovementPanel;
  174. LLPanel* mCamPanel;
  175. LLPanel* mSnapshotPanel;
  176. LLPanel* mGesturePanel;
  177. LLButton* mCamButton;
  178. LLButton* mMovementButton;
  179. LLBottomTrayLite*   mBottomTrayLite;
  180. bool                mIsInLiteMode;
  181. };
  182. #endif // LL_LLBOTTOMPANEL_H