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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file   llviewmodel.h
  3.  * @author Nat Goodspeed
  4.  * @date   2008-08-08
  5.  * @brief  Define "View Model" classes intended to store data values for use
  6.  *         by LLUICtrl subclasses. The phrase is borrowed from Microsoft
  7.  *         terminology, in which "View Model" means the storage object
  8.  *         underlying a specific widget object -- as in our case -- rather
  9.  *         than the business "model" object underlying the overall "view"
  10.  *         presented by the collection of widgets.
  11.  * 
  12.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  13.  * 
  14.  * Copyright (c) 2008-2010, Linden Research, Inc.
  15.  * 
  16.  * Second Life Viewer Source Code
  17.  * The source code in this file ("Source Code") is provided by Linden Lab
  18.  * to you under the terms of the GNU General Public License, version 2.0
  19.  * ("GPL"), unless you have obtained a separate licensing agreement
  20.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  21.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  22.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  23.  * 
  24.  * There are special exceptions to the terms and conditions of the GPL as
  25.  * it is applied to this Source Code. View the full text of the exception
  26.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  27.  * online at
  28.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  29.  * 
  30.  * By copying, modifying or distributing this software, you acknowledge
  31.  * that you have read and understood your obligations described above,
  32.  * and agree to abide by those obligations.
  33.  * 
  34.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  35.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  36.  * COMPLETENESS OR PERFORMANCE.
  37.  * $/LicenseInfo$
  38.  */
  39. #if ! defined(LL_LLVIEWMODEL_H)
  40. #define LL_LLVIEWMODEL_H
  41. #include "llpointer.h"
  42. #include "llsd.h"
  43. #include "llrefcount.h"
  44. #include "stdenums.h"
  45. #include "llstring.h"
  46. #include <string>
  47. class LLScrollListItem;
  48. class LLViewModel;
  49. class LLTextViewModel;
  50. class LLListViewModel;
  51. // Because LLViewModel is derived from LLRefCount, always pass, store
  52. // and return LLViewModelPtr rather than plain LLViewModel*.
  53. typedef LLPointer<LLViewModel> LLViewModelPtr;
  54. typedef LLPointer<LLTextViewModel> LLTextViewModelPtr;
  55. typedef LLPointer<LLListViewModel> LLListViewModelPtr;
  56. /**
  57.  * LLViewModel stores a scalar LLSD data item, the current display value of a
  58.  * scalar LLUICtrl widget. LLViewModel subclasses are used to store data
  59.  * collections used for aggregate widgets. LLViewModel is ref-counted because
  60.  * -- for multiple skins -- we may have distinct widgets sharing the same
  61.  * LLViewModel data. This way, the LLViewModel is quietly deleted when the
  62.  * last referencing widget is destroyed.
  63.  */
  64. class LLViewModel: public LLRefCount
  65. {
  66. public:
  67.     LLViewModel();
  68.     /// Instantiate an LLViewModel with an existing data value
  69.     LLViewModel(const LLSD& value);
  70.     /// Update the stored value
  71.     virtual void setValue(const LLSD& value);
  72.     /// Get the stored value, in appropriate type.
  73.     virtual LLSD getValue() const;
  74.     /// Has the value been changed since last time we checked?
  75.     bool isDirty() const { return mDirty; }
  76.     /// Once the value has been saved to a file, or otherwise consumed by the
  77.     /// app, we no longer need to enable the Save button
  78.     void resetDirty() { mDirty = false; }
  79. // 
  80.     void setDirty() { mDirty = true; }
  81. protected:
  82.     LLSD mValue;
  83.     bool mDirty;
  84. };
  85. /**
  86.  * LLTextViewModel stores a value displayed as text. 
  87.  */
  88. class LLTextViewModel: public LLViewModel
  89. {
  90. public:
  91.     LLTextViewModel();
  92.     /// Instantiate an LLViewModel with an existing data value
  93.     LLTextViewModel(const LLSD& value);
  94. // LLViewModel functions
  95.     virtual void setValue(const LLSD& value);
  96.     virtual LLSD getValue() const;
  97. // New functions
  98.     /// Get the stored value in string form
  99.     const LLWString& getDisplay() const { return mDisplay; }
  100.     /**
  101.      * Set the display string directly (see LLTextEditor). What the user is
  102.      * editing is actually the LLWString value rather than the underlying
  103.      * UTF-8 value.
  104.      */
  105.     void setDisplay(const LLWString& value);
  106. private:
  107.     /// To avoid converting every widget's stored value from LLSD to LLWString
  108.     /// every frame, cache the converted value
  109.     LLWString mDisplay;
  110.     /// As the user edits individual characters (setDisplay()), defer
  111.     /// LLWString-to-UTF8 conversions until s/he's done.
  112.     bool mUpdateFromDisplay;
  113. };
  114. /**
  115.  * LLListViewModel stores a list of data items. The semantics are borrowed
  116.  * from LLScrollListCtrl.
  117.  */
  118. class LLListViewModel: public LLViewModel
  119. {
  120. public:
  121.     LLListViewModel() {}
  122.     LLListViewModel(const LLSD& values);
  123.     virtual void addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM);
  124.     virtual void clearColumns();
  125.     virtual void setColumnLabel(const std::string& column, const std::string& label);
  126.     virtual LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM,
  127.                                          void* userdata = NULL);
  128.     virtual LLScrollListItem* addSimpleElement(const std::string& value, EAddPosition pos,
  129.                                                const LLSD& id);
  130.     virtual void clearRows();
  131.     virtual void sortByColumn(const std::string& name, bool ascending);
  132. };
  133. //namespace LLViewModel
  134. //{
  135. // class Value
  136. // {
  137. // public:
  138. // Value(const LLSD& value = LLSD());
  139. //
  140. // LLSD getValue() const { return mValue; }
  141. // void setValue(const LLSD& value) { mValue = value; }
  142. //
  143. // bool isAvailable() const { return false; }
  144. // bool isReadOnly() const { return false; }
  145. //
  146. // bool undo() { return false; }
  147. // bool redo() { return false; }
  148. //
  149. //     /// Has the value been changed since last time we checked?
  150. // bool isDirty() const { return mDirty; }
  151. // /// Once the value has been saved to a file, or otherwise consumed by the
  152. // /// app, we no longer need to enable the Save button
  153. // void resetDirty() { mDirty = false; }
  154. // // 
  155. // void setDirty() { mDirty = true; }
  156. //
  157. // protected:
  158. // LLSD mValue;
  159. // bool mDirty;
  160. // };
  161. //
  162. // class Numeric : public Value
  163. // {
  164. // public:
  165. // Numeric(S32 value = 0);
  166. // Numeric(F32 value);
  167. //
  168. // F32 getPrecision();
  169. // F32 getMin();
  170. // F32 getMax();
  171. //
  172. // void increment();
  173. // void decrement();
  174. // };
  175. //
  176. // class MultipleValues : public Value
  177. // {
  178. // class Selector
  179. // {};
  180. //
  181. // MultipleValues();
  182. // virtual S32 numElements();
  183. // };
  184. //
  185. // class Tuple : public MultipleValues
  186. // {
  187. // Tuple(S32 size);
  188. // LLSD getValue(S32 which) const;
  189. // void setValue(S32 which, const LLSD& value);
  190. // };
  191. //
  192. // class List : public MultipleValues
  193. // {
  194. // List();
  195. //
  196. // void add(const ValueModel& value);
  197. // bool remove(const Selector& item);
  198. //
  199. // void setSortElement(const Selector& element);
  200. // void sort();
  201. // };
  202. //
  203. //};
  204. #endif /* ! defined(LL_LLVIEWMODEL_H) */