/ src / modules / MeasureTool / MeasureToolCore / Settings.cpp
Settings.cpp
 1  #include "pch.h"
 2  
 3  #include <common/SettingsAPI/settings_helpers.h>
 4  #include <common/utils/color.h>
 5  
 6  #include "Settings.h"
 7  
 8  namespace
 9  {
10      const wchar_t JSON_KEY_PROPERTIES[] = L"properties";
11      const wchar_t JSON_KEY_VALUE[] = L"value";
12  
13      const wchar_t JSON_KEY_CONTINUOUS_CAPTURE[] = L"ContinuousCapture";
14      const wchar_t JSON_KEY_DRAW_FEET_ON_CROSS[] = L"DrawFeetOnCross";
15      const wchar_t JSON_KEY_PIXEL_TOLERANCE[] = L"PixelTolerance";
16      const wchar_t JSON_KEY_PER_COLOR_CHANNEL_EDGE_DETECTION[] = L"PerColorChannelEdgeDetection";
17      const wchar_t JSON_KEY_MEASURE_CROSS_COLOR[] = L"MeasureCrossColor";
18      const wchar_t JSON_KEY_UNITS_OF_MEASURE[] = L"UnitsOfMeasure";
19  }
20  
21  Settings Settings::LoadFromFile()
22  {
23      Settings result;
24  
25      try
26      {
27          auto props = PTSettingsHelper::load_module_settings(L"Measure Tool").GetNamedObject(JSON_KEY_PROPERTIES);
28  
29          try
30          {
31              result.continuousCapture = props.GetNamedObject(JSON_KEY_CONTINUOUS_CAPTURE).GetNamedBoolean(JSON_KEY_VALUE);
32          }
33          catch (...)
34          {
35          }
36  
37          try
38          {
39              result.drawFeetOnCross = props.GetNamedObject(JSON_KEY_DRAW_FEET_ON_CROSS).GetNamedBoolean(JSON_KEY_VALUE);
40          }
41          catch (...)
42          {
43          }
44  
45          try
46          {
47              result.pixelTolerance = static_cast<uint8_t>(props.GetNamedObject(JSON_KEY_PIXEL_TOLERANCE).GetNamedNumber(JSON_KEY_VALUE));
48          }
49          catch (...)
50          {
51          }
52  
53          try
54          {
55              const auto colorString = props.GetNamedObject(JSON_KEY_MEASURE_CROSS_COLOR).GetNamedString(JSON_KEY_VALUE);
56              checkValidRGB(colorString, &result.lineColor[0], &result.lineColor[1], &result.lineColor[2]);
57          }
58          catch (...)
59          {
60          }
61  
62          try
63          {
64              result.perColorChannelEdgeDetection = props.GetNamedObject(JSON_KEY_PER_COLOR_CHANNEL_EDGE_DETECTION).GetNamedBoolean(JSON_KEY_VALUE);
65          }
66          catch (...)
67          {
68          }
69  
70          try
71          {
72              auto index = static_cast<int>(props.GetNamedObject(JSON_KEY_UNITS_OF_MEASURE).GetNamedNumber(JSON_KEY_VALUE));
73              result.units = Measurement::GetUnitFromIndex(index);
74          }
75          catch (...)
76          {
77          }
78      }
79      catch (...)
80      {
81      }
82  
83      return result;
84  }