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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lllocationinputctrl.h
  3.  * @brief Combobox-like location input control
  4.  *
  5.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2009-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_LLLOCATIONINPUTCTRL_H
  33. #define LL_LLLOCATIONINPUTCTRL_H
  34. #include "llcombobox.h"
  35. #include "lliconctrl.h" // Params
  36. #include "lltextbox.h" // Params
  37. class LLLandmark;
  38. // internals
  39. class LLAddLandmarkObserver;
  40. class LLRemoveLandmarkObserver;
  41. class LLParcelChangeObserver;
  42. class LLMenuGL;
  43. class LLTeleportHistoryItem;
  44. /**
  45.  * Location input control.
  46.  * 
  47.  * @see LLNavigationBar
  48.  */
  49. class LLLocationInputCtrl
  50. : public LLComboBox
  51. {
  52. LOG_CLASS(LLLocationInputCtrl);
  53. friend class LLAddLandmarkObserver;
  54. friend class LLRemoveLandmarkObserver;
  55. friend class LLParcelChangeObserver;
  56. public:
  57. struct Params 
  58. : public LLInitParam::Block<Params, LLComboBox::Params>
  59. {
  60. Optional<LLUIImage*> icon_maturity_general,
  61. icon_maturity_adult,
  62. add_landmark_image_enabled,
  63. add_landmark_image_disabled,
  64. add_landmark_image_hover,
  65. add_landmark_image_selected;
  66. Optional<S32> icon_hpad,
  67. add_landmark_hpad;
  68. Optional<LLButton::Params> add_landmark_button,
  69. for_sale_button,
  70. info_button;
  71. Optional<LLIconCtrl::Params> maturity_icon,
  72. voice_icon,
  73. fly_icon,
  74. push_icon,
  75. build_icon,
  76. scripts_icon,
  77. damage_icon;
  78. Optional<LLTextBox::Params> damage_text;
  79. Params();
  80. };
  81. // LLView interface
  82. /*virtual*/ void setEnabled(BOOL enabled);
  83. /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask);
  84. /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
  85. /*virtual*/ void onFocusReceived();
  86. /*virtual*/ void onFocusLost();
  87. /*virtual*/ void draw();
  88. /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
  89. //========================================================================
  90. // LLUICtrl interface
  91. /*virtual*/ void setFocus(BOOL b);
  92. //========================================================================
  93. // LLComboBox interface
  94. void hideList();
  95. void onTextEntry(LLLineEditor* line_editor);
  96. //========================================================================
  97. LLLineEditor* getTextEntry() const { return mTextEntry; }
  98. void handleLoginComplete();
  99. private:
  100. enum EParcelIcon
  101. {
  102. VOICE_ICON = 0,
  103. FLY_ICON,
  104. PUSH_ICON,
  105. BUILD_ICON,
  106. SCRIPTS_ICON,
  107. DAMAGE_ICON,
  108. ICON_COUNT
  109. };
  110. friend class LLUICtrlFactory;
  111. LLLocationInputCtrl(const Params&);
  112. virtual ~LLLocationInputCtrl();
  113. void focusTextEntry();
  114. /**
  115.  * Changes the "Add landmark" button image
  116.  * depending on whether current parcel has been landmarked.
  117.  */
  118. void enableAddLandmarkButton(bool val);
  119. void refresh();
  120. void refreshLocation();
  121. void refreshParcelIcons();
  122. // Refresh the value in the health percentage text field
  123. void refreshHealth();
  124. void positionMaturityIcon();
  125. void rebuildLocationHistory(std::string filter = "");
  126. bool  findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
  127. void setText(const LLStringExplicit& text);
  128. void updateAddLandmarkButton();
  129. void  updateAddLandmarkTooltip();
  130. void  updateContextMenu();
  131. void updateWidgetlayout();
  132. void changeLocationPresentation();
  133. void onInfoButtonClicked();
  134. void onLocationHistoryLoaded();
  135. void onLocationPrearrange(const LLSD& data);
  136. void  onTextEditorRightClicked(S32 x, S32 y, MASK mask);
  137. void onLandmarkLoaded(LLLandmark* lm);
  138. void onForSaleButtonClicked();
  139. void onAddLandmarkButtonClicked();
  140. void onAgentParcelChange();
  141. // callbacks
  142. bool onLocationContextMenuItemEnabled(const LLSD& userdata);
  143. void  onLocationContextMenuItemClicked(const LLSD& userdata);
  144. void onParcelIconClick(EParcelIcon icon);
  145. LLMenuGL* mLocationContextMenu;
  146. LLButton* mAddLandmarkBtn;
  147. LLButton* mForSaleBtn;
  148. LLButton* mInfoBtn;
  149. S32 mIconHPad; // pad between all icons
  150. S32 mAddLandmarkHPad; // pad to left of landmark star
  151. LLIconCtrl* mMaturityIcon;
  152. LLIconCtrl* mParcelIcon[ICON_COUNT];
  153. LLTextBox* mDamageText;
  154. LLAddLandmarkObserver* mAddLandmarkObserver;
  155. LLRemoveLandmarkObserver* mRemoveLandmarkObserver;
  156. LLParcelChangeObserver* mParcelChangeObserver;
  157. boost::signals2::connection mParcelMgrConnection;
  158. boost::signals2::connection mLocationHistoryConnection;
  159. LLUIImage* mLandmarkImageOn;
  160. LLUIImage* mLandmarkImageOff;
  161. LLUIImage* mIconMaturityGeneral;
  162. LLUIImage* mIconMaturityAdult;
  163. std::string mAddLandmarkTooltip;
  164. std::string mEditLandmarkTooltip;
  165. // this field holds a human-readable form of the location string, it is needed to be able to compare copy-pated value and real location
  166. std::string mHumanReadableLocation;
  167. bool isHumanReadableLocationVisible;
  168. };
  169. #endif