diff --git a/bin/app/data/ApplicationSettings_template.xml b/bin/app/data/ApplicationSettings_template.xml
index 63fadbee..4926a354 100644
--- a/bin/app/data/ApplicationSettings_template.xml
+++ b/bin/app/data/ApplicationSettings_template.xml
@@ -46,4 +46,9 @@
+
+
+
+
+
diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt
index ef77bdfd..bfd0605e 100644
--- a/bin/test/data/log/test_log.txt
+++ b/bin/test/data/log/test_log.txt
@@ -1,4 +1,320 @@
ConfigManager.cpp WARNING: value path/to/nowhere is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
+Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
+ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Token.cpp ERROR: Location Id was not referenced by this Token.
Edge.cpp ERROR: Edge type_of can't go from Node undefined to Node undefined
Node.cpp WARNING: Cannot change NodeType after it was already set from namespace to class
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin.v11.suo b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin.v11.suo
index c98ce602..020115d7 100644
Binary files a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin.v11.suo and b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin.v11.suo differ
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPlugin.csproj b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPlugin.csproj
index 1826fd51..70995393 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPlugin.csproj
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPlugin.csproj
@@ -14,7 +14,7 @@
{82b43b9b-a64c-4715-b499-d71e9ca2bd60};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
Library
Properties
- SnowForest.CoatiPlugin
+ CoatiSoftware.CoatiPlugin
CoatiPlugin
True
Key.snk
@@ -127,7 +127,9 @@
Resources.resx
-
+
+ Component
+
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs
index ae987e2e..8a58923e 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs
@@ -2,6 +2,7 @@
using System.Diagnostics;
using System.Globalization;
using System.Runtime.InteropServices;
+using System.ComponentModel;
using System.ComponentModel.Design;
using Microsoft.Win32;
using Microsoft.VisualStudio;
@@ -17,16 +18,81 @@ using System.Threading;
using EnvDTE;
using EnvDTE80;
-namespace SnowForest.CoatiPlugin
+namespace CoatiSoftware.CoatiPlugin
{
+ public class OptionPageGrid : DialogPage
+ {
+ private uint _serverPort = 6666;
+ private uint _clientPort = 6667;
+
+ public delegate void Callback();
+ public static Callback _serverPortChangeCallback = null;
+ public static Callback _clientPortChangeCallback = null;
+
+ [Category("Coati")]
+ [DisplayName("VS Port")]
+ [Description("The port on which Visual Studio will receive messages")]
+ public uint ServerPort
+ {
+ get { return _serverPort; }
+ set
+ {
+ _serverPort = value;
+ if (_serverPortChangeCallback != null)
+ {
+ _serverPortChangeCallback();
+ }
+ }
+ }
+
+ [Category("Coati")]
+ [DisplayName("Coati Port")]
+ [Description("The port on which Coati will receive messages")]
+ public uint ClientPort
+ {
+ get { return _clientPort; }
+ set
+ {
+ _clientPort = value;
+ if (_clientPortChangeCallback != null)
+ {
+ _clientPortChangeCallback();
+ }
+ }
+ }
+
+ public OptionPageGrid()
+ {
+ }
+ }
+
[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[ProvideMenuResource("Menus.ctmenu", 1)]
[Guid(GuidList.guidCoatiPluginPkgString)]
[ProvideAutoLoad(Microsoft.VisualStudio.Shell.Interop.UIContextGuids80.NoSolution)]
+ [ProvideOptionPage(typeof(OptionPageGrid), "Coati", "Coati Settings", 0, 0, true)]
public sealed class CoatiPluginPackage : Package
{
+ public uint ServerPort
+ {
+ get
+ {
+ OptionPageGrid page = (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid));
+ return page.ServerPort;
+ }
+ }
+
+ public uint ClientPort
+ {
+ get
+ {
+ OptionPageGrid page = (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid));
+ return page.ClientPort;
+ }
+ }
+
System.Threading.Thread _serverThread = null;
public CoatiPluginPackage()
@@ -36,16 +102,13 @@ namespace SnowForest.CoatiPlugin
{
base.Initialize();
- AsynchronousSocketListener server = new AsynchronousSocketListener();
- AsynchronousSocketListener._onReadCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkReadCallback);
- AsynchronousSocketListener._onErrorCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkErrorCallback);
- _serverThread = new System.Threading.Thread(server.DoWork);
- _serverThread.Start();
-
- AsynchronousClient._onErrorCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkErrorCallback);
+ InitNetwork();
FileUtility._errorCallback = new FileUtility.ErrorCallback(OnFileUtilityError);
+ OptionPageGrid._serverPortChangeCallback = new OptionPageGrid.Callback(OnServerPortChanged);
+ OptionPageGrid._clientPortChangeCallback = new OptionPageGrid.Callback(OnClientPortChanged);
+
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if ( null != mcs )
{
@@ -55,6 +118,19 @@ namespace SnowForest.CoatiPlugin
}
}
+ private void InitNetwork()
+ {
+ AsynchronousSocketListener._port = ServerPort;
+ AsynchronousSocketListener server = new AsynchronousSocketListener();
+ AsynchronousSocketListener._onReadCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkReadCallback);
+ AsynchronousSocketListener._onErrorCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkErrorCallback);
+ _serverThread = new System.Threading.Thread(server.DoWork);
+ _serverThread.Start();
+
+ AsynchronousClient._port = ClientPort;
+ AsynchronousClient._onErrorCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkErrorCallback);
+ }
+
private void MenuItemCallback(object sender, EventArgs e)
{
MenuCommand menuCommand = sender as MenuCommand;
@@ -65,6 +141,8 @@ namespace SnowForest.CoatiPlugin
{
if (menuCommand.CommandID.ID == (int)PkgCmdIDList.cmdidCoatiSetActiveToken)
{
+ DisplayMessage("Coati", "" + ServerPort.ToString());
+
string fileName = FileUtility.GetActiveDocumentName(dte);
string filePath = FileUtility.GetActiveDocumentPath(dte);
@@ -104,6 +182,21 @@ namespace SnowForest.CoatiPlugin
DisplayMessage("Coati File Error", message);
}
+ private void OnServerPortChanged()
+ {
+ AsynchronousSocketListener._port = ServerPort;
+
+ _serverThread.Abort();
+ AsynchronousSocketListener server = new AsynchronousSocketListener();
+ _serverThread = new System.Threading.Thread(server.DoWork);
+ _serverThread.Start();
+ }
+
+ private void OnClientPortChanged()
+ {
+ AsynchronousClient._port = ClientPort;
+ }
+
private void DisplayMessage(string title, string message)
{
IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/FileUtility.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/FileUtility.cs
index d7735d65..959c6a24 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/FileUtility.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/FileUtility.cs
@@ -5,7 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using EnvDTE;
-namespace SnowForest.CoatiPlugin
+namespace CoatiSoftware.CoatiPlugin
{
class FileUtility
{
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Guids.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Guids.cs
index 0ab44894..d9f324b1 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Guids.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Guids.cs
@@ -2,7 +2,7 @@
// MUST match guids.h
using System;
-namespace SnowForest.CoatiPlugin
+namespace CoatiSoftware.CoatiPlugin
{
static class GuidList
{
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkProtocolUtility.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkProtocolUtility.cs
index 97fcd656..1fcde6fd 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkProtocolUtility.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkProtocolUtility.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace SnowForest.CoatiPlugin
+namespace CoatiSoftware.CoatiPlugin
{
class NetworkProtocolUtility
{
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkUtility.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkUtility.cs
index 965bfaf8..af31b1d7 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkUtility.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/NetworkUtility.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
-namespace SnowForest.CoatiPlugin
+namespace CoatiSoftware.CoatiPlugin
{
public class StateObject
{
@@ -28,6 +28,8 @@ namespace SnowForest.CoatiPlugin
public static OnReadCallback _onErrorCallback = null;
private static string _endOfMessageToken = "";
+
+ public static uint _port = 6666;
public AsynchronousSocketListener()
{
@@ -40,13 +42,12 @@ namespace SnowForest.CoatiPlugin
public static void StartListening()
{
- const int port = 6666;
const string ipAddressString = "127.0.0.1";
byte[] bytes = new Byte[1024];
IPAddress ipAddress = IPAddress.Parse(ipAddressString);
- IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port);
+ IPEndPoint localEndPoint = new IPEndPoint(ipAddress, (int)_port);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@@ -139,7 +140,7 @@ namespace SnowForest.CoatiPlugin
public class AsynchronousClient
{
- private const int _port = 6667;
+ public static uint _port = 6667;
private static ManualResetEvent connectDone = new ManualResetEvent(false);
private static ManualResetEvent sendDone = new ManualResetEvent(false);
@@ -151,7 +152,7 @@ namespace SnowForest.CoatiPlugin
public static void Send(string message)
{
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
- IPEndPoint remoteEP = new IPEndPoint(ipAddress, _port);
+ IPEndPoint remoteEP = new IPEndPoint(ipAddress, (int)_port);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/PkgCmdID.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/PkgCmdID.cs
index be6bc196..e699320d 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/PkgCmdID.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/PkgCmdID.cs
@@ -2,7 +2,7 @@
// MUST match PkgCmdID.h
using System;
-namespace SnowForest.CoatiPlugin
+namespace CoatiSoftware.CoatiPlugin
{
static class PkgCmdIDList
{
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Resources.Designer.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Resources.Designer.cs
index 15676794..ee0b9f30 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Resources.Designer.cs
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/Resources.Designer.cs
@@ -8,7 +8,7 @@
//
//------------------------------------------------------------------------------
-namespace SnowForest.CoatiPlugin {
+namespace CoatiSoftware.CoatiPlugin {
using System;
@@ -39,7 +39,7 @@ namespace SnowForest.CoatiPlugin {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SnowForest.CoatiPlugin.Resources", typeof(Resources).Assembly);
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CoatiSoftware.CoatiPlugin.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/SystemUtility.cs b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/SystemUtility.cs
new file mode 100644
index 00000000..dbe27e27
--- /dev/null
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/SystemUtility.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CoatiSoftware.CoatiPlugin
+{
+ class SystemUtility
+ {
+ [System.Runtime.InteropServices.DllImport("user32.dll")]
+ static extern bool SetForegroundWindow(IntPtr hWnd);
+ [System.Runtime.InteropServices.DllImport("user32.dll")]
+ static extern IntPtr SetActiveWindow(IntPtr hWnd);
+
+ public static void GetWindowFocus()
+ {
+ System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess();
+ IntPtr windowHandle = process.MainWindowHandle;
+
+ if (windowHandle != null)
+ {
+ SetForegroundWindow(windowHandle);
+ SetActiveWindow(windowHandle);
+ }
+ }
+ }
+}
diff --git a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest
index 7403e635..16fb6bea 100644
--- a/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest
+++ b/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest
@@ -1,7 +1,7 @@
-
+
CoatiPlugin
This package allows Coati to communicate with Visual Studio and vice versa.
coati.ico
diff --git a/setup/dynamic_libraries/windows/app/Debug/platforms/qwindowsd.dll b/setup/dynamic_libraries/windows/app/Debug/platforms/qwindowsd.dll
new file mode 100644
index 00000000..c2ebc2fa
Binary files /dev/null and b/setup/dynamic_libraries/windows/app/Debug/platforms/qwindowsd.dll differ
diff --git a/src/app/qt/network/QtIDECommunicationController.cpp b/src/app/qt/network/QtIDECommunicationController.cpp
index 82d1be53..e379b5bc 100644
--- a/src/app/qt/network/QtIDECommunicationController.cpp
+++ b/src/app/qt/network/QtIDECommunicationController.cpp
@@ -6,7 +6,12 @@ QtIDECommunicationController::QtIDECommunicationController(QObject* parent, Stor
: IDECommunicationController(storageAccess)
, m_tcpWrapper(parent)
{
+ ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
+
m_tcpWrapper.setReadCallback(std::bind(&QtIDECommunicationController::handleIncomingMessage, this, std::placeholders::_1));
+ m_tcpWrapper.setServerPort(appSettings->getCoatiPort());
+ m_tcpWrapper.setClientPort(appSettings->getPluginPort());
+ m_tcpWrapper.startListening();
}
QtIDECommunicationController::~QtIDECommunicationController()
diff --git a/src/app/qt/network/QtIDECommunicationController.h b/src/app/qt/network/QtIDECommunicationController.h
index 93a030a5..7f386c4c 100644
--- a/src/app/qt/network/QtIDECommunicationController.h
+++ b/src/app/qt/network/QtIDECommunicationController.h
@@ -6,6 +6,7 @@
#include "QtTcpWrapper.h"
#include "component/controller/IDECommunicationController.h"
+#include "settings/ApplicationSettings.h"
class StorageAccess;
diff --git a/src/app/qt/network/QtTcpWrapper.cpp b/src/app/qt/network/QtTcpWrapper.cpp
index a173c1a1..8f7da3f3 100644
--- a/src/app/qt/network/QtTcpWrapper.cpp
+++ b/src/app/qt/network/QtTcpWrapper.cpp
@@ -2,10 +2,15 @@
#include "utility/logging/logging.h"
-QtTcpWrapper::QtTcpWrapper(QObject* parent, const std::string& ip, const quint16 port)
+QtTcpWrapper::QtTcpWrapper(QObject* parent, const std::string& ip, const quint16 serverPort, const quint16 clientPort)
: QObject(parent)
- , m_port(port)
+ , m_serverPort(serverPort)
+ , m_clientPort(clientPort)
, m_ip(ip)
+{
+}
+
+void QtTcpWrapper::startListening()
{
QHostAddress address(m_ip.c_str());
@@ -13,7 +18,7 @@ QtTcpWrapper::QtTcpWrapper(QObject* parent, const std::string& ip, const quint16
connect(m_tcpServer, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
- if (!m_tcpServer->listen(QHostAddress::LocalHost, m_port))
+ if (!m_tcpServer->listen(QHostAddress::LocalHost, m_serverPort))
{
LOG_ERROR_STREAM(<< "TCP server failed to start with error: \"" + m_tcpServer->errorString().toStdString() + "\". Unable to listen for IDE plugin messages.");
}
@@ -54,6 +59,26 @@ void QtTcpWrapper::setReadCallback(const std::function
m_readCallback = callback;
}
+quint16 QtTcpWrapper::getServerPort() const
+{
+ return m_serverPort;
+}
+
+void QtTcpWrapper::setServerPort(const quint16 serverPort)
+{
+ m_serverPort = serverPort;
+}
+
+quint16 QtTcpWrapper::getClientPort() const
+{
+ return m_clientPort;
+}
+
+void QtTcpWrapper::setClientPort(const quint16 clientPort)
+{
+ m_clientPort = clientPort;
+}
+
void QtTcpWrapper::acceptConnection()
{
m_tcpClient = m_tcpServer->nextPendingConnection();
diff --git a/src/app/qt/network/QtTcpWrapper.h b/src/app/qt/network/QtTcpWrapper.h
index 55d70ce6..755a9984 100644
--- a/src/app/qt/network/QtTcpWrapper.h
+++ b/src/app/qt/network/QtTcpWrapper.h
@@ -13,13 +13,21 @@ class QtTcpWrapper : public QObject
Q_OBJECT
public:
- QtTcpWrapper(QObject* parent, const std::string& ip = "127.0.0.1", const quint16 port = 6667);
+ QtTcpWrapper(QObject* parent, const std::string& ip = "127.0.0.1", const quint16 serverPort = 6667, const quint16 clientPort = 6666);
~QtTcpWrapper();
+ void startListening();
+
void sendMessage(const std::string& message) const;
void setReadCallback(const std::function& callback);
+ quint16 getServerPort() const;
+ void setServerPort(const quint16 serverPort);
+
+ quint16 getClientPort() const;
+ void setClientPort(const quint16 clientPort);
+
signals:
public slots:
@@ -27,7 +35,8 @@ public slots:
void startRead();
private:
- quint16 m_port;
+ quint16 m_serverPort;
+ quint16 m_clientPort;
std::string m_ip;
std::function m_readCallback;
diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp
index ef8d3672..d98e33ce 100644
--- a/src/lib/settings/ApplicationSettings.cpp
+++ b/src/lib/settings/ApplicationSettings.cpp
@@ -115,6 +115,7 @@ std::vector ApplicationSettings::getRecentProjects() const
{
std::vector recentProjects;
std::vector loadedRecentProjects = getPathValues("user/recent_projects/recent_project");
+
for (FilePath project: loadedRecentProjects)
{
if (project.exists())
@@ -139,3 +140,23 @@ void ApplicationSettings::setUserHasSeenSettings(bool hasSeenSettings)
{
setValue("user/has_seen_settings", hasSeenSettings);
}
+
+int ApplicationSettings::getPluginPort() const
+{
+ return getValue("network/plugin_port", 6666);
+}
+
+void ApplicationSettings::setPluginPort(const int pluginPort)
+{
+ setValue("network/plugin_port", pluginPort);
+}
+
+int ApplicationSettings::getCoatiPort() const
+{
+ return getValue("network/coati_port", 6667);
+}
+
+void ApplicationSettings::setCoatiPort(const int coatiPort)
+{
+ setValue("network/coati_port", coatiPort);
+}
\ No newline at end of file
diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h
index 1835b106..a4dbe1c6 100644
--- a/src/lib/settings/ApplicationSettings.h
+++ b/src/lib/settings/ApplicationSettings.h
@@ -55,6 +55,13 @@ public:
std::vector getRecentProjects() const;
bool setRecentProjects(const std::vector& recentProjects);
+ // network
+ int getPluginPort() const;
+ void setPluginPort(const int pluginPort);
+
+ int getCoatiPort() const;
+ void setCoatiPort(const int coatiPort);
+
private:
ApplicationSettings();
ApplicationSettings(const ApplicationSettings&);