/vs/Options/ViewModel.cs

https://github.com/stkb/Rewrap · C# · 160 lines · 132 code · 24 blank · 4 comment · 1 complexity · 0d0cbc74336e84a422213f5c33a68f47 MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.ComponentModel;
  5. using System.Linq;
  6. using System.Runtime.CompilerServices;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace VS.Options
  10. {
  11. public class ViewModel: Base
  12. {
  13. public GlobalOptionsGroup GlobalOptions
  14. {
  15. get { return _GlobalOptions; }
  16. set { SetField( ref _GlobalOptions, value ); }
  17. }
  18. private GlobalOptionsGroup _GlobalOptions;
  19. public ObservableCollection<OptionsGroup> OptionsGroups
  20. {
  21. get { return _OptionsGroups; }
  22. set { SetField( ref _OptionsGroups, value ); }
  23. }
  24. private ObservableCollection<OptionsGroup> _OptionsGroups;
  25. public LanguagesPicker LanguagesPicker
  26. {
  27. get { return _LanguagesPicker; }
  28. set { SetField( ref _LanguagesPicker, value ); }
  29. }
  30. private LanguagesPicker _LanguagesPicker;
  31. }
  32. public class LanguagesPicker: Base
  33. {
  34. public LanguagesPicker(OptionsGroup group, List<LanguageSelection> languages)
  35. {
  36. Group = group;
  37. Languages = languages;
  38. }
  39. public OptionsGroup Group { get; private set; }
  40. // Needs to be an old-style tuple for wpf databinding
  41. public List<LanguageSelection> Languages { get; private set; }
  42. }
  43. public class LanguageSelection
  44. {
  45. public string Name { get; set; }
  46. public bool Selected { get; set; }
  47. }
  48. public class OptionsGroup: Base
  49. {
  50. public OptionsGroup(IEnumerable<String> languages)
  51. {
  52. SetLanguages( languages );
  53. }
  54. public ReadOnlyCollection<String> Languages
  55. {
  56. get { return _Languages; }
  57. private set { SetField( ref _Languages, value ); }
  58. }
  59. private ReadOnlyCollection<String> _Languages;
  60. public void SetLanguages(IEnumerable<String> languages)
  61. {
  62. Languages = new ReadOnlyCollection<string>( languages.ToList() );
  63. }
  64. public int? WrappingColumn { get; set; }
  65. public bool? WholeComment { get; set; }
  66. public bool? DoubleSentenceSpacing { get; set; }
  67. public bool? Reformat { get; set; }
  68. }
  69. public class GlobalOptionsGroup
  70. {
  71. public int? WrappingColumn { get; set; } = 80;
  72. public bool WholeComment { get; set; } = true;
  73. public bool DoubleSentenceSpacing { get; set; } = false;
  74. public bool Reformat { get; set; } = false;
  75. }
  76. public class Base : INotifyPropertyChanged
  77. {
  78. public event PropertyChangedEventHandler PropertyChanged;
  79. protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
  80. {
  81. PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
  82. }
  83. protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
  84. {
  85. if ( EqualityComparer<T>.Default.Equals( field, value ) ) return false;
  86. field = value;
  87. OnPropertyChanged( propertyName );
  88. return true;
  89. }
  90. }
  91. /// <summary>
  92. /// Design data
  93. /// </summary>
  94. public class DesignViewModel: ViewModel
  95. {
  96. public DesignViewModel(): base()
  97. {
  98. GlobalOptions = new GlobalOptionsGroup();
  99. OptionsGroups = new ObservableCollection<OptionsGroup>()
  100. {
  101. new OptionsGroup(new String[] { "C#", "JavaScript", "C#", "JavaScript", "C#", "JavaScript", "C#", "JavaScript", "C#", "JavaScript", "C#", "JavaScript", } ) {
  102. WrappingColumn = null,
  103. WholeComment = null,
  104. DoubleSentenceSpacing = true,
  105. Reformat = false,
  106. },
  107. };
  108. LanguagesPicker =
  109. new LanguagesPicker(
  110. null,
  111. new List<LanguageSelection>() {
  112. new LanguageSelection() { Name = "AutoHotkey", Selected = false },
  113. new LanguageSelection() { Name = "Basic", Selected = false },
  114. new LanguageSelection() { Name = "C/C++", Selected = true },
  115. new LanguageSelection() { Name = "C/C++", Selected = false },
  116. new LanguageSelection() { Name = "C/C++", Selected = false },
  117. new LanguageSelection() { Name = "C/C++", Selected = false },
  118. new LanguageSelection() { Name = "C/C++", Selected = false },
  119. new LanguageSelection() { Name = "C/C++", Selected = false },
  120. new LanguageSelection() { Name = "C/C++", Selected = false },
  121. new LanguageSelection() { Name = "C/C++", Selected = false },
  122. new LanguageSelection() { Name = "C/C++", Selected = false },
  123. new LanguageSelection() { Name = "C/C++", Selected = false },
  124. new LanguageSelection() { Name = "C/C++", Selected = false },
  125. new LanguageSelection() { Name = "C/C++", Selected = false },
  126. new LanguageSelection() { Name = "C/C++", Selected = false },
  127. new LanguageSelection() { Name = "C/C++", Selected = false },
  128. new LanguageSelection() { Name = "C/C++", Selected = false },
  129. new LanguageSelection() { Name = "C/C++", Selected = false },
  130. new LanguageSelection() { Name = "C/C++", Selected = false },
  131. new LanguageSelection() { Name = "C/C++", Selected = false },
  132. }
  133. );
  134. }
  135. }
  136. }