PageRenderTime 51ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Scenes/UserInterfaces/Theme.cs

#
C# | 541 lines | 364 code | 54 blank | 123 comment | 19 complexity | 7ecced0ea8b9ec5bccbc35d4f6d0c565 MD5 | raw file
Possible License(s): Apache-2.0
  1. using System.IO;
  2. using Delta.ContentSystem;
  3. using Delta.Engine;
  4. using Delta.Engine.Dynamic;
  5. using Delta.Rendering.Basics.Fonts;
  6. using Delta.Scenes.UserInterfaces.Designs;
  7. using Delta.Utilities;
  8. using Delta.Utilities.Datatypes;
  9. namespace Delta.Scenes.UserInterfaces
  10. {
  11. /// <summary>
  12. /// The theme class which describes the general look for all UI controls
  13. /// as long as a UI controls won't override its design by itself.
  14. /// </summary>
  15. public class Theme : BaseTheme
  16. {
  17. #region Constants
  18. /// <summary>
  19. /// The current version of the implementation of this control class.
  20. /// </summary>
  21. private const int VersionNumber = 1;
  22. #endregion
  23. #region Current (Static)
  24. /// <summary>
  25. /// Current theme to be used by the currently active scene.
  26. /// </summary>
  27. public new static Theme Current
  28. {
  29. get
  30. {
  31. if (current != BaseTheme.Current)
  32. {
  33. current = BaseTheme.Current as Theme;
  34. } // if
  35. return current;
  36. } // get
  37. set
  38. {
  39. current = value;
  40. BaseTheme.Current = value;
  41. } // set
  42. }
  43. #endregion
  44. #region ImageDesign (Public)
  45. /// <summary>
  46. /// Image design
  47. /// </summary>
  48. public ControlDesign ImageDesign
  49. {
  50. get;
  51. set;
  52. }
  53. #endregion
  54. #region PanelDesign (Public)
  55. /// <summary>
  56. /// Panel design
  57. /// </summary>
  58. public ControlDesign PanelDesign
  59. {
  60. get;
  61. set;
  62. }
  63. #endregion
  64. #region LabelDesign (Public)
  65. /// <summary>
  66. /// Label design
  67. /// </summary>
  68. public TextControlDesign LabelDesign
  69. {
  70. get;
  71. set;
  72. }
  73. #endregion
  74. #region TextboxDesign (Public)
  75. /// <summary>
  76. /// Textbox design
  77. /// </summary>
  78. public TextControlDesign TextboxDesign
  79. {
  80. get;
  81. set;
  82. }
  83. #endregion
  84. #region ButtonDesign (Public)
  85. /// <summary>
  86. /// Button design
  87. /// </summary>
  88. public TextControlDesign ButtonDesign
  89. {
  90. get;
  91. set;
  92. }
  93. #endregion
  94. #region CheckboxDesign (Public)
  95. /// <summary>
  96. /// Checkbox design
  97. /// </summary>
  98. public CheckboxDesign CheckboxDesign
  99. {
  100. get;
  101. set;
  102. }
  103. #endregion
  104. #region RadioButtonDesign (Public)
  105. /// <summary>
  106. /// Radio button design
  107. /// </summary>
  108. public CheckboxDesign RadioButtonDesign
  109. {
  110. get;
  111. set;
  112. }
  113. #endregion
  114. #region SliderDesign (Public)
  115. /// <summary>
  116. /// Slider design
  117. /// </summary>
  118. public SliderDesign SliderDesign
  119. {
  120. get;
  121. set;
  122. }
  123. #endregion
  124. #region DropdownBoxDesign (Public)
  125. /// <summary>
  126. /// Dropdown box design
  127. /// </summary>
  128. public TODODropdownBoxDesign DropdownBoxDesign
  129. {
  130. get;
  131. set;
  132. }
  133. #endregion
  134. #region Private
  135. #region current (Private)
  136. /// <summary>
  137. /// Current
  138. /// </summary>
  139. private static Theme current;
  140. #endregion
  141. #endregion
  142. #region Constructors
  143. /// <summary>
  144. /// Create user interface style
  145. /// </summary>
  146. /// <param name="setThemeName">Name of the set theme.</param>
  147. public Theme(string setThemeName)
  148. : base(setThemeName)
  149. {
  150. }
  151. #endregion
  152. #region Save (Public)
  153. /// <summary>
  154. /// Save
  155. /// </summary>
  156. /// <param name="dataWriter">Data writer</param>
  157. public void Save(BinaryWriter dataWriter)
  158. {
  159. // At first we write the current version number of the class data format
  160. dataWriter.Write(VersionNumber);
  161. // then saving the properties
  162. DesignedResolution.Save(dataWriter);
  163. // Image design
  164. bool hasImageDesign = ImageDesign != null;
  165. dataWriter.Write(hasImageDesign);
  166. if (hasImageDesign)
  167. {
  168. Factory.Save(dataWriter, ImageDesign);
  169. } // if
  170. // Panel design
  171. bool hasPanelDesign = PanelDesign != null;
  172. dataWriter.Write(hasPanelDesign);
  173. if (hasPanelDesign)
  174. {
  175. Factory.Save(dataWriter, PanelDesign);
  176. } // if
  177. // Label design
  178. bool hasLabelDesign = LabelDesign != null;
  179. dataWriter.Write(hasLabelDesign);
  180. if (hasLabelDesign)
  181. {
  182. Factory.Save(dataWriter, LabelDesign);
  183. } // if
  184. // Text box design
  185. bool hasTextboxDesign = TextboxDesign != null;
  186. dataWriter.Write(hasTextboxDesign);
  187. if (hasTextboxDesign)
  188. {
  189. Factory.Save(dataWriter, TextboxDesign);
  190. } // if
  191. // Button design
  192. bool hasButtonDesign = ButtonDesign != null;
  193. dataWriter.Write(hasButtonDesign);
  194. if (hasButtonDesign)
  195. {
  196. Factory.Save(dataWriter, ButtonDesign);
  197. } // if
  198. // Check box design
  199. bool hasCheckboxDesign = CheckboxDesign != null;
  200. dataWriter.Write(hasCheckboxDesign);
  201. if (hasCheckboxDesign)
  202. {
  203. Factory.Save(dataWriter, CheckboxDesign);
  204. } // if
  205. // RadioButton design
  206. bool hasRadioButtonDesign = RadioButtonDesign != null;
  207. dataWriter.Write(hasRadioButtonDesign);
  208. if (hasRadioButtonDesign)
  209. {
  210. Factory.Save(dataWriter, RadioButtonDesign);
  211. } // if
  212. // Slider design
  213. bool hasSliderDesign = SliderDesign != null;
  214. dataWriter.Write(hasSliderDesign);
  215. if (hasSliderDesign)
  216. {
  217. Factory.Save(dataWriter, SliderDesign);
  218. } // if
  219. // Disabled until "DropdownBox" control is supported again
  220. //// DropdownBox design
  221. //bool hasDropdownBoxDesign = DropdownBoxDesign != null;
  222. //dataWriter.Write(hasDropdownBoxDesign);
  223. //if (hasDropdownBoxDesign)
  224. //{
  225. // Factory.Save(dataWriter, DropdownBoxDesign);
  226. //} // if
  227. }
  228. #endregion
  229. #region Load (Public)
  230. /// <summary>
  231. /// Load
  232. /// </summary>
  233. /// <param name="data">Data</param>
  234. public virtual void Load(Stream data)
  235. {
  236. using (BinaryReader dataReader = new BinaryReader(data))
  237. {
  238. // At first check which version of the data need to load now
  239. int version = dataReader.ReadInt32();
  240. switch (version)
  241. {
  242. // Version 1
  243. case VersionNumber:
  244. DesignedResolution = new Size(dataReader);
  245. // Image design
  246. bool hasImageDesign = dataReader.ReadBoolean();
  247. ImageDesign = hasImageDesign
  248. ? Factory.Load<ControlDesign>(dataReader)
  249. : null;
  250. // Panel design
  251. bool hasPanelDesign = dataReader.ReadBoolean();
  252. PanelDesign = hasPanelDesign
  253. ? Factory.Load<ControlDesign>(dataReader)
  254. : null;
  255. // Label design
  256. bool hasLabelDesign = dataReader.ReadBoolean();
  257. LabelDesign = hasLabelDesign
  258. ? Factory.Load<TextControlDesign>(dataReader)
  259. : null;
  260. // Text box design
  261. bool hasTextboxDesign = dataReader.ReadBoolean();
  262. TextboxDesign = hasTextboxDesign
  263. ? Factory.Load<TextControlDesign>(dataReader)
  264. : null;
  265. // Button design
  266. bool hasButtonDesign = dataReader.ReadBoolean();
  267. ButtonDesign = hasButtonDesign
  268. ? Factory.Load<TextControlDesign>(dataReader)
  269. : null;
  270. // Check box design
  271. bool hasCheckboxDesign = dataReader.ReadBoolean();
  272. CheckboxDesign = hasCheckboxDesign
  273. ? Factory.Load<CheckboxDesign>(dataReader)
  274. : null;
  275. // RadioButton design
  276. bool hasRadioButtonDesign = dataReader.ReadBoolean();
  277. RadioButtonDesign = hasRadioButtonDesign
  278. ? Factory.Load<CheckboxDesign>(dataReader)
  279. : null;
  280. // Slider design
  281. bool hasSliderDesign = dataReader.ReadBoolean();
  282. SliderDesign = hasSliderDesign
  283. ? Factory.Load<SliderDesign>(dataReader)
  284. : null;
  285. // Disabled until "DropdownBox" control is supported again
  286. //// DropdownBox design
  287. //bool hasDropdownBoxDesign = dataReader.ReadBoolean();
  288. //if (hasDropdownBoxDesign)
  289. //{
  290. // DropdownBoxDesign = Factory.Load<DropdownBoxDesign>(dataReader);
  291. //} // if
  292. //else
  293. //{
  294. // DropdownBoxDesign = null;
  295. //} // else
  296. break;
  297. default:
  298. Log.InvalidVersionWarning(GetType().Name, version, VersionNumber);
  299. break;
  300. } // switch
  301. }
  302. }
  303. #endregion
  304. #region Methods (Private)
  305. #region LoadDefaultDesign
  306. /// <summary>
  307. /// Loads all designs of the default look for this theme.
  308. /// </summary>
  309. protected override void LoadDefaultDesign()
  310. {
  311. #region Image design
  312. ControlDesign defautImageDesign = new ControlDesign
  313. {
  314. Background = GetUIMaterial(EmptyName),
  315. DisabledBackground = GetUIMaterial(EmptyName,
  316. DefaultDisabledBlendColor),
  317. };
  318. #endregion
  319. #region Panel design
  320. ControlDesign defaultPanelDesign = new ControlDesign
  321. {
  322. // Empty theme...
  323. };
  324. #endregion
  325. #region Label design
  326. TextControlDesign defaultLabelDesign = new TextControlDesign
  327. {
  328. Background = null,
  329. Hover = null,
  330. TextFont = new Font(Font.Default, DefaultTextColor),
  331. TextBackground = GetUIMaterial("DefaultLabel"),
  332. TextHoverBackground = GetUIMaterial("DefaultLabel",
  333. DefaultHoverColor),
  334. DisabledBackground = null,
  335. DisabledTextFont = new Font(Font.Default, DefaultDisabledBlendColor),
  336. DisabledTextBackground = GetUIMaterial("DefaultLabel",
  337. DefaultDisabledBlendColor),
  338. };
  339. #endregion
  340. #region Textbox design
  341. TextControlDesign defaultTextboxDesgin = new TextControlDesign
  342. {
  343. Background = null,
  344. Hover = null,
  345. TextFont = new Font(Font.Default, DefaultTextColor),
  346. TextBackground = GetUIMaterial("DefaultLabel"),
  347. TextHoverBackground = GetUIMaterial("DefaultLabel",
  348. DefaultHoverColor),
  349. DisabledBackground = null,
  350. DisabledTextFont = new Font(Font.Default, DefaultDisabledBlendColor),
  351. DisabledTextBackground = GetUIMaterial("DefaultLabel",
  352. DefaultDisabledBlendColor),
  353. };
  354. #endregion
  355. #region Button design
  356. TextControlDesign defaultButtonDesign = new TextControlDesign
  357. {
  358. Background = GetUIMaterial("DefaultButtonBackground"),
  359. Hover = GetUIMaterial("DefaultButtonHover", DefaultHoverColor),
  360. TextFont = new Font(Font.Default, DefaultTextColor),
  361. Pressed = GetUIMaterial("DefaultButtonPressed", DefaultHoverColor),
  362. TextBackground = null,
  363. TextHoverBackground = null,
  364. DisabledBackground = GetUIMaterial("DefaultButtonBackground",
  365. DefaultDisabledBlendColor),
  366. DisabledTextFont = new Font(Font.Default, DefaultDisabledBlendColor),
  367. DisabledTextBackground = null,
  368. };
  369. #endregion
  370. #region Checkbox design
  371. CheckboxDesign defaultCheckboxDesign = new CheckboxDesign
  372. {
  373. // We don't use a "global" background (and hover design) here...
  374. //PressedDesign = null;
  375. Background = null,
  376. Hover = null,
  377. TextFont = new Font(Font.Default, DefaultTextColor),
  378. TextBackground = GetUIMaterial("DefaultLabel"),
  379. TextHoverBackground = GetUIMaterial("DefaultLabel",
  380. DefaultHoverColor),
  381. UncheckedSymbol = GetUIMaterial("DefaultCheckboxOff"),
  382. UncheckedSymbolHover = GetUIMaterial("DefaultCheckboxOff",
  383. Color.Gold),
  384. CheckedSymbol = GetUIMaterial("DefaultCheckboxOn"),
  385. CheckedSymbolHover = GetUIMaterial("DefaultCheckboxOn",
  386. DefaultHoverColor),
  387. DisabledBackground = null,
  388. DisabledTextFont = new Font(Font.Default, DefaultDisabledBlendColor),
  389. DisabledTextBackground = GetUIMaterial("DefaultLabel",
  390. DefaultDisabledBlendColor),
  391. DisabledUncheckedSymbol = GetUIMaterial("DefaultCheckboxOff",
  392. DefaultDisabledBlendColor),
  393. DisabledCheckedSymbol = GetUIMaterial("DefaultCheckboxOn",
  394. DefaultDisabledBlendColor),
  395. };
  396. #endregion
  397. #region RadioButton design
  398. CheckboxDesign defaultRadioButtonDesign = new CheckboxDesign
  399. {
  400. // We don't use a "global" background (and hover design) here...
  401. //PressedDesign = null;
  402. Background = null,
  403. Hover = null,
  404. TextFont = new Font(Font.Default, DefaultTextColor),
  405. TextBackground = GetUIMaterial("DefaultLabel"),
  406. TextHoverBackground = GetUIMaterial("DefaultLabel",
  407. DefaultHoverColor),
  408. UncheckedSymbol = GetUIMaterial("DefaultRadiobuttonOff"),
  409. CheckedSymbol = GetUIMaterial("DefaultRadioButtonOn"),
  410. DisabledBackground = null,
  411. DisabledTextFont = new Font(Font.Default, DefaultDisabledBlendColor),
  412. DisabledTextBackground = GetUIMaterial("DefaultLabel",
  413. DefaultDisabledBlendColor),
  414. DisabledUncheckedSymbol = GetUIMaterial("DefaultRadiobuttonOff",
  415. DefaultDisabledBlendColor),
  416. DisabledCheckedSymbol = GetUIMaterial("DefaultRadioButtonOn",
  417. DefaultDisabledBlendColor),
  418. };
  419. #endregion
  420. #region Slider design
  421. SliderDesign defaultSliderDesign = new SliderDesign
  422. {
  423. // Finally we normally don't need a background, because we have
  424. // the "TrackerbarDesign" instead for it (for the moment)
  425. Trackerbar = GetUIMaterial("DefaultSliderBackground"),
  426. Tracker = GetUIMaterial("DefaultSlider"),
  427. Hover = GetUIMaterial("DefaultSliderHover"),
  428. TextFont = new Font(Font.Default, DefaultTextColor),
  429. DisabledTrackerbar = GetUIMaterial("DefaultSliderBackground",
  430. DefaultDisabledBlendColor),
  431. DisabledTracker = GetUIMaterial("DefaultSlider",
  432. DefaultDisabledBlendColor),
  433. DisabledTextFont = new Font(Font.Default, DefaultDisabledBlendColor),
  434. };
  435. #endregion
  436. #region DropdownBox design
  437. TODODropdownBoxDesign defaultDropdownBoxDesign = new TODODropdownBoxDesign
  438. {
  439. // Finally we normally don't need a background, because we have
  440. // the "TrackerbarDesign" instead for it (for the moment)
  441. Expander = GetUIMaterial("DefaultDropDownBox"),
  442. ExpanderHover = GetUIMaterial("DefaultDropDownBox"),
  443. DisabledExpander = GetUIMaterial("DefaultDropDownBox",
  444. DefaultDisabledBlendColor),
  445. };
  446. #endregion
  447. //defaultTheme = new UserTheme("<DefaultTheme>")
  448. //{
  449. // DesignedResolution = Settings.DefaultResolution,
  450. // ImageDesign = defautImageDesign,
  451. // PanelDesign = defaultPanelDesign,
  452. // LabelDesign = defaultLabelDesign,
  453. // TextboxDesign = defaultTextboxDesgin,
  454. // ButtonDesign = defaultButtonDesign,
  455. // CheckboxDesign = defaultCheckboxDesign,
  456. // RadioButtonDesign = defaultRadioButtonDesign,
  457. // SliderDesign = defaultSliderDesign,
  458. // DropdownBoxDesign = defaultDropdownBoxDesign,
  459. //};
  460. DesignedResolution = Settings.DefaultResolution;
  461. ImageDesign = defautImageDesign;
  462. PanelDesign = defaultPanelDesign;
  463. LabelDesign = defaultLabelDesign;
  464. TextboxDesign = defaultTextboxDesgin;
  465. ButtonDesign = defaultButtonDesign;
  466. CheckboxDesign = defaultCheckboxDesign;
  467. RadioButtonDesign = defaultRadioButtonDesign;
  468. SliderDesign = defaultSliderDesign;
  469. DropdownBoxDesign = defaultDropdownBoxDesign;
  470. }
  471. #endregion
  472. #region Load
  473. /// <summary>
  474. /// Load
  475. /// </summary>
  476. /// <param name="alreadyLoadedNativeData">Already loaded native data
  477. /// </param>
  478. protected override void Load(Content alreadyLoadedNativeData)
  479. {
  480. // be done later
  481. //throw new NotImplementedException();
  482. return;
  483. }
  484. #endregion
  485. #endregion
  486. }
  487. }