/ src / settings-ui / Settings.UI.Library / PowerPreviewProperties.cs
PowerPreviewProperties.cs
  1  // Copyright (c) Microsoft Corporation
  2  // The Microsoft Corporation licenses this file to you under the MIT license.
  3  // See the LICENSE file in the project root for more information.
  4  
  5  using System.Runtime.CompilerServices;
  6  using System.Text.Json;
  7  using System.Text.Json.Serialization;
  8  
  9  using Microsoft.PowerToys.Settings.Telemetry;
 10  using Microsoft.PowerToys.Telemetry;
 11  using Settings.UI.Library.Enumerations;
 12  
 13  namespace Microsoft.PowerToys.Settings.UI.Library
 14  {
 15      public class PowerPreviewProperties
 16      {
 17          public const string DefaultStlThumbnailColor = "#FFC924";
 18          public const int DefaultMonacoMaxFileSize = 50;
 19          public const int DefaultMonacoFontSize = 14;
 20          public const int DefaultSvgBackgroundColorMode = (int)SvgPreviewColorMode.Default;
 21          public const string DefaultSvgBackgroundSolidColor = "#FFFFFF";
 22          public const int DefaultSvgBackgroundCheckeredShade = (int)SvgPreviewCheckeredShade.Light;
 23  
 24          private bool enableSvgPreview = true;
 25  
 26          [JsonPropertyName("svg-previewer-toggle-setting")]
 27          [JsonConverter(typeof(BoolPropertyJsonConverter))]
 28          public bool EnableSvgPreview
 29          {
 30              get => enableSvgPreview;
 31              set
 32              {
 33                  if (value != enableSvgPreview)
 34                  {
 35                      LogTelemetryEvent(value);
 36                      enableSvgPreview = value;
 37                  }
 38              }
 39          }
 40  
 41          [JsonPropertyName("svg-previewer-background-color-mode")]
 42          public IntProperty SvgBackgroundColorMode { get; set; }
 43  
 44          [JsonPropertyName("svg-previewer-background-solid-color")]
 45          public StringProperty SvgBackgroundSolidColor { get; set; }
 46  
 47          [JsonPropertyName("svg-previewer-background-checkered-shade")]
 48          public IntProperty SvgBackgroundCheckeredShade { get; set; }
 49  
 50          private bool enableSvgThumbnail = true;
 51  
 52          [JsonPropertyName("svg-thumbnail-toggle-setting")]
 53          [JsonConverter(typeof(BoolPropertyJsonConverter))]
 54          public bool EnableSvgThumbnail
 55          {
 56              get => enableSvgThumbnail;
 57              set
 58              {
 59                  if (value != enableSvgThumbnail)
 60                  {
 61                      LogTelemetryEvent(value);
 62                      enableSvgThumbnail = value;
 63                  }
 64              }
 65          }
 66  
 67          private bool enableMdPreview = true;
 68  
 69          [JsonPropertyName("md-previewer-toggle-setting")]
 70          [JsonConverter(typeof(BoolPropertyJsonConverter))]
 71          public bool EnableMdPreview
 72          {
 73              get => enableMdPreview;
 74              set
 75              {
 76                  if (value != enableMdPreview)
 77                  {
 78                      LogTelemetryEvent(value);
 79                      enableMdPreview = value;
 80                  }
 81              }
 82          }
 83  
 84          private bool enableMonacoPreview = true;
 85  
 86          [JsonPropertyName("monaco-previewer-toggle-setting")]
 87          [JsonConverter(typeof(BoolPropertyJsonConverter))]
 88          public bool EnableMonacoPreview
 89          {
 90              get => enableMonacoPreview;
 91              set
 92              {
 93                  if (value != enableMonacoPreview)
 94                  {
 95                      LogTelemetryEvent(value);
 96                      enableMonacoPreview = value;
 97                  }
 98              }
 99          }
100  
101          private bool monacoPreviewWordWrap = true;
102  
103          [JsonPropertyName("monaco-previewer-toggle-setting-word-wrap")]
104          [JsonConverter(typeof(BoolPropertyJsonConverter))]
105          public bool EnableMonacoPreviewWordWrap
106          {
107              get => monacoPreviewWordWrap;
108              set
109              {
110                  if (value != monacoPreviewWordWrap)
111                  {
112                      LogTelemetryEvent(value);
113                      monacoPreviewWordWrap = value;
114                  }
115              }
116          }
117  
118          private bool monacoPreviewTryFormat;
119  
120          [JsonPropertyName("monaco-previewer-toggle-try-format")]
121          [JsonConverter(typeof(BoolPropertyJsonConverter))]
122          public bool MonacoPreviewTryFormat
123          {
124              get => monacoPreviewTryFormat;
125              set
126              {
127                  if (value != monacoPreviewTryFormat)
128                  {
129                      LogTelemetryEvent(value);
130                      monacoPreviewTryFormat = value;
131                  }
132              }
133          }
134  
135          [JsonPropertyName("monaco-previewer-max-file-size")]
136          public IntProperty MonacoPreviewMaxFileSize { get; set; }
137  
138          [JsonPropertyName("monaco-previewer-font-size")]
139          public IntProperty MonacoPreviewFontSize { get; set; }
140  
141          private bool monacoPreviewStickyScroll = true;
142  
143          [JsonPropertyName("monaco-previewer-sticky-scroll")]
144          [JsonConverter(typeof(BoolPropertyJsonConverter))]
145          public bool MonacoPreviewStickyScroll
146          {
147              get => monacoPreviewStickyScroll;
148              set
149              {
150                  if (value != monacoPreviewStickyScroll)
151                  {
152                      LogTelemetryEvent(value);
153                      monacoPreviewStickyScroll = value;
154                  }
155              }
156          }
157  
158          private bool monacoPreviewMinimap;
159  
160          [JsonPropertyName("monaco-previewer-minimap")]
161          [JsonConverter(typeof(BoolPropertyJsonConverter))]
162          public bool MonacoPreviewMinimap
163          {
164              get => monacoPreviewMinimap;
165              set
166              {
167                  if (value != monacoPreviewMinimap)
168                  {
169                      LogTelemetryEvent(value);
170                      monacoPreviewMinimap = value;
171                  }
172              }
173          }
174  
175          private bool enablePdfPreview;
176  
177          [JsonPropertyName("pdf-previewer-toggle-setting")]
178          [JsonConverter(typeof(BoolPropertyJsonConverter))]
179          public bool EnablePdfPreview
180          {
181              get => enablePdfPreview;
182              set
183              {
184                  if (value != enablePdfPreview)
185                  {
186                      LogTelemetryEvent(value);
187                      enablePdfPreview = value;
188                  }
189              }
190          }
191  
192          private bool enablePdfThumbnail;
193  
194          [JsonPropertyName("pdf-thumbnail-toggle-setting")]
195          [JsonConverter(typeof(BoolPropertyJsonConverter))]
196          public bool EnablePdfThumbnail
197          {
198              get => enablePdfThumbnail;
199              set
200              {
201                  if (value != enablePdfThumbnail)
202                  {
203                      LogTelemetryEvent(value);
204                      enablePdfThumbnail = value;
205                  }
206              }
207          }
208  
209          private bool enableGcodePreview = true;
210  
211          [JsonPropertyName("gcode-previewer-toggle-setting")]
212          [JsonConverter(typeof(BoolPropertyJsonConverter))]
213          public bool EnableGcodePreview
214          {
215              get => enableGcodePreview;
216              set
217              {
218                  if (value != enableGcodePreview)
219                  {
220                      LogTelemetryEvent(value);
221                      enableGcodePreview = value;
222                  }
223              }
224          }
225  
226          private bool enableBgcodePreview = true;
227  
228          [JsonPropertyName("bgcode-previewer-toggle-setting")]
229          [JsonConverter(typeof(BoolPropertyJsonConverter))]
230          public bool EnableBgcodePreview
231          {
232              get => enableBgcodePreview;
233              set
234              {
235                  if (value != enableBgcodePreview)
236                  {
237                      LogTelemetryEvent(value);
238                      enableBgcodePreview = value;
239                  }
240              }
241          }
242  
243          private bool enableGcodeThumbnail = true;
244  
245          [JsonPropertyName("gcode-thumbnail-toggle-setting")]
246          [JsonConverter(typeof(BoolPropertyJsonConverter))]
247          public bool EnableGcodeThumbnail
248          {
249              get => enableGcodeThumbnail;
250              set
251              {
252                  if (value != enableGcodeThumbnail)
253                  {
254                      LogTelemetryEvent(value);
255                      enableGcodeThumbnail = value;
256                  }
257              }
258          }
259  
260          private bool enableBgcodeThumbnail = true;
261  
262          [JsonPropertyName("bgcode-thumbnail-toggle-setting")]
263          [JsonConverter(typeof(BoolPropertyJsonConverter))]
264          public bool EnableBgcodeThumbnail
265          {
266              get => enableBgcodeThumbnail;
267              set
268              {
269                  if (value != enableBgcodeThumbnail)
270                  {
271                      LogTelemetryEvent(value);
272                      enableBgcodeThumbnail = value;
273                  }
274              }
275          }
276  
277          private bool enableStlThumbnail = true;
278  
279          [JsonPropertyName("stl-thumbnail-toggle-setting")]
280          [JsonConverter(typeof(BoolPropertyJsonConverter))]
281          public bool EnableStlThumbnail
282          {
283              get => enableStlThumbnail;
284              set
285              {
286                  if (value != enableStlThumbnail)
287                  {
288                      LogTelemetryEvent(value);
289                      enableStlThumbnail = value;
290                  }
291              }
292          }
293  
294          [JsonPropertyName("stl-thumbnail-color-setting")]
295          public StringProperty StlThumbnailColor { get; set; }
296  
297          private bool enableQoiPreview = true;
298  
299          [JsonPropertyName("qoi-previewer-toggle-setting")]
300          [JsonConverter(typeof(BoolPropertyJsonConverter))]
301          public bool EnableQoiPreview
302          {
303              get => enableQoiPreview;
304              set
305              {
306                  if (value != enableQoiPreview)
307                  {
308                      LogTelemetryEvent(value);
309                      enableQoiPreview = value;
310                  }
311              }
312          }
313  
314          private bool enableQoiThumbnail = true;
315  
316          [JsonPropertyName("qoi-thumbnail-toggle-setting")]
317          [JsonConverter(typeof(BoolPropertyJsonConverter))]
318          public bool EnableQoiThumbnail
319          {
320              get => enableQoiThumbnail;
321              set
322              {
323                  if (value != enableQoiThumbnail)
324                  {
325                      LogTelemetryEvent(value);
326                      enableQoiThumbnail = value;
327                  }
328              }
329          }
330  
331          public PowerPreviewProperties()
332          {
333              SvgBackgroundColorMode = new IntProperty(DefaultSvgBackgroundColorMode);
334              SvgBackgroundSolidColor = new StringProperty(DefaultSvgBackgroundSolidColor);
335              SvgBackgroundCheckeredShade = new IntProperty(DefaultSvgBackgroundCheckeredShade);
336              StlThumbnailColor = new StringProperty(DefaultStlThumbnailColor);
337              MonacoPreviewMaxFileSize = new IntProperty(DefaultMonacoMaxFileSize);
338              MonacoPreviewFontSize = new IntProperty(DefaultMonacoFontSize);
339          }
340  
341          public override string ToString()
342          {
343              return JsonSerializer.Serialize(this, SettingsSerializationContext.Default.PowerPreviewProperties);
344          }
345  
346          private static void LogTelemetryEvent(bool value, [CallerMemberName] string propertyName = null)
347          {
348              var dataEvent = new SettingsEnabledEvent()
349              {
350                  Value = value,
351                  Name = propertyName,
352              };
353              PowerToysTelemetry.Log.WriteEvent(dataEvent);
354          }
355      }
356  }