logic: visual studio solution parsing

Can now parse visual studio solutions. VS Plugin can send a command, parsing is implemented in Coati.
Some minor changes: added project file icon, added language check to vs plugin
This commit is contained in:
Manuel Dobusch
2016-02-08 15:58:25 +01:00
parent 29149f313a
commit e13eaa85da
46 changed files with 5139 additions and 253 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
* QT 5.5
* CxxTest 4.3
* Valgrind 3.9.0 (linux)
* Clang & LLVM (installation guide http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
* Clang & LLVM (doesnt quite work for windows, use unix setup below and skip all the ninja stuff)(installation guide http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
* Boost 1.59
* Eigen 3.2.6
* Botan 1.11.24
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

+9 -9
View File
@@ -1,23 +1,23 @@
#include "io.h"
// #include <iostream>
// #include <sstream>
// #include <string>
#include <iostream>
#include <sstream>
#include <string>
int io::numberIn() {
// std::string input;
// getline( std::cin, input );
// std::stringstream stream( input );
std::string input;
getline( std::cin, input );
std::stringstream stream( input );
int number;
// stream >> number;
stream >> number;
return number;
}
void io::numberOut(int num) {
// std::cout << num;
std::cout << num;
}
void io::stringOut(const char* str) {
// std::cout << str;
std::cout << str;
}
+192
View File
@@ -1,3 +1,176 @@
ConfigManager.cpp WARNING: value path/to/nowhere is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
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.
Node.cpp WARNING: Cannot change NodeType after it was already set from namespace to class
@@ -44,8 +217,23 @@ Edge.cpp ERROR: Nodes are not plain copies.
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
NetworkProtocolHelper.cpp ERROR: Failed to parse message, invalid type token
NetworkProtocolHelper.cpp ERROR: Failed to parse setActiveToken message, invalid token count
Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml
ConfigManager.cpp WARNING: value Bool is not present in config.
ConfigManager.cpp WARNING: value Int is not present in config.
ConfigManager.cpp WARNING: value Float is not present in config.
ConfigManager.cpp WARNING: value String is not present in config.
Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml
ConfigManager.cpp WARNING: value Bool is not present in config.
ConfigManager.cpp WARNING: value Int is not present in config.
ConfigManager.cpp WARNING: value Float is not present in config.
ConfigManager.cpp WARNING: value String is not present in config.
ConfigManager.cpp WARNING: value Bool is not present in config.
ConfigManager.cpp WARNING: value Int is not present in config.
ConfigManager.cpp WARNING: value Float is not present in config.
ConfigManager.cpp WARNING: value String is not present in config.
ConfigManager.cpp WARNING: value NewBool is not present in config.
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
INFO: typedef: type -> int <file.cpp 1:1 1:1>
@@ -147,3 +335,7 @@ TextAccess.cpp WARNING: Line numbers start with one, is 0
TextAccess.cpp WARNING: Line numbers start with one, is 0
TokenLocationCollection.cpp ERROR: Can't create TokenLocation with wrong boundaries.
TokenLocationCollection.cpp ERROR: Can't create TokenLocation with wrong boundaries.
SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\bin\test\data/vsSolutionParserTestSuite/..\src\lib\utility\solution\SolutionParserCMake.cpp"
SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\bin\test\data/vsSolutionParserTestSuite/..\src\lib\utility\solution\SolutionParserCMake.h"
SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageShowFile.h"
SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageShowSnippets.h"
File diff suppressed because one or more lines are too long
@@ -0,0 +1,143 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{DA1883F0-4E0B-4AFF-9F5F-CE775864A478}"
ProjectSection(ProjectDependencies) = postProject
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE} = {1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B} = {4C93DA19-9044-4CC2-B882-8BE3179BBC1B}
{CD5FE56F-D1AC-484E-9C6F-A36E77775749} = {CD5FE56F-D1AC-484E-9C6F-A36E77775749}
{59DBE515-BC0B-4FA1-9884-66C42732BAD1} = {59DBE515-BC0B-4FA1-9884-66C42732BAD1}
{FFEFE870-CA3B-41FB-8F26-808556BADFEC} = {FFEFE870-CA3B-41FB-8F26-808556BADFEC}
{DCB116BC-2AB9-40CC-969F-F282CB18F370} = {DCB116BC-2AB9-40CC-969F-F282CB18F370}
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36} = {B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Coati", "Coati.vcxproj", "{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}"
ProjectSection(ProjectDependencies) = postProject
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B} = {4C93DA19-9044-4CC2-B882-8BE3179BBC1B}
{CD5FE56F-D1AC-484E-9C6F-A36E77775749} = {CD5FE56F-D1AC-484E-9C6F-A36E77775749}
{59DBE515-BC0B-4FA1-9884-66C42732BAD1} = {59DBE515-BC0B-4FA1-9884-66C42732BAD1}
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Coati_lib", "Coati_lib.vcxproj", "{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}"
ProjectSection(ProjectDependencies) = postProject
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Coati_lib_gui", "Coati_lib_gui.vcxproj", "{CD5FE56F-D1AC-484E-9C6F-A36E77775749}"
ProjectSection(ProjectDependencies) = postProject
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36} = {B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Coati_lib_parser", "Coati_lib_parser.vcxproj", "{59DBE515-BC0B-4FA1-9884-66C42732BAD1}"
ProjectSection(ProjectDependencies) = postProject
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Coati_test", "Coati_test.vcxproj", "{FFEFE870-CA3B-41FB-8F26-808556BADFEC}"
ProjectSection(ProjectDependencies) = postProject
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B} = {4C93DA19-9044-4CC2-B882-8BE3179BBC1B}
{59DBE515-BC0B-4FA1-9884-66C42732BAD1} = {59DBE515-BC0B-4FA1-9884-66C42732BAD1}
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Coati_trial", "Coati_trial.vcxproj", "{DCB116BC-2AB9-40CC-969F-F282CB18F370}"
ProjectSection(ProjectDependencies) = postProject
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B} = {4C93DA19-9044-4CC2-B882-8BE3179BBC1B}
{CD5FE56F-D1AC-484E-9C6F-A36E77775749} = {CD5FE56F-D1AC-484E-9C6F-A36E77775749}
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{1ED030FB-B3D6-42D3-A1A0-265176C455DB}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "versionnumber", "versionnumber.vcxproj", "{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}"
ProjectSection(ProjectDependencies) = postProject
{1ED030FB-B3D6-42D3-A1A0-265176C455DB} = {1ED030FB-B3D6-42D3-A1A0-265176C455DB}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
MinSizeRel|Win32 = MinSizeRel|Win32
RelWithDebInfo|Win32 = RelWithDebInfo|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DA1883F0-4E0B-4AFF-9F5F-CE775864A478}.Debug|Win32.ActiveCfg = Debug|Win32
{DA1883F0-4E0B-4AFF-9F5F-CE775864A478}.Release|Win32.ActiveCfg = Release|Win32
{DA1883F0-4E0B-4AFF-9F5F-CE775864A478}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{DA1883F0-4E0B-4AFF-9F5F-CE775864A478}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.Debug|Win32.ActiveCfg = Debug|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.Debug|Win32.Build.0 = Debug|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.Release|Win32.ActiveCfg = Release|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.Release|Win32.Build.0 = Release|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{1F32D55F-217E-4DA3-9FC7-6D6928AAB0DE}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.Debug|Win32.ActiveCfg = Debug|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.Debug|Win32.Build.0 = Debug|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.Release|Win32.ActiveCfg = Release|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.Release|Win32.Build.0 = Release|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{4C93DA19-9044-4CC2-B882-8BE3179BBC1B}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.Debug|Win32.ActiveCfg = Debug|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.Debug|Win32.Build.0 = Debug|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.Release|Win32.ActiveCfg = Release|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.Release|Win32.Build.0 = Release|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{CD5FE56F-D1AC-484E-9C6F-A36E77775749}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.Debug|Win32.ActiveCfg = Debug|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.Debug|Win32.Build.0 = Debug|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.Release|Win32.ActiveCfg = Release|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.Release|Win32.Build.0 = Release|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{59DBE515-BC0B-4FA1-9884-66C42732BAD1}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.Debug|Win32.ActiveCfg = Debug|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.Debug|Win32.Build.0 = Debug|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.Release|Win32.ActiveCfg = Release|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.Release|Win32.Build.0 = Release|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{FFEFE870-CA3B-41FB-8F26-808556BADFEC}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.Debug|Win32.ActiveCfg = Debug|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.Debug|Win32.Build.0 = Debug|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.Release|Win32.ActiveCfg = Release|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.Release|Win32.Build.0 = Release|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{DCB116BC-2AB9-40CC-969F-F282CB18F370}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.Debug|Win32.ActiveCfg = Debug|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.Debug|Win32.Build.0 = Debug|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.Release|Win32.ActiveCfg = Release|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.Release|Win32.Build.0 = Release|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{1ED030FB-B3D6-42D3-A1A0-265176C455DB}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.Debug|Win32.ActiveCfg = Debug|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.Debug|Win32.Build.0 = Debug|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.Release|Win32.ActiveCfg = Release|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.Release|Win32.Build.0 = Release|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.MinSizeRel|Win32.ActiveCfg = MinSizeRel|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.MinSizeRel|Win32.Build.0 = MinSizeRel|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.RelWithDebInfo|Win32.ActiveCfg = RelWithDebInfo|Win32
{B5918FF6-3CD0-4CB2-9DDB-456F7318CD36}.RelWithDebInfo|Win32.Build.0 = RelWithDebInfo|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -27,13 +27,25 @@
}
"Entry"
{
"MsmKey" = "8:_036E57C4984B4D519AE705DC27702A21"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_037CA5C54AC54097A60194F7BF278651"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_096D033F5DF740A6B6B190652E5276AF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0AA7E092A0ED47FFA318EA67FACC0B6F"
"MsmKey" = "8:_0AD201C76EA849CFAEE2BBEA91772C06"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@@ -63,7 +75,7 @@
}
"Entry"
{
"MsmKey" = "8:_13A62AE76C7A4B14A4A5B828A2508896"
"MsmKey" = "8:_17E01ED758AE4C8DA24511FCB2EA736E"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@@ -111,6 +123,12 @@
}
"Entry"
{
"MsmKey" = "8:_2DA06C4E301647A58D13904DAE5A1010"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_2E166286273E4F7EA2228801AA8542FF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -153,6 +171,12 @@
}
"Entry"
{
"MsmKey" = "8:_38986F0870A14310AE4A8143F59891A8"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3BBDED2875CD458A87214C0E16E0125B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -165,12 +189,6 @@
}
"Entry"
{
"MsmKey" = "8:_3E99FE0A92C64DEFA3D6EB345808FF32"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3FCDDB859BC247E0B2634CBD56E2B763"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -237,6 +255,12 @@
}
"Entry"
{
"MsmKey" = "8:_55993726A36649E5A7357B132039C206"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5789409592134E888A27F1B86B9E4232"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -285,12 +309,24 @@
}
"Entry"
{
"MsmKey" = "8:_6A0708F3244C4AF6944941E76871C817"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_6C13C3D7D4344DFC9793B18AE5AF3212"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_6DCE7F30A54646F88FAE4D50F74EE4EA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_6E650850659A442CBDF2D6AA7B6024F5"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -303,12 +339,6 @@
}
"Entry"
{
"MsmKey" = "8:_7249F8BF91E94C32A5859172172B77A2"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_72D25F20F2A846EBAF0B281370F3FD7E"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -327,12 +357,6 @@
}
"Entry"
{
"MsmKey" = "8:_741F026634184D62942F9E450C0FA93B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7479C5FBBCFE42EDA0B21D03FBE38760"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -393,12 +417,6 @@
}
"Entry"
{
"MsmKey" = "8:_983DE5F9B1924F0B9097DA979959CFEC"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_99D9D3AEB2B146C1A349CBB62E3DD589"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -411,12 +429,6 @@
}
"Entry"
{
"MsmKey" = "8:_A2BDA15FF0F044D1819D655405F1977D"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A2CEB01FCC1B437F9D1F50FB9732BB99"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -483,6 +495,12 @@
}
"Entry"
{
"MsmKey" = "8:_B71FAEFCDCD34A8FB39491C4032DE7A0"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BA63BFA00BB2453AB1AAA53E5DCA9967"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -555,12 +573,6 @@
}
"Entry"
{
"MsmKey" = "8:_D3F2A29A2A684CC4BBB0488C81199AD2"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_D5448E383AD1484DB744028FAB7BB842"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -603,6 +615,12 @@
}
"Entry"
{
"MsmKey" = "8:_E89B5E761ABA49648750E4DBADC6EBFB"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EA117E55109E4929AD27B2D3FDF6AE2A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -1012,6 +1030,46 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_036E57C4984B4D519AE705DC27702A21"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\boost_filesystem-vc140-mt-1_59.dll"
"TargetName" = "8:boost_filesystem-vc140-mt-1_59.dll"
"Tag" = "8:"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_037CA5C54AC54097A60194F7BF278651"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\FiraSans_License.txt"
"TargetName" = "8:FiraSans_License.txt"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_096D033F5DF740A6B6B190652E5276AF"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\icon\\coati.ico"
@@ -1032,10 +1090,10 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0AA7E092A0ED47FFA318EA67FACC0B6F"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0AD201C76EA849CFAEE2BBEA91772C06"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\boost_system-vc120-mt-1_59.dll"
"TargetName" = "8:boost_system-vc120-mt-1_59.dll"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\boost_date_time-vc140-mt-1_59.dll"
"TargetName" = "8:boost_date_time-vc140-mt-1_59.dll"
"Tag" = "8:"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Condition" = "8:"
@@ -1132,12 +1190,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_13A62AE76C7A4B14A4A5B828A2508896"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_17E01ED758AE4C8DA24511FCB2EA736E"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\boost_filesystem-vc120-mt-1_59.dll"
"TargetName" = "8:boost_filesystem-vc120-mt-1_59.dll"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Bold.otf"
"TargetName" = "8:SourceCodePro-Bold.otf"
"Tag" = "8:"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -1292,6 +1350,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2DA06C4E301647A58D13904DAE5A1010"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\FiraSans-Regular.otf"
"TargetName" = "8:FiraSans-Regular.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2E166286273E4F7EA2228801AA8542FF"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\tictactoe.h"
@@ -1412,6 +1490,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_38986F0870A14310AE4A8143F59891A8"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro_License.txt"
"TargetName" = "8:SourceCodePro_License.txt"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3BBDED2875CD458A87214C0E16E0125B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\macro_1.png"
@@ -1452,26 +1550,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3E99FE0A92C64DEFA3D6EB345808FF32"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Regular.otf"
"TargetName" = "8:SourceCodePro-Regular.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FCDDB859BC247E0B2634CBD56E2B763"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\artificial_player.h"
@@ -1692,6 +1770,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_55993726A36649E5A7357B132039C206"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\FiraSans-SemiBold.otf"
"TargetName" = "8:FiraSans-SemiBold.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5789409592134E888A27F1B86B9E4232"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\graph_tutorial_4.h"
@@ -1852,6 +1950,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6A0708F3244C4AF6944941E76871C817"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\icon\\project.ico"
"TargetName" = "8:project.ico"
"Tag" = "8:"
"Folder" = "8:_D5F20C3B10A146A3ACB96AB52AD1FFA6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6C13C3D7D4344DFC9793B18AE5AF3212"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\maximize_active.png"
@@ -1872,6 +1990,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6DCE7F30A54646F88FAE4D50F74EE4EA"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\boost_system-vc140-mt-1_59.dll"
"TargetName" = "8:boost_system-vc140-mt-1_59.dll"
"Tag" = "8:"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6E650850659A442CBDF2D6AA7B6024F5"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\pattern.png"
@@ -1912,26 +2050,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7249F8BF91E94C32A5859172172B77A2"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\boost_date_time-vc120-mt-1_59.dll"
"TargetName" = "8:boost_date_time-vc120-mt-1_59.dll"
"Tag" = "8:"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_72D25F20F2A846EBAF0B281370F3FD7E"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\my_first_step.h"
@@ -1992,26 +2110,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_741F026634184D62942F9E450C0FA93B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Medium.otf"
"TargetName" = "8:SourceCodePro-Medium.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7479C5FBBCFE42EDA0B21D03FBE38760"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\enum_2.png"
@@ -2212,26 +2310,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_983DE5F9B1924F0B9097DA979959CFEC"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\MyriadPro-Regular.otf"
"TargetName" = "8:MyriadPro-Regular.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_99D9D3AEB2B146C1A349CBB62E3DD589"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\minimize_inactive.png"
@@ -2272,26 +2350,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A2BDA15FF0F044D1819D655405F1977D"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Bold.otf"
"TargetName" = "8:SourceCodePro-Bold.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A2CEB01FCC1B437F9D1F50FB9732BB99"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\typedef_3.png"
@@ -2512,6 +2570,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B71FAEFCDCD34A8FB39491C4032DE7A0"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Regular.otf"
"TargetName" = "8:SourceCodePro-Regular.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BA63BFA00BB2453AB1AAA53E5DCA9967"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\search_view\\search_view.css"
@@ -2732,26 +2810,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D3F2A29A2A684CC4BBB0488C81199AD2"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\MyriadPro-Semibold.otf"
"TargetName" = "8:MyriadPro-Semibold.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D5448E383AD1484DB744028FAB7BB842"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\startscreen\\logo_blurry.png"
@@ -2892,6 +2950,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E89B5E761ABA49648750E4DBADC6EBFB"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Medium.otf"
"TargetName" = "8:SourceCodePro-Medium.otf"
"Tag" = "8:"
"Folder" = "8:_10C56793A3844205AF9C78F869786AC6"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA117E55109E4929AD27B2D3FDF6AE2A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\io.h"
@@ -2981,7 +3059,7 @@
"Description" = "8:Coati project file"
"Extensions" = "8:.coatiproject"
"MIME" = "8:"
"Icon" = "8:_096D033F5DF740A6B6B190652E5276AF"
"Icon" = "8:_6A0708F3244C4AF6944941E76871C817"
"IconIndex" = "3:0"
"Command"
{
@@ -3350,7 +3428,7 @@
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Coati"
"ProductCode" = "8:{2A3B2FF5-A114-4CAB-88FB-DE8942D5B8EB}"
"PackageCode" = "8:{1FB7C5E9-FCA4-4EE0-B3B7-9677483310C1}"
"PackageCode" = "8:{5D9BE539-F957-474F-BAA8-12F8EF1CC46A}"
"UpgradeCode" = "8:{CFF09D53-87AF-4241-960D-98C21ED9D358}"
"AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE"
@@ -3551,7 +3629,7 @@
"Target" = "8:_321D6469331341CC94DB61F825F7C38D"
"Folder" = "8:_9537058B4FC1411F8480A52A91F7AB5C"
"WorkingFolder" = "8:_A96454F2CE0E4C55B59EDE1094D40E56"
"Icon" = "8:"
"Icon" = "8:_6A0708F3244C4AF6944941E76871C817"
"Feature" = "8:"
}
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_5EEE826460D748F98304CF1E4BAF5D35"
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -35,32 +35,55 @@
<Group guid="guidCoatiPluginCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
</Group>
<Group guid="guidCoatiPluginCmdSet" id="TopLevelMenu" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_MAINMENU"/>
</Group>
<Group guid="guidCoatiPluginCmdSet" id="SubMenu" priority="0x0600">
<Parent guid="guidCoatiPluginCmdSet" id="TopLevelMenu"/>
</Group>
</Groups>
<!--Buttons section. -->
<!--This section defines the elements the user can interact with, like a menu command or a button
or combo box in a toolbar. -->
<Buttons>
<!--To define a menu group you have to specify its ID, the parent menu and its display priority.
The command is visible and enabled by default. If you need to change the visibility, status, etc, you can use
the CommandFlag node.
You can add more than one CommandFlag node e.g.:
<CommandFlag>DefaultInvisible</CommandFlag>
<CommandFlag>DynamicVisibility</CommandFlag>
If you do not want an image next to your command, remove the Icon node /> -->
<Button guid="guidCoatiPluginCmdSet" id="cmdidCoatiSetActiveToken" priority="0x0100" type="Button">
<Parent guid="guidCoatiPluginCmdSet" id="MyMenuGroup" />
<Icon guid="icon" id="icon0" />
<Strings>
<ButtonText>Set active Token</ButtonText>
</Strings>
</Button>
<Parent guid="guidCoatiPluginCmdSet" id="MyMenuGroup" />
<Icon guid="icon" id="icon0" />
<Strings>
<ButtonText>Set active Token</ButtonText>
</Strings>
</Button>
<Button guid="guidCoatiPluginCmdSet" id="cmdidCoatiCreateProject" priority="0x0100" type="Button">
<Parent guid="guidCoatiPluginCmdSet" id="MyMenuGroup" />
<Icon guid="icon" id="icon0" />
<Strings>
<ButtonText>Create Coati Project</ButtonText>
</Strings>
</Button>
<Button guid="guidCoatiPluginCmdSet" id="cmdidCoatiCreateProject" priority="0x0100" type="Button">
<Parent guid="guidCoatiPluginCmdSet" id="SubMenu" />
<Icon guid="icon" id="icon0" />
<Strings>
<ButtonText>Create Coati Project</ButtonText>
</Strings>
</Button>
</Buttons>
<Menus>
<Menu guid="guidCoatiPluginCmdSet" id="TopLevelMenu" priority="0x700" type="Menu">
<Parent guid="guidSHLMainMenu"
id="IDG_VS_MM_TOOLSADDINS"/>
<Strings>
<ButtonText>Coati</ButtonText>
<CommandName>Coati</CommandName>
</Strings>
</Menu>
</Menus>
</Commands>
@@ -81,6 +104,9 @@
<IDSymbol name="cmdidCoatiGetActiveFileName" value="0x0102"/>
<IDSymbol name="cmdidCoatiGetActiveLineNumber" value="0x0103"/>
<IDSymbol name="cmdidCoatiSetActiveToken" value="0x0104"/>
<IDSymbol name="cmdidCoatiCreateProject" value="0x0105"/>
<IDSymbol name="TopLevelMenu" value="0x1021"/>
<IDSymbol name="SubMenu" value="0x1022"/>
</GuidSymbol>
@@ -18,6 +18,8 @@ using System.Collections.Generic;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
// using System.Windows.Forms.
namespace CoatiSoftware.CoatiPlugin
{
@@ -76,6 +78,11 @@ namespace CoatiSoftware.CoatiPlugin
public sealed class CoatiPluginPackage : Package
{
private MenuCommand _menuItemSetActiveToken = null;
private MenuCommand _menuItemCreateProject = null;
private SolutionEvents _solutionEvents = null;
public uint ServerPort
{
get
@@ -114,9 +121,52 @@ namespace CoatiSoftware.CoatiPlugin
if ( null != mcs )
{
CommandID setActiveTokenCommandID = new CommandID(GuidList.guidCoatiPluginCmdSet, (int)PkgCmdIDList.cmdidCoatiSetActiveToken);
MenuCommand menuItemSetActiveToken = new MenuCommand(MenuItemCallback, setActiveTokenCommandID);
mcs.AddCommand(menuItemSetActiveToken);
CommandID createProjectID = new CommandID(GuidList.guidCoatiPluginCmdSet, (int)PkgCmdIDList.cmdidCoatiCreateProject); // cmdidCoatiCreateProject
_menuItemSetActiveToken = new MenuCommand(MenuItemCallback, setActiveTokenCommandID);
_menuItemCreateProject = new MenuCommand(MenuItemCallback, createProjectID);
_menuItemCreateProject.Enabled = false;
_menuItemSetActiveToken.Enabled = false;
mcs.AddCommand(_menuItemSetActiveToken);
mcs.AddCommand(_menuItemCreateProject);
}
DTE dte = (DTE)GetService(typeof(DTE));
_solutionEvents = dte.Events.SolutionEvents;
_solutionEvents.Opened += OnSolutionOpened;
_solutionEvents.AfterClosing += OnSolutionClosed;
}
void OnSolutionOpened()
{
DTE dte = (DTE)GetService(typeof(DTE));
List<String> languages = SolutionUtility.GetSolutionLanguages(dte);
bool enable = true;
foreach (String language in languages)
{
if(language != CodeModelLanguageConstants.vsCMLanguageVC
&& language != CodeModelLanguageConstants.vsCMLanguageMC)
{
enable = false;
}
}
if(enable)
{
_menuItemSetActiveToken.Enabled = true;
_menuItemCreateProject.Enabled = true;
}
}
void OnSolutionClosed()
{
_menuItemSetActiveToken.Enabled = false;
_menuItemCreateProject.Enabled = false;
}
private void InitNetwork()
@@ -132,6 +182,8 @@ namespace CoatiSoftware.CoatiPlugin
AsynchronousClient._onErrorCallback = new AsynchronousSocketListener.OnReadCallback(OnNetworkErrorCallback);
}
private void MenuItemCallback(object sender, EventArgs e)
{
MenuCommand menuCommand = sender as MenuCommand;
@@ -148,8 +200,16 @@ namespace CoatiSoftware.CoatiPlugin
int lineNumber = FileUtility.GetActiveLineNumber(dte);
int columnNumber = FileUtility.GetActiveColumnNumber(dte);
string message = NetworkProtocolUtility.createOutMessage(filePath + fileName, lineNumber, columnNumber);
string message = NetworkProtocolUtility.createActivateTokenMessage(filePath + fileName, lineNumber, columnNumber);
AsynchronousClient.Send(message);
}
else if(menuCommand.CommandID.ID == (int)PkgCmdIDList.cmdidCoatiCreateProject)
{
string solutionName = SolutionUtility.GetSolutionPath(dte);
string message = NetworkProtocolUtility.createCreateProjectMessage(solutionName);
AsynchronousClient.Send(message);
}
}
@@ -157,7 +217,7 @@ namespace CoatiSoftware.CoatiPlugin
private void OnNetworkReadCallback(string message)
{
NetworkProtocolUtility.CursorPosition cursorPosition = NetworkProtocolUtility.parseInMessage(message);
NetworkProtocolUtility.CursorPosition cursorPosition = NetworkProtocolUtility.parseSetCursorMessage(message);
if (cursorPosition.Valid)
{
cursorPosition.ColumnNumber += 1; // VS counts columns starting at 1, coati starts at 0
@@ -13,6 +13,9 @@ namespace CoatiSoftware.CoatiPlugin
private static string s_moveCursorPrefix = "moveCursor";
private static string s_endOfMessageToken = "<EOM>";
private static string s_createProjectPrefix = "createProject";
private static string s_ideId = "vs";
public class CursorPosition
{
private string _filePath = "";
@@ -45,7 +48,7 @@ namespace CoatiSoftware.CoatiPlugin
}
}
public static string createOutMessage(string filePath, int lineNumber, int columnNumber)
public static string createActivateTokenMessage(string filePath, int lineNumber, int columnNumber)
{
string message = s_setActiveTokenPrefix;
@@ -66,10 +69,24 @@ namespace CoatiSoftware.CoatiPlugin
return message;
}
/**
* TODO: debug
*/
public static CursorPosition parseInMessage(string message)
public static string createCreateProjectMessage(string solutionPath)
{
string message = s_createProjectPrefix;
message += s_divider;
message += solutionPath;
message += s_divider;
message += s_ideId;
message += s_endOfMessageToken;
return message;
}
public static CursorPosition parseSetCursorMessage(string message)
{
CursorPosition result = new CursorPosition();
@@ -7,5 +7,6 @@ namespace CoatiSoftware.CoatiPlugin
static class PkgCmdIDList
{
public const uint cmdidCoatiSetActiveToken = 0x104;
public const uint cmdidCoatiCreateProject = 0x105;
};
}
@@ -9,6 +9,13 @@ namespace CoatiSoftware.CoatiPlugin
{
class SolutionUtility
{
public static String GetSolutionPath(DTE dte)
{
EnvDTE.Solution solution = dte.Solution;
return solution.FullName;
}
public static List<String> GetSolutionProjects(DTE dte)
{
List<String> projectNames = new List<String>();
@@ -50,5 +57,23 @@ namespace CoatiSoftware.CoatiPlugin
return projectItems;
}
public static List<String> GetSolutionLanguages(DTE dte)
{
List<String> languages = new List<String>();
EnvDTE.Solution solution = dte.Solution;
EnvDTE.Projects projects = solution.Projects;
foreach (EnvDTE.Project project in projects)
{
string language = project.CodeModel.Language;
languages.Add(language);
}
languages = languages.Distinct().ToList();
return languages;
}
}
}
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="acf15780-03b5-440e-a41e-db79b7043fc2" Version="0.1.3" Language="en-US" Publisher="Coati Software" />
<Identity Id="acf15780-03b5-440e-a41e-db79b7043fc2" Version="0.4.1" Language="en-US" Publisher="Coati Software" />
<DisplayName>CoatiPlugin</DisplayName>
<Description xml:space="preserve">This package allows Coati to communicate with Visual Studio and vice versa.</Description>
<Icon>coati.ico</Icon>
+1
View File
@@ -51,6 +51,7 @@ if [ $PLATFORM == "Windows" ]; then
cmd //c 'mklink /d /j '.$MY_PATH.'\..\bin\app\Debug\data '.$MY_PATH.'\..\bin\app\data' &
cmd //c 'mklink /d /j '.$MY_PATH.'\..\bin\app\Release\data '.$MY_PATH.'\..\bin\app\data' &
fi
# Setup both Debug and Release configuration
+3
View File
@@ -18,6 +18,9 @@
#include "version.h"
#include "utility/solution/SolutionParserVisualStudio.h"
#include "settings/ProjectSettings.h"
void init()
{
std::shared_ptr<ConsoleLogger> consoleLogger = std::make_shared<ConsoleLogger>();
+6
View File
@@ -237,6 +237,7 @@ add_files(
utility/messaging/type/MessageInterruptTasks.h
utility/messaging/type/MessageLoadProject.h
utility/messaging/type/MessageMoveIDECursor.h
utility/messaging/type/MessageNewProject.h
utility/messaging/type/MessageRedo.h
utility/messaging/type/MessageRefresh.h
utility/messaging/type/MessageResetZoom.h
@@ -273,6 +274,11 @@ add_files(
utility/scheduling/TaskScheduler.cpp
utility/scheduling/TaskScheduler.h
utility/solution/ISolutionParser.cpp
utility/solution/ISolutionParser.h
utility/solution/SolutionParserVisualStudio.cpp
utility/solution/SolutionParserVisualStudio.h
utility/text/Dictionary.cpp
utility/text/Dictionary.h
utility/text/TextAccess.cpp
@@ -1,14 +1,18 @@
#include "IDECommunicationController.h"
#include "component/controller/helper/NetworkProtocolHelper.h"
#include "data/access/StorageAccess.h"
#include "data/location/TokenLocationFile.h"
#include "data/location/TokenLocation.h"
#include "utility/messaging/type/MessageActivateTokenLocations.h"
#include "utility/messaging/type/MessageActivateWindow.h"
#include "utility/messaging/type/MessageLoadProject.h"
#include "utility/messaging/type/MessageStatus.h"
#include "utility/messaging/type/MessageNewProject.h"
#include "utility/logging/logging.h"
#include "utility/solution/SolutionParserVisualStudio.h"
#include "settings/ProjectSettings.h"
IDECommunicationController::IDECommunicationController(StorageAccess* storageAccess)
: m_storageAccess(storageAccess)
@@ -21,30 +25,44 @@ IDECommunicationController::~IDECommunicationController()
void IDECommunicationController::handleIncomingMessage(const std::string& message)
{
LOG_WARNING_STREAM(<< message);
NetworkProtocolHelper::MESSAGE_TYPE type = NetworkProtocolHelper::getMessageType(message);
NetworkProtocolHelper::NetworkMessage parsedMessage = NetworkProtocolHelper::parseMessage(message);
if (parsedMessage.valid)
if (type == NetworkProtocolHelper::MESSAGE_TYPE::UNKNOWN)
{
const unsigned int cursorColumn = parsedMessage.column;
LOG_ERROR_STREAM(<< "Invalid message type");
}
else if (type == NetworkProtocolHelper::MESSAGE_TYPE::SET_ACTIVE_TOKEN)
{
handleSetActiveTokenMessage(NetworkProtocolHelper::parseSetActiveTokenMessage(message));
}
else
{
handleCreateProjectMessage(NetworkProtocolHelper::parseCreateProjectMessage(message));
}
}
void IDECommunicationController::handleSetActiveTokenMessage(const NetworkProtocolHelper::SetActiveTokenMessage& message)
{
if (message.valid)
{
const unsigned int cursorColumn = message.column;
std::shared_ptr<TokenLocationFile> tokenLocationFile = m_storageAccess->getTokenLocationsForLinesInFile(
parsedMessage.fileLocation, parsedMessage.row, parsedMessage.row
);
message.fileLocation, message.row, message.row
);
std::vector<Id> selectedLocationIds;
tokenLocationFile->forEachStartTokenLocation(
[&](TokenLocation* startLocation)
{
TokenLocation* endLocation = startLocation->getEndTokenLocation();
{
TokenLocation* endLocation = startLocation->getEndTokenLocation();
if (!startLocation->isScopeTokenLocation() &&
startLocation->getColumnNumber() <= cursorColumn && endLocation->getColumnNumber() + 1 >= cursorColumn)
{
selectedLocationIds.push_back(startLocation->getId());
}
if (!startLocation->isScopeTokenLocation() &&
startLocation->getColumnNumber() <= cursorColumn && endLocation->getColumnNumber() + 1 >= cursorColumn)
{
selectedLocationIds.push_back(startLocation->getId());
}
}
);
if (selectedLocationIds.size() > 0)
@@ -57,7 +75,53 @@ void IDECommunicationController::handleIncomingMessage(const std::string& messag
{
MessageStatus(
"Activating a source location from external failed. No symbol(s) have been found at the selected location."
).dispatch();
).dispatch();
}
}
}
void IDECommunicationController::handleCreateProjectMessage(const NetworkProtocolHelper::CreateProjectMessage& message)
{
if (message.valid)
{
if (message.ideId == NetworkProtocolHelper::CreateProjectMessage::IDE_ID::VS)
{
SolutionParserVisualStudio parser;
parser.openSolutionFile(message.solutionFileLocation);
std::vector<std::string> includePaths = parser.getIncludePaths();
std::vector<std::string> projectItems = parser.getProjectItems();
std::vector<FilePath> projectFPs;
std::vector<FilePath> includeFPs;
for (unsigned int i = 0; i < projectItems.size(); i++)
{
projectFPs.push_back(FilePath(projectItems[i]));
}
for (unsigned int i = 0; i < includePaths.size(); i++)
{
includeFPs.push_back(FilePath(includePaths[i]));
}
/*ProjectSettings* projSettings = ProjectSettings::getInstance().get();
projSettings->clear();
projSettings->setLanguage("c++");
projSettings->setStandard("11");
projSettings->setSourcePaths(projectFPs);
projSettings->setHeaderSearchPaths(includeFPs);
std::string filePath = parser.getSolutionPath() + parser.getSolutionName() + ".coatiproject";
projSettings->save(filePath);*/
MessageNewProject(parser.getSolutionName(), parser.getSolutionPath(), projectItems, includePaths).dispatch();
}
else
{
LOG_ERROR_STREAM(<< "Unable to parse provided solution, unknown format");
}
}
}
@@ -5,6 +5,8 @@
#include "component/controller/Controller.h"
#include "component/controller/helper/NetworkProtocolHelper.h"
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageMoveIDECursor.h"
@@ -21,6 +23,9 @@ public:
void handleIncomingMessage(const std::string& message);
private:
void handleSetActiveTokenMessage(const NetworkProtocolHelper::SetActiveTokenMessage& message);
void handleCreateProjectMessage(const NetworkProtocolHelper::CreateProjectMessage& message);
virtual void handleMessage(MessageMoveIDECursor* message);
virtual void sendMessage(const std::string& message) const = 0;
@@ -3,38 +3,119 @@
#include <sstream>
#include <string>
#include "utility/logging/logging.h"
std::string NetworkProtocolHelper::m_divider = ">>";
std::string NetworkProtocolHelper::m_setActiveTokenPrefix = "setActiveToken";
std::string NetworkProtocolHelper::m_moveCursorPrefix = "moveCursor";
std::string NetworkProtocolHelper::m_endOfMessageToken = "<EOM>";
std::string NetworkProtocolHelper::m_createProjectPrefix = "createProject";
NetworkProtocolHelper::NetworkMessage NetworkProtocolHelper::parseMessage(const std::string& message)
NetworkProtocolHelper::MESSAGE_TYPE NetworkProtocolHelper::getMessageType(const std::string& message)
{
NetworkMessage networkMessage;
size_t pos = message.find(m_setActiveTokenPrefix);
std::vector<std::string> subMessages = divideMessage(message);
if(pos != std::string::npos)
if (subMessages.size() > 0)
{
std::string tmpMessage = "";
getSubstringAfterString(message, m_divider, tmpMessage); // just get rid of message type
tmpMessage = removeEndOfMessageToken(tmpMessage);
if (subMessages[0] == m_setActiveTokenPrefix)
{
return MESSAGE_TYPE::SET_ACTIVE_TOKEN;
}
else if (subMessages[0] == m_createProjectPrefix)
{
return MESSAGE_TYPE::CREATE_PROJECT;
}
else
{
return MESSAGE_TYPE::UNKNOWN;
}
}
return MESSAGE_TYPE::UNKNOWN;
}
std::string fileLocation = getSubstringAfterString(tmpMessage, m_divider, tmpMessage);
std::string row = getSubstringAfterString(tmpMessage, m_divider, tmpMessage);
std::string column = tmpMessage; // there should be nothing left in the message but the column number
NetworkProtocolHelper::SetActiveTokenMessage NetworkProtocolHelper::parseSetActiveTokenMessage(const std::string& message)
{
std::vector<std::string> subMessages = divideMessage(message);
if(
fileLocation.length() > 0
&& row.length() > 0
&& column.length() > 0
&& isDigits(row)
&& isDigits(column)
){
networkMessage.fileLocation = fileLocation;
networkMessage.row = std::stoi(row);
networkMessage.column = std::stoi(column);
networkMessage.valid = true;
SetActiveTokenMessage networkMessage;
if (subMessages.size() > 0)
{
if (subMessages[0] == m_setActiveTokenPrefix)
{
if (subMessages.size() != 5)
{
LOG_ERROR_STREAM(<< "Failed to parse setActiveToken message, invalid token count");
}
else
{
std::string fileLocation = subMessages[1];
std::string row = subMessages[2];
std::string column = subMessages[3];
if(
fileLocation.length() > 0
&& row.length() > 0
&& column.length() > 0
&& isDigits(row)
&& isDigits(column)
){
networkMessage.fileLocation = fileLocation;
networkMessage.row = std::stoi(row);
networkMessage.column = std::stoi(column);
networkMessage.valid = true;
}
}
}
else
{
LOG_ERROR_STREAM(<< "Failed to parse message, invalid type token");
}
}
return networkMessage;
}
NetworkProtocolHelper::CreateProjectMessage NetworkProtocolHelper::parseCreateProjectMessage(const std::string& message)
{
std::vector<std::string> subMessages = divideMessage(message);
NetworkProtocolHelper::CreateProjectMessage networkMessage;
if (subMessages.size() > 0)
{
if (subMessages[0] == m_createProjectPrefix)
{
if (subMessages.size() != 4)
{
LOG_ERROR_STREAM(<< "Failed to parse createProject message, invalid token count");
}
else
{
std::string fileLocation = subMessages[1];
std::string ideId = subMessages[2];
if (fileLocation.length() > 0
&& ideId.length() > 0)
{
networkMessage.solutionFileLocation = fileLocation;
if (ideId == "vs")
{
networkMessage.ideId = CreateProjectMessage::IDE_ID::VS;
}
else
{
networkMessage.ideId = CreateProjectMessage::IDE_ID::UNKNOWN;
}
networkMessage.valid = true;
}
}
}
else
{
LOG_ERROR_STREAM(<< "Failed to parse message, invalid type token");
}
}
@@ -57,6 +138,36 @@ std::string NetworkProtocolHelper::buildMessage(const std::string& fileLocation,
return messageStream.str();
}
std::vector<std::string> NetworkProtocolHelper::divideMessage(const std::string& message)
{
std::vector<std::string> result;
std::string msg = message;
size_t pos = msg.find(m_divider);
while (pos != std::string::npos)
{
std::string subMessage = msg.substr(0, pos);
result.push_back(subMessage);
msg = msg.substr(pos + m_divider.size());
pos = msg.find(m_divider);
}
if (msg.size() > 0)
{
pos = msg.find(m_endOfMessageToken);
if (pos != std::string::npos)
{
std::string subMessage = msg.substr(0, pos);
result.push_back(subMessage);
msg = msg.substr(pos);
result.push_back(msg);
}
}
return result;
}
std::string NetworkProtocolHelper::removeEndOfMessageToken(const std::string& message)
{
size_t pos = message.find(m_endOfMessageToken);
@@ -2,14 +2,15 @@
#define NETWORK_PROTOCOL_HELPER_H
#include <string>
#include <vector>
class NetworkProtocolHelper
{
public:
struct NetworkMessage
struct SetActiveTokenMessage
{
public:
NetworkMessage()
SetActiveTokenMessage()
: fileLocation("")
, row(0)
, column(0)
@@ -22,10 +23,43 @@ public:
bool valid;
};
static NetworkMessage parseMessage(const std::string& message);
struct CreateProjectMessage
{
public:
CreateProjectMessage()
: solutionFileLocation("")
, ideId(IDE_ID::UNKNOWN)
, valid(false)
{}
enum IDE_ID
{
UNKNOWN = 0,
VS
};
std::string solutionFileLocation;
IDE_ID ideId;
bool valid;
};
enum MESSAGE_TYPE
{
UNKNOWN = 0,
SET_ACTIVE_TOKEN,
CREATE_PROJECT
};
static MESSAGE_TYPE getMessageType(const std::string& message);
static SetActiveTokenMessage parseSetActiveTokenMessage(const std::string& message);
static CreateProjectMessage parseCreateProjectMessage(const std::string& message);
static std::string buildMessage(const std::string& fileLocation, const unsigned int row, const unsigned int column);
private:
static std::vector<std::string> divideMessage(const std::string& message);
static std::string removeEndOfMessageToken(const std::string& message);
static std::string getSubstringAfterString(const std::string& message, const std::string& searchString, std::string& subMessage);
@@ -35,6 +69,7 @@ private:
static std::string m_setActiveTokenPrefix;
static std::string m_moveCursorPrefix;
static std::string m_endOfMessageToken;
static std::string m_createProjectPrefix;
};
#endif // NETWORK_PROTOCOL_HELPER_H
@@ -0,0 +1,33 @@
#ifndef MESSAGE_NEW_PROJECT_H
#define MESSAGE_NEW_PROJECT_H
#include "utility/messaging/Message.h"
class MessageNewProject : public Message<MessageNewProject>
{
public:
MessageNewProject(const std::string& projectName, const std::string projectLocation,
const std::vector<std::string>& sourceFiles, const std::vector<std::string>& includePaths)
: projectName(projectName)
, projectLocation(projectLocation)
, projectSourceFiles(sourceFiles)
, projectIncludePaths(includePaths)
{
}
static const std::string getStaticType()
{
return "MessageNewProject";
}
virtual void print(std::ostream& os) const
{
}
const std::string projectName;
const std::string projectLocation;
const std::vector<std::string> projectSourceFiles;
const std::vector<std::string> projectIncludePaths;
};
#endif // MESSAGE_NEW_PROJECT_H
@@ -0,0 +1,48 @@
#include "ISolutionParser.h"
std::string ISolutionParser::getSolutionPath()
{
return m_solutionPath;
}
void ISolutionParser::openSolutionFile(const std::string& solutionFilePath)
{
m_solution = loadFile(solutionFilePath);
size_t pos = solutionFilePath.find_last_of("/");
if (pos == std::string::npos)
{
pos = solutionFilePath.find_last_of("\\");
}
if (pos != std::string::npos)
{
if (pos > 0)
{
pos += 1;
}
m_solutionPath = solutionFilePath.substr(0, pos);
m_solutionName = solutionFilePath.substr(pos);
}
}
unsigned int ISolutionParser::getSolutionCharCount() const
{
return m_solution.size();
}
std::string ISolutionParser::loadFile(const std::string& filePath)
{
std::string file = "";
std::ifstream ifstream;
ifstream.open(filePath);
if (ifstream.is_open())
{
file = std::string(std::istreambuf_iterator<char>(ifstream), std::istreambuf_iterator<char>());
}
return file;
}
@@ -0,0 +1,34 @@
#ifndef I_SOLUTION_PARSER_H
#define I_SOLUTION_PARSER_H
#include <fstream>
#include <vector>
class ISolutionParser
{
public:
ISolutionParser()
: m_solutionPath("")
, m_solution("")
{};
virtual ~ISolutionParser(){};
void openSolutionFile(const std::string& solutionFilePath);
unsigned int getSolutionCharCount() const;
virtual std::string getSolutionName() = 0; // to be overwritten to account for different file endings
std::string getSolutionPath();
virtual std::vector<std::string> getProjects() = 0;
virtual std::vector<std::string> getProjectFiles() = 0;
virtual std::vector<std::string> getProjectItems() = 0;
protected:
std::string loadFile(const std::string& filePath);
std::string m_solutionName;
std::string m_solutionPath;
std::string m_solution;
};
#endif // I_SOLUTION_PARSER_H
@@ -0,0 +1,18 @@
#include "SolutionParserCMake.h"
SolutionParserCMake::SolutionParserCMake()
{
}
SolutionParserCMake::~SolutionParserCMake()
{
}
std::vector<std::string> SolutionParserCMake::getProjects()
{
std::vector<std::string> projects;
return projects;
}
@@ -0,0 +1,16 @@
#ifndef SOLUTION_PARSER_C_MAKE_H
#define SOLUTION_PARSER_C_MAKE_H
#include "ISolutionParser.h"
class SolutionParserCMake : public ISolutionParser
{
public:
SolutionParserCMake();
virtual ~SolutionParserCMake();
virtual std::vector<std::string> getProjects();
virtual std::vector<std::string> getProjectFiles();
};
#endif // SOLUTION_PARSER_C_MAKE_H
@@ -0,0 +1,604 @@
#include "SolutionParserVisualStudio.h"
#include <algorithm>
#include <cstdlib>
#include <set>
#include "boost/filesystem/path.hpp"
#include "boost/filesystem.hpp"
#include "utility/logging/logging.h"
SolutionParserVisualStudio::SolutionParserVisualStudio()
{
}
SolutionParserVisualStudio::~SolutionParserVisualStudio()
{
}
std::string SolutionParserVisualStudio::getSolutionName()
{
std::string result = "";
if (m_solutionName.size() > 0)
{
size_t pos = m_solutionName.find(".sln");
if (pos != std::string::npos)
{
result = m_solutionName.substr(0, pos);
}
else
{
result = m_solution;
}
}
return result;
}
std::vector<std::string> SolutionParserVisualStudio::getProjects()
{
std::vector<std::string> projectFiles;
if (m_solution.size() > 0)
{
std::vector<std::string> blocks = getProjectBlocks(m_solution);
for (unsigned int i = 0; i < blocks.size(); i++)
{
projectFiles.push_back(getProjectFilePath(blocks[i]));
}
}
return projectFiles;
}
std::vector<std::string> SolutionParserVisualStudio::getProjectFiles()
{
std::vector<std::string> projectFiles;
std::vector<std::string> projectFilesNames = getProjects();
for (unsigned int i = 0; i < projectFilesNames.size(); i++)
{
projectFiles.push_back(loadFile(m_solutionPath + projectFilesNames[i]));
}
//projectFiles.push_back(loadFile(m_solutionPath + "foo.xml"));
return projectFiles;
}
std::vector<std::string> SolutionParserVisualStudio::getProjectItems()
{
std::vector<std::string> projectItems;
std::vector<std::string> projectFilesNames = getProjects();
std::vector<std::string> projectFiles = getProjectFiles();
std::vector<std::string> relativeProjectPaths;
for (unsigned int i = 0; i < projectFilesNames.size(); i++)
{
size_t pos = projectFilesNames[i].find_last_of("/");
if (pos == std::string::npos)
{
pos = projectFilesNames[i].find_last_of("\\");
}
if (pos != std::string::npos)
{
relativeProjectPaths.push_back(projectFilesNames[i].substr(0, pos));
}
else
{
relativeProjectPaths.push_back("");
}
}
for (unsigned int i = 0; i < projectFiles.size(); i++)
{
TiXmlDocument doc;
doc.Parse(projectFiles[i].c_str(), 0, TIXML_ENCODING_UTF8);
std::string error = doc.ErrorDesc();
if (error.length() > 0)
{
LOG_ERROR_STREAM(<< "Failed to parse project file " << i << ": " << error);
continue;
}
TiXmlElement* root = getFirstTagByNameWithAttribute(doc.RootElement(), "ClCompile", "Include");
if (root != NULL)
{
// std::string text(root->GetText());
std::string tag = root->Value();
std::string text = "";
if (root->Attribute("Include") != NULL)
{
text = root->Attribute("Include");
}
if (text.find(".cpp") == std::string::npos)
{
root = NULL;
}
else
{
root = root->Parent()->ToElement();
}
}
if (root == NULL)
{
TiXmlElement* root = getFirstTagByNameWithAttribute(doc.RootElement(), "ClInclude", "Include");
if (root != NULL)
{
root = root->Parent()->ToElement();
}
else
{
root = NULL;
}
}
if (root != NULL)
{
for (TiXmlElement* child = root->FirstChildElement(); child != NULL; child = child->NextSiblingElement())
{
std::string filePath = child->Attribute("Include");
if (relativeProjectPaths[i].size() > 0)
{
filePath = relativeProjectPaths[i] + "/" + filePath;
}
projectItems.push_back(filePath);
}
}
}
std::set<std::string> s(projectItems.begin(), projectItems.end());
projectItems.assign(s.begin(), s.end());
projectItems = resolveEnvironmentVariables(projectItems);
projectItems = makePathsAbsolute(projectItems);
projectItems = makePathsCanonical(projectItems);
return projectItems;
}
std::vector<std::string> SolutionParserVisualStudio::getIncludePaths()
{
std::vector<std::string> includePaths;
std::vector<std::string> projectFiles = getProjectFiles();
for (unsigned int i = 0; i < projectFiles.size(); i++)
{
TiXmlDocument doc;
doc.Parse(projectFiles[i].c_str(), 0, TIXML_ENCODING_UTF8);
std::string error = doc.ErrorDesc();
if (error.length() > 0)
{
LOG_ERROR_STREAM(<< "Failed to parse project file " << i << ": " << error);
continue;
}
std::vector<TiXmlElement*> nodes = getAllTagsByName(doc.RootElement(), "AdditionalIncludeDirectories");
for (unsigned int j = 0; j < nodes.size(); j++)
{
includePaths.push_back(nodes[j]->GetText());
}
}
includePaths = seperateIncludePaths(includePaths);
std::set<std::string> s(includePaths.begin(), includePaths.end());
includePaths.assign(s.begin(), s.end());
includePaths = resolveEnvironmentVariables(includePaths);
includePaths = makePathsAbsolute(includePaths);
includePaths = makePathsCanonical(includePaths);
return includePaths;
}
std::vector<std::string> SolutionParserVisualStudio::getProjectBlocks(const std::string& solution) const
{
std::vector<std::string> blocks;
std::string subSolution = solution;
std::string solutionOpenTag = "\nProject";
std::string solutionCloseTag = "\nEndProject";
size_t blockStart = subSolution.find(solutionOpenTag, 0);
size_t blockEnd = subSolution.find(solutionCloseTag, 0);
while (blockStart != std::string::npos && blockEnd != std::string::npos)
{
std::string block = subSolution.substr(blockStart, blockEnd - blockStart + solutionCloseTag.size());
if (subSolution.size() > blockEnd + solutionCloseTag.size())
{
subSolution = subSolution.substr(blockEnd + solutionCloseTag.size());
}
else
{
subSolution = "";
}
blockStart = subSolution.find(solutionOpenTag);
blockEnd = subSolution.find(solutionCloseTag);
blocks.push_back(block);
}
return blocks;
}
std::string SolutionParserVisualStudio::getProjectFilePath(const std::string& projectBlock) const
{
std::string projectFilePath;
std::string fileEnding = "vcxproj";
size_t pos = projectBlock.find(fileEnding);
if (pos != std::string::npos)
{
std::string searchArea = projectBlock.substr(0, pos + fileEnding.size());
pos = searchArea.find_last_of("\"");
projectFilePath = searchArea.substr(pos + 1);
}
return projectFilePath;
}
std::vector<std::string> SolutionParserVisualStudio::seperateIncludePaths(const std::vector<std::string>& includePaths) const
{
std::vector<std::string> seperatedPaths;
for (unsigned int i = 0; i < includePaths.size(); i++)
{
std::vector<std::string> paths = seperateIncludePaths(includePaths[i]);
for (unsigned int j = 0; j < paths.size(); j++)
{
seperatedPaths.push_back(paths[j]);
}
}
return seperatedPaths;
}
std::vector<std::string> SolutionParserVisualStudio::seperateIncludePaths(const std::string& includePaths) const
{
std::string paths = includePaths;
std::string seperator = ";";
std::vector<std::string> seperatedPaths;
size_t pos = includePaths.find(seperator);
while (pos != std::string::npos)
{
std::string path = paths.substr(0, pos);
paths = paths.substr(pos + 1);
seperatedPaths.push_back(path);
pos = paths.find(seperator);
}
return seperatedPaths;
}
TiXmlElement* SolutionParserVisualStudio::getFirstTagByName(TiXmlElement* root, const std::string& tag)
{
TiXmlElement* element = root;
while (element)
{
if (element == NULL)
{
int foo = 0;
}
std::string value = element->Value();
if (value == tag) // "ClInclude") // || value == "ClCompile")
{
if (element->Parent() != NULL)
{
return element; // ->Parent()->ToElement();
}
}
if (element->FirstChildElement() != NULL)
{
element = element->FirstChildElement();
}
else if (element->NextSiblingElement() != NULL)
{
element = element->NextSiblingElement();
}
else
{
if (element == NULL)
{
int foo = 0;
}
while (element->Parent()->ToElement() != NULL && element->Parent()->NextSiblingElement() == NULL)
{
TiXmlElement* newElement = element->Parent()->ToElement();
if (newElement == NULL)
{
int foo = 0;
}
element = newElement;
}
if (element->Parent() != NULL && element->Parent()->NextSiblingElement() != NULL)
{
element = element->Parent()->NextSiblingElement();
}
else
{
return NULL;
}
}
}
return NULL;
}
std::vector<TiXmlElement*> SolutionParserVisualStudio::getAllTagsByName(TiXmlElement* root, const std::string& tag)
{
std::vector<TiXmlElement*> nodes;
TiXmlElement* element = root;
while (element)
{
std::string value = element->Value();
if (value == tag)
{
nodes.push_back(element);
}
if (element->FirstChildElement() != NULL)
{
element = element->FirstChildElement();
}
else if (element->NextSiblingElement() != NULL)
{
element = element->NextSiblingElement();
}
else
{
if (element == NULL)
{
int foo = 0;
}
while (element->Parent()->ToElement() != NULL && element->Parent()->NextSiblingElement() == NULL)
{
TiXmlElement* newElement = element->Parent()->ToElement();
if (newElement == NULL)
{
int foo = 0;
}
element = newElement;
}
if (element->Parent() != NULL && element->Parent()->NextSiblingElement() != NULL)
{
element = element->Parent()->NextSiblingElement();
}
else
{
break;
}
}
}
return nodes;
}
TiXmlElement* SolutionParserVisualStudio::getFirstTagByNameWithAttribute(TiXmlElement* root, const std::string& tag, const std::string& attribute)
{
TiXmlElement* element = root;
while (element)
{
if (element == NULL)
{
int foo = 0;
}
std::string value = element->Value();
bool hasAttribute = false;
if (element->Attribute(attribute.c_str()) != NULL)
{
hasAttribute = true;
}
if (value == tag && hasAttribute) // "ClInclude") // || value == "ClCompile")
{
if (element->Parent() != NULL)
{
return element; // ->Parent()->ToElement();
}
}
if (element->FirstChildElement() != NULL)
{
element = element->FirstChildElement();
}
else if (element->NextSiblingElement() != NULL)
{
element = element->NextSiblingElement();
}
else
{
while (element->Parent()->ToElement() != NULL && element->Parent()->NextSiblingElement() == NULL)
{
TiXmlElement* newElement = element->Parent()->ToElement();
element = newElement;
}
if (element->Parent() != NULL && element->Parent()->NextSiblingElement() != NULL)
{
element = element->Parent()->NextSiblingElement();
}
else
{
return NULL;
}
}
}
return NULL;
}
std::vector<TiXmlElement*> SolutionParserVisualStudio::getAllTagsByNameWithAttribute(TiXmlElement* root, const std::string& tag, const std::string& attribute)
{
std::vector<TiXmlElement*> nodes;
TiXmlElement* element = root;
while (element)
{
std::string value = element->Value();
bool hasAttribute = false;
if (element->Attribute(attribute.c_str()) != NULL)
{
hasAttribute = true;
}
if (value == tag && hasAttribute)
{
nodes.push_back(element);
}
if (element->FirstChildElement() != NULL)
{
element = element->FirstChildElement();
}
else if (element->NextSiblingElement() != NULL)
{
element = element->NextSiblingElement();
}
else
{
while (element->Parent()->ToElement() != NULL && element->Parent()->NextSiblingElement() == NULL)
{
TiXmlElement* newElement = element->Parent()->ToElement();
element = newElement;
}
if (element->Parent() != NULL && element->Parent()->NextSiblingElement() != NULL)
{
element = element->Parent()->NextSiblingElement();
}
else
{
break;
}
}
}
return nodes;
}
std::vector<std::string> SolutionParserVisualStudio::resolveEnvironmentVariables(const std::vector<std::string>& paths)
{
std::vector<std::string> resolvedPaths;
for (unsigned int i = 0; i < paths.size(); i++)
{
resolvedPaths.push_back(findAndResolveEnvironmentVariable(paths[i]));
}
return resolvedPaths;
}
std::string SolutionParserVisualStudio::findAndResolveEnvironmentVariable(const std::string& path)
{
std::string resolvedPath;
size_t pos = path.find("$(");
if (pos != std::string::npos)
{
size_t endPos = path.substr(pos).find(")");
std::string envVariable = path.substr(pos+2, (endPos-2) - pos);
std::string envPath = getenv(envVariable.c_str());
std::string prePath = path.substr(0, pos);
std::string postPath = path.substr(endPos + 1);
resolvedPath = prePath + envPath + postPath;
}
else
{
resolvedPath = path;
}
return resolvedPath;
}
std::vector<std::string> SolutionParserVisualStudio::makePathsAbsolute(const std::vector<std::string>& paths)
{
std::vector<std::string> absolutePaths;
for (unsigned int i = 0; i < paths.size(); i++)
{
std::string path = paths[i];
boost::filesystem::path boostPath(path);
if (boostPath.is_relative())
{
path = m_solutionPath + path;
}
absolutePaths.push_back(path);
}
return absolutePaths;
}
std::vector<std::string> SolutionParserVisualStudio::makePathsCanonical(const std::vector<std::string>& paths)
{
std::vector<std::string> canonicalPaths;
for (unsigned int i = 0; i < paths.size(); i++)
{
try
{
boost::filesystem::path canonicalPath = boost::filesystem::canonical(boost::filesystem::path(paths[i]));
canonicalPaths.push_back(canonicalPath.string());
}
catch (std::exception& e)
{
LOG_WARNING_STREAM(<< e.what());
}
}
return canonicalPaths;
}
@@ -0,0 +1,40 @@
#ifndef SOLUTION_PARSER_VISUAL_STUDIO_H
#define SOLUTION_PARSER_VISUAL_STUDIO_H
#include "ISolutionParser.h"
#include "tinyxml/tinyxml.h"
class SolutionParserVisualStudio : public ISolutionParser
{
public:
SolutionParserVisualStudio();
virtual ~SolutionParserVisualStudio();
virtual std::string getSolutionName();
virtual std::vector<std::string> getProjects();
virtual std::vector<std::string> getProjectFiles();
virtual std::vector<std::string> getProjectItems();
virtual std::vector<std::string> getIncludePaths();
private:
std::vector<std::string> getProjectBlocks(const std::string& solution) const;
std::string getProjectFilePath(const std::string& projectBlock) const;
std::vector<std::string> seperateIncludePaths(const std::vector<std::string>& includePaths) const;
std::vector<std::string> seperateIncludePaths(const std::string& includePaths) const;
TiXmlElement* getFirstTagByName(TiXmlElement* root, const std::string& tag);
std::vector<TiXmlElement*> getAllTagsByName(TiXmlElement* root, const std::string& tag);
TiXmlElement* getFirstTagByNameWithAttribute(TiXmlElement* root, const std::string& tag, const std::string& attribute);
std::vector<TiXmlElement*> getAllTagsByNameWithAttribute(TiXmlElement* root, const std::string& tag, const std::string& attribute);
std::vector<std::string> resolveEnvironmentVariables(const std::vector<std::string>& paths);
std::string findAndResolveEnvironmentVariable(const std::string& path);
std::vector<std::string> makePathsAbsolute(const std::vector<std::string>& paths);
std::vector<std::string> makePathsCanonical(const std::vector<std::string>& paths);
};
#endif // SOLUTION_PARSER_VISUAL_STUDIO_H
+13
View File
@@ -106,6 +106,7 @@ bool MouseWheelFilter::eventFilter(QObject* obj, QEvent* event)
QtMainWindow::QtMainWindow()
: m_showDockWidgetTitleBars(true)
, m_createNewProjectFunctor(std::bind(&QtMainWindow::doCreateNewProject, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4))
{
setObjectName("QtMainWindow");
setCentralWidget(nullptr);
@@ -252,6 +253,11 @@ void QtMainWindow::forceEnterLicense()
m_enterLicenseWindow->setEnabled(true);
}
void QtMainWindow::handleMessage(MessageNewProject* message)
{
m_createNewProjectFunctor(message->projectName, message->projectLocation, message->projectSourceFiles, message->projectIncludePaths);
}
bool QtMainWindow::event(QEvent* event)
{
if (event->type() == QEvent::WindowActivate)
@@ -599,6 +605,13 @@ void QtMainWindow::toggleShowDockWidgetTitleBars()
setShowDockWidgetTitleBars(!m_showDockWidgetTitleBars);
}
void QtMainWindow::doCreateNewProject(const std::string& name, const std::string& location,
const std::vector<std::string>& sourceFiles, const std::vector<std::string>& includePaths)
{
newProject();
m_newProjectDialog->setPresets(name, location, sourceFiles, includePaths);
}
void QtMainWindow::setupEditMenu()
{
QMenu *menu = new QMenu(tr("&Edit"), this);
+11
View File
@@ -8,6 +8,10 @@
#include <QMainWindow>
#include <QShortcut>
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageNewProject.h"
#include "qt/utility/QtThreadedFunctor.h"
#include "qt/window/QtApplicationSettingsScreen.h"
#include "qt/window/QtStartScreen.h"
#include "qt/window/QtProjectSetupScreen.h"
@@ -66,6 +70,7 @@ protected:
class QtMainWindow
: public QMainWindow
, public MessageListener<MessageNewProject>
{
Q_OBJECT
@@ -86,6 +91,8 @@ public:
void forceEnterLicense();
void handleMessage(MessageNewProject* message);
protected:
bool event(QEvent* event);
void keyPressEvent(QKeyEvent* event);
@@ -143,6 +150,8 @@ private:
QtViewToggle* toggle;
};
void doCreateNewProject(const std::string& name, const std::string& location,
const std::vector<std::string>& sourceFiles, const std::vector<std::string>& includePaths);
void setupEditMenu();
void setupProjectMenu();
@@ -174,6 +183,8 @@ private:
QShortcut* m_escapeShortcut;
static std::string m_windowSettingsPath;
QtThreadedFunctor<std::string, std::string, std::vector<std::string>, std::vector<std::string>> m_createNewProjectFunctor;
};
#endif // QT_MAIN_WINDOW_H
@@ -142,6 +142,28 @@ void QtProjectSetupScreen::loadProjectSettings()
}
}
void QtProjectSetupScreen::setPresets(const std::string& name, const std::string& location,
const std::vector<std::string>& sourceFiles, const std::vector<std::string>& includePaths)
{
m_projectName->setText(QString::fromStdString(name));
m_projectFileLocation->setText(QString::fromStdString(location));
std::vector<FilePath> sourceFilePaths;
for (unsigned int i = 0; i < sourceFiles.size(); i++)
{
sourceFilePaths.push_back(FilePath(sourceFiles[i]));
}
std::vector<FilePath> includePathsPaths;
for (unsigned int i = 0; i < includePaths.size(); i++)
{
includePathsPaths.push_back(FilePath(sourceFiles[i]));
}
m_sourcePaths->setList(sourceFilePaths);
m_includePaths->setList(includePathsPaths);
}
void QtProjectSetupScreen::populateForm(QFormLayout* layout)
{
int minimumWidthForSecondCol = 360;
@@ -49,6 +49,10 @@ public:
void projectSetupScreen();
// fill screen without having to set project setting beforehand (e.g. when creating a new project)
void setPresets(const std::string& name, const std::string& location,
const std::vector<std::string>& sourceFiles, const std::vector<std::string>& includePaths);
signals:
void showPreferences();
+1
View File
@@ -31,4 +31,5 @@ add_files(
TokenLocationCollectionTestSuite.h
UtilityStringTestSuite.h
Vector2TestSuite.h
VsSolutionParserTestSuite.h
)
+5 -5
View File
@@ -18,7 +18,7 @@ public:
std::stringstream message;
message << type << divider << filePath << divider << row << divider << column << endOfMessageToken;
NetworkProtocolHelper::NetworkMessage networkMessage = NetworkProtocolHelper::parseMessage(message.str());
NetworkProtocolHelper::SetActiveTokenMessage networkMessage = NetworkProtocolHelper::parseSetActiveTokenMessage(message.str());
TS_ASSERT_EQUALS(networkMessage.fileLocation, filePath);
TS_ASSERT_EQUALS(networkMessage.row, row);
@@ -28,7 +28,7 @@ public:
// invalid type
message.str("");
message << "foo" << divider << filePath << divider << row << divider << column << endOfMessageToken;
networkMessage = NetworkProtocolHelper::parseMessage(message.str());
networkMessage = NetworkProtocolHelper::parseSetActiveTokenMessage(message.str());
TS_ASSERT_EQUALS(networkMessage.fileLocation, "");
TS_ASSERT_EQUALS(networkMessage.row, 0);
@@ -38,7 +38,7 @@ public:
// missing divider
message.str("");
message << type << divider << filePath << row << divider << column << endOfMessageToken;
networkMessage = NetworkProtocolHelper::parseMessage(message.str());
networkMessage = NetworkProtocolHelper::parseSetActiveTokenMessage(message.str());
TS_ASSERT_EQUALS(networkMessage.fileLocation, "");
TS_ASSERT_EQUALS(networkMessage.row, 0);
@@ -48,7 +48,7 @@ public:
// invalid row
message.str("");
message << type << divider << filePath << divider << "potato" << divider << column << endOfMessageToken;
networkMessage = NetworkProtocolHelper::parseMessage(message.str());
networkMessage = NetworkProtocolHelper::parseSetActiveTokenMessage(message.str());
TS_ASSERT_EQUALS(networkMessage.fileLocation, "");
TS_ASSERT_EQUALS(networkMessage.row, 0);
@@ -58,7 +58,7 @@ public:
// invalid column
message.str("");
message << type << divider << filePath << divider << row << divider << "laz0r" << endOfMessageToken;
networkMessage = NetworkProtocolHelper::parseMessage(message.str());
networkMessage = NetworkProtocolHelper::parseSetActiveTokenMessage(message.str());
TS_ASSERT_EQUALS(networkMessage.fileLocation, "");
TS_ASSERT_EQUALS(networkMessage.row, 0);
+61
View File
@@ -0,0 +1,61 @@
#include "cxxtest/TestSuite.h"
#include "utility/logging/logging.h"
#include "utility/solution/SolutionParserVisualStudio.h"
class VsSolutionParserTestSuite : public CxxTest::TestSuite
{
public:
void test_load_solution()
{
SolutionParserVisualStudio parser;
parser.openSolutionFile("data/vsSolutionParserTestSuite/Coati.sln");
// TS_ASSERT_EQUALS(10186, parser.getSolutionCharCount());
}
void test_get_project_files()
{
SolutionParserVisualStudio parser;
parser.openSolutionFile("data/vsSolutionParserTestSuite/Coati.sln");
std::vector<std::string> projects = parser.getProjects();
TS_ASSERT_EQUALS(9, projects.size());
TS_ASSERT_EQUALS("ALL_BUILD.vcxproj", projects[0]);
TS_ASSERT_EQUALS("Coati.vcxproj", projects[1]);
TS_ASSERT_EQUALS("Coati_lib.vcxproj", projects[2]);
TS_ASSERT_EQUALS("Coati_lib_gui.vcxproj", projects[3]);
TS_ASSERT_EQUALS("Coati_lib_parser.vcxproj", projects[4]);
TS_ASSERT_EQUALS("Coati_test.vcxproj", projects[5]);
TS_ASSERT_EQUALS("Coati_trial.vcxproj", projects[6]);
TS_ASSERT_EQUALS("ZERO_CHECK.vcxproj", projects[7]);
TS_ASSERT_EQUALS("versionnumber.vcxproj", projects[8]);
}
void test_get_solution_name()
{
SolutionParserVisualStudio parser;
parser.openSolutionFile("data/vsSolutionParserTestSuite/Coati.sln");
std::string solutionName = parser.getSolutionName();
TS_ASSERT_EQUALS("Coati", solutionName);
}
void test_get_include_paths()
{
SolutionParserVisualStudio parser;
parser.openSolutionFile("data/vsSolutionParserTestSuite/Coati.sln");
std::vector<std::string> includePaths = parser.getIncludePaths();
TS_ASSERT_EQUALS(23, includePaths.size());
}
void test_get_()
{
SolutionParserVisualStudio parser;
parser.openSolutionFile("data/vsSolutionParserTestSuite/Coati.sln");
std::vector<std::string> projectItems = parser.getProjectItems();
TS_ASSERT_EQUALS(447, projectItems.size());
}
};