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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llcombobox.h
  3.  * @brief LLComboBox base class
  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. // A control that displays the name of the chosen item, which when clicked
  33. // shows a scrolling box of choices.
  34. #ifndef LL_LLCOMBOBOX_H
  35. #define LL_LLCOMBOBOX_H
  36. #include "llbutton.h"
  37. #include "lluictrl.h"
  38. #include "llctrlselectioninterface.h"
  39. #include "llrect.h"
  40. #include "llscrolllistctrl.h"
  41. #include "lllineeditor.h"
  42. #include <boost/function.hpp>
  43. // Classes
  44. class LLFontGL;
  45. class LLViewBorder;
  46. extern S32 LLCOMBOBOX_HEIGHT;
  47. extern S32 LLCOMBOBOX_WIDTH;
  48. class LLComboBox
  49. : public LLUICtrl, public LLCtrlListInterface
  50. {
  51. public:
  52. typedef enum e_preferred_position
  53. {
  54. ABOVE,
  55. BELOW
  56. } EPreferredPosition;
  57. struct PreferredPositionValues : public LLInitParam::TypeValuesHelper<EPreferredPosition, PreferredPositionValues>
  58. {
  59. static void declareValues();
  60. };
  61. struct ItemParams : public LLInitParam::Block<ItemParams, LLScrollListItem::Params>
  62. {
  63. Optional<std::string> label;
  64. ItemParams();
  65. };
  66. struct Params 
  67. : public LLInitParam::Block<Params, LLUICtrl::Params>
  68. {
  69. Optional<bool> allow_text_entry,
  70. show_text_as_tentative,
  71. allow_new_values;
  72. Optional<S32> max_chars;
  73. Optional<commit_callback_t>  prearrange_callback,
  74. text_entry_callback;
  75. Optional<EPreferredPosition, PreferredPositionValues> list_position;
  76. // components
  77. Optional<LLButton::Params> combo_button;
  78. Optional<LLScrollListCtrl::Params> combo_list;
  79. Optional<LLLineEditor::Params> combo_editor;
  80. Optional<LLButton::Params>          drop_down_button;
  81. Multiple<ItemParams> items;
  82. Params();
  83. };
  84. virtual ~LLComboBox(); 
  85. /*virtual*/ BOOL postBuild();
  86. protected:
  87. friend class LLUICtrlFactory;
  88. LLComboBox(const Params&);
  89. void initFromParams(const Params&);
  90. void prearrangeList(std::string filter = "");
  91. public:
  92. // LLView interface
  93. virtual void onFocusLost();
  94. virtual BOOL handleToolTip(S32 x, S32 y, MASK mask);
  95. virtual BOOL handleKeyHere(KEY key, MASK mask);
  96. virtual BOOL handleUnicodeCharHere(llwchar uni_char);
  97. // LLUICtrl interface
  98. virtual void clear(); // select nothing
  99. virtual void onCommit();
  100. virtual BOOL acceptsTextInput() const { return mAllowTextEntry; }
  101. virtual BOOL isDirty() const; // Returns TRUE if the user has modified this control.
  102. virtual void resetDirty(); // Clear dirty state
  103. virtual void setFocus(BOOL b);
  104. // Selects item by underlying LLSD value, using LLSD::asString() matching.  
  105. // For simple items, this is just the name of the label.
  106. virtual void setValue(const LLSD& value );
  107. // Gets underlying LLSD value for currently selected items.  For simple
  108. // items, this is just the label.
  109. virtual LLSD getValue() const;
  110. void setTextEntry(const LLStringExplicit& text);
  111. LLScrollListItem* add(const std::string& name, EAddPosition pos = ADD_BOTTOM, BOOL enabled = TRUE); // add item "name" to menu
  112. LLScrollListItem* add(const std::string& name, const LLUUID& id, EAddPosition pos = ADD_BOTTOM, BOOL enabled = TRUE);
  113. LLScrollListItem* add(const std::string& name, void* userdata, EAddPosition pos = ADD_BOTTOM, BOOL enabled = TRUE);
  114. LLScrollListItem* add(const std::string& name, LLSD value, EAddPosition pos = ADD_BOTTOM, BOOL enabled = TRUE);
  115. LLScrollListItem* addSeparator(EAddPosition pos = ADD_BOTTOM);
  116. BOOL remove( S32 index ); // remove item by index, return TRUE if found and removed
  117. void removeall() { clearRows(); }
  118. void sortByName(BOOL ascending = TRUE); // Sort the entries in the combobox by name
  119. // Select current item by name using selectItemByLabel.  Returns FALSE if not found.
  120. BOOL setSimple(const LLStringExplicit& name);
  121. // Get name of current item. Returns an empty string if not found.
  122. const std::string getSimple() const;
  123. // Get contents of column x of selected row
  124. const std::string getSelectedItemLabel(S32 column = 0) const;
  125. // Sets the label, which doesn't have to exist in the label.
  126. // This is probably a UI abuse.
  127. void setLabel(const LLStringExplicit& name);
  128. BOOL remove(const std::string& name); // remove item "name", return TRUE if found and removed
  129. BOOL setCurrentByIndex( S32 index );
  130. S32 getCurrentIndex() const;
  131. void createLineEditor(const Params&);
  132. //========================================================================
  133. LLCtrlSelectionInterface* getSelectionInterface() { return (LLCtrlSelectionInterface*)this; };
  134. LLCtrlListInterface* getListInterface() { return (LLCtrlListInterface*)this; };
  135. // LLCtrlListInterface functions
  136. // See llscrolllistctrl.h
  137. virtual S32 getItemCount() const;
  138. // Overwrites the default column (See LLScrollListCtrl for format)
  139. virtual void  addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM);
  140. virtual void  clearColumns();
  141. virtual void setColumnLabel(const std::string& column, const std::string& label);
  142. virtual LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
  143. virtual LLScrollListItem* addSimpleElement(const std::string& value, EAddPosition pos = ADD_BOTTOM, const LLSD& id = LLSD());
  144. virtual void  clearRows();
  145. virtual void  sortByColumn(const std::string& name, BOOL ascending);
  146. // LLCtrlSelectionInterface functions
  147. virtual BOOL getCanSelect() const { return TRUE; }
  148. virtual BOOL selectFirstItem() { return setCurrentByIndex(0); }
  149. virtual BOOL selectNthItem( S32 index ) { return setCurrentByIndex(index); }
  150. virtual BOOL selectItemRange( S32 first, S32 last );
  151. virtual S32 getFirstSelectedIndex() const { return getCurrentIndex(); }
  152. virtual BOOL setCurrentByID( const LLUUID& id );
  153. virtual LLUUID getCurrentID() const; // LLUUID::null if no items in menu
  154. virtual BOOL setSelectedByValue(const LLSD& value, BOOL selected);
  155. virtual LLSD getSelectedValue();
  156. virtual BOOL isSelected(const LLSD& value) const;
  157. virtual BOOL operateOnSelection(EOperation op);
  158. virtual BOOL operateOnAll(EOperation op);
  159. //========================================================================
  160. void* getCurrentUserdata();
  161. void setPrearrangeCallback( commit_callback_t cb ) { mPrearrangeCallback = cb; }
  162. void setTextEntryCallback( commit_callback_t cb ) { mTextEntryCallback = cb; }
  163. void setButtonVisible(BOOL visible);
  164. void onButtonMouseDown();
  165. void onListMouseUp();
  166. void onItemSelected(const LLSD& data);
  167. void onTextCommit(const LLSD& data);
  168. void updateSelection();
  169. virtual void showList();
  170. virtual void hideList();
  171. virtual void onTextEntry(LLLineEditor* line_editor);
  172. protected:
  173. LLButton* mButton;
  174. LLLineEditor* mTextEntry;
  175. LLScrollListCtrl* mList;
  176. EPreferredPosition mListPosition;
  177. LLPointer<LLUIImage> mArrowImage;
  178. LLUIString mLabel;
  179. BOOL mHasAutocompletedText;
  180. private:
  181. BOOL mAllowTextEntry;
  182. BOOL mAllowNewValues;
  183. S32 mMaxChars;
  184. BOOL mTextEntryTentative;
  185. commit_callback_t mPrearrangeCallback;
  186. commit_callback_t mTextEntryCallback;
  187. commit_callback_t mSelectionCallback;
  188. S32                 mLastSelectedIndex;
  189. };
  190. #endif