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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file LLSideTray.h
  3.  * @brief SideBar header file
  4.  *
  5.  * $LicenseInfo:firstyear=2004&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2004-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLSIDETRAY_H_
  33. #define LL_LLSIDETRAY_H_
  34. #include "llpanel.h"
  35. #include "string"
  36. class LLAccordionCtrl;
  37. class LLSideTrayTab;
  38. // added inheritance from LLDestroyClass<LLSideTray> to enable Side Tray perform necessary actions 
  39. // while disconnecting viewer in LLAppViewer::disconnectViewer().
  40. // LLDestroyClassList::instance().fireCallbacks() calls destroyClass method. See EXT-245.
  41. class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
  42. {
  43. friend class LLUICtrlFactory;
  44. friend class LLDestroyClass<LLSideTray>;
  45. public:
  46. LOG_CLASS(LLSideTray);
  47. struct Params 
  48. : public LLInitParam::Block<Params, LLPanel::Params>
  49. {
  50. // initial state
  51. Optional<bool> collapsed;
  52. Optional<std::string> tab_btn_image_normal;
  53. Optional<std::string> tab_btn_image_selected;
  54. Optional<S32> default_button_width;
  55. Optional<S32> default_button_height;
  56. Optional<S32> default_button_margin;
  57. Params();
  58. };
  59. static LLSideTray* getInstance ();
  60. static bool instanceCreated ();
  61. protected:
  62. LLSideTray(Params& params);
  63. typedef std::vector<LLSideTrayTab*> child_vector_t;
  64. typedef child_vector_t::iterator child_vector_iter_t;
  65. typedef child_vector_t::const_iterator   child_vector_const_iter_t;
  66. typedef child_vector_t::reverse_iterator  child_vector_reverse_iter_t;
  67. typedef child_vector_t::const_reverse_iterator  child_vector_const_reverse_iter_t;
  68. public:
  69. // interface functions
  70.     
  71. /**
  72.      * Select tab with specific name and set it active    
  73.      */
  74. bool  selectTabByName (const std::string& name);
  75. /**
  76.      * Select tab with specific index and set it active    
  77.      */
  78. bool selectTabByIndex(size_t index);
  79. /**
  80.  * Activate tab with "panel_name" panel
  81.  * if no such tab - return NULL, otherwise a pointer to the panel
  82.  * Pass params as array, or they may be overwritten(example - params["name"]="nearby")
  83.  */
  84. LLPanel* showPanel (const std::string& panel_name, const LLSD& params);
  85. /**
  86.  * Toggling Side Tray tab which contains "sub_panel" child of "panel_name" panel.
  87.  * If "sub_panel" is not visible Side Tray is opened to display it,
  88.  * otherwise Side Tray is collapsed.
  89.  * params are passed to "panel_name" panel onOpen().
  90.  */
  91. void togglePanel (LLPanel* &sub_panel, const std::string& panel_name, const LLSD& params);
  92. /*
  93.  * get the panel (don't show it or do anything else with it)
  94.  */
  95.     LLPanel* getPanel (const std::string& panel_name);
  96.     LLPanel* getActivePanel ();
  97.     bool isPanelActive (const std::string& panel_name);
  98. /*
  99.  * get currently active tab
  100.  */
  101.     const LLSideTrayTab* getActiveTab() const { return mActiveTab; }
  102. /*
  103.      * collapse SideBar, hiding visible tab and moving tab buttons
  104.      * to the right corner of the screen
  105.      */
  106. void collapseSideBar ();
  107.     
  108. /*
  109.      * expand SideBar
  110.      */
  111. void expandSideBar ();
  112. /**
  113.  *hightlight if focused. manly copypaste from highlightFocusedFloater
  114.  */
  115. void highlightFocused();
  116. void setVisible(BOOL visible)
  117. {
  118. if (getParent()) getParent()->setVisible(visible);
  119. }
  120. LLPanel* getButtonsPanel() { return mButtonsPanel; }
  121. bool getCollapsed() { return mCollapsed; }
  122. public:
  123. virtual ~LLSideTray(){};
  124.     virtual BOOL postBuild();
  125. void onTabButtonClick(std::string name);
  126. void onToggleCollapse();
  127. bool addChild (LLView* view, S32 tab_group);
  128. BOOL handleMouseDown (S32 x, S32 y, MASK mask);
  129. void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE);
  130. void processTriState ();
  131. void updateSidetrayVisibility();
  132. protected:
  133. LLSideTrayTab* getTab (const std::string& name);
  134. void createButtons ();
  135. LLButton* createButton (const std::string& name,const std::string& image,const std::string& tooltip,
  136. LLUICtrl::commit_callback_t callback);
  137. void arrange ();
  138. void reflectCollapseChange();
  139. void toggleTabButton (LLSideTrayTab* tab);
  140. private:
  141. // Implementation of LLDestroyClass<LLSideTray>
  142. static void destroyClass()
  143. {
  144. // Disable SideTray to avoid crashes. EXT-245
  145. if (LLSideTray::instanceCreated())
  146. LLSideTray::getInstance()->setEnabled(FALSE);
  147. }
  148. private:
  149. LLPanel* mButtonsPanel;
  150. typedef std::map<std::string,LLButton*> button_map_t;
  151. button_map_t mTabButtons;
  152. child_vector_t mTabs;
  153. LLSideTrayTab* mActiveTab;
  154. LLButton* mCollapseButton;
  155. bool mCollapsed;
  156. static LLSideTray* sInstance;
  157. };
  158. #endif