UnitsComboBoxHandler.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. using Resources;
  2. using SmartCoalApplication.Base;
  3. using SmartCoalApplication.Base.Enum;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace SmartCoalApplication.Core
  13. {
  14. public sealed class UnitsComboBoxHandler : IUnitsComboBox
  15. {
  16. private ComboBox comboBox;
  17. [Browsable(false)]
  18. public ComboBox ComboBox
  19. {
  20. get
  21. {
  22. return this.comboBox;
  23. }
  24. }
  25. public UnitsComboBoxHandler(ComboBox comboBox)
  26. {
  27. this.comboBox = comboBox;
  28. this.comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
  29. this.comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
  30. ReloadItems();
  31. }
  32. private bool lowercase = true;
  33. private Hashtable unitsToString;
  34. private Hashtable stringToUnits;
  35. private Hashtable measurementItems;
  36. private UnitsDisplayType unitsDisplayType = UnitsDisplayType.Plural;
  37. [DefaultValue(UnitsDisplayType.Plural)]
  38. public UnitsDisplayType UnitsDisplayType
  39. {
  40. get
  41. {
  42. return this.unitsDisplayType;
  43. }
  44. set
  45. {
  46. if (this.unitsDisplayType != value)
  47. {
  48. this.unitsDisplayType = value;
  49. ReloadItems();
  50. }
  51. }
  52. }
  53. [DefaultValue(true)]
  54. public bool LowercaseStrings
  55. {
  56. get
  57. {
  58. return this.lowercase;
  59. }
  60. set
  61. {
  62. if (this.lowercase != value)
  63. {
  64. this.lowercase = value;
  65. ReloadItems();
  66. }
  67. }
  68. }
  69. [DefaultValue(MeasurementUnit.Pixel)]
  70. public MeasurementUnit Units
  71. {
  72. get
  73. {
  74. object selected = this.stringToUnits[ComboBox.SelectedItem];
  75. return (MeasurementUnit)selected;
  76. }
  77. set
  78. {
  79. object selectMe = this.unitsToString[value];
  80. ComboBox.SelectedItem = selectMe;
  81. }
  82. }
  83. [Browsable(false)]
  84. public string UnitsText
  85. {
  86. get
  87. {
  88. if (ComboBox.SelectedItem == null)
  89. {
  90. return string.Empty;
  91. }
  92. else
  93. {
  94. return (string)ComboBox.SelectedItem;
  95. }
  96. }
  97. }
  98. [DefaultValue(true)]
  99. public bool PixelsAvailable
  100. {
  101. get
  102. {
  103. return (bool)this.measurementItems[MeasurementUnit.Pixel];
  104. }
  105. set
  106. {
  107. if (value != this.PixelsAvailable)
  108. {
  109. if (value)
  110. {
  111. AddUnit(MeasurementUnit.Pixel);
  112. }
  113. else
  114. {
  115. if (this.Units == MeasurementUnit.Pixel)
  116. {
  117. if (this.InchesAvailable)
  118. {
  119. this.Units = MeasurementUnit.Inch;
  120. }
  121. else if (this.CentimetersAvailable)
  122. {
  123. this.Units = MeasurementUnit.Centimeter;
  124. }
  125. }
  126. RemoveUnit(MeasurementUnit.Pixel);
  127. }
  128. }
  129. }
  130. }
  131. [DefaultValue(true)]
  132. public bool InchesAvailable
  133. {
  134. get
  135. {
  136. return (bool)this.measurementItems[MeasurementUnit.Inch];
  137. }
  138. }
  139. [DefaultValue(true)]
  140. public bool CentimetersAvailable
  141. {
  142. get
  143. {
  144. return (bool)this.measurementItems[MeasurementUnit.Centimeter];
  145. }
  146. }
  147. public void RemoveUnit(MeasurementUnit removeMe)
  148. {
  149. InitMeasurementItems();
  150. this.measurementItems[removeMe] = false;
  151. ReloadItems();
  152. }
  153. public void AddUnit(MeasurementUnit addMe)
  154. {
  155. InitMeasurementItems();
  156. this.measurementItems[addMe] = true;
  157. ReloadItems();
  158. }
  159. private void InitMeasurementItems()
  160. {
  161. if (this.measurementItems == null)
  162. {
  163. this.measurementItems = new Hashtable();
  164. this.measurementItems.Add(MeasurementUnit.Pixel, true);
  165. this.measurementItems.Add(MeasurementUnit.Inch, true);
  166. this.measurementItems.Add(MeasurementUnit.Centimeter, true);
  167. this.measurementItems.Add(MeasurementUnit.Millimeter, true);
  168. this.measurementItems.Add(MeasurementUnit.Micron, true);
  169. this.measurementItems.Add(MeasurementUnit.Nano, true);
  170. }
  171. }
  172. private void ReloadItems()
  173. {
  174. string suffix;
  175. switch (this.unitsDisplayType)
  176. {
  177. case UnitsDisplayType.Plural:
  178. suffix = ".Plural";
  179. break;
  180. case UnitsDisplayType.Singular:
  181. suffix = string.Empty;
  182. break;
  183. case UnitsDisplayType.Ratio:
  184. suffix = ".Ratio";
  185. break;
  186. default:
  187. throw new InvalidEnumArgumentException("UnitsDisplayType");
  188. }
  189. InitMeasurementItems();
  190. MeasurementUnit oldUnits;
  191. if (this.unitsToString == null)
  192. {
  193. oldUnits = MeasurementUnit.Pixel;
  194. }
  195. else
  196. {
  197. oldUnits = this.Units;
  198. }
  199. ComboBox.Items.Clear();
  200. string pixelsString = PdnResources.GetString("MeasurementUnit.Pixel" + suffix);
  201. string inchesString = PdnResources.GetString("MeasurementUnit.Inch" + suffix);
  202. string centimetersString = PdnResources.GetString("MeasurementUnit.Centimeter" + suffix);
  203. string millimeterString = PdnResources.GetString("Menu.Mm.text") + suffix;
  204. string micronString = PdnResources.GetString("Menu.Micron.text") + suffix;
  205. string nanoString = PdnResources.GetString("Menu.nanometer.text") + suffix;
  206. if (lowercase)
  207. {
  208. pixelsString = pixelsString.ToLower();
  209. inchesString = inchesString.ToLower();
  210. centimetersString = centimetersString.ToLower();
  211. millimeterString = millimeterString.ToLower();
  212. micronString = micronString.ToLower();
  213. nanoString = nanoString.ToLower();
  214. }
  215. this.unitsToString = new Hashtable();
  216. this.unitsToString.Add(MeasurementUnit.Pixel, pixelsString);
  217. this.unitsToString.Add(MeasurementUnit.Inch, inchesString);
  218. this.unitsToString.Add(MeasurementUnit.Centimeter, centimetersString);
  219. this.unitsToString.Add(MeasurementUnit.Millimeter, millimeterString);
  220. this.unitsToString.Add(MeasurementUnit.Micron, micronString);
  221. this.unitsToString.Add(MeasurementUnit.Nano, nanoString);
  222. this.stringToUnits = new Hashtable();
  223. if ((bool)this.measurementItems[MeasurementUnit.Pixel])
  224. {
  225. this.stringToUnits.Add(pixelsString, MeasurementUnit.Pixel);
  226. ComboBox.Items.Add(pixelsString);
  227. }
  228. if ((bool)this.measurementItems[MeasurementUnit.Inch])
  229. {
  230. this.stringToUnits.Add(inchesString, MeasurementUnit.Inch);
  231. ComboBox.Items.Add(inchesString);
  232. }
  233. if ((bool)this.measurementItems[MeasurementUnit.Centimeter])
  234. {
  235. this.stringToUnits.Add(centimetersString, MeasurementUnit.Centimeter);
  236. ComboBox.Items.Add(centimetersString);
  237. }
  238. if ((bool)this.measurementItems[MeasurementUnit.Millimeter])
  239. {
  240. this.stringToUnits.Add(millimeterString, MeasurementUnit.Millimeter);
  241. ComboBox.Items.Add(millimeterString);
  242. }
  243. if ((bool)this.measurementItems[MeasurementUnit.Micron])
  244. {
  245. this.stringToUnits.Add(micronString, MeasurementUnit.Micron);
  246. ComboBox.Items.Add(micronString);
  247. }
  248. if ((bool)this.measurementItems[MeasurementUnit.Nano])
  249. {
  250. this.stringToUnits.Add(nanoString, MeasurementUnit.Nano);
  251. ComboBox.Items.Add(nanoString);
  252. }
  253. if (!(bool)this.measurementItems[oldUnits])
  254. {
  255. if (ComboBox.Items.Count == 0)
  256. {
  257. ComboBox.SelectedItem = null;
  258. }
  259. else
  260. {
  261. ComboBox.SelectedIndex = 0;
  262. }
  263. }
  264. else
  265. {
  266. this.Units = oldUnits;
  267. }
  268. }
  269. public event EventHandler UnitsChanged;
  270. private void OnUnitsChanged()
  271. {
  272. if (UnitsChanged != null)
  273. {
  274. UnitsChanged(this, EventArgs.Empty);
  275. }
  276. }
  277. private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
  278. {
  279. this.OnUnitsChanged();
  280. }
  281. }
  282. }