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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llbutton.h
  3.  * @brief Header for buttons
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-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_LLBUTTON_H
  33. #define LL_LLBUTTON_H
  34. #include "lluuid.h"
  35. #include "llcontrol.h"
  36. #include "lluictrl.h"
  37. #include "v4color.h"
  38. #include "llframetimer.h"
  39. #include "llfontgl.h"
  40. #include "lluiimage.h"
  41. #include "lluistring.h"
  42. //
  43. // Constants
  44. //
  45. // PLEASE please use these "constants" when building your own buttons.
  46. // They are loaded from settings.xml at run time.
  47. extern S32 LLBUTTON_H_PAD;
  48. extern S32 BTN_HEIGHT_SMALL;
  49. extern S32 BTN_HEIGHT;
  50. //
  51. // Helpful functions
  52. //
  53. S32 round_up(S32 grid, S32 value);
  54. class LLUICtrlFactory;
  55. //
  56. // Classes
  57. //
  58. class LLButton
  59. : public LLUICtrl
  60. {
  61. public:
  62. struct Params 
  63. : public LLInitParam::Block<Params, LLUICtrl::Params>
  64. {
  65. // text label
  66. Optional<std::string> label_selected;
  67. Optional<bool> label_shadow;
  68. Optional<bool> auto_resize;
  69. Optional<bool> use_ellipses;
  70. // images
  71. Optional<LLUIImage*> image_unselected,
  72. image_selected,
  73. image_hover_selected,
  74. image_hover_unselected,
  75. image_disabled_selected,
  76. image_disabled,
  77. image_pressed,
  78. image_pressed_selected,
  79. image_overlay;
  80. Optional<std::string> image_overlay_alignment;
  81. // colors
  82. Optional<LLUIColor> label_color,
  83. label_color_selected,
  84. label_color_disabled,
  85. label_color_disabled_selected,
  86. highlight_color,
  87. image_color,
  88. image_color_disabled,
  89. image_overlay_color,
  90. flash_color;
  91. // layout
  92. Optional<S32> pad_right;
  93. Optional<S32> pad_left;
  94. Optional<S32> pad_bottom; // under text label
  95. //image overlay paddings
  96. Optional<S32> image_top_pad;
  97. Optional<S32> image_bottom_pad;
  98. /**
  99.  * Space between image_overlay and label
  100.  */
  101. Optional<S32> imgoverlay_label_space;
  102. // callbacks
  103. Optional<CommitCallbackParam> click_callback, // alias -> commit_callback
  104. mouse_down_callback,
  105. mouse_up_callback,
  106. mouse_held_callback;
  107. // misc
  108. Optional<bool> is_toggle,
  109. scale_image,
  110. commit_on_return;
  111. Optional<F32> hover_glow_amount;
  112. Optional<TimeIntervalParam> held_down_delay;
  113. Params();
  114. };
  115. protected:
  116. friend class LLUICtrlFactory;
  117. LLButton(const Params&);
  118. public:
  119. ~LLButton();
  120. // For backward compatability only
  121. typedef boost::function<void(void*)> button_callback_t;
  122. void addImageAttributeToXML(LLXMLNodePtr node, const std::string& imageName,
  123. const LLUUID& imageID,const std::string& xmlTagName) const;
  124. virtual BOOL handleUnicodeCharHere(llwchar uni_char);
  125. virtual BOOL handleKeyHere(KEY key, MASK mask);
  126. virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
  127. virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
  128. virtual BOOL handleHover(S32 x, S32 y, MASK mask);
  129. virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
  130. virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
  131. virtual void draw();
  132. /*virtual*/ BOOL postBuild();
  133. virtual void onMouseEnter(S32 x, S32 y, MASK mask);
  134. virtual void onMouseLeave(S32 x, S32 y, MASK mask);
  135. virtual void onMouseCaptureLost();
  136. virtual void onCommit();
  137. void setUnselectedLabelColor( const LLColor4& c ) { mUnselectedLabelColor = c; }
  138. void setSelectedLabelColor( const LLColor4& c ) { mSelectedLabelColor = c; }
  139. void setUseEllipses( BOOL use_ellipses ) { mUseEllipses = use_ellipses; }
  140. boost::signals2::connection setClickedCallback( const commit_signal_t::slot_type& cb ); // mouse down and up within button
  141. boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb );
  142. boost::signals2::connection setMouseUpCallback( const commit_signal_t::slot_type& cb ); // mouse up, EVEN IF NOT IN BUTTON
  143. // Passes a 'count' parameter in the commit param payload, i.e. param["count"])
  144. boost::signals2::connection setHeldDownCallback( const commit_signal_t::slot_type& cb ); // Mouse button held down and in button
  145. // *TODO: Deprecate (for backwards compatability only)
  146. boost::signals2::connection setClickedCallback( button_callback_t cb, void* data );
  147. boost::signals2::connection setMouseDownCallback( button_callback_t cb, void* data );
  148. boost::signals2::connection setMouseUpCallback( button_callback_t cb, void* data );
  149. boost::signals2::connection setHeldDownCallback( button_callback_t cb, void* data );
  150. void setHeldDownDelay( F32 seconds, S32 frames = 0) { mHeldDownDelay = seconds; mHeldDownFrameDelay = frames; }
  151. F32 getHeldDownTime() const { return mMouseDownTimer.getElapsedTimeF32(); }
  152. BOOL toggleState();
  153. BOOL getToggleState() const;
  154. void setToggleState(BOOL b);
  155. void setHighlight(bool b);
  156. void setFlashing( BOOL b );
  157. BOOL getFlashing() const { return mFlashing; }
  158. void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
  159. LLFontGL::HAlign getHAlign() const { return mHAlign; }
  160. void setLeftHPad( S32 pad ) { mLeftHPad = pad; }
  161. void setRightHPad( S32 pad ) { mRightHPad = pad; }
  162. void  setImageOverlayTopPad( S32 pad ) { mImageOverlayTopPad = pad; }
  163. S32  getImageOverlayTopPad() const { return mImageOverlayTopPad; }
  164. void  setImageOverlayBottomPad( S32 pad ) { mImageOverlayBottomPad = pad; }
  165. S32  getImageOverlayBottomPad() const { return mImageOverlayBottomPad; }
  166. const std::string getLabelUnselected() const { return wstring_to_utf8str(mUnselectedLabel); }
  167. const std::string getLabelSelected() const { return wstring_to_utf8str(mSelectedLabel); }
  168. void setImageColor(const std::string& color_control);
  169. void setImageColor(const LLColor4& c);
  170. /*virtual*/ void setColor(const LLColor4& c);
  171. void setImages(const std::string &image_name, const std::string &selected_name);
  172. void setDisabledImageColor(const LLColor4& c) { mDisabledImageColor = c; }
  173. void setDisabledSelectedLabelColor( const LLColor4& c ) { mDisabledSelectedLabelColor = c; }
  174. void setImageOverlay(const std::string& image_name, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
  175. void  setImageOverlay(const LLUUID& image_id, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
  176. LLPointer<LLUIImage> getImageOverlay() { return mImageOverlay; }
  177. void            autoResize(); // resize with label of current btn state 
  178. void            resize(LLUIString label); // resize with label input
  179. void setLabel( const LLStringExplicit& label);
  180. virtual BOOL setLabelArg( const std::string& key, const LLStringExplicit& text );
  181. void setLabelUnselected(const LLStringExplicit& label);
  182. void setLabelSelected(const LLStringExplicit& label);
  183. void setDisabledLabelColor( const LLColor4& c ) { mDisabledLabelColor = c; }
  184. void setFont(const LLFontGL *font)
  185. { mGLFont = ( font ? font : LLFontGL::getFontSansSerif()); }
  186. S32 getLastDrawCharsCount() const { return mLastDrawCharsCount; }
  187. void setScaleImage(BOOL scale) { mScaleImage = scale; }
  188. BOOL getScaleImage() const { return mScaleImage; }
  189. void setDropShadowedText(BOOL b) { mDropShadowedText = b; }
  190. void setBorderEnabled(BOOL b) { mBorderEnabled = b; }
  191. void setHoverGlowStrength(F32 strength) { mHoverGlowStrength = strength; }
  192. void setImageUnselected(LLPointer<LLUIImage> image);
  193. void setImageSelected(LLPointer<LLUIImage> image);
  194. void setImageHoverSelected(LLPointer<LLUIImage> image);
  195. void setImageHoverUnselected(LLPointer<LLUIImage> image);
  196. void setImageDisabled(LLPointer<LLUIImage> image);
  197. void setImageDisabledSelected(LLPointer<LLUIImage> image);
  198. void setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
  199. BOOL getCommitOnReturn() const { return mCommitOnReturn; }
  200. static void onHeldDown(void *userdata);  // to be called by gIdleCallbacks
  201. static void toggleFloaterAndSetToggleState(LLUICtrl* ctrl, const LLSD& sdname);
  202. static void setFloaterToggle(LLUICtrl* ctrl, const LLSD& sdname);
  203. static void setDockableFloaterToggle(LLUICtrl* ctrl, const LLSD& sdname);
  204. static void showHelp(LLUICtrl* ctrl, const LLSD& sdname);
  205. void setForcePressedState(bool b) { mForcePressedState = b; }
  206. void  setAutoResize(bool auto_resize) { mAutoResize = auto_resize; }
  207. protected:
  208. LLPointer<LLUIImage> getImageUnselected() const { return mImageUnselected; }
  209. LLPointer<LLUIImage> getImageSelected() const { return mImageSelected; }
  210. LLFrameTimer mMouseDownTimer;
  211. private:
  212. void drawBorder(LLUIImage* imagep, const LLColor4& color, S32 size);
  213. void resetMouseDownTimer();
  214. private:
  215. commit_signal_t*  mMouseDownSignal;
  216. commit_signal_t*  mMouseUpSignal;
  217. commit_signal_t*  mHeldDownSignal;
  218. const LLFontGL* mGLFont;
  219. S32 mMouseDownFrame;
  220. S32  mMouseHeldDownCount;  // Counter for parameter passed to held-down callback
  221. F32 mHeldDownDelay; // seconds, after which held-down callbacks get called
  222. S32 mHeldDownFrameDelay; // frames, after which held-down callbacks get called
  223. S32 mLastDrawCharsCount;
  224. LLPointer<LLUIImage> mImageOverlay;
  225. LLFontGL::HAlign mImageOverlayAlignment;
  226. LLUIColor mImageOverlayColor;
  227. LLPointer<LLUIImage> mImageUnselected;
  228. LLUIString mUnselectedLabel;
  229. LLUIColor mUnselectedLabelColor;
  230. LLPointer<LLUIImage> mImageSelected;
  231. LLUIString mSelectedLabel;
  232. LLUIColor mSelectedLabelColor;
  233. LLPointer<LLUIImage> mImageHoverSelected;
  234. LLPointer<LLUIImage> mImageHoverUnselected;
  235. LLPointer<LLUIImage> mImageDisabled;
  236. LLUIColor mDisabledLabelColor;
  237. LLPointer<LLUIImage> mImageDisabledSelected;
  238. LLUIString mDisabledSelectedLabel;
  239. LLUIColor mDisabledSelectedLabelColor;
  240. LLPointer<LLUIImage> mImagePressed;
  241. LLPointer<LLUIImage> mImagePressedSelected;
  242. LLUIColor mHighlightColor;
  243. LLUIColor mFlashBgColor;
  244. LLUIColor mImageColor;
  245. LLUIColor mDisabledImageColor;
  246. BOOL mIsToggle;
  247. BOOL mScaleImage;
  248. BOOL mDropShadowedText;
  249. BOOL mAutoResize;
  250. BOOL mUseEllipses;
  251. BOOL mBorderEnabled;
  252. BOOL mFlashing;
  253. LLFontGL::HAlign mHAlign;
  254. S32 mLeftHPad;
  255. S32 mRightHPad;
  256. S32 mBottomVPad; // under text label
  257. S32 mImageOverlayTopPad;
  258. S32 mImageOverlayBottomPad;
  259. /*
  260.  * Space between image_overlay and label
  261.  */
  262. S32 mImgOverlayLabelSpace;
  263. F32 mHoverGlowStrength;
  264. F32 mCurGlowStrength;
  265. BOOL mNeedsHighlight;
  266. BOOL mCommitOnReturn;
  267. BOOL mFadeWhenDisabled;
  268. bool mForcePressedState;
  269. LLFrameTimer mFlashingTimer;
  270. };
  271. // Build time optimization, generate once in .cpp file
  272. #ifndef LLBUTTON_CPP
  273. extern template class LLButton* LLView::getChild<class LLButton>(
  274. const std::string& name, BOOL recurse) const;
  275. #endif
  276. #endif  // LL_LLBUTTON_H