PageRenderTime 26ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/Scenes/UserInterfaces/Designs/SliderDesign.cs

#
C# | 247 lines | 158 code | 21 blank | 68 comment | 17 complexity | 1ddba9be48118f241c361b74a4f8cac8 MD5 | raw file
Possible License(s): Apache-2.0
  1. using System;
  2. using System.IO;
  3. using Delta.Rendering.Basics.Materials;
  4. using Delta.Scenes.Enums;
  5. using Delta.Scenes.UserInterfaces.Controls;
  6. using Delta.Utilities;
  7. using Delta.Utilities.Datatypes;
  8. namespace Delta.Scenes.UserInterfaces.Designs
  9. {
  10. /// <summary>
  11. /// The design for the slider control.
  12. /// </summary>
  13. public class SliderDesign : TextControlDesign
  14. {
  15. #region Constants
  16. /// <summary>
  17. /// The current version of the implementation of this class.
  18. /// </summary>
  19. private const int VersionNumber = 1;
  20. #endregion
  21. #region Tracker (Public)
  22. /// <summary>
  23. /// The "knob" of the slider which visualize the current value
  24. /// (in enabled-state).
  25. /// </summary>
  26. /// <value>
  27. /// The tracker.
  28. /// </value>
  29. public Material2DColored Tracker
  30. {
  31. get;
  32. set;
  33. }
  34. #endregion
  35. #region DisabledTracker (Public)
  36. /// <summary>
  37. /// The "knob" of the slider which visualize the current value
  38. /// (in disabled-state).
  39. /// </summary>
  40. /// <value>
  41. /// The disabled tracker.
  42. /// </value>
  43. public Material2DColored DisabledTracker
  44. {
  45. get;
  46. set;
  47. }
  48. #endregion
  49. #region Trackerbar (Public)
  50. /// <summary>
  51. /// The visual design of the tracker-bar (in enabled-state).
  52. /// </summary>
  53. /// <value>
  54. /// The trackerbar.
  55. /// </value>
  56. public Material2DColored Trackerbar
  57. {
  58. get;
  59. set;
  60. }
  61. #endregion
  62. #region DisabledTrackerbar (Public)
  63. /// <summary>
  64. /// The visual design of the tracker-bar (in disabled-state).
  65. /// </summary>
  66. /// <value>
  67. /// The disabled trackerbar.
  68. /// </value>
  69. public Material2DColored DisabledTrackerbar
  70. {
  71. get;
  72. set;
  73. }
  74. #endregion
  75. #region DrawControl (Public)
  76. /// <summary>
  77. /// Draw control
  78. /// </summary>
  79. /// <param name="control">Control</param>
  80. /// <param name="drawArea">Draw area</param>
  81. public override void DrawControl(BaseControl control, Rectangle drawArea)
  82. {
  83. if (control is Slider)
  84. {
  85. Slider slider = (Slider)control;
  86. switch (slider.State)
  87. {
  88. case ElementState.Disabled:
  89. // Draw the tracker-bar
  90. DrawStyle(slider, DisabledTrackerbar, slider.TrackbarDrawArea);
  91. // and the tracker-knob in "disabled" designs
  92. DrawStyle(slider, DisabledTracker, slider.MarkerDrawArea);
  93. break;
  94. case ElementState.Enabled:
  95. case ElementState.Hovered:
  96. case ElementState.Pressed:
  97. // Draw the tracker-bar
  98. DrawStyle(slider, Trackerbar, slider.TrackbarDrawArea);
  99. // and display the tracker "knob" too
  100. // but at first we have to check if the control is in "hover mode"
  101. bool isInHoverMode = Hover != null &&
  102. slider.State == ElementState.Hovered;
  103. // before we can draw the style
  104. DrawStyle(slider, isInHoverMode
  105. ? Hover
  106. : Tracker,
  107. slider.MarkerDrawArea);
  108. break;
  109. } // switch
  110. } // if
  111. else
  112. {
  113. throw new InvalidOperationException("The given control '" + control +
  114. "' is no 'Slider'.");
  115. } // else
  116. }
  117. #endregion
  118. #region Save (Public)
  119. /// <summary>
  120. /// Saves all data which are necessary to restore the object again.
  121. /// </summary>
  122. /// <param name="dataWriter">The writer which contains the stream where the data should be saved
  123. /// into now.</param>
  124. public override void Save(BinaryWriter dataWriter)
  125. {
  126. // At first we write the data of the base class
  127. base.Save(dataWriter);
  128. // and then save the version of the current data format
  129. dataWriter.Write(VersionNumber);
  130. // before we can finally save the properties
  131. // Tracker style
  132. bool hasTrackerDesign = Tracker != null;
  133. dataWriter.Write(hasTrackerDesign);
  134. if (hasTrackerDesign)
  135. {
  136. SaveMaterial(dataWriter, Tracker);
  137. } // if
  138. // DisabledTracker style
  139. bool hasDisabledTrackerDesign = DisabledTracker != null;
  140. dataWriter.Write(hasDisabledTrackerDesign);
  141. if (hasDisabledTrackerDesign)
  142. {
  143. SaveMaterial(dataWriter, DisabledTracker);
  144. } // if
  145. // Trackerbar style
  146. bool hasTrackerbarDesign = Trackerbar != null;
  147. dataWriter.Write(hasTrackerbarDesign);
  148. if (hasTrackerbarDesign)
  149. {
  150. SaveMaterial(dataWriter, Trackerbar);
  151. } // if
  152. // DisabledTrackerbar style
  153. bool hasDisabledTrackerbarDesign = DisabledTrackerbar != null;
  154. dataWriter.Write(hasDisabledTrackerbarDesign);
  155. if (hasDisabledTrackerbarDesign)
  156. {
  157. SaveMaterial(dataWriter, DisabledTrackerbar);
  158. } // if
  159. }
  160. #endregion
  161. #region Load (Public)
  162. /// <summary>
  163. /// Loads and restores all previously saved values that belongs to this
  164. /// class only from the given data reader.
  165. /// </summary>
  166. /// <param name="dataReader">The reader which contains the stream with the saved data which needs to
  167. /// be loaded now.</param>
  168. public override void Load(BinaryReader dataReader)
  169. {
  170. // At first we need to load all data of the base class
  171. base.Load(dataReader);
  172. // and then check which version of the data need to load now
  173. int version = dataReader.ReadInt32();
  174. switch (version)
  175. {
  176. // Version 1
  177. case VersionNumber:
  178. // Tracker style
  179. bool hasTrackerDesign = dataReader.ReadBoolean();
  180. if (hasTrackerDesign)
  181. {
  182. Tracker = LoadMaterial(dataReader);
  183. } // if
  184. else
  185. {
  186. Tracker = null;
  187. } // else
  188. // DisabledTracker style
  189. bool hasDisabledTrackerDesign = dataReader.ReadBoolean();
  190. if (hasDisabledTrackerDesign)
  191. {
  192. DisabledTracker = LoadMaterial(dataReader);
  193. } // if
  194. else
  195. {
  196. DisabledTracker = null;
  197. } // else
  198. // Trackerbar style
  199. bool hasTrackerbarDesign = dataReader.ReadBoolean();
  200. if (hasTrackerbarDesign)
  201. {
  202. Trackerbar = LoadMaterial(dataReader);
  203. } // if
  204. else
  205. {
  206. Trackerbar = null;
  207. } // else
  208. // DisabledTrackerbar style
  209. bool hasDisabledTrackerbarDesign = dataReader.ReadBoolean();
  210. if (hasDisabledTrackerbarDesign)
  211. {
  212. DisabledTrackerbar = LoadMaterial(dataReader);
  213. } // if
  214. else
  215. {
  216. DisabledTrackerbar = null;
  217. } // else
  218. break;
  219. default:
  220. Log.InvalidVersionWarning(GetType().Name, version, VersionNumber);
  221. break;
  222. } // switch
  223. }
  224. #endregion
  225. }
  226. }