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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llpanel.h
  3.  * @author James Cook, Tom Yedwab
  4.  * @brief LLPanel base class
  5.  *
  6.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2001-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LL_LLPANEL_H
  34. #define LL_LLPANEL_H
  35. #include "llcallbackmap.h"
  36. #include "lluictrl.h"
  37. #include "llviewborder.h"
  38. #include "lluistring.h"
  39. #include "v4color.h"
  40. #include <list>
  41. #include <queue>
  42. const S32 LLPANEL_BORDER_WIDTH = 1;
  43. const BOOL BORDER_YES = TRUE;
  44. const BOOL BORDER_NO = FALSE;
  45. class LLButton;
  46. class LLUIImage;
  47. /*
  48.  * General purpose concrete view base class.
  49.  * Transparent or opaque,
  50.  * With or without border,
  51.  * Can contain LLUICtrls.
  52.  */
  53. class LLPanel : public LLUICtrl
  54. {
  55. public:
  56. struct LocalizedString : public LLInitParam::Block<LocalizedString>
  57. {
  58. Mandatory<std::string> name;
  59. Mandatory<std::string> value;
  60. LocalizedString();
  61. };
  62. struct Params 
  63. : public LLInitParam::Block<Params, LLUICtrl::Params>
  64. {
  65. Optional<bool> has_border;
  66. Optional<LLViewBorder::Params> border;
  67. Optional<bool> background_visible,
  68. background_opaque;
  69. Optional<LLUIColor> bg_opaque_color,
  70. bg_alpha_color;
  71. // opaque image is for "panel in foreground" look
  72. Optional<LLUIImage*> bg_opaque_image,
  73. bg_alpha_image;
  74. Optional<S32> min_width,
  75. min_height;
  76. Optional<std::string> filename;
  77. Optional<std::string> class_name;
  78. Optional<std::string>   help_topic;
  79. Multiple<LocalizedString> strings;
  80. Optional<CommitCallbackParam> visible_callback;
  81. Params();
  82. };
  83. // valid children for LLPanel are stored in this registry
  84. typedef LLDefaultChildRegistry child_registry_t;
  85. protected:
  86. friend class LLUICtrlFactory;
  87. // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8
  88. static const LLPanel::Params& getDefaultParams();
  89. // Panels can get constructed directly
  90. LLPanel(const LLPanel::Params& params = getDefaultParams());
  91. public:
  92. //  LLPanel(const std::string& name, const LLRect& rect = LLRect(), BOOL bordered = TRUE);
  93. /*virtual*/ ~LLPanel();
  94. // LLView interface
  95. /*virtual*/ BOOL  isPanel() const;
  96. /*virtual*/ void draw();
  97. /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask );
  98. /*virtual*/ void  handleVisibilityChange ( BOOL new_visibility );
  99. // From LLFocusableElement
  100. /*virtual*/ void setFocus( BOOL b );
  101. // New virtuals
  102. virtual  void refresh(); // called in setFocus()
  103. virtual  void clearCtrls(); // overridden in LLPanelObject and LLPanelVolume
  104. // Border controls
  105. void addBorder( LLViewBorder::Params p);
  106. void addBorder();
  107. void removeBorder();
  108. BOOL hasBorder() const { return mBorder != NULL; }
  109. void setBorderVisible( BOOL b );
  110. void setBackgroundColor( const LLColor4& color ) { mBgOpaqueColor = color; }
  111. const LLColor4& getBackgroundColor() const { return mBgOpaqueColor; }
  112. void setTransparentColor(const LLColor4& color) { mBgAlphaColor = color; }
  113. const LLColor4& getTransparentColor() const { return mBgAlphaColor; }
  114. LLPointer<LLUIImage> getBackgroundImage() const { return mBgOpaqueImage; }
  115. LLPointer<LLUIImage> getTransparentImage() const { return mBgAlphaImage; }
  116. void setBackgroundVisible( BOOL b ) { mBgVisible = b; }
  117. BOOL isBackgroundVisible() const { return mBgVisible; }
  118. void setBackgroundOpaque(BOOL b) { mBgOpaque = b; }
  119. BOOL isBackgroundOpaque() const { return mBgOpaque; }
  120. void setDefaultBtn(LLButton* btn = NULL);
  121. void setDefaultBtn(const std::string& id);
  122. void updateDefaultBtn();
  123. void setLabel(const LLStringExplicit& label) { mLabel = label; }
  124. std::string getLabel() const { return mLabel; }
  125. void setHelpTopic(const std::string& help_topic) { mHelpTopic = help_topic; }
  126. std::string getHelpTopic() const { return mHelpTopic; }
  127. void setCtrlsEnabled(BOOL b);
  128. LLHandle<LLPanel> getHandle() const { return mPanelHandle; }
  129. const LLCallbackMap::map_t& getFactoryMap() const { return mFactoryMap; }
  130. CommitCallbackRegistry::ScopedRegistrar& getCommitCallbackRegistrar() { return mCommitCallbackRegistrar; }
  131. EnableCallbackRegistry::ScopedRegistrar& getEnableCallbackRegistrar() { return mEnableCallbackRegistrar; }
  132. void initFromParams(const Params& p);
  133. BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
  134. bool hasString(const std::string& name);
  135. std::string getString(const std::string& name, const LLStringUtil::format_map_t& args) const;
  136. std::string getString(const std::string& name) const;
  137. // ** Wrappers for setting child properties by name ** -TomY
  138. // LLView
  139. void childSetVisible(const std::string& name, bool visible);
  140. void childShow(const std::string& name) { childSetVisible(name, true); }
  141. void childHide(const std::string& name) { childSetVisible(name, false); }
  142. bool childIsVisible(const std::string& id) const;
  143. void childSetTentative(const std::string& name, bool tentative);
  144. void childSetEnabled(const std::string& name, bool enabled);
  145. void childEnable(const std::string& name) { childSetEnabled(name, true); }
  146. void childDisable(const std::string& name) { childSetEnabled(name, false); };
  147. bool childIsEnabled(const std::string& id) const;
  148. void childSetToolTip(const std::string& id, const std::string& msg);
  149. void childSetRect(const std::string& id, const LLRect &rect);
  150. bool childGetRect(const std::string& id, LLRect& rect) const;
  151. // LLUICtrl
  152. void childSetFocus(const std::string& id, BOOL focus = TRUE);
  153. BOOL childHasFocus(const std::string& id);
  154. // *TODO: Deprecate; for backwards compatability only:
  155. // Prefer getChild<LLUICtrl>("foo")->setCommitCallback(boost:bind(...)),
  156. // which takes a generic slot.  Or use mCommitCallbackRegistrar.add() with
  157. // a named callback and reference it in XML.
  158. void childSetCommitCallback(const std::string& id, boost::function<void (LLUICtrl*,void*)> cb, void* data);
  159. void childSetValidate(const std::string& id, boost::function<bool (const LLSD& data)> cb );
  160. void childSetColor(const std::string& id, const LLColor4& color);
  161. LLCtrlSelectionInterface* childGetSelectionInterface(const std::string& id) const;
  162. LLCtrlListInterface* childGetListInterface(const std::string& id) const;
  163. LLCtrlScrollInterface* childGetScrollInterface(const std::string& id) const;
  164. // This is the magic bullet for data-driven UI
  165. void childSetValue(const std::string& id, LLSD value);
  166. LLSD childGetValue(const std::string& id) const;
  167. // For setting text / label replacement params, e.g. "Hello [NAME]"
  168. // Not implemented for all types, defaults to noop, returns FALSE if not applicaple
  169. BOOL childSetTextArg(const std::string& id, const std::string& key, const LLStringExplicit& text);
  170. BOOL childSetLabelArg(const std::string& id, const std::string& key, const LLStringExplicit& text);
  171. BOOL childSetToolTipArg(const std::string& id, const std::string& key, const LLStringExplicit& text);
  172. // LLTabContainer
  173. void childShowTab(const std::string& id, const std::string& tabname, bool visible = true);
  174. LLPanel *childGetVisibleTab(const std::string& id) const;
  175. // Find a child with a nonempty Help topic 
  176. LLPanel *childGetVisibleTabWithHelp();
  177. LLPanel *childGetVisiblePanelWithHelp();
  178. // LLTextBox/LLTextEditor/LLLineEditor
  179. void childSetText(const std::string& id, const LLStringExplicit& text) { childSetValue(id, LLSD(text)); }
  180. // *NOTE: Does not return text from <string> tags, use getString()
  181. std::string childGetText(const std::string& id) const { return childGetValue(id).asString(); }
  182. // LLLineEditor
  183. void childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) );
  184. // LLButton
  185. void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value = NULL);
  186. // LLTextBox
  187. void childSetActionTextbox(const std::string& id, boost::function<void(void*)> function, void* value = NULL);
  188. void childSetControlName(const std::string& id, const std::string& control_name);
  189. static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
  190. //call onOpen to let panel know when it's about to be shown or activated
  191. virtual void onOpen(const LLSD& key) {}
  192. void setXMLFilename(std::string filename) { mXMLFilename = filename; };
  193. std::string getXMLFilename() { return mXMLFilename; };
  194. boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb );
  195. protected:
  196. // Override to set not found list
  197. LLButton* getDefaultButton() { return mDefaultBtn; }
  198. LLCallbackMap::map_t mFactoryMap;
  199. CommitCallbackRegistry::ScopedRegistrar mCommitCallbackRegistrar;
  200. EnableCallbackRegistry::ScopedRegistrar mEnableCallbackRegistrar;
  201. commit_signal_t* mVisibleSignal; // Called when visibility changes, passes new visibility as LLSD()
  202. std::string mHelpTopic;         // the name of this panel's help topic to display in the Help Viewer
  203. private:
  204. BOOL mBgVisible; // any background at all?
  205. BOOL mBgOpaque; // use opaque color or image
  206. LLUIColor mBgOpaqueColor;
  207. LLUIColor mBgAlphaColor;
  208. LLPointer<LLUIImage> mBgOpaqueImage; // "panel in front" look
  209. LLPointer<LLUIImage> mBgAlphaImage; // "panel in back" look
  210. LLViewBorder* mBorder;
  211. LLButton* mDefaultBtn;
  212. LLUIString mLabel;
  213. LLRootHandle<LLPanel> mPanelHandle;
  214. typedef std::map<std::string, std::string> ui_string_map_t;
  215. ui_string_map_t mUIStrings;
  216. // for setting the xml filename when building panel in context dependent cases
  217. std::string mXMLFilename;
  218. }; // end class LLPanel
  219. // Build time optimization, generate once in .cpp file
  220. #ifndef LLPANEL_CPP
  221. extern template class LLPanel* LLView::getChild<class LLPanel>(
  222. const std::string& name, BOOL recurse) const;
  223. #endif
  224. #endif