Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f7ed725a0d |
+3
-7
@@ -9,10 +9,8 @@ xcuserdata/
|
||||
x64/
|
||||
.DS_Store
|
||||
.cache/
|
||||
SpeckleConnector/Documentation/*
|
||||
!SpeckleConnector/Documentation/Doxyfile
|
||||
SpeckleLib/Documentation/*
|
||||
!SpeckleLib/Documentation/Doxyfile
|
||||
Documentation/*
|
||||
!Documentation/Doxyfile
|
||||
CMakeCache.txt
|
||||
_deps/
|
||||
CMakeFiles/
|
||||
@@ -23,6 +21,4 @@ CMakeFiles/
|
||||
XCBuildData/
|
||||
**/*.xcsettings
|
||||
*.log
|
||||
.idea
|
||||
*.mui
|
||||
*.aps
|
||||
.idea
|
||||
@@ -93,90 +93,43 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Connector\Connector.cpp" />
|
||||
<ClCompile Include="Connector\Database\ModelCardDatabase.cpp" />
|
||||
<ClCompile Include="Connector\Database\Model\Card\ModelCardDatabase.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Account\AccountBridge.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Account\GetAccounts.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\AddModel.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\Arg\DocumentInfo.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\BaseBridge.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\DocumentInfo.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetConnectorVersion.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetDocumentInfo.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetDocumentState.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationName.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\Arg\ConnectorConfig.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\ConfigBridge.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\ConnectorConfig.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetConfig.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\UpdateConfig.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\GetSendFilters.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Send.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\SendBridge.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GetComplexType.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GoAway.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\SayHi.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TestBridge.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.cpp" />
|
||||
<ClCompile Include="Connector\Interface\ConnectorMenu.cpp" />
|
||||
<ClCompile Include="Connector\Interface\ConnectorPalette.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\CardMover.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\CardSetting.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\Filter\DirectSelectionSendFilter.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\Filter\EverythingSendFilter.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\Filter\FilterMover.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\Filter\SendFilter.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\ModelCard.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\ReceiverModelCard.cpp" />
|
||||
<ClCompile Include="Connector\Record\Model\SenderModelCard.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Connector\Connector.h" />
|
||||
<ClInclude Include="Connector\ConnectorResource.h" />
|
||||
<ClInclude Include="Connector\Database\Identity\RecordID.h" />
|
||||
<ClInclude Include="Connector\Database\ModelCardDatabase.h" />
|
||||
<ClInclude Include="Connector\Database\Model\Card\ModelCardDatabase.h" />
|
||||
<ClInclude Include="Connector\Event\ConnectorEventID.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Account\AccountBridge.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Account\GetAccounts.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\AddModel.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\Arg\DocumentInfo.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\BaseBridge.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\DocumentInfo.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetConnectorVersion.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetDocumentInfo.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetDocumentState.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationName.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\Arg\ConnectorConfig.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\ConfigBridge.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\ConnectorConfig.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetConfig.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\UpdateConfig.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\GetSendFilters.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Send.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\SendBridge.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GetComplexType.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GoAway.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\SayHi.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TestBridge.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.h" />
|
||||
<ClInclude Include="Connector\Interface\ConnectorMenu.h" />
|
||||
<ClInclude Include="Connector\Interface\ConnectorPalette.h" />
|
||||
<ClInclude Include="Connector\Record\Model\CardMover.h" />
|
||||
<ClInclude Include="Connector\Record\Model\CardSetting.h" />
|
||||
<ClInclude Include="Connector\Record\Model\Filter\ArchicadEverythingFilter.h" />
|
||||
<ClInclude Include="Connector\Record\Model\Filter\ArchicadSelectionFilter.h" />
|
||||
<ClInclude Include="Connector\Record\Model\Filter\DirectSelectionSendFilter.h" />
|
||||
<ClInclude Include="Connector\Record\Model\Filter\EverythingSendFilter.h" />
|
||||
<ClInclude Include="Connector\Record\Model\Filter\FilterMover.h" />
|
||||
<ClInclude Include="Connector\Record\Model\Filter\SendFilter.h" />
|
||||
<ClInclude Include="Connector\Record\Model\ModelCard.h" />
|
||||
<ClInclude Include="Connector\Record\Model\ReceiverModelCard.h" />
|
||||
<ClInclude Include="Connector\Record\Model\SenderModelCard.h" />
|
||||
<ClInclude Include="Connector\Version.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
@@ -611,7 +564,7 @@ CALL "$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>
|
||||
</SDLCheck>
|
||||
<PreprocessorDefinitions>TESTING_MODE;DEBUG;ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_STLP_DONT_FORCE_MSVC_LIB_NAME;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_STLP_DONT_FORCE_MSVC_LIB_NAME;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>
|
||||
@@ -640,7 +593,7 @@ CALL "$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
|
||||
</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
|
||||
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\ACAP_STATD.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JavascriptEngine\Win\JavascriptEngineImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\ACAP_STATD.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JavascriptEngine\Win\JavascriptEngineImp.LIB;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<IgnoreAllDefaultLibraries>
|
||||
</IgnoreAllDefaultLibraries>
|
||||
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
||||
@@ -798,7 +751,7 @@ CALL "$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>
|
||||
</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>
|
||||
@@ -828,7 +781,7 @@ CALL "$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
|
||||
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\ACAP_STAT.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JavascriptEngine\Win\JavascriptEngineImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;msvcrt.lib;msvcprt.lib;IPHLPAPI.lib;Wininet.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\ACAP_STAT.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JavascriptEngine\Win\JavascriptEngineImp.LIB;msvcrt.lib;msvcprt.lib;IPHLPAPI.lib;Wininet.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<IgnoreAllDefaultLibraries>
|
||||
</IgnoreAllDefaultLibraries>
|
||||
|
||||
@@ -32,32 +32,11 @@
|
||||
<Filter Include="Connector\Database">
|
||||
<UniqueIdentifier>{2f459f56-86f0-4794-b4b7-1bd7b8ee5617}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Interface\Browser\Bridge\Config\Arg">
|
||||
<UniqueIdentifier>{6a2f1f18-a554-4546-bba3-314d5f2ec9f9}</UniqueIdentifier>
|
||||
<Filter Include="Connector\Database\Model">
|
||||
<UniqueIdentifier>{2820ad4f-60d9-436e-a7a2-d019d7e0ce0c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Interface\Browser\Bridge\Base\Arg">
|
||||
<UniqueIdentifier>{d74446ad-e141-48ac-9fa0-8b82279bbdbf}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Interface\Browser\Bridge\Test">
|
||||
<UniqueIdentifier>{9976ca16-8f99-44a2-b596-b81df82d847a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Interface\Browser\Bridge\Test\Arg">
|
||||
<UniqueIdentifier>{1656a0df-aa39-4f41-860f-7b278b31784a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Interface\Browser\Bridge\Send">
|
||||
<UniqueIdentifier>{2b87cf11-87cd-435f-ab24-42170c2e657e}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Database\Identity">
|
||||
<UniqueIdentifier>{41395ee2-50f3-49c0-8859-23a3ad19a2fa}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Record">
|
||||
<UniqueIdentifier>{a915e7ee-849f-48a9-aa7b-0ef6e358bee7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Record\Model">
|
||||
<UniqueIdentifier>{2b16c188-1d80-4d4d-830e-5c1e56ecf46e}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Connector\Record\Model\Filter">
|
||||
<UniqueIdentifier>{b6d6326c-77f4-414a-bda6-e3e587c7ded2}</UniqueIdentifier>
|
||||
<Filter Include="Connector\Database\Model\Card">
|
||||
<UniqueIdentifier>{85935d00-16ac-466a-a614-ad9ea802bffa}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -101,6 +80,9 @@
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\ConfigBridge.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\ConnectorConfig.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetConfig.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
|
||||
</ClCompile>
|
||||
@@ -110,6 +92,9 @@
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\BaseBridge.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\DocumentInfo.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetConnectorVersion.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClCompile>
|
||||
@@ -125,78 +110,8 @@
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\Arg\ConnectorConfig.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config\Arg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\Arg\DocumentInfo.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base\Arg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GetComplexType.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GoAway.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\SayHi.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TestBridge.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test\Arg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\SendBridge.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Send.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\GetSendFilters.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Database\ModelCardDatabase.cpp">
|
||||
<Filter>Connector\Database</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\CardMover.cpp">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\CardSetting.cpp">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\ModelCard.cpp">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\ReceiverModelCard.cpp">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\SenderModelCard.cpp">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\Filter\DirectSelectionSendFilter.cpp">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\Filter\EverythingSendFilter.cpp">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\Filter\FilterMover.cpp">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Record\Model\Filter\SendFilter.cpp">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\AddModel.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
<ClCompile Include="Connector\Database\Model\Card\ModelCardDatabase.cpp">
|
||||
<Filter>Connector\Database\Model\Card</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -221,6 +136,9 @@
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\ConfigBridge.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\ConnectorConfig.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetConfig.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
|
||||
</ClInclude>
|
||||
@@ -230,6 +148,9 @@
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\BaseBridge.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\DocumentInfo.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetConnectorVersion.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClInclude>
|
||||
@@ -251,87 +172,8 @@
|
||||
<ClInclude Include="Connector\Version.h">
|
||||
<Filter>Connector</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\Arg\ConnectorConfig.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Config\Arg</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\Arg\DocumentInfo.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base\Arg</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GetComplexType.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GoAway.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\SayHi.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TestBridge.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test\Arg</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\SendBridge.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Send.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\GetSendFilters.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Database\ModelCardDatabase.h">
|
||||
<Filter>Connector\Database</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Database\Identity\RecordID.h">
|
||||
<Filter>Connector\Database\Identity</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\CardMover.h">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\CardSetting.h">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\ModelCard.h">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\ReceiverModelCard.h">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\SenderModelCard.h">
|
||||
<Filter>Connector\Record\Model</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\Filter\ArchicadEverythingFilter.h">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\Filter\ArchicadSelectionFilter.h">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\Filter\DirectSelectionSendFilter.h">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\Filter\EverythingSendFilter.h">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\Filter\FilterMover.h">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Record\Model\Filter\SendFilter.h">
|
||||
<Filter>Connector\Record\Model\Filter</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\AddModel.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
|
||||
<ClInclude Include="Connector\Database\Model\Card\ModelCardDatabase.h">
|
||||
<Filter>Connector\Database\Model\Card</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -22,13 +22,8 @@
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
210CC8832C80E6A300610F58 /* TriggerEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 210CC8812C80E6A300610F58 /* TriggerEvent.cpp */; };
|
||||
213CC39C2B1101F500088049 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2151077C2AEDB9070022CD24 /* Cocoa.framework */; };
|
||||
214B7A372C764BCD00D586C1 /* UpdateConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69FBD2C7630B3008B6A06 /* UpdateConfig.cpp */; };
|
||||
215F082A2C947F4400CD343B /* CardMover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 215F08262C947F4400CD343B /* CardMover.cpp */; };
|
||||
215F082E2C94C5C000CD343B /* FilterMover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 215F082C2C94C5C000CD343B /* FilterMover.cpp */; };
|
||||
215F08372C95808B00CD343B /* ReceiverModelCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 215F08362C95808B00CD343B /* ReceiverModelCard.cpp */; };
|
||||
215F08462C9633A800CD343B /* EverythingSendFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 215F08452C9633A800CD343B /* EverythingSendFilter.cpp */; };
|
||||
219F30422C769283009834E9 /* ConfigTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 219F30402C769282009834E9 /* ConfigTests.cpp */; };
|
||||
21B67CA32C769CB400FD64FC /* libActiveLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 21F69EF52C64FE91008B6A06 /* libActiveLib.a */; };
|
||||
21B67CA42C769CB400FD64FC /* libArchicad27.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 21F69ECD2C64C035008B6A06 /* libArchicad27.a */; };
|
||||
@@ -36,29 +31,10 @@
|
||||
21B67CAD2C77329800FD64FC /* GetSourceApplicationName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CA72C77329800FD64FC /* GetSourceApplicationName.cpp */; };
|
||||
21B67CAE2C77329800FD64FC /* GetSourceApplicationVersion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CA92C77329800FD64FC /* GetSourceApplicationVersion.cpp */; };
|
||||
21B67CB92C774BFA00FD64FC /* GetConnectorVersion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CB72C774BFA00FD64FC /* GetConnectorVersion.cpp */; };
|
||||
21B67CBD2C77537C00FD64FC /* DocumentInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CBC2C77537C00FD64FC /* DocumentInfo.cpp */; };
|
||||
21B67CC02C775A0D00FD64FC /* GetDocumentInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CBF2C775A0D00FD64FC /* GetDocumentInfo.cpp */; };
|
||||
21B67CC32C77649F00FD64FC /* GetDocumentState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CC22C77649F00FD64FC /* GetDocumentState.cpp */; };
|
||||
21B67CCC2C77670400FD64FC /* ModelCardDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CC72C77670400FD64FC /* ModelCardDatabase.cpp */; };
|
||||
21B67CD92C78C83800FD64FC /* TestBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CD62C78C83800FD64FC /* TestBridge.cpp */; };
|
||||
21B67CDC2C78C88000FD64FC /* SayHi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CDA2C78C87F00FD64FC /* SayHi.cpp */; };
|
||||
21B67CE32C78D1FB00FD64FC /* SayHiArg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CE02C78D1FB00FD64FC /* SayHiArg.cpp */; };
|
||||
21B67CE72C78D23B00FD64FC /* ConnectorConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CE42C78D23B00FD64FC /* ConnectorConfig.cpp */; };
|
||||
21B67CEB2C78D27200FD64FC /* DocumentInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CE82C78D27200FD64FC /* DocumentInfo.cpp */; };
|
||||
21B67CF12C78D38000FD64FC /* GoAway.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CF02C78D38000FD64FC /* GoAway.cpp */; };
|
||||
21B67CF72C78D4DE00FD64FC /* GetComplexType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21B67CF52C78D4DD00FD64FC /* GetComplexType.cpp */; };
|
||||
21D0BD602C89BFEA0077E104 /* SendBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD5B2C89BFEA0077E104 /* SendBridge.cpp */; };
|
||||
21D0BD672C89D7410077E104 /* AccountTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD642C89D7400077E104 /* AccountTests.cpp */; };
|
||||
21D0BD6A2C8A0DB40077E104 /* GetIsDevMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD682C8A0DB40077E104 /* GetIsDevMode.cpp */; };
|
||||
21D0BD8E2C8EE4490077E104 /* Send.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD8D2C8EE4490077E104 /* Send.cpp */; };
|
||||
21D0BD972C8F13F30077E104 /* GetSendFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD962C8F13F30077E104 /* GetSendFilters.cpp */; };
|
||||
21D0BDA82C8F33AC0077E104 /* ModelCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDA72C8F33AC0077E104 /* ModelCard.cpp */; };
|
||||
21D0BDAB2C8F363E0077E104 /* CardSetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDAA2C8F363E0077E104 /* CardSetting.cpp */; };
|
||||
21D0BDCF2C92DAC60077E104 /* AddModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDCB2C92DAC60077E104 /* AddModel.cpp */; };
|
||||
21D0BDD42C935D1A0077E104 /* UpdateModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDD22C935D1A0077E104 /* UpdateModel.cpp */; };
|
||||
21D0BDD72C935DAE0077E104 /* RemoveModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDD52C935DAE0077E104 /* RemoveModel.cpp */; };
|
||||
21D0BDDC2C93897B0077E104 /* SenderModelCard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDDA2C93897B0077E104 /* SenderModelCard.cpp */; };
|
||||
21D0BDE02C9393980077E104 /* SendFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDDD2C9393980077E104 /* SendFilter.cpp */; };
|
||||
21D0BDE32C943C630077E104 /* DirectSelectionSendFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BDE12C943C630077E104 /* DirectSelectionSendFilter.cpp */; };
|
||||
21D1E9AD2BF14AF200957EAA /* BIMData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21D1E9152BF14AEC00957EAA /* BIMData.framework */; };
|
||||
21D1E9AE2BF14AF200957EAA /* TeamworkPortalServerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21D1E9162BF14AEC00957EAA /* TeamworkPortalServerClient.framework */; };
|
||||
21D1E9AF2BF14AF200957EAA /* GDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21D1E9172BF14AEC00957EAA /* GDL.framework */; };
|
||||
@@ -220,6 +196,7 @@
|
||||
21F69F8D2C70D7EE008B6A06 /* GetAccounts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69F8B2C70D7EE008B6A06 /* GetAccounts.cpp */; };
|
||||
21F69FBB2C762EF0008B6A06 /* ConfigBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69FB42C762EF0008B6A06 /* ConfigBridge.cpp */; };
|
||||
21F69FBC2C762EF0008B6A06 /* GetConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69FB62C762EF0008B6A06 /* GetConfig.cpp */; };
|
||||
21F69FC22C7632B7008B6A06 /* ConnectorConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69FC02C7632B7008B6A06 /* ConnectorConfig.cpp */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -282,24 +259,11 @@
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
210CC8812C80E6A300610F58 /* TriggerEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriggerEvent.cpp; sourceTree = "<group>"; };
|
||||
210CC8822C80E6A300610F58 /* TriggerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriggerEvent.h; sourceTree = "<group>"; };
|
||||
213CC3A52B1101F500088049 /* Speckle Connector.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Speckle Connector.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2151077C2AEDB9070022CD24 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
215F08262C947F4400CD343B /* CardMover.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CardMover.cpp; sourceTree = "<group>"; };
|
||||
215F08292C947F4400CD343B /* CardMover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CardMover.h; sourceTree = "<group>"; };
|
||||
215F082C2C94C5C000CD343B /* FilterMover.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FilterMover.cpp; sourceTree = "<group>"; };
|
||||
215F082D2C94C5C000CD343B /* FilterMover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterMover.h; sourceTree = "<group>"; };
|
||||
215F08332C95808B00CD343B /* ReceiverModelCard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReceiverModelCard.h; sourceTree = "<group>"; };
|
||||
215F08362C95808B00CD343B /* ReceiverModelCard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReceiverModelCard.cpp; sourceTree = "<group>"; };
|
||||
215F083D2C96270100CD343B /* RecordID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RecordID.h; sourceTree = "<group>"; };
|
||||
215F08412C962F5E00CD343B /* ArchicadSelectionFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchicadSelectionFilter.h; sourceTree = "<group>"; };
|
||||
215F08442C9633A800CD343B /* EverythingSendFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EverythingSendFilter.h; sourceTree = "<group>"; };
|
||||
215F08452C9633A800CD343B /* EverythingSendFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EverythingSendFilter.cpp; sourceTree = "<group>"; };
|
||||
215F084A2C9782F100CD343B /* ArchicadEverythingFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ArchicadEverythingFilter.h; sourceTree = "<group>"; };
|
||||
2161FD902BF2600C006D9527 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||
219388682C4E5DE2002A0180 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
|
||||
219F30352C768F0A009834E9 /* Connector-AC27-Test.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Connector-AC27-Test.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
219F30352C768F0A009834E9 /* Connector-AC27-Test.vwlibrary */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Connector-AC27-Test.vwlibrary"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
219F30402C769282009834E9 /* ConfigTests.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = ConfigTests.cpp; sourceTree = "<group>"; };
|
||||
219F30432C7693B6009834E9 /* Connector-AC27-Debug.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Connector-AC27-Debug.xctestplan"; sourceTree = SOURCE_ROOT; };
|
||||
21B67CA52C77329800FD64FC /* BaseBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseBridge.cpp; sourceTree = "<group>"; };
|
||||
@@ -311,6 +275,8 @@
|
||||
21B67CB72C774BFA00FD64FC /* GetConnectorVersion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetConnectorVersion.cpp; sourceTree = "<group>"; };
|
||||
21B67CB82C774BFA00FD64FC /* GetConnectorVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetConnectorVersion.h; sourceTree = "<group>"; };
|
||||
21B67CBA2C774C6500FD64FC /* Version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Version.h; sourceTree = "<group>"; };
|
||||
21B67CBB2C77537C00FD64FC /* DocumentInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentInfo.h; sourceTree = "<group>"; };
|
||||
21B67CBC2C77537C00FD64FC /* DocumentInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentInfo.cpp; sourceTree = "<group>"; };
|
||||
21B67CBE2C775A0D00FD64FC /* GetDocumentInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetDocumentInfo.h; sourceTree = "<group>"; };
|
||||
21B67CBF2C775A0D00FD64FC /* GetDocumentInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetDocumentInfo.cpp; sourceTree = "<group>"; };
|
||||
21B67CC12C77649E00FD64FC /* GetDocumentState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetDocumentState.h; sourceTree = "<group>"; };
|
||||
@@ -318,45 +284,6 @@
|
||||
21B67CC72C77670400FD64FC /* ModelCardDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModelCardDatabase.cpp; sourceTree = "<group>"; };
|
||||
21B67CC82C77670400FD64FC /* ModelCardDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelCardDatabase.h; sourceTree = "<group>"; };
|
||||
21B67CCD2C77694500FD64FC /* Connector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Connector.h; sourceTree = "<group>"; };
|
||||
21B67CD62C78C83800FD64FC /* TestBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TestBridge.cpp; sourceTree = "<group>"; };
|
||||
21B67CD72C78C83800FD64FC /* TestBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestBridge.h; sourceTree = "<group>"; };
|
||||
21B67CDA2C78C87F00FD64FC /* SayHi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SayHi.cpp; sourceTree = "<group>"; };
|
||||
21B67CDB2C78C87F00FD64FC /* SayHi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SayHi.h; sourceTree = "<group>"; };
|
||||
21B67CE02C78D1FB00FD64FC /* SayHiArg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SayHiArg.cpp; sourceTree = "<group>"; };
|
||||
21B67CE12C78D1FB00FD64FC /* SayHiArg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SayHiArg.h; sourceTree = "<group>"; };
|
||||
21B67CE42C78D23B00FD64FC /* ConnectorConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectorConfig.cpp; sourceTree = "<group>"; };
|
||||
21B67CE52C78D23B00FD64FC /* ConnectorConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectorConfig.h; sourceTree = "<group>"; };
|
||||
21B67CE82C78D27200FD64FC /* DocumentInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentInfo.cpp; sourceTree = "<group>"; };
|
||||
21B67CE92C78D27200FD64FC /* DocumentInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentInfo.h; sourceTree = "<group>"; };
|
||||
21B67CEF2C78D38000FD64FC /* GoAway.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoAway.h; sourceTree = "<group>"; };
|
||||
21B67CF02C78D38000FD64FC /* GoAway.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GoAway.cpp; sourceTree = "<group>"; };
|
||||
21B67CF52C78D4DD00FD64FC /* GetComplexType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetComplexType.cpp; sourceTree = "<group>"; };
|
||||
21B67CF62C78D4DE00FD64FC /* GetComplexType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetComplexType.h; sourceTree = "<group>"; };
|
||||
21D0BD5B2C89BFEA0077E104 /* SendBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SendBridge.cpp; sourceTree = "<group>"; };
|
||||
21D0BD5C2C89BFEA0077E104 /* SendBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SendBridge.h; sourceTree = "<group>"; };
|
||||
21D0BD642C89D7400077E104 /* AccountTests.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = AccountTests.cpp; sourceTree = "<group>"; };
|
||||
21D0BD682C8A0DB40077E104 /* GetIsDevMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetIsDevMode.cpp; sourceTree = "<group>"; };
|
||||
21D0BD692C8A0DB40077E104 /* GetIsDevMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetIsDevMode.h; sourceTree = "<group>"; };
|
||||
21D0BD8A2C8EE4490077E104 /* Send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Send.h; sourceTree = "<group>"; };
|
||||
21D0BD8D2C8EE4490077E104 /* Send.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Send.cpp; sourceTree = "<group>"; };
|
||||
21D0BD952C8F13F30077E104 /* GetSendFilters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetSendFilters.h; sourceTree = "<group>"; };
|
||||
21D0BD962C8F13F30077E104 /* GetSendFilters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetSendFilters.cpp; sourceTree = "<group>"; };
|
||||
21D0BDA42C8F33AC0077E104 /* ModelCard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelCard.h; sourceTree = "<group>"; };
|
||||
21D0BDA72C8F33AC0077E104 /* ModelCard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModelCard.cpp; sourceTree = "<group>"; };
|
||||
21D0BDA92C8F363E0077E104 /* CardSetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CardSetting.h; sourceTree = "<group>"; };
|
||||
21D0BDAA2C8F363E0077E104 /* CardSetting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CardSetting.cpp; sourceTree = "<group>"; };
|
||||
21D0BDCB2C92DAC60077E104 /* AddModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddModel.cpp; sourceTree = "<group>"; };
|
||||
21D0BDCE2C92DAC60077E104 /* AddModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddModel.h; sourceTree = "<group>"; };
|
||||
21D0BDD22C935D1A0077E104 /* UpdateModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UpdateModel.cpp; sourceTree = "<group>"; };
|
||||
21D0BDD32C935D1A0077E104 /* UpdateModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UpdateModel.h; sourceTree = "<group>"; };
|
||||
21D0BDD52C935DAE0077E104 /* RemoveModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveModel.cpp; sourceTree = "<group>"; };
|
||||
21D0BDD62C935DAE0077E104 /* RemoveModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveModel.h; sourceTree = "<group>"; };
|
||||
21D0BDDA2C93897B0077E104 /* SenderModelCard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SenderModelCard.cpp; sourceTree = "<group>"; };
|
||||
21D0BDDB2C93897B0077E104 /* SenderModelCard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SenderModelCard.h; sourceTree = "<group>"; };
|
||||
21D0BDDD2C9393980077E104 /* SendFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SendFilter.cpp; sourceTree = "<group>"; };
|
||||
21D0BDDE2C9393980077E104 /* SendFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SendFilter.h; sourceTree = "<group>"; };
|
||||
21D0BDE12C943C630077E104 /* DirectSelectionSendFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectSelectionSendFilter.cpp; sourceTree = "<group>"; };
|
||||
21D0BDE22C943C630077E104 /* DirectSelectionSendFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectSelectionSendFilter.h; sourceTree = "<group>"; };
|
||||
21D1E9152BF14AEC00957EAA /* BIMData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BIMData.framework; path = "../Archicad 27/Support/Frameworks/BIMData.framework"; sourceTree = "<group>"; };
|
||||
21D1E9162BF14AEC00957EAA /* TeamworkPortalServerClient.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TeamworkPortalServerClient.framework; path = "../Archicad 27/Support/Frameworks/TeamworkPortalServerClient.framework"; sourceTree = "<group>"; };
|
||||
21D1E9172BF14AEC00957EAA /* GDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GDL.framework; path = "../Archicad 27/Support/Frameworks/GDL.framework"; sourceTree = "<group>"; };
|
||||
@@ -534,6 +461,8 @@
|
||||
21F69FB72C762EF0008B6A06 /* GetConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetConfig.h; sourceTree = "<group>"; };
|
||||
21F69FBD2C7630B3008B6A06 /* UpdateConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UpdateConfig.cpp; sourceTree = "<group>"; };
|
||||
21F69FBE2C7630B3008B6A06 /* UpdateConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UpdateConfig.h; sourceTree = "<group>"; };
|
||||
21F69FC02C7632B7008B6A06 /* ConnectorConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectorConfig.cpp; sourceTree = "<group>"; };
|
||||
21F69FC12C7632B7008B6A06 /* ConnectorConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectorConfig.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -715,7 +644,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
213CC3A52B1101F500088049 /* Speckle Connector.bundle */,
|
||||
219F30352C768F0A009834E9 /* Connector-AC27-Test.bundle */,
|
||||
219F30352C768F0A009834E9 /* Connector-AC27-Test.vwlibrary */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -723,16 +652,16 @@
|
||||
0867D691FE84028FC02AAC07 /* SampleObject */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21F69F112C677BC0008B6A06 /* Connector */,
|
||||
21F69EC62C64C035008B6A06 /* SpeckleLib.xcodeproj */,
|
||||
21F69EED2C64FE91008B6A06 /* ActiveLib.xcodeproj */,
|
||||
21F69EC62C64C035008B6A06 /* SpeckleLib.xcodeproj */,
|
||||
219388682C4E5DE2002A0180 /* CMakeLists.txt */,
|
||||
219F30412C769282009834E9 /* ConnectorTests */,
|
||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
||||
213CC4E02B1107CF00088049 /* Frameworks */,
|
||||
034768DDFF38A45A11DB9C8B /* Products */,
|
||||
2161FD902BF2600C006D9527 /* README.md */,
|
||||
21F69F112C677BC0008B6A06 /* Connector */,
|
||||
219F30412C769282009834E9 /* ConnectorTests */,
|
||||
81494D9D09DA5892006864FB /* Resource */,
|
||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
||||
034768DDFF38A45A11DB9C8B /* Products */,
|
||||
213CC4E02B1107CF00088049 /* Frameworks */,
|
||||
);
|
||||
name = SampleObject;
|
||||
sourceTree = "<group>";
|
||||
@@ -921,18 +850,9 @@
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
215F083E2C96270100CD343B /* Identity */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
215F083D2C96270100CD343B /* RecordID.h */,
|
||||
);
|
||||
path = Identity;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
219F30412C769282009834E9 /* ConnectorTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21D0BD642C89D7400077E104 /* AccountTests.cpp */,
|
||||
219F30402C769282009834E9 /* ConfigTests.cpp */,
|
||||
219F30432C7693B6009834E9 /* Connector-AC27-Debug.xctestplan */,
|
||||
);
|
||||
@@ -942,11 +862,10 @@
|
||||
21B67CAB2C77329800FD64FC /* Base */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21D0BDCB2C92DAC60077E104 /* AddModel.cpp */,
|
||||
21D0BDCE2C92DAC60077E104 /* AddModel.h */,
|
||||
21B67CEA2C78D27200FD64FC /* Arg */,
|
||||
21B67CA52C77329800FD64FC /* BaseBridge.cpp */,
|
||||
21B67CA62C77329800FD64FC /* BaseBridge.h */,
|
||||
21B67CBC2C77537C00FD64FC /* DocumentInfo.cpp */,
|
||||
21B67CBB2C77537C00FD64FC /* DocumentInfo.h */,
|
||||
21B67CB72C774BFA00FD64FC /* GetConnectorVersion.cpp */,
|
||||
21B67CB82C774BFA00FD64FC /* GetConnectorVersion.h */,
|
||||
21B67CBF2C775A0D00FD64FC /* GetDocumentInfo.cpp */,
|
||||
@@ -957,125 +876,35 @@
|
||||
21B67CA82C77329800FD64FC /* GetSourceApplicationName.h */,
|
||||
21B67CA92C77329800FD64FC /* GetSourceApplicationVersion.cpp */,
|
||||
21B67CAA2C77329800FD64FC /* GetSourceApplicationVersion.h */,
|
||||
21D0BDD52C935DAE0077E104 /* RemoveModel.cpp */,
|
||||
21D0BDD62C935DAE0077E104 /* RemoveModel.h */,
|
||||
21D0BDD22C935D1A0077E104 /* UpdateModel.cpp */,
|
||||
21D0BDD32C935D1A0077E104 /* UpdateModel.h */,
|
||||
);
|
||||
path = Base;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CC92C77670400FD64FC /* Card */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CC72C77670400FD64FC /* ModelCardDatabase.cpp */,
|
||||
21B67CC82C77670400FD64FC /* ModelCardDatabase.h */,
|
||||
);
|
||||
path = Card;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CCA2C77670400FD64FC /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CC92C77670400FD64FC /* Card */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CCB2C77670400FD64FC /* Database */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
215F083E2C96270100CD343B /* Identity */,
|
||||
21B67CC72C77670400FD64FC /* ModelCardDatabase.cpp */,
|
||||
21B67CC82C77670400FD64FC /* ModelCardDatabase.h */,
|
||||
21B67CCA2C77670400FD64FC /* Model */,
|
||||
);
|
||||
path = Database;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CD82C78C83800FD64FC /* Test */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CE22C78D1FB00FD64FC /* Arg */,
|
||||
21B67CF52C78D4DD00FD64FC /* GetComplexType.cpp */,
|
||||
21B67CF62C78D4DE00FD64FC /* GetComplexType.h */,
|
||||
21B67CF02C78D38000FD64FC /* GoAway.cpp */,
|
||||
21B67CEF2C78D38000FD64FC /* GoAway.h */,
|
||||
21B67CDA2C78C87F00FD64FC /* SayHi.cpp */,
|
||||
21B67CDB2C78C87F00FD64FC /* SayHi.h */,
|
||||
21B67CD62C78C83800FD64FC /* TestBridge.cpp */,
|
||||
21B67CD72C78C83800FD64FC /* TestBridge.h */,
|
||||
210CC8812C80E6A300610F58 /* TriggerEvent.cpp */,
|
||||
210CC8822C80E6A300610F58 /* TriggerEvent.h */,
|
||||
);
|
||||
path = Test;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CE22C78D1FB00FD64FC /* Arg */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CE02C78D1FB00FD64FC /* SayHiArg.cpp */,
|
||||
21B67CE12C78D1FB00FD64FC /* SayHiArg.h */,
|
||||
);
|
||||
path = Arg;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CE62C78D23B00FD64FC /* Arg */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CE42C78D23B00FD64FC /* ConnectorConfig.cpp */,
|
||||
21B67CE52C78D23B00FD64FC /* ConnectorConfig.h */,
|
||||
);
|
||||
path = Arg;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21B67CEA2C78D27200FD64FC /* Arg */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CE82C78D27200FD64FC /* DocumentInfo.cpp */,
|
||||
21B67CE92C78D27200FD64FC /* DocumentInfo.h */,
|
||||
);
|
||||
path = Arg;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21D0BD5D2C89BFEA0077E104 /* Send */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21D0BD962C8F13F30077E104 /* GetSendFilters.cpp */,
|
||||
21D0BD952C8F13F30077E104 /* GetSendFilters.h */,
|
||||
21D0BD8D2C8EE4490077E104 /* Send.cpp */,
|
||||
21D0BD8A2C8EE4490077E104 /* Send.h */,
|
||||
21D0BD5B2C89BFEA0077E104 /* SendBridge.cpp */,
|
||||
21D0BD5C2C89BFEA0077E104 /* SendBridge.h */,
|
||||
);
|
||||
path = Send;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21D0BDD82C9387E60077E104 /* Record */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21D0BDD92C9387F70077E104 /* Model */,
|
||||
);
|
||||
path = Record;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21D0BDD92C9387F70077E104 /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
215F08262C947F4400CD343B /* CardMover.cpp */,
|
||||
215F08292C947F4400CD343B /* CardMover.h */,
|
||||
21D0BDAA2C8F363E0077E104 /* CardSetting.cpp */,
|
||||
21D0BDA92C8F363E0077E104 /* CardSetting.h */,
|
||||
21D0BDDF2C9393980077E104 /* Filter */,
|
||||
21D0BDA72C8F33AC0077E104 /* ModelCard.cpp */,
|
||||
21D0BDA42C8F33AC0077E104 /* ModelCard.h */,
|
||||
215F08362C95808B00CD343B /* ReceiverModelCard.cpp */,
|
||||
215F08332C95808B00CD343B /* ReceiverModelCard.h */,
|
||||
21D0BDDA2C93897B0077E104 /* SenderModelCard.cpp */,
|
||||
21D0BDDB2C93897B0077E104 /* SenderModelCard.h */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21D0BDDF2C9393980077E104 /* Filter */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
215F084A2C9782F100CD343B /* ArchicadEverythingFilter.h */,
|
||||
215F08412C962F5E00CD343B /* ArchicadSelectionFilter.h */,
|
||||
21D0BDE12C943C630077E104 /* DirectSelectionSendFilter.cpp */,
|
||||
21D0BDE22C943C630077E104 /* DirectSelectionSendFilter.h */,
|
||||
215F08452C9633A800CD343B /* EverythingSendFilter.cpp */,
|
||||
215F08442C9633A800CD343B /* EverythingSendFilter.h */,
|
||||
215F082C2C94C5C000CD343B /* FilterMover.cpp */,
|
||||
215F082D2C94C5C000CD343B /* FilterMover.h */,
|
||||
21D0BDDD2C9393980077E104 /* SendFilter.cpp */,
|
||||
21D0BDDE2C9393980077E104 /* SendFilter.h */,
|
||||
);
|
||||
path = Filter;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
21D1EA472BF14B6C00957EAA /* Archicad */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1135,7 +964,6 @@
|
||||
21B67CCB2C77670400FD64FC /* Database */,
|
||||
21F69F092C677BC0008B6A06 /* Event */,
|
||||
21F69F0E2C677BC0008B6A06 /* Interface */,
|
||||
21D0BDD82C9387E60077E104 /* Record */,
|
||||
21B67CBA2C774C6500FD64FC /* Version.h */,
|
||||
);
|
||||
path = Connector;
|
||||
@@ -1158,8 +986,6 @@
|
||||
21F69F852C70D2C4008B6A06 /* Account */,
|
||||
21B67CAB2C77329800FD64FC /* Base */,
|
||||
21F69FB82C762EF0008B6A06 /* Config */,
|
||||
21D0BD5D2C89BFEA0077E104 /* Send */,
|
||||
21B67CD82C78C83800FD64FC /* Test */,
|
||||
);
|
||||
path = Bridge;
|
||||
sourceTree = "<group>";
|
||||
@@ -1175,13 +1001,12 @@
|
||||
21F69FB82C762EF0008B6A06 /* Config */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
21B67CE62C78D23B00FD64FC /* Arg */,
|
||||
21F69FB42C762EF0008B6A06 /* ConfigBridge.cpp */,
|
||||
21F69FB52C762EF0008B6A06 /* ConfigBridge.h */,
|
||||
21F69FC02C7632B7008B6A06 /* ConnectorConfig.cpp */,
|
||||
21F69FC12C7632B7008B6A06 /* ConnectorConfig.h */,
|
||||
21F69FB62C762EF0008B6A06 /* GetConfig.cpp */,
|
||||
21F69FB72C762EF0008B6A06 /* GetConfig.h */,
|
||||
21D0BD682C8A0DB40077E104 /* GetIsDevMode.cpp */,
|
||||
21D0BD692C8A0DB40077E104 /* GetIsDevMode.h */,
|
||||
21F69FBD2C7630B3008B6A06 /* UpdateConfig.cpp */,
|
||||
21F69FBE2C7630B3008B6A06 /* UpdateConfig.h */,
|
||||
);
|
||||
@@ -1242,7 +1067,7 @@
|
||||
);
|
||||
name = "Connector-AC27-Test";
|
||||
productName = "Connector-AC27-Test";
|
||||
productReference = 219F30352C768F0A009834E9 /* Connector-AC27-Test.bundle */;
|
||||
productReference = 219F30352C768F0A009834E9 /* Connector-AC27-Test.vwlibrary */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
@@ -1365,7 +1190,7 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "mkdir -p \"$HEADER_PATH_6/ResourceObjects\"\npython3 \"$HEADER_PATH_5/Tools/CompileResources.py\" INT \"$HEADER_PATH_5/..\" \"$HEADER_PATH_6\" \"$SRCROOT\" \"$HEADER_PATH_6/ResourceObjects\" \"$SYMROOT/$CONFIGURATION/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/Resources\"\npython3 \"$HEADER_PATH_5/Tools/CompileResources.py\" INT \"$HEADER_PATH_5/..\" \"$HEADER_PATH_3\" \"$HEADER_PATH_3\" \"$HEADER_PATH_6/ResourceObjects\" \"$SYMROOT/$CONFIGURATION/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/Resources\"\ncp \"$HEADER_PATH_5/Inc/PkgInfo\" \"$SYMROOT/$CONFIGURATION/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/PkgInfo\"\ntouch \"$HEADER_PATH_6/ResourceObjects/AddOnResources.stamp\"\n";
|
||||
shellScript = "mkdir -p \"$HEADER_PATH_3/ResourceObjects\"\npython3 \"$HEADER_PATH_5/Tools/CompileResources.py\" INT \"$HEADER_PATH_5/..\" \"$HEADER_PATH_6\" \"$SRCROOT\" \"$HEADER_PATH_3/ResourceObjects\" \"$SYMROOT/$CONFIGURATION/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/Resources\"\ncp \"$HEADER_PATH_5/Inc/PkgInfo\" \"$SYMROOT/$CONFIGURATION/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/PkgInfo\"\ntouch \"$HEADER_PATH_3/ResourceObjects/AddOnResources.stamp\"\n";
|
||||
};
|
||||
213CC3A12B1101F500088049 /* Install */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
@@ -1393,44 +1218,22 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
21D0BDAB2C8F363E0077E104 /* CardSetting.cpp in Sources */,
|
||||
21B67CE32C78D1FB00FD64FC /* SayHiArg.cpp in Sources */,
|
||||
215F08462C9633A800CD343B /* EverythingSendFilter.cpp in Sources */,
|
||||
21B67CBD2C77537C00FD64FC /* DocumentInfo.cpp in Sources */,
|
||||
21F69FC22C7632B7008B6A06 /* ConnectorConfig.cpp in Sources */,
|
||||
21F69FBB2C762EF0008B6A06 /* ConfigBridge.cpp in Sources */,
|
||||
21F69F8A2C70D2C4008B6A06 /* AccountBridge.cpp in Sources */,
|
||||
21D0BD8E2C8EE4490077E104 /* Send.cpp in Sources */,
|
||||
21D0BDCF2C92DAC60077E104 /* AddModel.cpp in Sources */,
|
||||
21B67CF72C78D4DE00FD64FC /* GetComplexType.cpp in Sources */,
|
||||
21D0BDDC2C93897B0077E104 /* SenderModelCard.cpp in Sources */,
|
||||
21B67CAE2C77329800FD64FC /* GetSourceApplicationVersion.cpp in Sources */,
|
||||
21B67CC32C77649F00FD64FC /* GetDocumentState.cpp in Sources */,
|
||||
21D0BD602C89BFEA0077E104 /* SendBridge.cpp in Sources */,
|
||||
21D0BD972C8F13F30077E104 /* GetSendFilters.cpp in Sources */,
|
||||
21B67CAC2C77329800FD64FC /* BaseBridge.cpp in Sources */,
|
||||
21D0BD6A2C8A0DB40077E104 /* GetIsDevMode.cpp in Sources */,
|
||||
210CC8832C80E6A300610F58 /* TriggerEvent.cpp in Sources */,
|
||||
21B67CEB2C78D27200FD64FC /* DocumentInfo.cpp in Sources */,
|
||||
21B67CB92C774BFA00FD64FC /* GetConnectorVersion.cpp in Sources */,
|
||||
21B67CD92C78C83800FD64FC /* TestBridge.cpp in Sources */,
|
||||
214B7A372C764BCD00D586C1 /* UpdateConfig.cpp in Sources */,
|
||||
21B67CC02C775A0D00FD64FC /* GetDocumentInfo.cpp in Sources */,
|
||||
21D0BDD42C935D1A0077E104 /* UpdateModel.cpp in Sources */,
|
||||
21B67CE72C78D23B00FD64FC /* ConnectorConfig.cpp in Sources */,
|
||||
21B67CAD2C77329800FD64FC /* GetSourceApplicationName.cpp in Sources */,
|
||||
21D0BDE02C9393980077E104 /* SendFilter.cpp in Sources */,
|
||||
21D0BDA82C8F33AC0077E104 /* ModelCard.cpp in Sources */,
|
||||
215F082A2C947F4400CD343B /* CardMover.cpp in Sources */,
|
||||
215F08372C95808B00CD343B /* ReceiverModelCard.cpp in Sources */,
|
||||
21D0BDD72C935DAE0077E104 /* RemoveModel.cpp in Sources */,
|
||||
21B67CDC2C78C88000FD64FC /* SayHi.cpp in Sources */,
|
||||
215F082E2C94C5C000CD343B /* FilterMover.cpp in Sources */,
|
||||
21F69F122C677BC0008B6A06 /* ConnectorMenu.cpp in Sources */,
|
||||
21F69F8D2C70D7EE008B6A06 /* GetAccounts.cpp in Sources */,
|
||||
21B67CCC2C77670400FD64FC /* ModelCardDatabase.cpp in Sources */,
|
||||
21F69F132C677BC0008B6A06 /* ConnectorPalette.cpp in Sources */,
|
||||
21F69FBC2C762EF0008B6A06 /* GetConfig.cpp in Sources */,
|
||||
21D0BDE32C943C630077E104 /* DirectSelectionSendFilter.cpp in Sources */,
|
||||
21B67CF12C78D38000FD64FC /* GoAway.cpp in Sources */,
|
||||
21F69F142C677BC0008B6A06 /* Connector.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -1440,7 +1243,6 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
219F30422C769283009834E9 /* ConfigTests.cpp in Sources */,
|
||||
21D0BD672C89D7410077E104 /* AccountTests.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1531,6 +1333,7 @@
|
||||
"\"$(HEADER_PATH_6)\"",
|
||||
"\"$(HEADER_PATH_8)\"",
|
||||
);
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -1595,6 +1398,7 @@
|
||||
"\"$(HEADER_PATH_6)\"",
|
||||
"\"$(HEADER_PATH_8)\"",
|
||||
);
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -1634,7 +1438,6 @@
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
TESTING_MODE,
|
||||
ARCHICAD,
|
||||
AddOn_EXPORTS,
|
||||
"'macintosh=1'",
|
||||
@@ -1705,6 +1508,7 @@
|
||||
"-multiply_defined",
|
||||
suppress,
|
||||
);
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -1745,7 +1549,6 @@
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
TESTING_MODE,
|
||||
ARCHICAD,
|
||||
AddOn_EXPORTS,
|
||||
"'macintosh=1'",
|
||||
@@ -1813,6 +1616,7 @@
|
||||
"-multiply_defined",
|
||||
suppress,
|
||||
);
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -1972,7 +1776,7 @@
|
||||
OBJROOT = "";
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PLUGIN_FOLDER = "";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = systems.speckle.connector;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = net.activethread.connector;
|
||||
PRODUCT_NAME = "$(BASE_NAME)";
|
||||
RESOURCE_EXTENSION = "";
|
||||
REZ_SEARCH_PATHS = (
|
||||
@@ -1999,7 +1803,7 @@
|
||||
suppress,
|
||||
);
|
||||
WORD_SIZE = 64;
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
WRAPPER_EXTENSION = vwlibrary;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -2078,7 +1882,7 @@
|
||||
NNA_WARNING_CPLUSPLUSFLAGS = "-Wno-deprecated";
|
||||
OBJROOT = "";
|
||||
PLUGIN_FOLDER = "";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = systems.speckle.connector;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = net.activethread.connector;
|
||||
PRODUCT_NAME = "$(BASE_NAME)";
|
||||
RESOURCE_EXTENSION = "";
|
||||
REZ_SEARCH_PATHS = (
|
||||
@@ -2101,7 +1905,7 @@
|
||||
);
|
||||
USE_HEADERMAP = YES;
|
||||
WORD_SIZE = 64;
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
WRAPPER_EXTENSION = vwlibrary;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "219F30342C768F0A009834E9"
|
||||
BuildableName = "Connector-AC27-Test.bundle"
|
||||
BuildableName = "Connector-AC27-Test.vwlibrary"
|
||||
BlueprintName = "Connector-AC27-Test"
|
||||
ReferencedContainer = "container:Connector.xcodeproj">
|
||||
</BuildableReference>
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "219F30342C768F0A009834E9"
|
||||
BuildableName = "Connector-AC27-Test.bundle"
|
||||
BuildableName = "Connector-AC27-Test.vwlibrary"
|
||||
BlueprintName = "Connector-AC27-Test"
|
||||
ReferencedContainer = "container:Connector.xcodeproj">
|
||||
</BuildableReference>
|
||||
|
||||
@@ -1,36 +1,25 @@
|
||||
#include "Active/File/Directory.h"
|
||||
#include "ConnectorResource.h"
|
||||
#include "Connector/Connector.h"
|
||||
#include "Connector/Database/ModelCardDatabase.h"
|
||||
#include "Connector/Database/Model/Card/ModelCardDatabase.h"
|
||||
#include "Interface/ConnectorMenu.h"
|
||||
#include "Interface/ConnectorPalette.h"
|
||||
#include "Speckle/Database/AccountDatabase.h"
|
||||
#include "Speckle/Environment/Addon.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
using namespace active::file;
|
||||
using namespace active::environment;
|
||||
using namespace connector;
|
||||
using namespace connector::database;
|
||||
using namespace speckle::database;
|
||||
using namespace speckle::environment;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
//The Speckle application data/support directory name
|
||||
const char* speckleDataDirName = "Speckle";
|
||||
//The account database name
|
||||
const char* accountDBaseName = "Accounts.db";
|
||||
|
||||
///The Connector addon class
|
||||
class ConnectorInstance : public ConnectorAddon {
|
||||
public:
|
||||
ConnectorInstance(const String& name) : ConnectorAddon{name} {
|
||||
add<ConnectorMenu>();
|
||||
add<ConnectorPalette>();
|
||||
//The connector 'owns' the model card database, so the publisher list should only hold a weak reference
|
||||
addWeak(m_modelCards.getSubscription());
|
||||
add(std::make_shared<ConnectorMenu>());
|
||||
add(std::make_shared<ConnectorPalette>());
|
||||
}
|
||||
|
||||
// MARK: Functions (const)
|
||||
@@ -39,34 +28,15 @@ namespace {
|
||||
Get the model card database
|
||||
@return The model card database
|
||||
*/
|
||||
const ModelCardDatabase* getModelCardDatabase() const override { return &m_modelCards; }
|
||||
/*!
|
||||
Get the account database
|
||||
@return The account database
|
||||
*/
|
||||
const AccountDatabase* getAccountDatabase() const override;
|
||||
const ModelCardDatabase* getModelCards() const override { return &m_modelCards; }
|
||||
|
||||
private:
|
||||
mutable std::unique_ptr<AccountDatabase> m_account;
|
||||
ModelCardDatabase m_modelCards;
|
||||
};
|
||||
|
||||
///The active addon instance
|
||||
std::unique_ptr<ConnectorAddon> m_addonInstance;
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the speckle application data directory (creating if missing)
|
||||
|
||||
return: The application data directory (nullopt = missing and unable to create)
|
||||
--------------------------------------------------------------------*/
|
||||
Directory::Option getAppDataDirectory() {
|
||||
auto appData = Directory::appData();
|
||||
if (!appData)
|
||||
return std::nullopt;
|
||||
return Directory{*appData, speckleDataDirName, true};
|
||||
} //getAppDataDirectory
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
@@ -78,39 +48,13 @@ ConnectorAddon::ConnectorAddon(const speckle::utility::String& name) : Addon{nam
|
||||
} //ConnectorAddon::ConnectorAddon
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the account database
|
||||
|
||||
return: The account database
|
||||
--------------------------------------------------------------------*/
|
||||
const AccountDatabase* ConnectorInstance::getAccountDatabase() const {
|
||||
if (!m_account) {
|
||||
auto speckleDirectory = getAppDataDirectory();
|
||||
if (!speckleDirectory)
|
||||
return nullptr;
|
||||
m_account = std::make_unique<AccountDatabase>(speckleDirectory->getPath() / accountDBaseName);
|
||||
}
|
||||
return m_account.get();
|
||||
} //ConnectorInstance::getAccounts
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get an object representing the connector instance
|
||||
@return The active connector instance (nullptr if no connector is running)
|
||||
--------------------------------------------------------------------*/
|
||||
ConnectorAddon* connector::connector() {
|
||||
return m_addonInstance.get();
|
||||
} //connector::connector
|
||||
|
||||
|
||||
|
||||
#ifdef ARCHICAD
|
||||
/*!
|
||||
The following is the C interface for the plugin to Archicad as specified by the API
|
||||
*/
|
||||
|
||||
#include <ACAPinc.h>
|
||||
#include <APIdefs_Registration.h>
|
||||
#include "ACAPinc.h"
|
||||
#include "APIdefs_Registration.h"
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Confirm that the plugin is able to run in the current environment
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
#include "Speckle/Environment/Addon.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
namespace speckle::database {
|
||||
class AccountDatabase;
|
||||
}
|
||||
namespace connector::database {
|
||||
|
||||
class ModelCardDatabase;
|
||||
|
||||
}
|
||||
|
||||
namespace connector {
|
||||
@@ -20,12 +19,7 @@ namespace connector {
|
||||
Get the model card database
|
||||
@return The model card database
|
||||
*/
|
||||
const virtual database::ModelCardDatabase* getModelCardDatabase() const = 0;
|
||||
/*!
|
||||
Get the account database
|
||||
@return The account database
|
||||
*/
|
||||
const virtual speckle::database::AccountDatabase* getAccountDatabase() const = 0;
|
||||
const virtual database::ModelCardDatabase* getModelCards() const = 0;
|
||||
|
||||
protected:
|
||||
/*!
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifndef CONNECTOR_DATABASE_ID
|
||||
#define CONNECTOR_DATABASE_ID
|
||||
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
|
||||
namespace connector::database {
|
||||
|
||||
//BIM element record identifier
|
||||
using ElementID = speckle::utility::Guid;
|
||||
|
||||
//A list of element IDs
|
||||
using ElementIDList = std::vector<ElementID>;
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_DATABASE_ID
|
||||
+20
-22
@@ -1,28 +1,27 @@
|
||||
#include "Connector/Record/Model/Filter/EverythingSendFilter.h"
|
||||
#include "Connector/Database/Model/Card/ModelCardDatabase.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ValueSettingWrap.h"
|
||||
#include "Active/Setting/ValueSetting.h"
|
||||
|
||||
#include "Active/Utility/Concepts.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::setting;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
selectedElemID,
|
||||
model,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"selectedObjectIds"},
|
||||
Identity{"model"},
|
||||
};
|
||||
|
||||
}
|
||||
@@ -34,15 +33,15 @@ namespace {
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool EverythingSendFilter::fillInventory(Inventory& inventory) const {
|
||||
bool ModelCardDatabase::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[selectedElemID], selectedElemID, element },
|
||||
{ fieldID[model], model, element },
|
||||
},
|
||||
}.withType(&typeid(EverythingSendFilter)));
|
||||
return base::fillInventory(inventory);
|
||||
} //EverythingSendFilter::fillInventory
|
||||
}.withType(&typeid(ModelCardDatabase)));
|
||||
return true;
|
||||
} //ModelCardDatabase::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
@@ -52,22 +51,21 @@ bool EverythingSendFilter::fillInventory(Inventory& inventory) const {
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique EverythingSendFilter::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(EverythingSendFilter))
|
||||
return base::getCargo(item);
|
||||
Cargo::Unique ModelCardDatabase::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(ModelCardDatabase))
|
||||
return nullptr;
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case selectedElemID:
|
||||
return std::make_unique<ContainerWrap<ElementIDList>>(m_emptyList);
|
||||
case model:
|
||||
return std::make_unique<CargoHold<ValueSettingWrap, ValueSetting>>(); //NB: This is a placeholder until we define the content
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //EverythingSendFilter::getCargo
|
||||
} //ModelCardDatabase::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void EverythingSendFilter::setDefault() {
|
||||
m_emptyList.clear();
|
||||
} //EverythingSendFilter::setDefault
|
||||
void ModelCardDatabase::setDefault() {
|
||||
} //ModelCardDatabase::setDefault
|
||||
+13
-11
@@ -1,15 +1,15 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_SAYHI_ARG
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_SAYHI_ARG
|
||||
#ifndef CONNECTOR_DATABASE_MODEL_CARD_DATABASE
|
||||
#define CONNECTOR_DATABASE_MODEL_CARD_DATABASE
|
||||
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
namespace connector::database {
|
||||
|
||||
/*!
|
||||
Object for testing JS comms (with TestBridge binding)
|
||||
Database of model cards relating to a specific project
|
||||
*/
|
||||
class SayHiArg : public active::serialise::Package {
|
||||
class ModelCardDatabase : public active::serialise::Package {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
@@ -21,14 +21,14 @@ namespace connector::interfac::browser::bridge {
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
SayHiArg() = default;
|
||||
ModelCardDatabase() {}
|
||||
|
||||
// MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity)
|
||||
|
||||
///Sample parameters for testing only
|
||||
speckle::utility::String name;
|
||||
int32_t count = 0;
|
||||
bool isHello = false;
|
||||
|
||||
// MARK: Functions (const)
|
||||
|
||||
//Implement card access when necessary
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
@@ -48,8 +48,10 @@ namespace connector::interfac::browser::bridge {
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
private:
|
||||
//TODO: Model card array here - implement when necessary
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_SAYHI_ARG
|
||||
#endif //CONNECTOR_DATABASE_MODEL_CARD_DATABASE
|
||||
@@ -1,121 +0,0 @@
|
||||
#include "Connector/Database/ModelCardDatabase.h"
|
||||
|
||||
#include "Active/Database/Storage/Storage.h"
|
||||
#include "Active/Serialise/JSON/JSONTransport.h"
|
||||
#include "Connector/Record/Model/CardMover.h"
|
||||
#include "Speckle/Database/Identity/RecordID.h"
|
||||
#include "Speckle/Database/Storage/DocumentStore/DocumentStoreEngine.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::database;
|
||||
using namespace active::event;
|
||||
using namespace active::serialise;
|
||||
using namespace active::serialise::json;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::database;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace connector::database {
|
||||
|
||||
///ModelCard database engine declaration
|
||||
class ModelCardDatabase::Engine : public DocumentStoreEngine<ModelCard, CardMover, JSONTransport, RecordID> {
|
||||
using base = DocumentStoreEngine<ModelCard, CardMover, JSONTransport, RecordID>;
|
||||
using base::base;
|
||||
};
|
||||
|
||||
///ModelCard database storage declaration
|
||||
class ModelCardDatabase::Store : public Storage<ModelCard, JSONTransport,
|
||||
RecordID, RecordID, RecordID, RecordID> {
|
||||
using base = Storage<ModelCard, JSONTransport,
|
||||
RecordID, RecordID, RecordID, RecordID>;
|
||||
using base::base;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
///The document storage identifier for model cards
|
||||
const char* modelCardDBaseName = "connector::database::ModelModelCardDatabase";
|
||||
///The document storage identifier for model cards
|
||||
const char* modelCardTableName = "models";
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor
|
||||
--------------------------------------------------------------------*/
|
||||
ModelCardDatabase::ModelCardDatabase() {
|
||||
m_engine = std::make_shared<Engine>(modelCardDBaseName,
|
||||
//Schema
|
||||
DBaseSchema{active::utility::String{modelCardDBaseName},
|
||||
//Tables
|
||||
{
|
||||
//Model card table
|
||||
{
|
||||
modelCardTableName, 0, 0, {} //The table specifics aren't relevant in this context
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
m_store = std::make_shared<Store>(m_engine);
|
||||
} //ModelCardDatabase::ModelCardDatabase
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Destructor
|
||||
--------------------------------------------------------------------*/
|
||||
ModelCardDatabase::~ModelCardDatabase() {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get all model cards
|
||||
|
||||
return: All the cards
|
||||
--------------------------------------------------------------------*/
|
||||
Vector<ModelCard> ModelCardDatabase::getCards() const {
|
||||
return m_store->getObjects();
|
||||
} //ModelCardDatabase::getCards
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Write a card to storage
|
||||
|
||||
card: The card to write
|
||||
--------------------------------------------------------------------*/
|
||||
void ModelCardDatabase::write(const ModelCard& card) const {
|
||||
m_store->write(card);
|
||||
} //ModelCardDatabase::write
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Erase a card
|
||||
|
||||
cardID: The ID of the card to erase
|
||||
--------------------------------------------------------------------*/
|
||||
void ModelCardDatabase::erase(const String& cardID) const {
|
||||
m_store->erase(cardID);
|
||||
} //ModelCardDatabase::erase
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get a serialisation wrapper for the database
|
||||
|
||||
return: A database wrapper
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> ModelCardDatabase::wrapper() const {
|
||||
return m_store->wrapper();
|
||||
} //ModelCardDatabase::wrapper
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the database subscription (the content is document-based, and must react to document operations)
|
||||
|
||||
return: The database subscription (add weakly to publisher)
|
||||
--------------------------------------------------------------------*/
|
||||
std::shared_ptr<active::event::Subscriber> ModelCardDatabase::getSubscription() {
|
||||
return std::dynamic_pointer_cast<Subscriber>(m_engine);
|
||||
} //ModelCardDatabase::getSubscription
|
||||
@@ -1,71 +0,0 @@
|
||||
#ifndef CONNECTOR_DATABASE_MODEL_CARD_DATABASE
|
||||
#define CONNECTOR_DATABASE_MODEL_CARD_DATABASE
|
||||
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
|
||||
namespace active::event {
|
||||
class Subscriber;
|
||||
}
|
||||
|
||||
namespace connector::database {
|
||||
|
||||
/*!
|
||||
Database of model cards relating to a specific project
|
||||
*/
|
||||
class ModelCardDatabase {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
*/
|
||||
ModelCardDatabase();
|
||||
ModelCardDatabase(const ModelCardDatabase&) = delete;
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
~ModelCardDatabase();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get all model cards
|
||||
@return All the cards
|
||||
*/
|
||||
active::container::Vector<record::ModelCard> getCards() const;
|
||||
/*!
|
||||
Write a card to storage
|
||||
@param card The card to write
|
||||
*/
|
||||
void write(const record::ModelCard& card) const;
|
||||
/*!
|
||||
Erase a card
|
||||
@param cardID The ID of the card to erase
|
||||
*/
|
||||
void erase(const speckle::utility::String& cardID) const;
|
||||
/*!
|
||||
Get a serialisation wrapper for the database
|
||||
@return A database wrapper
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> wrapper() const;
|
||||
|
||||
// MARK: - Functions (mutating)
|
||||
|
||||
/*!
|
||||
Get the database subscription (the content is document-based, and must react to document operations)
|
||||
@return The database subscription (add weakly to publisher)
|
||||
*/
|
||||
std::shared_ptr<active::event::Subscriber> getSubscription();
|
||||
|
||||
private:
|
||||
class Engine;
|
||||
class Store;
|
||||
///Model card database storage
|
||||
std::shared_ptr<Engine> m_engine;
|
||||
std::shared_ptr<Store> m_store;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_DATABASE_MODEL_CARD_DATABASE
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
#include "Connector/Connector.h"
|
||||
#include "Speckle/Database/AccountDatabase.h"
|
||||
#include "Speckle/Record/Credentials/Account.h"
|
||||
|
||||
using namespace active::container;
|
||||
@@ -14,14 +12,14 @@ using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector<Account>>, Vector<Account>>;
|
||||
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector, Account>, Vector<Account>>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetAccounts::GetAccounts() : BridgeMethod{"GetAccounts", [&]() {
|
||||
GetAccounts::GetAccounts() : JSBridgeMethod{"GetAccounts", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
@@ -31,11 +29,8 @@ GetAccounts::GetAccounts() : BridgeMethod{"GetAccounts", [&]() {
|
||||
|
||||
return: The accounts (empty array when none defined)
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetAccounts::run() const {
|
||||
std::unique_ptr<Vector<Account>> result;
|
||||
if (auto accountDBase = connector()->getAccountDatabase(); accountDBase != nullptr)
|
||||
result = std::make_unique<Vector<Account>>(accountDBase->getAccounts());
|
||||
else
|
||||
result = std::make_unique<Vector<Account>>();
|
||||
return std::make_unique<WrappedValue>(std::move(result));
|
||||
std::unique_ptr<Cargo> GetAccounts::run(void) const {
|
||||
Vector<Account> accounts;
|
||||
///TODO: Get the accounts here - returning an empty array for testing only
|
||||
return std::make_unique<WrappedValue>(accounts);
|
||||
} //GetAccounts::run
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_ACCOUNTS
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_ACCOUNTS
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve the names of the methods supported by the bridge
|
||||
*/
|
||||
class GetAccounts : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetAccounts : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
@@ -24,7 +24,7 @@ namespace connector::interfac::browser::bridge {
|
||||
Get the accounts
|
||||
@return The accounts (empty array when none defined)
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
std::unique_ptr<active::serialise::Cargo> run(void) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Base/AddModel.h"
|
||||
|
||||
#include "Connector/Connector.h"
|
||||
#include "Connector/Database/ModelCardDatabase.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
using namespace connector::record;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
using WrappedValue = active::serialise::CargoHold<PackageWrap, DocumentInfo>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
AddModel::AddModel() : BridgeMethod{"AddModel", [&](const ModelCardEventWrapper& card) {
|
||||
return run(card.get());
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Add a model card to document storage
|
||||
|
||||
card: The card to add
|
||||
--------------------------------------------------------------------*/
|
||||
void AddModel::run(const ModelCard& card) const {
|
||||
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr)
|
||||
modelCardDBase->write(card);
|
||||
} //AddModel::run
|
||||
@@ -1,40 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_ADD_MODEL
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_ADD_MODEL
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Connector/Record/Model/CardMover.h"
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
///Argument parameter for a string
|
||||
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
|
||||
///Argument type for this method
|
||||
using ModelCardEventWrapper = speckle::interfac::browser::bridge::JSArgType<CardHold>;
|
||||
|
||||
/*!
|
||||
JS Function class to add a model card to the document storage
|
||||
*/
|
||||
class AddModel : public speckle::interfac::browser::bridge::BridgeMethod<ModelCardEventWrapper, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
AddModel();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Add a model card to document storage
|
||||
@param card The card to add
|
||||
*/
|
||||
void run(const connector::record::ModelCard& card) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_ADD_MODEL
|
||||
@@ -1,13 +1,10 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Base/BaseBridge.h"
|
||||
|
||||
#include "Connector/Interface/Browser/Bridge/Base/AddModel.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/GetConnectorVersion.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentInfo.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentState.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/GetSourceApplicationName.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/GetSourceApplicationVersion.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/UpdateModel.h"
|
||||
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
|
||||
@@ -16,12 +13,9 @@ using namespace connector::interfac::browser::bridge;
|
||||
--------------------------------------------------------------------*/
|
||||
BaseBridge::BaseBridge() : BrowserBridge{"baseBinding"} {
|
||||
//Add bridge methods
|
||||
addMethod<AddModel>();
|
||||
addMethod<GetConnectorVersion>();
|
||||
addMethod<GetDocumentInfo>();
|
||||
addMethod<GetDocumentState>();
|
||||
addMethod<GetSourceApplicationName>();
|
||||
addMethod<GetSourceApplicationVersion>();
|
||||
addMethod<RemoveModel>();
|
||||
addMethod<UpdateModel>();
|
||||
} //BaseBridge::BaseBridge
|
||||
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/DocumentInfo.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
|
||||
@@ -19,9 +19,9 @@ namespace {
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"location"},
|
||||
Identity{"name"},
|
||||
Identity{"id"},
|
||||
Identity{"Location"},
|
||||
Identity{"Name"},
|
||||
Identity{"Id"},
|
||||
};
|
||||
|
||||
}
|
||||
+7
-7
@@ -1,5 +1,5 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
|
||||
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
@@ -29,12 +29,12 @@ namespace connector::interfac::browser::bridge {
|
||||
|
||||
// MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity)
|
||||
|
||||
///The URL of the project file (non-teamwork) or server (teamwork)
|
||||
speckle::utility::String location;
|
||||
///The project location
|
||||
speckle::utility::String location; //TODO: Confirm this is an address
|
||||
///The project name
|
||||
speckle::utility::String name;
|
||||
speckle::utility::String name; //TODO: Assume project name rather than document (file) name - need to confirm
|
||||
///A unique, persistent ID for the project document
|
||||
speckle::utility::String ID;
|
||||
speckle::utility::String ID; //TODO: should possibly be a guid - need to check
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
@@ -58,4 +58,4 @@ namespace connector::interfac::browser::bridge {
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
|
||||
@@ -19,7 +19,7 @@ namespace {
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetConnectorVersion::GetConnectorVersion() : BridgeMethod{"GetConnectorVersion", [&]() {
|
||||
GetConnectorVersion::GetConnectorVersion() : JSBridgeMethod{"GetConnectorVersion", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_VERSION
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_VERSION
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace connector::interfac::browser::bridge {
|
||||
/*!
|
||||
JS Function class to retrieve the names of the methods supported by the bridge
|
||||
*/
|
||||
class GetConnectorVersion : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetConnectorVersion : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentInfo.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Connector/Connector.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
|
||||
#include "Speckle/Environment/Project.h"
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/DocumentInfo.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
@@ -20,7 +18,7 @@ namespace {
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetDocumentInfo::GetDocumentInfo() : BridgeMethod{"GetDocumentInfo", [&]() {
|
||||
GetDocumentInfo::GetDocumentInfo() : JSBridgeMethod{"GetDocumentInfo", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
@@ -30,15 +28,8 @@ GetDocumentInfo::GetDocumentInfo() : BridgeMethod{"GetDocumentInfo", [&]() {
|
||||
|
||||
return: The document info
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetDocumentInfo::run() const {
|
||||
auto docInfo = std::make_unique<DocumentInfo>();
|
||||
if (auto project = connector()->getActiveProject().lock(); project) {
|
||||
auto info = project->getInfo();
|
||||
docInfo->name = info.name;
|
||||
if (info.path)
|
||||
docInfo->location = *info.path;
|
||||
//TODO: No suitable project ID is currently available
|
||||
docInfo->ID = Guid{true}.operator String();
|
||||
}
|
||||
return std::make_unique<WrappedValue>(std::move(docInfo));
|
||||
std::unique_ptr<Cargo> GetDocumentInfo::run(void) const {
|
||||
///TODO: Get the document info here - returning mocked values for now
|
||||
DocumentInfo docInfo{"Somewhere", "Something", String{active::utility::Guid{true}.operator active::utility::String()}};
|
||||
return std::make_unique<WrappedValue>(docInfo);
|
||||
} //GetDocumentInfo::run
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_INFO
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_INFO
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve the information about the active document
|
||||
*/
|
||||
class GetDocumentInfo : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetDocumentInfo : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
@@ -24,7 +24,7 @@ namespace connector::interfac::browser::bridge {
|
||||
Get the document info
|
||||
@return The document info
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
std::unique_ptr<active::serialise::Cargo> run(void) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -2,21 +2,25 @@
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
#include "Connector/Connector.h"
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
#include "Connector/Database/ModelCardDatabase.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/DocumentInfo.h"
|
||||
#include "Connector/Database/Model/Card/ModelCardDatabase.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
using WrappedValue = active::serialise::CargoHold<PackageWrap, ModelCardDatabase>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetDocumentState::GetDocumentState() : BridgeMethod{"GetDocumentState", [&]() {
|
||||
GetDocumentState::GetDocumentState() : JSBridgeMethod{"GetDocumentState", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
@@ -26,9 +30,8 @@ GetDocumentState::GetDocumentState() : BridgeMethod{"GetDocumentState", [&]() {
|
||||
|
||||
return: The document info
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetDocumentState::run() const {
|
||||
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr) {
|
||||
return modelCardDBase->wrapper();
|
||||
}
|
||||
return nullptr;
|
||||
std::unique_ptr<Cargo> GetDocumentState::run(void) const {
|
||||
///TODO: Retrieve the model card database from connector()->getModelCards() in future (when implemented)
|
||||
ModelCardDatabase modelCards; //This is just a temp so something can be sent back to the JS for the interim
|
||||
return std::make_unique<WrappedValue>(modelCards);
|
||||
} //GetDocumentState::run
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_STATE
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_STATE
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve the information about the active document
|
||||
*/
|
||||
class GetDocumentState : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetDocumentState : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
@@ -24,7 +24,7 @@ namespace connector::interfac::browser::bridge {
|
||||
Get the document info
|
||||
@return The document info
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
std::unique_ptr<active::serialise::Cargo> run(void) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ namespace {
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetSourceApplicationName::GetSourceApplicationName() : BridgeMethod{"GetSourceApplicationName", [&]() {
|
||||
GetSourceApplicationName::GetSourceApplicationName() : JSBridgeMethod{"GetSourceApplicationName", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
@@ -28,7 +28,7 @@ GetSourceApplicationName::GetSourceApplicationName() : BridgeMethod{"GetSourceAp
|
||||
|
||||
return: The application name
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetSourceApplicationName::run() const {
|
||||
std::unique_ptr<Cargo> GetSourceApplicationName::run(void) const {
|
||||
//Implement other platforms as required
|
||||
#ifdef ARCHICAD
|
||||
String result{"Archicad"};
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_APP_NAME
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_APP_NAME
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve the host application name
|
||||
*/
|
||||
class GetSourceApplicationName : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetSourceApplicationName : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ namespace {
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetSourceApplicationVersion::GetSourceApplicationVersion() : BridgeMethod{"GetSourceApplicationVersion", [&]() {
|
||||
GetSourceApplicationVersion::GetSourceApplicationVersion() : JSBridgeMethod{"GetSourceApplicationVersion", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_APP_VERSION
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_APP_VERSION
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace connector::interfac::browser::bridge {
|
||||
/*!
|
||||
JS Function class to get the host application version
|
||||
*/
|
||||
class GetSourceApplicationVersion : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetSourceApplicationVersion : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h"
|
||||
|
||||
#include "Connector/Connector.h"
|
||||
#include "Connector/Database/ModelCardDatabase.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
using WrappedValue = active::serialise::CargoHold<PackageWrap, DocumentInfo>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
RemoveModel::RemoveModel() : BridgeMethod{"RemoveModel", [&](const ModelCardEventWrapper& card) {
|
||||
return run(card.get());
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Add a model card to document storage
|
||||
|
||||
card: The card to add
|
||||
--------------------------------------------------------------------*/
|
||||
void RemoveModel::run(const ModelCard& card) const {
|
||||
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr)
|
||||
modelCardDBase->erase(card.getID());
|
||||
} //RemoveModel::run
|
||||
@@ -1,40 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_REMOVE_MODEL
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_REMOVE_MODEL
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Connector/Record/Model/CardMover.h"
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
///Argument parameter for a string
|
||||
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
|
||||
///Argument type for this method
|
||||
using ModelCardEventWrapper = speckle::interfac::browser::bridge::JSArgType<CardHold>;
|
||||
|
||||
/*!
|
||||
JS Function class to add a model card to the document storage
|
||||
*/
|
||||
class RemoveModel : public speckle::interfac::browser::bridge::BridgeMethod<ModelCardEventWrapper, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
RemoveModel();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Add a model card to document storage
|
||||
@param card The card to add
|
||||
*/
|
||||
void run(const connector::record::ModelCard& card) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_REMOVE_MODEL
|
||||
@@ -1,36 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Base/UpdateModel.h"
|
||||
|
||||
#include "Connector/Connector.h"
|
||||
#include "Connector/Database/ModelCardDatabase.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
using WrappedValue = active::serialise::CargoHold<PackageWrap, DocumentInfo>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
UpdateModel::UpdateModel() : BridgeMethod{"UpdateModel", [&](const ModelCardEventWrapper& card) {
|
||||
return run(card.get());
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Add a model card to document storage
|
||||
|
||||
card: The card to add
|
||||
--------------------------------------------------------------------*/
|
||||
void UpdateModel::run(const ModelCard& card) const {
|
||||
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr)
|
||||
modelCardDBase->write(card);
|
||||
} //UpdateModel::run
|
||||
@@ -1,40 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_UPDATE_MODEL
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_UPDATE_MODEL
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Connector/Record/Model/CardMover.h"
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
///Argument parameter for a string
|
||||
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
|
||||
///Argument type for this method
|
||||
using ModelCardEventWrapper = speckle::interfac::browser::bridge::JSArgType<CardHold>;
|
||||
|
||||
/*!
|
||||
JS Function class to add a model card to the document storage
|
||||
*/
|
||||
class UpdateModel : public speckle::interfac::browser::bridge::BridgeMethod<ModelCardEventWrapper, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
UpdateModel();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Add a model card to document storage
|
||||
@param card The card to add
|
||||
*/
|
||||
void run(const connector::record::ModelCard& card) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_UPDATE_MODEL
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
#include "Connector/Interface/Browser/Bridge/Config/GetConfig.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/UpdateConfig.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/GetIsDevMode.h"
|
||||
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
|
||||
@@ -13,5 +12,4 @@ ConfigBridge::ConfigBridge() : BrowserBridge{"configBinding"} {
|
||||
//Add bridge methods
|
||||
addMethod<GetConfig>();
|
||||
addMethod<UpdateConfig>();
|
||||
addMethod<GetIsDevMode>();
|
||||
} //ConfigBridge::ConfigBridge
|
||||
|
||||
+2
-3
@@ -1,7 +1,6 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
@@ -17,7 +16,7 @@ namespace {
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"darkTheme"},
|
||||
Identity{"DarkTheme"},
|
||||
};
|
||||
|
||||
}
|
||||
+1
-2
@@ -2,7 +2,6 @@
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
|
||||
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/ArgumentBase.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
@@ -25,7 +24,7 @@ namespace connector::interfac::browser::bridge {
|
||||
|
||||
// MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity)
|
||||
|
||||
///True if the UI renders in dark mode
|
||||
///?
|
||||
bool isDarkTheme = true;
|
||||
|
||||
// MARK: - Serialisation
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Config/GetConfig.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
|
||||
#include "Active/Serialise/Package/PackageWrap.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
@@ -18,7 +18,7 @@ namespace {
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetConfig::GetConfig() : BridgeMethod{"GetConfig", [&]() {
|
||||
GetConfig::GetConfig() : JSBridgeMethod{"GetConfig", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
@@ -28,8 +28,8 @@ GetConfig::GetConfig() : BridgeMethod{"GetConfig", [&]() {
|
||||
|
||||
return: The settings
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetConfig::run() const {
|
||||
auto config = std::make_unique<ConnectorConfig>();
|
||||
///TODO: Get the data from a local SQLite database
|
||||
return std::make_unique<WrappedValue>(std::move(config));
|
||||
std::unique_ptr<Cargo> GetConfig::run(void) const {
|
||||
ConnectorConfig config;
|
||||
///TODO: Get the accounts here - returning an empty array for testing only
|
||||
return std::make_unique<WrappedValue>(config);
|
||||
} //GetConfig::run
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve the names of the methods supported by the bridge
|
||||
*/
|
||||
class GetConfig : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
class GetConfig : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
@param bridge The parent bridge object (provides access to bridge methods)
|
||||
*/
|
||||
GetConfig();
|
||||
|
||||
@@ -24,7 +26,7 @@ namespace connector::interfac::browser::bridge {
|
||||
Get the configuration settings
|
||||
@return The settings
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
std::unique_ptr<active::serialise::Cargo> run(void) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Config/GetIsDevMode.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Return type for retrieving the current configuration
|
||||
using WrappedValue = CargoHold<ValueWrap<bool>, bool>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetIsDevMode::GetIsDevMode() : BridgeMethod{"GetIsDevMode", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the DEBUG mode
|
||||
|
||||
return: true for DEBUG, false otherwise
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetIsDevMode::run() const {
|
||||
|
||||
#if DEBUG
|
||||
bool value = true;
|
||||
#else
|
||||
bool value = false;
|
||||
#endif
|
||||
|
||||
return std::make_unique<WrappedValue>(value);
|
||||
} //GetIsDevMode::run
|
||||
@@ -1,32 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_IS_DEV_MODE
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_IS_DEV_MODE
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve IsDebugMode
|
||||
*/
|
||||
class GetIsDevMode : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
*/
|
||||
GetIsDevMode();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the DEBUG mode
|
||||
@return true for DEBUG, false otherwise
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_IS_DEV_MODE
|
||||
@@ -1,7 +1,8 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Config/UpdateConfig.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
#include "Active/Serialise/Package/PackageWrap.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
@@ -10,8 +11,8 @@ using namespace speckle::utility;
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
UpdateConfig::UpdateConfig() : BridgeMethod{"UpdateConfig", [&](const UpdateArgs& args) {
|
||||
run(args);
|
||||
UpdateConfig::UpdateConfig() : JSBridgeMethod{"UpdateConfig", [&](UpdateArgs args) {
|
||||
run(args.value);
|
||||
}} {}
|
||||
|
||||
|
||||
@@ -21,5 +22,5 @@ UpdateConfig::UpdateConfig() : BridgeMethod{"UpdateConfig", [&](const UpdateArgs
|
||||
config: The new settings
|
||||
--------------------------------------------------------------------*/
|
||||
void UpdateConfig::run(const ConnectorConfig& config) const {
|
||||
///TODO: Store the active configuration settings in a local SQLite database
|
||||
///TODO: Store the active configuration settings here
|
||||
} //UpdateConfig::run
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_UPDATE_CONFIG
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace connector::interfac::browser::bridge {
|
||||
/*!
|
||||
JS Function class to retrieve the names of the methods supported by the bridge
|
||||
*/
|
||||
class UpdateConfig : public speckle::interfac::browser::bridge::BridgeMethod<UpdateArgs, void> {
|
||||
class UpdateConfig : public speckle::interfac::browser::bridge::JSBridgeMethod<UpdateArgs, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Send/GetSendFilters.h"
|
||||
|
||||
#include "Active/Container/Vector.h"
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
#include "Connector/Record/Model/Filter/ArchicadEverythingFilter.h"
|
||||
#include "Connector/Record/Model/Filter/FilterMover.h"
|
||||
#include "Connector/Record/Model/Filter/ArchicadSelectionFilter.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
using namespace connector::record;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector<SendFilter>, FilterMover>, Vector<SendFilter>>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetSendFilters::GetSendFilters() : BridgeMethod{"GetSendFilters", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the send filters
|
||||
|
||||
return: The send filters
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetSendFilters::run() const {
|
||||
auto filters = std::make_unique<Vector<SendFilter>>();
|
||||
//filters.emplace_back(ArchicadEverythingFilter{}); //TODO: Implement as required
|
||||
filters->emplace_back(ArchicadSelectionFilter{});
|
||||
return std::make_unique<WrappedValue>(std::move(filters));
|
||||
} //GetSendFilters::run
|
||||
@@ -1,36 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
class ConnectorConfig;
|
||||
|
||||
/*!
|
||||
JS Function class to retrieve the send filters
|
||||
*/
|
||||
class GetSendFilters : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
@param bridge The parent bridge object (provides access to bridge methods)
|
||||
*/
|
||||
GetSendFilters();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the send filters
|
||||
@return The send filters
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS
|
||||
@@ -1,27 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Send/Send.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
#include "Speckle/Utility/Exception.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
Send::Send() : BridgeMethod{"Send", [&](const SendArgs& args) {
|
||||
run(args);
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Send a specified model
|
||||
|
||||
modelCardID: The ID of the madel to send
|
||||
--------------------------------------------------------------------*/
|
||||
void Send::run(const String& modelCardID) const {
|
||||
///TODO: Find and send selected elements - the following is a placeholder
|
||||
throw Exception{"No objects were found to convert. Please update your publish filter!"};
|
||||
} //Send::run
|
||||
@@ -1,43 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_SEND
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
class ConnectorConfig;
|
||||
|
||||
///Argument parameter for a string
|
||||
using StringHold = active::serialise::CargoHold<active::serialise::ValueWrap<speckle::utility::String>, speckle::utility::String>;
|
||||
///Argument type for this method
|
||||
using SendArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>;
|
||||
|
||||
/*!
|
||||
JS Function class to send a specified model
|
||||
*/
|
||||
class Send : public speckle::interfac::browser::bridge::BridgeMethod<SendArgs, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
@param bridge The parent bridge object (provides access to bridge methods)
|
||||
*/
|
||||
Send();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Send a specified model
|
||||
@param modelCardID The ID of the madel to send
|
||||
*/
|
||||
void run(const speckle::utility::String& modelCardID) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND
|
||||
@@ -1,15 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Send/SendBridge.h"
|
||||
|
||||
#include "Connector/Interface/Browser/Bridge/Send/GetSendFilters.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Send/Send.h"
|
||||
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
SendBridge::SendBridge() : BrowserBridge{"sendBinding"} {
|
||||
//Add bridge methods
|
||||
addMethod<GetSendFilters>();
|
||||
addMethod<Send>();
|
||||
} //SendBridge::SendBridge
|
||||
@@ -1,29 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_BRIDGE
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_SEND_BRIDGE
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
A browser bridge to support sending model data to a Speckle server
|
||||
*/
|
||||
class SendBridge : public speckle::interfac::browser::bridge::BrowserBridge {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = speckle::interfac::browser::bridge::BrowserBridge;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
using base::base;
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
SendBridge();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_BRIDGE
|
||||
@@ -1,80 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Test/Arg/SayHiArg.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
nameID,
|
||||
countID,
|
||||
isHelloID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs. NB: This structure is never exported, so we only define the incoming argument indices
|
||||
static std::array fieldID = {
|
||||
Identity{"0"},
|
||||
Identity{"1"},
|
||||
Identity{"2"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool SayHiArg::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[nameID], nameID, element },
|
||||
{ fieldID[countID], countID, element },
|
||||
{ fieldID[isHelloID], isHelloID, element },
|
||||
},
|
||||
}.withType(&typeid(SayHiArg)));
|
||||
return true;
|
||||
} //SayHiArg::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique SayHiArg::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(SayHiArg))
|
||||
return nullptr;
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case nameID:
|
||||
return std::make_unique<ValueWrap<String>>(name);
|
||||
case countID:
|
||||
return std::make_unique<ValueWrap<int32_t>>(count);
|
||||
case isHelloID:
|
||||
return std::make_unique<ValueWrap<bool>>(isHello);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //SayHiArg::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void SayHiArg::setDefault() {
|
||||
name.clear();
|
||||
count = 0;
|
||||
isHello = false;
|
||||
} //SayHiArg::setDefault
|
||||
@@ -1,133 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Test/GetComplexType.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
unID,
|
||||
countID,
|
||||
isTestID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"id"},
|
||||
Identity{"count"},
|
||||
Identity{"thisIsABoolean"},
|
||||
};
|
||||
|
||||
/*!
|
||||
Object for testing Javascript communication (with TestBridge binding)
|
||||
*/
|
||||
class ComplexType final : public active::serialise::Package {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::serialise::Package;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
ComplexType();
|
||||
|
||||
// MARK: - Public variables
|
||||
|
||||
///Sample parameters for testing only
|
||||
speckle::utility::String ID;
|
||||
int32_t count = 0;
|
||||
bool testBool = false;
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[unID], unID, element, !ID.empty() },
|
||||
{ fieldID[countID], countID, element, count != 0 },
|
||||
{ fieldID[isTestID], isTestID, element, testBool },
|
||||
},
|
||||
}.withType(&typeid(ComplexType)));
|
||||
return true;
|
||||
}
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override {
|
||||
if (item.ownerType != &typeid(ComplexType))
|
||||
return nullptr;
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case unID:
|
||||
return std::make_unique<ValueWrap<String>>(ID);
|
||||
case countID:
|
||||
return std::make_unique<ValueWrap<int32_t>>(count);
|
||||
case isTestID:
|
||||
return std::make_unique<ValueWrap<bool>>(testBool);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
///Return type for retrieving the current configuration
|
||||
using WrappedValue = CargoHold<PackageWrap, ComplexType>;
|
||||
|
||||
}
|
||||
|
||||
//Hashing specialisation
|
||||
template<>
|
||||
struct std::hash<ComplexType> {
|
||||
auto operator()(const ComplexType& obj) const {
|
||||
return hash<std::string>()(obj.ID) ^ rotl(hash<int32_t>()(obj.count), 1) ^ rotl(hash<bool>()(obj.testBool), 2);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
ComplexType::ComplexType() {
|
||||
//This is the required test values
|
||||
count = static_cast<int32_t>(std::hash<ComplexType>()(*this));
|
||||
ID = String{count} + " - I am a string";
|
||||
} //ComplexType::ComplexType
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GetComplexType::GetComplexType() : BridgeMethod{"GetComplexType", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the required object type
|
||||
|
||||
return: The required object
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> GetComplexType::run() const {
|
||||
auto object = std::make_unique<ComplexType>();
|
||||
return std::make_unique<WrappedValue>(std::move(object));
|
||||
} //GetComplexType::run
|
||||
@@ -1,33 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to return a specific object type
|
||||
*/
|
||||
class GetComplexType : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
@param bridge The parent bridge object (provides access to bridge methods)
|
||||
*/
|
||||
GetComplexType();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the required object type
|
||||
@return The required object
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
|
||||
@@ -1,20 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Test/GoAway.h"
|
||||
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
|
||||
#include <iostream>
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
GoAway::GoAway() : BridgeMethod{"GoAway", [&]() {
|
||||
return run();
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Write a message to the console
|
||||
--------------------------------------------------------------------*/
|
||||
void GoAway::run() const {
|
||||
std::cout << "Okay, going away.";
|
||||
} //GoAway::run
|
||||
@@ -1,31 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_GO_AWAY
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_GO_AWAY
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
JS Function class to print a fixed message to the console
|
||||
*/
|
||||
class GoAway : public speckle::interfac::browser::bridge::BridgeMethod<void, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
GoAway();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Write a message to the console
|
||||
*/
|
||||
void run() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_GO_AWAY
|
||||
@@ -1,38 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Test/SayHi.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::setting;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Return type for the test message
|
||||
using WrappedValue = CargoHold<ValueWrap<String>, String>;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
SayHi::SayHi() : BridgeMethod{"SayHi", [&](SayHiWrapper arg) {
|
||||
return run(arg);
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Return a message based on sample data
|
||||
|
||||
arg: The sample data
|
||||
|
||||
return: The message based on sample data
|
||||
--------------------------------------------------------------------*/
|
||||
std::unique_ptr<Cargo> SayHi::run(SayHiArg arg) const {
|
||||
String result, baseGreeting{(arg.isHello ? "Hello" : "Hi") + arg.name + "!\n"};
|
||||
for (auto i = arg.count; i--; )
|
||||
result += baseGreeting;
|
||||
return std::make_unique<WrappedValue>(result);
|
||||
} //SayHi::run
|
||||
@@ -1,37 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_SAYHI
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_SAYHI
|
||||
|
||||
#include "Connector/Interface/Browser/Bridge/Test/Arg/SayHiArg.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
///Argument for the parameters of a test message
|
||||
using SayHiWrapper = speckle::interfac::browser::bridge::JSArgType<SayHiArg, 3>;
|
||||
|
||||
/*!
|
||||
JS Function class to return a test message based on sample data
|
||||
*/
|
||||
class SayHi : public speckle::interfac::browser::bridge::BridgeMethod<SayHiWrapper, active::serialise::Cargo> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
SayHi();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Return a message based on sample data
|
||||
@param arg The sample data
|
||||
@return The message based on sample data
|
||||
*/
|
||||
std::unique_ptr<active::serialise::Cargo> run(SayHiArg arg) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_SAYHI
|
||||
@@ -1,19 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Test/TestBridge.h"
|
||||
|
||||
#include "Connector/Interface/Browser/Bridge/Test/GetComplexType.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Test/GoAway.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Test/SayHi.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Test/TriggerEvent.h"
|
||||
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
TestBridge::TestBridge() : BrowserBridge{"testBinding"} {
|
||||
//Add bridge methods
|
||||
addMethod<GetComplexType>();
|
||||
addMethod<GoAway>();
|
||||
addMethod<SayHi>();
|
||||
addMethod<TriggerEvent>();
|
||||
} //TestBridge::TestBridge
|
||||
@@ -1,29 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_TEST_BRIDGE
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_TEST_BRIDGE
|
||||
|
||||
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
/*!
|
||||
A browser bridge to provide configuration settings
|
||||
*/
|
||||
class TestBridge : public speckle::interfac::browser::bridge::BrowserBridge {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = speckle::interfac::browser::bridge::BrowserBridge;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
using base::base;
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
TestBridge();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_TEST_BRIDGE
|
||||
@@ -1,105 +0,0 @@
|
||||
#include "Connector/Interface/Browser/Bridge/Test/TriggerEvent.h"
|
||||
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::setting;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
okID,
|
||||
nameID,
|
||||
countID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"isOk"},
|
||||
Identity{"name"},
|
||||
Identity{"count"},
|
||||
};
|
||||
|
||||
/*!
|
||||
Object for testing sending events to JS
|
||||
*/
|
||||
class TestObject final : public active::serialise::Package {
|
||||
public:
|
||||
|
||||
// MARK: - Public variables
|
||||
|
||||
///Sample parameters for testing only
|
||||
bool isOK = true;
|
||||
speckle::utility::String name = "foo";
|
||||
int32_t count = 42;
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[okID], okID, element },
|
||||
{ fieldID[nameID], nameID, element },
|
||||
{ fieldID[countID], countID, element },
|
||||
},
|
||||
}.withType(&typeid(TestObject)));
|
||||
return true;
|
||||
}
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override {
|
||||
if (item.ownerType != &typeid(TestObject))
|
||||
return nullptr;
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case okID:
|
||||
return std::make_unique<ValueWrap<bool>>(isOK);
|
||||
case nameID:
|
||||
return std::make_unique<ValueWrap<String>>(name);
|
||||
case countID:
|
||||
return std::make_unique<ValueWrap<int32_t>>(count);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
TriggerEvent::TriggerEvent() : BridgeMethod{"TriggerEvent", [&](const TriggerEventWrapper& arg) {
|
||||
return run(arg);
|
||||
}} {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Trigger an event based on a specified name
|
||||
|
||||
eventName: The event name
|
||||
--------------------------------------------------------------------*/
|
||||
void TriggerEvent::run(const speckle::utility::String& eventName) const {
|
||||
if (!hasBridge())
|
||||
return;
|
||||
if (eventName == "emptyTestEvent")
|
||||
getBridge()->sendEvent(eventName);
|
||||
else if (eventName == "testEvent")
|
||||
getBridge()->sendEvent(eventName, std::make_unique<TestObject>());
|
||||
} //TriggerEvent::run
|
||||
@@ -1,39 +0,0 @@
|
||||
#ifndef CONNECTOR_INTERFACE_BRIDGE_TRIGGER_EVENT
|
||||
#define CONNECTOR_INTERFACE_BRIDGE_TRIGGER_EVENT
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/CargoHold.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
|
||||
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
///Argument parameter for a string
|
||||
using StringHold = active::serialise::CargoHold<active::serialise::ValueWrap<speckle::utility::String>, speckle::utility::String>;
|
||||
///Argument type for this method
|
||||
using TriggerEventWrapper = speckle::interfac::browser::bridge::JSArgType<StringHold>;
|
||||
|
||||
/*!
|
||||
JS Function class to emit specified events as directed by JS
|
||||
*/
|
||||
class TriggerEvent : public speckle::interfac::browser::bridge::BridgeMethod<TriggerEventWrapper, void> {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
TriggerEvent();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Trigger an event based on a specified name
|
||||
@param eventName The event name
|
||||
*/
|
||||
void run(const speckle::utility::String& eventName) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_INTERFACE_BRIDGE_TRIGGER_EVENT
|
||||
@@ -4,10 +4,7 @@
|
||||
#include "Connector/ConnectorResource.h"
|
||||
#include "Connector/Event/ConnectorEventID.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Account/AccountBridge.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Base/BaseBridge.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Config/ConfigBridge.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Send/SendBridge.h"
|
||||
#include "Connector/Interface/Browser/Bridge/Test/TestBridge.h"
|
||||
#include "Speckle/Environment/Addon.h"
|
||||
#include "Speckle/Event/Type/MenuEvent.h"
|
||||
#include "Speckle/Interface/Browser/JSPortal.h"
|
||||
@@ -19,9 +16,9 @@
|
||||
using namespace active::environment;
|
||||
using namespace active::event;
|
||||
using namespace connector;
|
||||
using namespace speckle::interfac::browser;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
using namespace speckle::event;
|
||||
//using namespace speckle::interfac::browser;
|
||||
|
||||
|
||||
//NB: Following is placeholder from GS example code - will be refactored to better suit our purposes
|
||||
@@ -37,7 +34,7 @@ namespace {
|
||||
|
||||
// --- Class declaration: BrowserPalette ------------------------------------------
|
||||
|
||||
class BrowserPalette final : public DG::Palette, public DG::PanelObserver, public JSPortal<> {
|
||||
class BrowserPalette final : public DG::Palette, public DG::PanelObserver, public speckle::interfac::browser::JSPortal<> {
|
||||
public:
|
||||
enum SelectionModification { RemoveFromSelection, AddToSelection };
|
||||
|
||||
@@ -129,7 +126,7 @@ bool ConnectorPalette::start() {
|
||||
--------------------------------------------------------------------*/
|
||||
bool ConnectorPalette::receive(const active::event::Event& event) {
|
||||
if (BrowserPalette::HasInstance() && BrowserPalette::GetInstance().IsVisible()) {
|
||||
BrowserPalette::GetInstance().Hide ();
|
||||
BrowserPalette::GetInstance ().Hide ();
|
||||
} else {
|
||||
if (!BrowserPalette::HasInstance())
|
||||
BrowserPalette::CreateInstance();
|
||||
@@ -163,11 +160,8 @@ BrowserPalette::BrowserPalette() :
|
||||
Attach(*this);
|
||||
BeginEventProcessing();
|
||||
//Install required connector bridges
|
||||
install<AccountBridge>();
|
||||
install<BaseBridge>();
|
||||
install<ConfigBridge>();
|
||||
install<SendBridge>();
|
||||
install<TestBridge>();
|
||||
install(std::make_shared<AccountBridge>());
|
||||
install(std::make_shared<ConfigBridge>());
|
||||
InitBrowserControl();
|
||||
}
|
||||
|
||||
@@ -205,11 +199,7 @@ void BrowserPalette::Hide() {
|
||||
}
|
||||
|
||||
void BrowserPalette::InitBrowserControl() {
|
||||
#ifdef TESTING_MODE
|
||||
browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app/test");
|
||||
#else
|
||||
browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app/");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
/*!
|
||||
Copyright 2024 Ralph Wessel and Hugh Wessel
|
||||
Distributed under the MIT License (See accompanying file LICENSE.txt or copy at https://opensource.org/license/mit/)
|
||||
*/
|
||||
|
||||
#include "Connector/Record/Model/CardMover.h"
|
||||
|
||||
#include "Connector/Record/Model/ReceiverModelCard.h"
|
||||
#include "Connector/Record/Model/SenderModelCard.h"
|
||||
|
||||
using namespace connector::record;
|
||||
|
||||
namespace {
|
||||
|
||||
///The tag used to identify a Speckle type name value
|
||||
const char* attributeTag = "typeDiscriminator";
|
||||
///Identity for a ReceiverModelCard
|
||||
const char* receiverCardTypeName = "ReceiverModelCard";
|
||||
///Identity for a SenderModelCard
|
||||
const char* senderCardTypeName = "SenderModelCard";
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Ensure the handler is populated
|
||||
|
||||
handler: The card handler to validate
|
||||
|
||||
return: A reference to the handler
|
||||
--------------------------------------------------------------------*/
|
||||
std::shared_ptr<active::serialise::Handler>& validateHandler(std::shared_ptr<active::serialise::Handler>& handler) {
|
||||
if (!handler->empty())
|
||||
return handler;
|
||||
handler->add<ReceiverModelCard>(receiverCardTypeName);
|
||||
handler->add<SenderModelCard>(senderCardTypeName);
|
||||
return handler;
|
||||
} //CardMover::validateHandler
|
||||
|
||||
}
|
||||
|
||||
///The handler for model card packages
|
||||
std::shared_ptr<active::serialise::Handler> CardMover::m_handler = std::make_shared<active::serialise::Handler>(attributeTag);
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor (for deserialisation)
|
||||
|
||||
handler: A package handler to reconstruct incoming packages
|
||||
--------------------------------------------------------------------*/
|
||||
CardMover::CardMover() : Mover{validateHandler(m_handler)} {
|
||||
} //CardMover::CardMover
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor (for serialisation)
|
||||
|
||||
outgoing: An outgoing package
|
||||
--------------------------------------------------------------------*/
|
||||
CardMover::CardMover(const active::serialise::Package& outgoing) : Mover{outgoing, validateHandler(m_handler)} {
|
||||
} //CardMover::CardMover
|
||||
@@ -1,36 +0,0 @@
|
||||
#ifndef CONNECTOR_MODEL_CARD_MOVER
|
||||
#define CONNECTOR_MODEL_CARD_MOVER
|
||||
|
||||
#include "Active/Serialise/Package/Wrapper/Mover.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
Wrapper to box/unbox objects during (de)serialisation, including reading/writing a specified attribute to determine object type
|
||||
|
||||
Note that a derived class could also define the package handler, allowing the wrapper to be created via a default constructor that is
|
||||
automatically bound to a set of internally defined object types
|
||||
*/
|
||||
class CardMover : public active::serialise::Mover {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
CardMover();
|
||||
/*!
|
||||
Constructor (for serialisation)
|
||||
@param outgoing An outgoing package
|
||||
*/
|
||||
CardMover(const active::serialise::Package& outgoing);
|
||||
|
||||
private:
|
||||
///The handler for model card packages
|
||||
static std::shared_ptr<active::serialise::Handler> m_handler;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_MODEL_CARD_MOVER
|
||||
@@ -1,94 +0,0 @@
|
||||
#include "Connector/Record/Model/CardSetting.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Item/Wrapper/AnyValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
idID,
|
||||
titleID,
|
||||
typeID,
|
||||
valueID,
|
||||
enumID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"id"},
|
||||
Identity{"title"},
|
||||
Identity{"type"},
|
||||
Identity{"value"},
|
||||
Identity{"enum"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool CardSetting::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[idID], idID, element },
|
||||
{ fieldID[titleID], titleID, element },
|
||||
{ fieldID[typeID], typeID, element },
|
||||
{ fieldID[valueID], valueID, element },
|
||||
{ fieldID[enumID], enumID, element },
|
||||
},
|
||||
}.withType(&typeid(CardSetting)));
|
||||
return true;
|
||||
} //CardSetting::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique CardSetting::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(CardSetting))
|
||||
return nullptr;
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case idID:
|
||||
return std::make_unique<ValueWrap<String>>(m_ID);
|
||||
case titleID:
|
||||
return std::make_unique<ValueWrap<String>>(m_title);
|
||||
case typeID:
|
||||
return std::make_unique<ValueWrap<String>>(m_type);
|
||||
case valueID:
|
||||
return std::make_unique<AnyValueWrap>(*m_value);
|
||||
case enumID:
|
||||
return std::make_unique<ContainerWrap<std::vector<speckle::utility::String>>>(m_enum);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //CardSetting::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void CardSetting::setDefault() {
|
||||
m_ID.clear();
|
||||
m_title.clear();
|
||||
m_type.clear();
|
||||
m_value->setDefault();
|
||||
m_enum.clear();
|
||||
} //CardSetting::setDefault
|
||||
@@ -1,107 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_CARD_SETTING
|
||||
#define CONNECTOR_RECORD_CARD_SETTING
|
||||
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Active/Setting/ValueSetting.h"
|
||||
#include "Active/Setting/Values/StringValue.h"
|
||||
#include "Active/Utility/Cloner.h"
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
A setting attached to a model card, capturing rendering/view states of the model at the time of sending, e.g. level of detail (LoD)
|
||||
*/
|
||||
class CardSetting : public active::serialise::Package, public active::utility::Cloner {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::serialise::Package;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
CardSetting() {}
|
||||
/*!
|
||||
Copy constructor
|
||||
@param source The object to copy
|
||||
*/
|
||||
CardSetting(const CardSetting& source) :
|
||||
m_title{source.m_title}, m_type{source.m_type}, m_value{clone(*source.m_value)}, m_enum{source.m_enum} {}
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
~CardSetting() {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
virtual CardSetting* clonePtr() const override { return new CardSetting(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the setting ID
|
||||
@return The setting ID
|
||||
*/
|
||||
const speckle::utility::String& getID() const { return m_ID; }
|
||||
/*!
|
||||
Get the setting title
|
||||
@return The setting title
|
||||
*/
|
||||
const speckle::utility::String& getTitle() const { return m_title; }
|
||||
/*!
|
||||
Get the setting type
|
||||
@return The setting type
|
||||
*/
|
||||
const speckle::utility::String& getType() const { return m_type; }
|
||||
/*!
|
||||
Get the setting value
|
||||
@return The setting value
|
||||
*/
|
||||
const active::setting::Value& getValue() const { return *m_value; }
|
||||
/*!
|
||||
Get the options for the value, i.e. possible values it can hold
|
||||
@return Possible setting values
|
||||
*/
|
||||
std::vector<speckle::utility::String> getEnum() const { return m_enum; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///A unique ID for the setting
|
||||
speckle::utility::String m_ID = {active::utility::Guid{true}.operator active::utility::String()};
|
||||
///The model ID
|
||||
speckle::utility::String m_title;
|
||||
///The project ID
|
||||
speckle::utility::String m_type;
|
||||
///The setting value
|
||||
active::setting::Value::Unique m_value = std::make_unique<active::setting::StringValue>();
|
||||
///Possible values for the setting (as strings)
|
||||
std::vector<speckle::utility::String> m_enum;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_CARD_SETTING
|
||||
@@ -1,38 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_ARCHICAD_EVERYTHING_FILTER
|
||||
#define CONNECTOR_RECORD_ARCHICAD_EVERYTHING_FILTER
|
||||
|
||||
#include "Connector/Database/Identity/RecordID.h"
|
||||
#include "Connector/Record/Model/Filter/EverythingSendFilter.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
A send filter consisting of a list of selected Archicad element IDs
|
||||
*/
|
||||
class ArchicadEverythingFilter : public EverythingSendFilter {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = EverythingSendFilter;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
@param sum A summary
|
||||
@param isDef True if this is the default filter
|
||||
*/
|
||||
ArchicadEverythingFilter(const speckle::utility::String& sum = {}, bool isDef = false) : base{sum, isDef} {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
ArchicadEverythingFilter* clonePtr() const override { return new ArchicadEverythingFilter(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_ARCHICAD_EVERYTHING_FILTER
|
||||
@@ -1,38 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_ARCHICAD_SELECTION_FILTER
|
||||
#define CONNECTOR_RECORD_ARCHICAD_SELECTION_FILTER
|
||||
|
||||
#include "Connector/Database/Identity/RecordID.h"
|
||||
#include "Connector/Record/Model/Filter/DirectSelectionSendFilter.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
A send filter consisting of a list of selected Archicad element IDs
|
||||
*/
|
||||
class ArchicadSelectionFilter : public DirectSelectionSendFilter {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = DirectSelectionSendFilter;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
@param sum A summary
|
||||
@param isDef True if this is the default filter
|
||||
*/
|
||||
ArchicadSelectionFilter(const speckle::utility::String& sum = {}, bool isDef = false) : base{sum, isDef} {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
ArchicadSelectionFilter* clonePtr() const override { return new ArchicadSelectionFilter(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_ARCHICAD_SELECTION_FILTER
|
||||
@@ -1,71 +0,0 @@
|
||||
#include "Connector/Record/Model/Filter/DirectSelectionSendFilter.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
selectedElemID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"selectedObjectIds"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool DirectSelectionSendFilter::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[selectedElemID], selectedElemID, element },
|
||||
},
|
||||
}.withType(&typeid(DirectSelectionSendFilter)));
|
||||
return base::fillInventory(inventory);
|
||||
} //DirectSelectionSendFilter::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique DirectSelectionSendFilter::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(DirectSelectionSendFilter))
|
||||
return base::getCargo(item);
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case selectedElemID:
|
||||
return std::make_unique<ContainerWrap<ElementIDList>>(m_selectedElements);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //DirectSelectionSendFilter::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void DirectSelectionSendFilter::setDefault() {
|
||||
m_selectedElements.clear();
|
||||
} //DirectSelectionSendFilter::setDefault
|
||||
@@ -1,67 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_DIRECT_SELECT_SEND_FILTER
|
||||
#define CONNECTOR_RECORD_DIRECT_SELECT_SEND_FILTER
|
||||
|
||||
#include "Connector/Database/Identity/RecordID.h"
|
||||
#include "Connector/Record/Model/Filter/SendFilter.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
A send filter consisting of a list of selected element IDs
|
||||
*/
|
||||
class DirectSelectionSendFilter : public SendFilter {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = SendFilter;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
@param sum A summary
|
||||
@param isDef True if this is the default filter
|
||||
*/
|
||||
DirectSelectionSendFilter(const speckle::utility::String& sum = {}, bool isDef = false) : base{"Selection", sum, isDef} {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
DirectSelectionSendFilter* clonePtr() const override { return new DirectSelectionSendFilter(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the filtered element IDs
|
||||
@return The filter elements
|
||||
*/
|
||||
const database::ElementIDList& getElementIDs() const override { return m_selectedElements; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///A list of selected element IDs
|
||||
database::ElementIDList m_selectedElements;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_DIRECT_SELECT_SEND_FILTER
|
||||
@@ -1,73 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_EVERYTHING_SEND_FILTER
|
||||
#define CONNECTOR_RECORD_EVERYTHING_SEND_FILTER
|
||||
|
||||
#include "Connector/Database/Identity/RecordID.h"
|
||||
#include "Connector/Record/Model/Filter/SendFilter.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
A send filter consisting of a list of selected element IDs
|
||||
*/
|
||||
class EverythingSendFilter : public SendFilter {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = SendFilter;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
@param sum A summary
|
||||
@param isDef True if this is the default filter
|
||||
*/
|
||||
EverythingSendFilter(const speckle::utility::String& sum = {}, bool isDef = false) : base{"Everything", sum, isDef} {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
EverythingSendFilter* clonePtr() const override { return new EverythingSendFilter(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the filtered element IDs
|
||||
@return The filter elements
|
||||
*/
|
||||
const database::ElementIDList& getElementIDs() const override { return m_emptyList; }
|
||||
/*!
|
||||
Determine if the filter has expired because an element in the selection has changed
|
||||
@param changed The list of changed element IDs
|
||||
@return True if the one of the changed elements is in the selection
|
||||
*/
|
||||
virtual bool checkExpiry(const database::ElementIDList& changed) const override { return true; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///Enables a const empty list to be returned
|
||||
database::ElementIDList m_emptyList;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_EVERYTHING_SEND_FILTER
|
||||
@@ -1,69 +0,0 @@
|
||||
/*!
|
||||
Copyright 2024 Ralph Wessel and Hugh Wessel
|
||||
Distributed under the MIT License (See accompanying file LICENSE.txt or copy at https://opensource.org/license/mit/)
|
||||
*/
|
||||
|
||||
#include "Connector/Record/Model/Filter/FilterMover.h"
|
||||
|
||||
#include "Connector/Record/Model/Filter/ArchicadEverythingFilter.h"
|
||||
#include "Connector/Record/Model/Filter/ArchicadSelectionFilter.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::utility;
|
||||
using namespace connector::record;
|
||||
|
||||
namespace {
|
||||
|
||||
///The tag used to identify a Speckle type name value
|
||||
const char* attributeTag = "typeDiscriminator";
|
||||
///Identity for selecting everything
|
||||
const char* ArchicadEverythingTypeName = "ArchicadEverythingFilter";
|
||||
///Identity for a selection filter
|
||||
const char* ArchicadSelectionTypeName = "ArchicadSelectionFilter";
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Ensure the handler is populated
|
||||
|
||||
handler: The filter handler to validate
|
||||
|
||||
return: A reference to the handler
|
||||
--------------------------------------------------------------------*/
|
||||
std::shared_ptr<active::serialise::Handler>& validateHandler(std::shared_ptr<active::serialise::Handler>& handler) {
|
||||
if (!handler->empty())
|
||||
return handler;
|
||||
handler->add<ArchicadEverythingFilter>(ArchicadEverythingTypeName);
|
||||
handler->add<ArchicadSelectionFilter>(ArchicadSelectionTypeName);
|
||||
return handler;
|
||||
} //validateHandler
|
||||
|
||||
}
|
||||
|
||||
///The handler for model card packages
|
||||
std::shared_ptr<active::serialise::Handler> FilterMover::m_handler = std::make_shared<active::serialise::Handler>(attributeTag);
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor (for deserialisation)
|
||||
|
||||
handler: A package handler to reconstruct incoming packages
|
||||
--------------------------------------------------------------------*/
|
||||
FilterMover::FilterMover() : Mover{validateHandler(m_handler)} {
|
||||
} //FilterMover::FilterMover
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor (for serialisation)
|
||||
|
||||
outgoing: An outgoing package
|
||||
--------------------------------------------------------------------*/
|
||||
FilterMover::FilterMover(const active::serialise::Package& outgoing) : Mover{outgoing, validateHandler(m_handler)} {
|
||||
} //FilterMover::FilterMover
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor (when it will be used for serialisation only on an existing object)
|
||||
|
||||
package: A reference to the member variable
|
||||
--------------------------------------------------------------------*/
|
||||
FilterMover::FilterMover(active::serialise::PackageUniqueWrap&& package) : Mover{std::move(package), validateHandler(m_handler)} {
|
||||
} //FilterMover::FilterMover
|
||||
@@ -1,46 +0,0 @@
|
||||
#ifndef CONNECTOR_MODEL_SEND_FILTER_MOVER
|
||||
#define CONNECTOR_MODEL_SEND_FILTER_MOVER
|
||||
|
||||
#include "Active/Serialise/Package/Wrapper/Mover.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
Wrapper to box/unbox objects during (de)serialisation, including reading/writing a specified attribute to determine object type
|
||||
|
||||
Note that a derived class could also define the package handler, allowing the wrapper to be created via a default constructor that is
|
||||
automatically bound to a set of internally defined object types
|
||||
*/
|
||||
class FilterMover : public active::serialise::Mover {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor (primarily for a list of polymorphic objects)
|
||||
*/
|
||||
FilterMover();
|
||||
/*!
|
||||
Constructor (when it will be used for serialisation only on an existing object)
|
||||
@param package A reference to the member variable
|
||||
*/
|
||||
FilterMover(const Package& package);
|
||||
/*!
|
||||
Constructor (for serialisation or deserialisation of a polymorphic member variable held in a unique pointer)
|
||||
@param package A reference to the member variable
|
||||
*/
|
||||
FilterMover(const Package::Unique& package);
|
||||
/*!
|
||||
Constructor (when it will be used for serialisation only on an existing object)
|
||||
@param package A reference to the member variable
|
||||
*/
|
||||
FilterMover(active::serialise::PackageUniqueWrap&& package);
|
||||
|
||||
private:
|
||||
///The handler for model filter packages
|
||||
static std::shared_ptr<active::serialise::Handler> m_handler;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_MODEL_SEND_FILTER_MOVER
|
||||
@@ -1,98 +0,0 @@
|
||||
#include "Connector/Record/Model/Filter/SendFilter.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
nameID,
|
||||
summaryID,
|
||||
defaultID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"name"},
|
||||
Identity{"summary"},
|
||||
Identity{"isDefault"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Determine if the filter has expired because an element in the selection has changed
|
||||
|
||||
changed: The list of changed element IDs
|
||||
|
||||
return: True if the one of the changed elements is in the selection
|
||||
--------------------------------------------------------------------*/
|
||||
bool SendFilter::checkExpiry(const ElementIDList& changed) const {
|
||||
ElementIDList intersect;
|
||||
ElementIDList mine{getElementIDs()}, theirs{changed};
|
||||
std::sort(mine.begin(), mine.end());
|
||||
std::sort(theirs.begin(), theirs.end());
|
||||
std::set_intersection (mine.begin(), mine.end(), theirs.begin(), theirs.end(), std::back_inserter(intersect));
|
||||
return !intersect.empty();
|
||||
} //SendFilter::checkExpiry
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool SendFilter::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[nameID], nameID, element },
|
||||
{ fieldID[summaryID], summaryID, element, !m_summary.empty() },
|
||||
{ fieldID[defaultID], defaultID, element, m_isDefault },
|
||||
},
|
||||
}.withType(&typeid(SendFilter)));
|
||||
return true;
|
||||
} //SendFilter::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique SendFilter::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(SendFilter))
|
||||
return nullptr;
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case nameID:
|
||||
return std::make_unique<ValueWrap<String>>(m_name);
|
||||
case summaryID:
|
||||
return std::make_unique<ValueWrap<String>>(m_summary);
|
||||
case defaultID:
|
||||
return std::make_unique<ValueWrap<bool>>(m_isDefault);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //SendFilter::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void SendFilter::setDefault() {
|
||||
m_name.clear();
|
||||
m_summary.clear();
|
||||
m_isDefault = false;
|
||||
} //SendFilter::setDefault
|
||||
@@ -1,100 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_SEND_FILTER
|
||||
#define CONNECTOR_RECORD_SEND_FILTER
|
||||
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Active/Utility/Cloner.h"
|
||||
#include "Connector/Database/Identity/RecordID.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
Base class for element filters applied when a model is sent to a Speckle server
|
||||
*/
|
||||
class SendFilter : public active::serialise::Package, public active::utility::Cloner {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::serialise::Package;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
@param nm The filter name
|
||||
@param sum A summary
|
||||
@param isDef True if this is the default filter
|
||||
*/
|
||||
SendFilter(const speckle::utility::String& nm = {}, const speckle::utility::String& sum = {}, bool isDef = false) :
|
||||
m_name{nm}, m_summary{sum}, m_isDefault{isDef} {}
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
virtual ~SendFilter() {}
|
||||
/*!
|
||||
Object cloning
|
||||
@return A clone of this object
|
||||
*/
|
||||
virtual SendFilter* clonePtr() const override = 0;
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the filter name
|
||||
@return The filter name
|
||||
*/
|
||||
const speckle::utility::String& getName() const { return m_name; };
|
||||
/*!
|
||||
Get a summary description of the filter function, e.g. "All selected elements"
|
||||
@return The filter summary description
|
||||
*/
|
||||
const speckle::utility::String& getSummary() const { return m_name; };
|
||||
/*!
|
||||
Determine if this is the default filter for model sends
|
||||
@return True if this is the default filter
|
||||
*/
|
||||
bool isDefault() const { return m_isDefault; };
|
||||
/*!
|
||||
Get the filtered element IDs
|
||||
@return The filter elements
|
||||
*/
|
||||
virtual const database::ElementIDList& getElementIDs() const = 0;
|
||||
/*!
|
||||
Determine if the filter has expired because an element in the selection has changed
|
||||
@param changed The list of changed element IDs
|
||||
@return True if the one of the changed elements is in the selection
|
||||
*/
|
||||
virtual bool checkExpiry(const database::ElementIDList& changed) const;
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///The filter name
|
||||
speckle::utility::String m_name;
|
||||
///A summary
|
||||
speckle::utility::String m_summary;
|
||||
///True if this is the default filter
|
||||
bool m_isDefault = false;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_SEND_FILTER
|
||||
@@ -1,106 +0,0 @@
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::serialise;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
modelID,
|
||||
projectID,
|
||||
accountID,
|
||||
serverURLID,
|
||||
settingsID,
|
||||
expiredID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"modelId"},
|
||||
Identity{"projectId"},
|
||||
Identity{"accountId"},
|
||||
Identity{"serverUrl"},
|
||||
Identity{"settings"},
|
||||
Identity{"expired"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool ModelCard::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[modelID], modelID, element },
|
||||
{ fieldID[projectID], projectID, element },
|
||||
{ fieldID[accountID], accountID, element },
|
||||
{ fieldID[serverURLID], serverURLID, element },
|
||||
{ fieldID[settingsID], settingsID, element },
|
||||
{ fieldID[expiredID], expiredID, element },
|
||||
},
|
||||
}.withType(&typeid(ModelCard)));
|
||||
//This class has a unique serialisation tag for the record ID - override the base class ID
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ Identity{"modelCardId"}, active::database::record::FieldIndex::idIndex, element },
|
||||
},
|
||||
}.withType(&typeid(base::base)));
|
||||
return true;
|
||||
} //ModelCard::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique ModelCard::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(ModelCard))
|
||||
return base::getCargo(item);
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case modelID:
|
||||
return std::make_unique<ValueWrap<String>>(m_modelID);
|
||||
case projectID:
|
||||
return std::make_unique<ValueWrap<String>>(m_projectID);
|
||||
case accountID:
|
||||
return std::make_unique<ValueWrap<String>>(m_accountID);
|
||||
case serverURLID:
|
||||
return std::make_unique<ValueWrap<String>>(m_serverURL);
|
||||
case settingsID:
|
||||
return std::make_unique<ContainerWrap<Vector<CardSetting>>>(m_settings);
|
||||
case expiredID:
|
||||
return std::make_unique<ValueWrap<bool>>(m_isExpired);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //ModelCard::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void ModelCard::setDefault() {
|
||||
base::setDefault();
|
||||
m_modelID.clear();
|
||||
m_projectID.clear();
|
||||
m_accountID.clear();
|
||||
m_serverURL.clear();
|
||||
m_settings.clear();
|
||||
} //ModelCard::setDefault
|
||||
@@ -1,117 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_MODEL_CARD
|
||||
#define CONNECTOR_RECORD_MODEL_CARD
|
||||
|
||||
#include "Active/Container/Vector.h"
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Active/Utility/Cloner.h"
|
||||
#include "Connector/Record/Model/CardSetting.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
#include "Speckle/Database/Content/Record.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
/*!
|
||||
A connector send filter
|
||||
*/
|
||||
class ModelCard : public speckle::database::Record {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = speckle::database::Record;
|
||||
//List of card settings
|
||||
using SettingList = active::container::Vector<connector::record::CardSetting>;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
ModelCard() {}
|
||||
/*!
|
||||
Constructor
|
||||
@param modelID The model ID
|
||||
@param projectID The project ID
|
||||
@param accountID The account ID
|
||||
@param serverURL The server URL
|
||||
@param settings Any BIM host-related settings relevant to the appearance/rendering of the model, e.g. LoD, if properties included etc
|
||||
*/
|
||||
ModelCard(const speckle::database::RecordID& modelID, const speckle::database::RecordID& projectID,
|
||||
const speckle::database::RecordID& accountID, const speckle::utility::String& serverURL,
|
||||
const SettingList& settings) :
|
||||
m_modelID(modelID), m_projectID(projectID), m_accountID(accountID), m_serverURL(serverURL), m_settings(settings) {}
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
virtual ~ModelCard() {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
virtual ModelCard* clonePtr() const override { return new ModelCard(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the model ID
|
||||
@return The model ID
|
||||
*/
|
||||
const speckle::utility::String& getModelID() const { return m_modelID; }
|
||||
/*!
|
||||
Get the setting type
|
||||
@return The setting type
|
||||
*/
|
||||
const speckle::utility::String& getProjectID() const { return m_projectID; }
|
||||
/*!
|
||||
Get the setting type
|
||||
@return The setting type
|
||||
*/
|
||||
const speckle::utility::String& getAccountID() const { return m_accountID; }
|
||||
/*!
|
||||
Get the setting type
|
||||
@return The setting type
|
||||
*/
|
||||
const speckle::utility::String& getServerURL() const { return m_serverURL; }
|
||||
/*!
|
||||
Get the card settings
|
||||
@return The card settings
|
||||
*/
|
||||
const SettingList& getSettings() const { return m_settings; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///The model ID
|
||||
speckle::database::RecordID m_modelID;
|
||||
///The project ID
|
||||
speckle::database::RecordID m_projectID;
|
||||
///The user account ID
|
||||
speckle::database::RecordID m_accountID;
|
||||
///The server URL
|
||||
speckle::utility::String m_serverURL;
|
||||
///Settings for the model rendering, e.g. level of detail (LoD)
|
||||
SettingList m_settings;
|
||||
///True if the card has expired
|
||||
bool m_isExpired = false;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_MODEL_CARD
|
||||
@@ -1,102 +0,0 @@
|
||||
#include "Connector/Record/Model/ReceiverModelCard.h"
|
||||
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::database;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::database;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
projectNameID,
|
||||
modelNameID,
|
||||
selectedVersionID,
|
||||
latestVersionID,
|
||||
warningDismissedID,
|
||||
bakedObjectsID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"projectName"},
|
||||
Identity{"modelName"},
|
||||
Identity{"selectedVersionID"},
|
||||
Identity{"latestVersionID"},
|
||||
Identity{"hasDismissedUpdateWarning"},
|
||||
Identity{"bakedObjectIds"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool ReceiverModelCard::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[projectNameID], projectNameID, element },
|
||||
{ fieldID[modelNameID], modelNameID, element },
|
||||
{ fieldID[selectedVersionID], selectedVersionID, element },
|
||||
{ fieldID[latestVersionID], latestVersionID, element },
|
||||
{ fieldID[warningDismissedID], warningDismissedID, element },
|
||||
{ fieldID[bakedObjectsID], bakedObjectsID, element },
|
||||
},
|
||||
}.withType(&typeid(ReceiverModelCard)));
|
||||
return base::fillInventory(inventory);
|
||||
} //ReceiverModelCard::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique ReceiverModelCard::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(ReceiverModelCard))
|
||||
return base::getCargo(item);
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case projectNameID:
|
||||
return std::make_unique<StringWrap>(m_projectName);
|
||||
case modelNameID:
|
||||
return std::make_unique<StringWrap>(m_modelName);
|
||||
case selectedVersionID:
|
||||
return std::make_unique<ValueWrap<RecordID>>(m_selectedVersionID);
|
||||
case latestVersionID:
|
||||
return std::make_unique<ValueWrap<RecordID>>(m_latestVersionID);
|
||||
case warningDismissedID:
|
||||
return std::make_unique<BoolWrap>(m_hasDismissedUpdateWarning);
|
||||
case bakedObjectsID:
|
||||
return std::make_unique<ContainerWrap<ElementIDList>>(m_bakedObjectIDs);
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //ReceiverModelCard::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void ReceiverModelCard::setDefault() {
|
||||
base::setDefault();
|
||||
m_projectName.clear();
|
||||
m_modelName.clear();
|
||||
m_selectedVersionID.clear();
|
||||
m_latestVersionID.clear();
|
||||
m_hasDismissedUpdateWarning = false;
|
||||
m_bakedObjectIDs.clear();
|
||||
} //ReceiverModelCard::setDefault
|
||||
@@ -1,119 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_RECEIVER_MODEL_CARD
|
||||
#define CONNECTOR_RECORD_RECEIVER_MODEL_CARD
|
||||
|
||||
#include "Connector/Database/Identity/RecordID.h"
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
class SendFilter;
|
||||
|
||||
/*!
|
||||
A connector model send card - carries information about what was sent with the model
|
||||
*/
|
||||
class ReceiverModelCard : public connector::record::ModelCard {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = connector::record::ModelCard;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
ReceiverModelCard() {}
|
||||
/*!
|
||||
Constructor
|
||||
@param projectName The project name
|
||||
@param modelName The model name
|
||||
@param selectedVersion The selected version ID
|
||||
@param latestVersion The latest version ID
|
||||
@param hasDimissedWarning True if the user has already dismissed an alert to update
|
||||
@param bakedObjects The IDs of objects accepted in the receive
|
||||
*/
|
||||
ReceiverModelCard(const speckle::database::RecordID& projectID, const speckle::utility::String& projectName,
|
||||
const speckle::database::RecordID& modelID, const speckle::utility::String& modelName,
|
||||
const speckle::database::RecordID& selectedVersion, const speckle::database::RecordID& latestVersion,
|
||||
const speckle::database::RecordID& accountID, const speckle::utility::String& serverURL,
|
||||
bool hasDimissedWarning, database::ElementIDList&& bakedObjects, const SettingList& settings) :
|
||||
ModelCard{modelID, projectID, accountID, serverURL, settings},
|
||||
m_projectName{projectName}, m_modelName{modelName}, m_selectedVersionID{selectedVersion}, m_latestVersionID{latestVersion},
|
||||
m_hasDismissedUpdateWarning{hasDimissedWarning}, m_bakedObjectIDs{bakedObjects} {}
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
virtual ReceiverModelCard* clonePtr() const override { return new ReceiverModelCard(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the project name
|
||||
@return The project name
|
||||
*/
|
||||
const speckle::utility::String& getProjectName() const { return m_projectName; }
|
||||
/*!
|
||||
Get the model name
|
||||
@return The model name
|
||||
*/
|
||||
const speckle::utility::String& getModelName() const { return m_modelName; }
|
||||
/*!
|
||||
Get the selected version ID
|
||||
@return The selected version ID
|
||||
*/
|
||||
const speckle::database::RecordID& getSelectedVersionID() const { return m_selectedVersionID; }
|
||||
/*!
|
||||
Get the latest version ID
|
||||
@return The latest version ID
|
||||
*/
|
||||
const speckle::database::RecordID& getLatestVersionID() const { return m_latestVersionID; }
|
||||
/*!
|
||||
Determine if the user has already dismissed an alert to update
|
||||
@return True if the user has already dismissed an alert to update
|
||||
*/
|
||||
bool hasDismissedUpdateWarning() const { return m_hasDismissedUpdateWarning; }
|
||||
/*!
|
||||
Get the IDs of objects accepted in the receive
|
||||
@return The accepted object IDs
|
||||
*/
|
||||
const database::ElementIDList& getBakedObjectIDs() const { return m_bakedObjectIDs; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///The received project name
|
||||
speckle::utility::String m_projectName;
|
||||
///The received model name
|
||||
speckle::utility::String m_modelName;
|
||||
///The ID of the version selected in the receive
|
||||
speckle::database::RecordID m_selectedVersionID;
|
||||
///The ID of the latest version
|
||||
speckle::database::RecordID m_latestVersionID;
|
||||
///True if the user has already dismissed an alert to update
|
||||
bool m_hasDismissedUpdateWarning = false;
|
||||
///IDs of objects accepted in the receive
|
||||
database::ElementIDList m_bakedObjectIDs;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_RECEIVER_MODEL_CARD
|
||||
@@ -1,108 +0,0 @@
|
||||
#include "Connector/Record/Model/SenderModelCard.h"
|
||||
|
||||
#include "Active/Serialise/Package/Wrapper/PackageUniqueWrap.h"
|
||||
#include "Connector/Record/Model/Filter/FilterMover.h"
|
||||
#include "Connector/Record/Model/Filter/SendFilter.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace connector::record;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
///Serialisation fields
|
||||
enum FieldIndex {
|
||||
sendFilterID,
|
||||
};
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"sendFilter"},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Default constructor
|
||||
--------------------------------------------------------------------*/
|
||||
SenderModelCard::SenderModelCard() {
|
||||
|
||||
} //SenderModelCard::SenderModelCard
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor
|
||||
|
||||
filter: The filter applied when the model was sent
|
||||
--------------------------------------------------------------------*/
|
||||
SenderModelCard::SenderModelCard(const SendFilter& filter, const speckle::database::RecordID& modelID, const speckle::database::RecordID& projectID,
|
||||
const speckle::database::RecordID& accountID, const speckle::utility::String& serverURL, const SettingList& settings) :
|
||||
ModelCard{modelID, projectID, accountID, serverURL, settings}, m_filter(clone(filter))
|
||||
{
|
||||
} //SenderModelCard::SenderModelCard
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Copy constructor
|
||||
|
||||
source: The object to copy
|
||||
--------------------------------------------------------------------*/
|
||||
SenderModelCard::SenderModelCard(const SenderModelCard& source) : ModelCard{source} {
|
||||
m_filter = (source.m_filter) ? clone(*source.m_filter) : nullptr;
|
||||
} //SenderModelCard::SenderModelCard
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Destructor
|
||||
--------------------------------------------------------------------*/
|
||||
SenderModelCard::~SenderModelCard() {
|
||||
} //SenderModelCard::~SenderModelCard
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool SenderModelCard::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[sendFilterID], sendFilterID, element },
|
||||
},
|
||||
}.withType(&typeid(SenderModelCard)));
|
||||
return base::fillInventory(inventory);
|
||||
} //SenderModelCard::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
|
||||
item: The inventory item to retrieve
|
||||
|
||||
return: The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique SenderModelCard::getCargo(const Inventory::Item& item) const {
|
||||
if (item.ownerType != &typeid(SenderModelCard))
|
||||
return base::getCargo(item);
|
||||
using namespace active::serialise;
|
||||
switch (item.index) {
|
||||
case sendFilterID:
|
||||
return std::make_unique<FilterMover>(PackageUniqueWrap{m_filter});
|
||||
default:
|
||||
return nullptr; //Requested an unknown index
|
||||
}
|
||||
} //SenderModelCard::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void SenderModelCard::setDefault() {
|
||||
base::setDefault();
|
||||
m_filter->setDefault();
|
||||
} //SenderModelCard::setDefault
|
||||
@@ -1,81 +0,0 @@
|
||||
#ifndef CONNECTOR_RECORD_SENDER_MODEL_CARD
|
||||
#define CONNECTOR_RECORD_SENDER_MODEL_CARD
|
||||
|
||||
#include "Connector/Record/Model/ModelCard.h"
|
||||
|
||||
namespace connector::record {
|
||||
|
||||
class SendFilter;
|
||||
|
||||
/*!
|
||||
A connector model send card - carries information about what was sent with the model
|
||||
*/
|
||||
class SenderModelCard : public connector::record::ModelCard {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = connector::record::ModelCard;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
SenderModelCard();
|
||||
/*!
|
||||
Constructor
|
||||
@param filter The filter applied when the model was sent
|
||||
*/
|
||||
SenderModelCard(const SendFilter& filter, const speckle::database::RecordID& modelID, const speckle::database::RecordID& projectID,
|
||||
const speckle::database::RecordID& accountID, const speckle::utility::String& serverURL, const SettingList& settings);
|
||||
/*!
|
||||
Copy constructor
|
||||
@param source The object to copy
|
||||
*/
|
||||
SenderModelCard(const SenderModelCard& source);
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
~SenderModelCard();
|
||||
/*!
|
||||
Record cloning
|
||||
@return A clone of this record
|
||||
*/
|
||||
virtual SenderModelCard* clonePtr() const override { return new SenderModelCard(*this); };
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get the filter applied when the model was sent
|
||||
@return The model filter
|
||||
*/
|
||||
const SendFilter& getFilter() const { return *m_filter; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
/*!
|
||||
Fill an inventory with the package items
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
|
||||
private:
|
||||
///The filter applied when the model was sent
|
||||
std::unique_ptr<SendFilter> m_filter;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //CONNECTOR_RECORD_SENDER_MODEL_CARD
|
||||
@@ -5,9 +5,9 @@ namespace connector {
|
||||
|
||||
static const unsigned int versionMajor = 0;
|
||||
|
||||
static const unsigned int versionMinor = 2;
|
||||
static const unsigned int versionMinor = 1;
|
||||
|
||||
static const unsigned int versionPatch = 4;
|
||||
static const unsigned int versionPatch = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#include "ActiveLibDoctest/TestingPlatforms.h"
|
||||
|
||||
#include "Active/Serialise/JSON/JSONTransport.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
#include "Active/Utility/BufferIn.h"
|
||||
#include "Active/Utility/BufferOut.h"
|
||||
#include "Speckle/Record/Credentials/Account.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::serialise::json;
|
||||
using namespace active::serialise::json;
|
||||
using namespace speckle::record::cred;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
const char* accountJSON = "{\"id\":\"d4468f8d6f1e4c48a899518795326ea8\",\"token\":\"42986a57b3304baa8773f937aa0b7bcd42986a57b3\",\"refreshToken\":\"00b01c421de4404889f30947de1506d3440c476432\",\"isDefault\":true,\"isOnline\":false,\"serverInfo\":{\"name\":\"My new Speckle Server\",\"company\":\"Unknown Company\",\"version\":\"2.20.2-branch.testing.138676-e8c8291\",\"adminContact\":\"n/a\",\"description\":\"This a community deployment of a Speckle Server.\",\"frontend2\":true,\"url\":\"https://testing.speckle.dev\",\"migration\":null},\"userInfo\":{\"id\":\"00b01c421d\",\"name\":\"someone@speckle.systems\",\"email\":\"someone@speckle.systems\",\"company\":null,\"avatar\":null,\"streams\":{\"totalCount\":2},\"commits\":{\"totalCount\":5}}}";
|
||||
}
|
||||
|
||||
|
||||
TEST_SUITE(TESTQ(AccountTests)) TEST_SUITE_OPEN
|
||||
|
||||
//Test to receive account serialised as JSON from SQLite dbase
|
||||
TEST_CASE(TESTQ(testAccountReceive)) {
|
||||
Account account;
|
||||
JSONTransport transport;
|
||||
try {
|
||||
transport.receive(PackageWrap{account}, Identity{}, String{accountJSON});
|
||||
} catch(...) {
|
||||
FAIL_CHECK(TEST_MESSAGE(Account deserialisation failed));
|
||||
}
|
||||
String accountOut;
|
||||
try {
|
||||
transport.send(PackageWrap{account}, Identity{}, accountOut);
|
||||
} catch(...) {
|
||||
FAIL_CHECK(TEST_MESSAGE(Account serialisation failed));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
TEST_SUITE_CLOSE
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -8,7 +8,6 @@
|
||||
#include "Connector.grc.rc2"
|
||||
#include "ConnectorMenu.grc.rc2"
|
||||
#include "SpecklePalette.grc.rc2"
|
||||
#include "Speckle.grc.rc2"
|
||||
|
||||
#include "ConnectorFix.grc.rc2"
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ REM AC Resource build script
|
||||
ECHO "Building AC Resources"
|
||||
|
||||
if not exist "%RES_OUTPUT%" MD "%RES_OUTPUT%"
|
||||
python "%HEADER_PATH_5%\Tools\CompileResources.py" "INT" "%HEADER_PATH_5%\.." "%HEADER_PATH_6%\Connector" "%SYMROOT%\" "%RES_OUTPUT%" "%RES_SOURCE%\Speckle Connector.apx.mui"
|
||||
python "%HEADER_PATH_5%\Tools\CompileResources.py" "INT" "%HEADER_PATH_5%\.." "%HEADER_PATH_4%\Speckle" "%HEADER_PATH_4%" "%RES_OUTPUT%" "%RES_SOURCE%\Speckle Connector.apx.mui"
|
||||
python "%HEADER_PATH_5%\Tools\CompileResources.py" "INT" "%HEADER_PATH_5%/.." "%HEADER_PATH_6%Source" %SYMROOT% %RES_OUTPUT% "%RES_SOURCE%/CodesignImport.apx.mui"
|
||||
|
||||
ECHO "Finished AC Resource"
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
'STR#' 32700 "Speckle Title strings" {
|
||||
/* [ 1] */ "Untitled"
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
#include "Active/Database/Storage/SQLite/SQLiteEngine.h"
|
||||
#include "Active/Database/Storage/Storage.h"
|
||||
#include "Active/Serialise/JSON/JSONTransport.h"
|
||||
#include "Active/Setting/ValueSetting.h"
|
||||
#include "Active/Setting/Values/StringValue.h"
|
||||
#include "Speckle/Database/AccountDatabase.h"
|
||||
|
||||
using namespace active::container;
|
||||
using namespace active::database;
|
||||
using namespace active::serialise::json;
|
||||
using namespace active::setting;
|
||||
using namespace speckle::record::cred;
|
||||
using namespace speckle::database;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
|
||||
//Account field indices
|
||||
enum Fields {
|
||||
hashID = 0,
|
||||
contentID,
|
||||
};
|
||||
|
||||
///Internal name of the accounts dbase
|
||||
const char* accountsDBaseName = "accounts";
|
||||
///Accounts table name
|
||||
const char* accountsTableName = "objects";
|
||||
///Hash field name
|
||||
const char* hashFieldName = "hash";
|
||||
///Content field name
|
||||
const char* contentFieldName = "content";
|
||||
|
||||
}
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
///Accounts database engine declaration
|
||||
using AccountsEngine = SQLiteEngine<Account, Account, JSONTransport, active::utility::String, active::utility::String>;
|
||||
|
||||
///Accounts database storage declaration
|
||||
class AccountDatabase::Store : public active::database::Storage<speckle::record::cred::Account, active::serialise::json::JSONTransport,
|
||||
active::utility::String, active::utility::String, active::utility::String, active::utility::String> {
|
||||
using base = active::database::Storage<speckle::record::cred::Account, active::serialise::json::JSONTransport,
|
||||
active::utility::String, active::utility::String, active::utility::String, active::utility::String>;
|
||||
using base::base;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Constructor
|
||||
|
||||
path: Path to the database file
|
||||
--------------------------------------------------------------------*/
|
||||
AccountDatabase::AccountDatabase(const active::file::Path& path) {
|
||||
//Create accounts database storage (with schema)
|
||||
m_store = std::make_unique<Store>(
|
||||
//Engine
|
||||
std::make_shared<AccountsEngine>(path,
|
||||
//Schema
|
||||
DBaseSchema{active::utility::String{accountsDBaseName},
|
||||
//Tables
|
||||
{
|
||||
//Account table
|
||||
{
|
||||
accountsTableName, Fields::hashID, Fields::contentID, {
|
||||
ValueSetting{StringValue{}, hashFieldName},
|
||||
ValueSetting{StringValue{}, contentFieldName},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
} //AccountDatabase::AccountDatabase
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Destructor
|
||||
--------------------------------------------------------------------*/
|
||||
AccountDatabase::~AccountDatabase() {}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get all accounts
|
||||
|
||||
return: All the accounts
|
||||
--------------------------------------------------------------------*/
|
||||
Vector<Account> AccountDatabase::getAccounts() const {
|
||||
return m_store->getObjects();
|
||||
} //AccountDatabase::getAccounts
|
||||
@@ -1,46 +0,0 @@
|
||||
#ifndef SPECKLE_DATABASE_ACCOUNT_DBASE
|
||||
#define SPECKLE_DATABASE_ACCOUNT_DBASE
|
||||
|
||||
#include "Active/File/Path.h"
|
||||
#include "Speckle/Record/Credentials/Account.h"
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
/*!
|
||||
A base class for an addon
|
||||
*/
|
||||
class AccountDatabase {
|
||||
public:
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
@param path Path to the database file
|
||||
*/
|
||||
AccountDatabase(const active::file::Path& path);
|
||||
AccountDatabase(const AccountDatabase&) = delete;
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
~AccountDatabase();
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get all accounts
|
||||
@return All the accounts
|
||||
*/
|
||||
active::container::Vector<record::cred::Account> getAccounts() const;
|
||||
|
||||
// MARK: - Functions (mutating)
|
||||
|
||||
private:
|
||||
class Store;
|
||||
///Accounts database storage
|
||||
std::unique_ptr<Store> m_store;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //SPECKLE_DATABASE_ACCOUNT_DBASE
|
||||
+10
-7
@@ -1,11 +1,7 @@
|
||||
#ifndef SPECKLE_DATABASE_INDEX
|
||||
#define SPECKLE_DATABASE_INDEX
|
||||
|
||||
#include "Active/Database/Identity/Link.h"
|
||||
#include "Speckle/Database/Identity/RecordID.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
#include <any>
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
@@ -16,16 +12,23 @@ namespace speckle::database {
|
||||
this is typically a guid, for Revit a string and for Vectorworks a handle. Note that this index is not necessarily persistent between
|
||||
sessions.
|
||||
*/
|
||||
class Index : public active::database::Index<RecordID> {
|
||||
class Index : public speckle::utility::Guid {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::database::Index<RecordID>;
|
||||
using base = speckle::utility::Guid;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
using base::base;
|
||||
|
||||
Index(speckle::utility::Guid ID, speckle::utility::Guid dbaseID) : base{ID}, databaseID{dbaseID} {}
|
||||
|
||||
// MARK: - Public variables
|
||||
|
||||
///ID of the source database (not defined in every case, undefined = null guid)
|
||||
speckle::utility::Guid databaseID;
|
||||
};
|
||||
|
||||
}
|
||||
+3
-5
@@ -1,8 +1,6 @@
|
||||
#include "Speckle/Database/Identity/Link.h"
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
#include "Speckle/Database/Content/Link.h"
|
||||
|
||||
using namespace speckle::database;
|
||||
using namespace speckle::utility;
|
||||
|
||||
#ifdef ARCHICAD
|
||||
/*--------------------------------------------------------------------
|
||||
@@ -10,9 +8,9 @@ using namespace speckle::utility;
|
||||
|
||||
selected: Information about a selected Archicad element
|
||||
--------------------------------------------------------------------*/
|
||||
//Link::Link(const API_Neig& selected) : base{Guid{selected.guid}} {
|
||||
Link::Link(const API_Neig& selected) : recordID{selected.guid} {
|
||||
//More info should be extracted from API_Neig in future (as required)
|
||||
//} //Link::Link
|
||||
} //Link::Link
|
||||
#endif
|
||||
|
||||
|
||||
+25
-6
@@ -2,7 +2,7 @@
|
||||
#define SPECKLE_DATABASE_LINK
|
||||
|
||||
#include "Active/Setting/SettingList.h"
|
||||
#include "Speckle/Database/Identity/Index.h"
|
||||
#include "Speckle/Database/Content/Index.h"
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
@@ -17,18 +17,30 @@ namespace speckle::database {
|
||||
A link may optionally carry any number of settings. In the context of a user selection (for example) there might be settings describing where
|
||||
the user made the selection (e.g. the hole in a floor slab), allowing a tool working on that selection to be more precise.
|
||||
*/
|
||||
class Link : public active::database::Link<RecordID> {
|
||||
class Link : public active::setting::SettingList {
|
||||
public:
|
||||
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::database::Link<RecordID>;
|
||||
|
||||
using base = active::setting::SettingList;
|
||||
///Unique pointer
|
||||
using Unique = std::unique_ptr<Link>;
|
||||
///Shared pointer
|
||||
using Shared = std::shared_ptr<Link>;
|
||||
///Optional
|
||||
using Option = std::optional<Link>;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
using base::base;
|
||||
|
||||
Link() = default;
|
||||
/*!
|
||||
Constructor
|
||||
@param index An element index
|
||||
@param origIndex The index of the original element (when the preceding index is to a proxy element)
|
||||
*/
|
||||
Link(const Index& index, const Index& origIndex = Index{}) : recordID{index}, originalID{origIndex} {}
|
||||
|
||||
#ifdef ARCHICAD
|
||||
/*!
|
||||
Constructor
|
||||
@@ -36,6 +48,13 @@ namespace speckle::database {
|
||||
*/
|
||||
Link(const API_Neig& selected);
|
||||
#endif
|
||||
|
||||
// MARK: - Public variables
|
||||
|
||||
///ID of the linked record (defaults to null guid = undefined)
|
||||
Index recordID;
|
||||
///ID of the original record (in the case where the record is proxy for another - null guid = undefined)
|
||||
Index originalID;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -8,17 +8,40 @@ using namespace speckle::utility;
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Fill an inventory with the package items
|
||||
|
||||
inventory: The inventory to receive the package items
|
||||
|
||||
return: True if the package has added items to the inventory
|
||||
@param inventory The inventory to receive the package items
|
||||
@return True if the package has added items to the inventory
|
||||
--------------------------------------------------------------------*/
|
||||
bool Record::fillInventory(active::serialise::Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ Identity{"id"}, active::database::record::FieldIndex::idIndex, element },
|
||||
},
|
||||
}.withType(&typeid(base)));
|
||||
bool Record::fillInventory(Inventory& inventory) const {
|
||||
//TODO: Complete
|
||||
return true;
|
||||
} //Record::fillInventory
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
Cargo::Unique Record::getCargo(const Inventory::Item& item) const {
|
||||
//TODO: Complete
|
||||
return nullptr;
|
||||
} //Record::getCargo
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Set to the default package content
|
||||
--------------------------------------------------------------------*/
|
||||
void Record::setDefault() {
|
||||
//TODO: Complete
|
||||
} //Record::setDefault
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Validate the cargo data
|
||||
|
||||
return: True if the data has been validated
|
||||
--------------------------------------------------------------------*/
|
||||
bool Record::validate() {
|
||||
//TODO: Complete
|
||||
return true;
|
||||
} //Record::validate
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
#ifndef SPECKLE_DATABASE_RECORD
|
||||
#define SPECKLE_DATABASE_RECORD
|
||||
|
||||
#include "Active/Database/Content/Record.h"
|
||||
#include "Speckle/Database/Identity/Link.h"
|
||||
#include "Speckle/Database/Identity/RecordID.h"
|
||||
#include "Active/Serialise/Package/Package.h"
|
||||
#include "Speckle/Database/Content/Link.h"
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
/*!
|
||||
Base class for a database record
|
||||
*/
|
||||
class Record : public active::database::Record<RecordID> {
|
||||
class Record : public active::serialise::Package, public active::utility::Cloner {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::database::Record<RecordID>;
|
||||
///Unique pointer
|
||||
using Unique = std::unique_ptr<Record>;
|
||||
///Shared pointer
|
||||
using Shared = std::shared_ptr<Record>;
|
||||
@@ -25,27 +22,51 @@ namespace speckle::database {
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
Record() : base{active::utility::Guid{true}.operator active::utility::String(),
|
||||
active::utility::Guid{true}.operator active::utility::String()} {} //TODO: Implement a better default for the ID
|
||||
/*!
|
||||
Constructor
|
||||
@param ID The record ID
|
||||
*/
|
||||
Record(speckle::utility::String ID, speckle::utility::String::Option globID = std::nullopt) :
|
||||
base{ID, globID.value_or(active::utility::Guid{true}.operator active::utility::String())} {}
|
||||
Record(speckle::utility::Guid ID) : m_ID{ID} {}
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
virtual ~Record() {}
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
|
||||
/*!
|
||||
Get the record ID
|
||||
@return The record ID
|
||||
*/
|
||||
speckle::utility::Guid getID() const { return m_ID; }
|
||||
/*!
|
||||
Get the record unique ID
|
||||
@return The record unique ID
|
||||
*/
|
||||
speckle::utility::Guid getUniqueID() const { return m_uniqueID; }
|
||||
/*!
|
||||
Get the record index
|
||||
@return The record index
|
||||
*/
|
||||
virtual Index getIndex() const { return Index{m_ID, m_ownerID}; }
|
||||
/*!
|
||||
Get the record link
|
||||
@return The record link
|
||||
*/
|
||||
virtual Link getLink() const { return Link{getIndex()}; }
|
||||
|
||||
// MARK: - Functions (mutating)
|
||||
|
||||
|
||||
/*!
|
||||
Set the record ID
|
||||
@param ID The record ID
|
||||
*/
|
||||
void setID(speckle::utility::Guid ID) { m_ID = ID; }
|
||||
/*!
|
||||
Set the record unique ID
|
||||
@param ID The record unique ID
|
||||
*/
|
||||
void setUniqueID(speckle::utility::Guid ID) { m_uniqueID = ID; }
|
||||
|
||||
// MARK: - Serialisation
|
||||
|
||||
@@ -55,6 +76,31 @@ namespace speckle::database {
|
||||
@return True if the package has added items to the inventory
|
||||
*/
|
||||
bool fillInventory(active::serialise::Inventory& inventory) const override;
|
||||
/*!
|
||||
Get the specified cargo
|
||||
@param item The inventory item to retrieve
|
||||
@return The requested cargo (nullptr on failure)
|
||||
*/
|
||||
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
|
||||
/*!
|
||||
Set to the default package content
|
||||
*/
|
||||
void setDefault() override;
|
||||
/*!
|
||||
Validate the cargo data
|
||||
@return True if the data has been validated
|
||||
*/
|
||||
bool validate() override;
|
||||
|
||||
private:
|
||||
///The record ID (may not be unique across models)
|
||||
speckle::utility::Guid m_ID = speckle::utility::Guid{true};
|
||||
///The record unique ID
|
||||
speckle::utility::Guid m_uniqueID = speckle::utility::Guid{true};
|
||||
///The record owner ID (null guid if unspecified)
|
||||
speckle::utility::Guid m_ownerID;
|
||||
///The last edit time
|
||||
active::utility::Time editTime = active::utility::Time{};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
#ifndef SPECKLE_DATABASE_ID
|
||||
#define SPECKLE_DATABASE_ID
|
||||
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
//Common Speckle record identifier type
|
||||
using RecordID = speckle::utility::String;
|
||||
//Common Speckle table identifier type
|
||||
using TableID = speckle::utility::String;
|
||||
//Common Speckle database identifier type
|
||||
using DBaseID = speckle::utility::String;
|
||||
|
||||
//A list of record IDs
|
||||
using RecordIDList = std::vector<RecordID>;
|
||||
|
||||
}
|
||||
|
||||
#endif //SPECKLE_DATABASE_ID
|
||||
@@ -1,302 +0,0 @@
|
||||
#include "Speckle/Database/Storage/DocumentStore/DocumentStoreCore.h"
|
||||
|
||||
#include "Active/Utility/Defer.h"
|
||||
#include "Active/Utility/Memory.h"
|
||||
#include "Active/Utility/String.h"
|
||||
#include "Speckle/Environment/Addon.h"
|
||||
#include "Speckle/Environment/Project.h"
|
||||
#include "Speckle/Event/Type/DocStoreMergeEvent.h"
|
||||
#include "Speckle/Event/Type/ProjectEvent.h"
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
#ifdef ARCHICAD
|
||||
#include <ACAPinc.h>
|
||||
#include <BM.hpp>
|
||||
#endif
|
||||
|
||||
using namespace active::event;
|
||||
using namespace active::setting;
|
||||
using namespace speckle::database;
|
||||
using namespace speckle::environment;
|
||||
using namespace speckle::event;
|
||||
using namespace speckle::utility;
|
||||
|
||||
using enum DocumentStoreCore::Status;
|
||||
|
||||
namespace {
|
||||
|
||||
#ifdef ARCHICAD
|
||||
/*--------------------------------------------------------------------
|
||||
Convert an Archicad API error code to a DocumentStoreCore status
|
||||
|
||||
acErrorCode: The API error code
|
||||
|
||||
return: An equivalent status code
|
||||
--------------------------------------------------------------------*/
|
||||
DocumentStoreCore::Status convertArchicadError(long acErrorCode) {
|
||||
using enum DocumentStoreCore::Status;
|
||||
switch (acErrorCode) {
|
||||
case NoError:
|
||||
return nominal;
|
||||
case APIERR_BADPARS:
|
||||
return badParameter;
|
||||
case APIERR_BADID:
|
||||
return badID;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return error;
|
||||
} //convertArchicadError
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Determine if a specified data store exists
|
||||
|
||||
id: The store identity
|
||||
|
||||
return: True if the store exists
|
||||
--------------------------------------------------------------------*/
|
||||
bool isExistingStore(active::utility::NameID& storeID) {
|
||||
if (storeID.id)
|
||||
return true; //We must have a store if the ID is populated
|
||||
GS::UniString storeName{String{storeID.name}};
|
||||
API_Guid acID;
|
||||
if (auto statusCode = convertArchicadError(ACAPI_AddOnObject_GetObjectGuidFromName(storeName, &acID)); statusCode != nominal)
|
||||
throw std::system_error(DocumentStoreCore::makeError(statusCode));
|
||||
storeID.id = Guid{acID};
|
||||
if (!storeID.id) {
|
||||
GS::Array<API_Guid> storedObjects;
|
||||
ACAPI_AddOnObject_GetObjectList(&storedObjects);
|
||||
for (auto iter = storedObjects.Enumerate(); iter != nullptr; ++iter) {
|
||||
API_Guid objGuid = *iter;
|
||||
GS::UniString objName;
|
||||
GSHandle content = nullptr;
|
||||
auto scope = active::utility::defer([&content](){ BMKillHandle(&content); });
|
||||
if (ACAPI_AddOnObject_GetObjectContent(objGuid, &objName, &content) == NoError) {
|
||||
if (objName == storeName) {
|
||||
storeID.id = Guid{objGuid};
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return storeID.id.operator bool(); //Returns true if the store ID is non-null, i.e. the object exists
|
||||
} //isExistingStore
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Copy a GS handle to a Memory object
|
||||
|
||||
handle: The GS handle
|
||||
memory: The Memory object to receive the data
|
||||
--------------------------------------------------------------------*/
|
||||
void copyHandleToMemory(const GSHandle& handle, active::utility::Memory& memory) {
|
||||
auto storeSize = BMGetHandleSize(handle);
|
||||
memory.resize(storeSize);
|
||||
if ((storeSize > 0) && (*handle != nullptr))
|
||||
active::utility::Memory::copy(memory.data(), *handle, storeSize, storeSize);
|
||||
} //copyHandleToMemory
|
||||
|
||||
#endif
|
||||
|
||||
///Category for DocumentStore processing errors
|
||||
class DocumentStoreCategory : public std::error_category {
|
||||
public:
|
||||
///Category name
|
||||
const char* name() const noexcept override {
|
||||
return "active::database::sqlite::category";
|
||||
}
|
||||
/*!
|
||||
Get a message for a specified error code
|
||||
@param errorCode A DocumentStore processing code
|
||||
@return The error message for the specified code
|
||||
*/
|
||||
std::string message(int errorCode) const override {
|
||||
//TODO: These error messages are ok for developers - but can we help users more?
|
||||
switch (static_cast<DocumentStoreCore::Status>(errorCode)) {
|
||||
case nominal:
|
||||
return "";
|
||||
case badParameter:
|
||||
return "An internal function has been incorrectly used";
|
||||
case badID:
|
||||
return "Internal data has been requested using an invalid identity";
|
||||
case error:
|
||||
return "A non-specific error occurred";
|
||||
default:
|
||||
return "An unknown error occurred";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
///DocumentStore processing category error instance
|
||||
static DocumentStoreCategory instance;
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Make an error code for DocumentStore processing
|
||||
|
||||
return: An STL error code
|
||||
--------------------------------------------------------------------*/
|
||||
std::error_code DocumentStoreCore::makeError(DocumentStoreCore::Status code) {
|
||||
return std::error_code(static_cast<int>(code), instance);
|
||||
} //DocumentStoreCore::makeError
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Handle a document merge operation
|
||||
|
||||
event: The merge event
|
||||
|
||||
return: True if the event should be closed
|
||||
--------------------------------------------------------------------*/
|
||||
bool DocumentStoreCore::handle(const DocStoreMergeEvent& event) {
|
||||
#ifdef ARCHICAD
|
||||
if (event.objects == nullptr)
|
||||
return false;
|
||||
for (const auto& object : *event.objects) {
|
||||
if (*object.name != String{m_id.name})
|
||||
continue;
|
||||
active::utility::Memory toMerge;
|
||||
copyHandleToMemory(object.data, toMerge);
|
||||
mergeStore(toMerge);
|
||||
writeStore();
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
} //DocumentStoreCore::handle
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Handle a project event
|
||||
|
||||
event: The project event
|
||||
|
||||
return: True if the event should be closed
|
||||
--------------------------------------------------------------------*/
|
||||
bool DocumentStoreCore::handle(const event::ProjectEvent& event) {
|
||||
using enum ProjectEvent::Type;
|
||||
switch (event.getType()) {
|
||||
case close:
|
||||
resetStore(); //Wipe the cache, forcing a full reload when the data is requested again (after a project is opened)
|
||||
break;
|
||||
case presave: case send:
|
||||
writeStore(); //Ensure the data is stored with the save/send
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
} //DocumentStoreCore::handle
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Read the data stored in the document
|
||||
|
||||
return: The stored data (empty if the data doesn't exist)
|
||||
--------------------------------------------------------------------*/
|
||||
active::utility::Memory DocumentStoreCore::readStore() const {
|
||||
active::utility::Memory result;
|
||||
//First establish that we actually have stored data to read
|
||||
if (!isExistingStore(m_id))
|
||||
return result;
|
||||
//Read the stored data
|
||||
#ifdef ARCHICAD
|
||||
GS::UniString storeName{String{m_id.name}};
|
||||
GSHandle storedData;
|
||||
auto scoped = active::utility::defer([&storedData](){ BMKillHandle(&storedData); });
|
||||
if (auto statusCode = convertArchicadError(ACAPI_AddOnObject_GetObjectContent(Guid{m_id.id}, &storeName, &storedData)); statusCode != nominal)
|
||||
throw std::system_error(makeError(statusCode));
|
||||
//Copy the stored data into the result
|
||||
copyHandleToMemory(storedData, result);
|
||||
#endif
|
||||
return result;
|
||||
} //DocumentStoreCore::readStore
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Write the data to document storage
|
||||
|
||||
toWrite: The data to write to storage
|
||||
--------------------------------------------------------------------*/
|
||||
void DocumentStoreCore::writeStore() {
|
||||
#ifdef ARCHICAD
|
||||
auto activeProject = addon()->getActiveProject();
|
||||
bool shared = false;
|
||||
if (auto project = activeProject.lock(); project && project->getInfo().isShared)
|
||||
shared = true;
|
||||
//Ensure a suitable data store exists
|
||||
if (!isExistingStore(m_id)) {
|
||||
//Create when missing
|
||||
API_Guid acID;
|
||||
if (auto statusCode = convertArchicadError(ACAPI_AddOnObject_CreateUniqueObject(String{m_id.name}, &acID)); statusCode != nominal)
|
||||
throw std::system_error(makeError(statusCode));
|
||||
m_id.id = Guid{acID};
|
||||
}
|
||||
//Reserve the storage object in TW
|
||||
if (shared) {
|
||||
GS::HashTable<API_Guid, short> conflicts;
|
||||
if (auto statusCode = convertArchicadError(ACAPI_AddOnObject_ReserveObjects({Guid{m_id.id}}, &conflicts)); statusCode != nominal)
|
||||
throw std::system_error(makeError(statusCode));
|
||||
//TODO: Implamenent handling for conflicts
|
||||
}
|
||||
auto toWrite = buildStore();
|
||||
//Write the new data
|
||||
GSHandle output = BMAllocateHandle(static_cast<GSSize>(toWrite.size()), ALLOCATE_CLEAR, 0);
|
||||
auto scoped = active::utility::defer([&output](){ BMKillHandle(&output); });
|
||||
active::utility::Memory::copy(*output, toWrite.data(), toWrite.size(), toWrite.size());
|
||||
if (auto statusCode = convertArchicadError(ACAPI_AddOnObject_ModifyObject(Guid{m_id.id}, nullptr, &output)); statusCode != nominal)
|
||||
throw std::system_error(makeError(statusCode));
|
||||
//Release the storage object in TW
|
||||
if (shared) {
|
||||
if (auto statusCode = convertArchicadError(ACAPI_AddOnObject_ReleaseObjects({Guid{m_id.id}})); statusCode != nominal)
|
||||
throw std::system_error(makeError(statusCode));
|
||||
}
|
||||
#endif
|
||||
} //DocumentStoreCore::writeStore
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the event subscription list
|
||||
|
||||
return: The subscription list (an empty list will put the subscriber into a suspended state)
|
||||
--------------------------------------------------------------------*/
|
||||
Subscriber::Subscription DocumentStoreCore::subscription() const {
|
||||
auto result = DocStoreSubscriber::subscription();
|
||||
auto other = ProjectSubscriber::subscription();
|
||||
result.insert(other.begin(), other.end());
|
||||
return result;
|
||||
} //DocumentStoreCore::subscription
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Receive a subscribed event
|
||||
|
||||
event: The incoming event
|
||||
|
||||
return: True if the event should be closed
|
||||
--------------------------------------------------------------------*/
|
||||
bool DocumentStoreCore::receive(const active::event::Event& event) {
|
||||
return DocStoreSubscriber::receive(event) || ProjectSubscriber::receive(event);
|
||||
} //DocumentStoreCore::receive
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Attach participant components to the app (as required)
|
||||
|
||||
return: True if the participant is able to function
|
||||
--------------------------------------------------------------------*/
|
||||
bool DocumentStoreCore::attach() {
|
||||
return DocStoreSubscriber::attach() && ProjectSubscriber::attach();
|
||||
} //DocumentStoreCore::attach
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Start the participant operation
|
||||
|
||||
return: True if the participant is able to continue
|
||||
--------------------------------------------------------------------*/
|
||||
bool DocumentStoreCore::start() {
|
||||
return DocStoreSubscriber::start() && ProjectSubscriber::start();
|
||||
} //DocumentStoreCore::start
|
||||
@@ -1,142 +0,0 @@
|
||||
#ifndef SPECKLE_DATABASE_DOCUMENT_STORE_CORE
|
||||
#define SPECKLE_DATABASE_DOCUMENT_STORE_CORE
|
||||
|
||||
#include "Active/File/Path.h"
|
||||
#include "Active/Setting/SettingList.h"
|
||||
#include "Active/Database/Storage/DBaseSchema.h"
|
||||
#include "Active/Utility/NameID.h"
|
||||
#include "Speckle/Event/Subscriber/DocStoreSubscriber.h"
|
||||
#include "Speckle/Event/Subscriber/ProjectSubscriber.h"
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
using DocumentStoreSchema = active::database::DBaseSchema<>;
|
||||
|
||||
/*!
|
||||
Core functionality and definitions for a mechanism to store data in a BIM (3rd-party) document/database
|
||||
|
||||
Currently implement for Archicad Add-On Objects
|
||||
*/
|
||||
class DocumentStoreCore : public event::DocStoreSubscriber, public event::ProjectSubscriber {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
///Status of of the DocumentStore database
|
||||
enum class Status {
|
||||
nominal, ///<No errors logged
|
||||
badParameter, ///<The data supplied to an SDK function call was invalid
|
||||
badID, ///<The ID for the stored data is invalid
|
||||
error, ///<An unidentified error occurred
|
||||
};
|
||||
|
||||
// MARK: - Static functions
|
||||
|
||||
/*!
|
||||
Make an error code for DocumentStore processing
|
||||
@return An STL error code
|
||||
*/
|
||||
static std::error_code makeError(DocumentStoreCore::Status code);
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
@param id The document storage identifier
|
||||
@param schema The document storage schema
|
||||
*/
|
||||
DocumentStoreCore(const active::utility::NameID& id, DocumentStoreSchema&& schema) : m_id(id), m_schema{schema} {}
|
||||
DocumentStoreCore(const DocumentStoreCore&) = default;
|
||||
/*!
|
||||
Destructor
|
||||
*/
|
||||
virtual ~DocumentStoreCore() {}
|
||||
|
||||
// MARK: - Function (const)
|
||||
|
||||
/*!
|
||||
Get the database schema
|
||||
@return The database schema
|
||||
*/
|
||||
const DocumentStoreSchema& getSchema() const { return m_schema; }
|
||||
/*!
|
||||
Get the database id
|
||||
@return The database id
|
||||
*/
|
||||
const active::utility::NameID& getID() const { return m_id; }
|
||||
|
||||
// MARK: - Functions (mutating)
|
||||
|
||||
/*!
|
||||
Handle a document merge operation
|
||||
@param event The merge event
|
||||
@return True if the event should be closed
|
||||
*/
|
||||
bool handle(const event::DocStoreMergeEvent& event) override;
|
||||
/*!
|
||||
Handle a project event
|
||||
@param event The project event
|
||||
@return True if the event should be closed
|
||||
*/
|
||||
bool handle(const event::ProjectEvent& event) override;
|
||||
|
||||
protected:
|
||||
/*!
|
||||
Read the data stored in the document (should be lazy-loading, only at the point where data is actually requested)
|
||||
@return The stored data (empty if the data doesn't exist)
|
||||
*/
|
||||
active::utility::Memory readStore() const;
|
||||
|
||||
/*!
|
||||
Write the data to document storage (currently happens at every change - could implement delayed storage until the point of send/save)
|
||||
*/
|
||||
void writeStore();
|
||||
/*!
|
||||
Build new store data from the latest records
|
||||
@return Data to store from the latest records
|
||||
*/
|
||||
virtual active::utility::Memory buildStore() = 0;
|
||||
/*!
|
||||
Merge existing stored data with incoming stored data (from an external source)
|
||||
@param toMerge The external stored data to merge
|
||||
*/
|
||||
virtual void mergeStore(const active::utility::Memory& toMerge) = 0;
|
||||
/*!
|
||||
Reset the stored data (some external change has invalidated previous data, e.g. the document was closed)
|
||||
*/
|
||||
virtual void resetStore() { m_id.id.clear(); }
|
||||
|
||||
// MARK: Subscriber functions
|
||||
|
||||
/*!
|
||||
Get the event subscription list
|
||||
@return The subscription list (an empty list will put the subscriber into a suspended state)
|
||||
*/
|
||||
Subscription subscription() const override;
|
||||
/*!
|
||||
Receive a subscribed event
|
||||
@param event The incoming event
|
||||
@return True if the event should be closed
|
||||
*/
|
||||
bool receive(const active::event::Event& event) override;
|
||||
/*!
|
||||
Attach participant components to the app (as required)
|
||||
@return True if the participant is able to function
|
||||
*/
|
||||
bool attach() override;
|
||||
/*!
|
||||
Start the participant operation
|
||||
@return True if the participant is able to continue
|
||||
*/
|
||||
bool start() override;
|
||||
|
||||
private:
|
||||
///The database schema
|
||||
DocumentStoreSchema m_schema;
|
||||
///The database ID (mutable to allow lazy loading when data is accessed)
|
||||
mutable active::utility::NameID m_id;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //SPECKLE_DATABASE_DOCUMENT_STORE_CORE
|
||||
@@ -1,349 +0,0 @@
|
||||
#ifndef SPECKLE_DATABASE_DOCUMENT_STORE_ENGINE
|
||||
#define SPECKLE_DATABASE_DOCUMENT_STORE_ENGINE
|
||||
|
||||
#include "Active/Database/Concepts.h"
|
||||
#include "Active/Database/Storage/DBaseEngine.h"
|
||||
#include "Active/Database/Storage/RecordCache.h"
|
||||
#include "Active/File/Path.h"
|
||||
#include "Active/Serialise/Cargo.h"
|
||||
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
|
||||
#include "Active/Serialise/Transport.h"
|
||||
#include "Active/Utility/BufferIn.h"
|
||||
#include "Active/Utility/BufferOut.h"
|
||||
#include "Speckle/Database/Storage/DocumentStore/DocumentStoreCore.h"
|
||||
#include "Speckle/Database/Identity/RecordID.h"
|
||||
#include "Speckle/Utility/Guid.h"
|
||||
#include "Speckle/Utility/String.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <ranges>
|
||||
|
||||
namespace speckle::database {
|
||||
|
||||
///Concept for the ability to store objects in a document
|
||||
template<typename Obj, typename ObjWrapper, typename Transport>
|
||||
concept DocumentStorable = (active::database::CanWrap<Obj, ObjWrapper> || active::database::FlatType<Obj, ObjWrapper>) &&
|
||||
std::is_base_of_v<active::serialise::Cargo, Obj> &&
|
||||
std::is_base_of_v<active::serialise::Transport, Transport>;
|
||||
|
||||
/*!
|
||||
A database engine to store records in a 3rd-party BIM document
|
||||
|
||||
Due to the fact that these records are intended to represent a single table and are stored in a document, the concepts of 'table' and
|
||||
'document' aren't currently applicable (this could be extended in future if there is a use-case)
|
||||
@tparam Obj Interface for the stored object. NB: This can be a base class for an object hierarchy, not necessarily a concrete class
|
||||
@tparam ObjWrapper Wrapper type for (de)serialising objects
|
||||
@tparam Transport The serialisation transport mechanism for objects
|
||||
@tparam ObjID The object identifier type, e.g. Guid
|
||||
*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID = RecordID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
class DocumentStoreEngine : public DocumentStoreCore, public active::database::DBaseEngine<Obj, ObjID, RecordID, RecordID> {
|
||||
public:
|
||||
|
||||
// MARK: - Types
|
||||
|
||||
using base = active::database::DBaseEngine<Obj, ObjID, RecordID, RecordID>;
|
||||
using Filter = base::Filter;
|
||||
using Outline = base::Outline;
|
||||
using Cache = active::database::RecordCache<Obj, ObjWrapper, ObjID, RecordID, RecordID>;
|
||||
|
||||
// MARK: - Constructors
|
||||
|
||||
/*!
|
||||
Constructor
|
||||
@param id The document storage identifier
|
||||
*/
|
||||
DocumentStoreEngine(const active::utility::NameID& id, DocumentStoreSchema&& schema) : DocumentStoreCore{id, std::move(schema)} {}
|
||||
DocumentStoreEngine(const DocumentStoreEngine&) = delete;
|
||||
|
||||
// MARK: - Functions (const)
|
||||
|
||||
/*!
|
||||
Get an object by index
|
||||
@param ID The object ID
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (when the object is bound to a specific document)
|
||||
@return The requested object (nullptr on failure)
|
||||
*/
|
||||
std::unique_ptr<Obj> getObject(const ObjID& objID, std::optional<RecordID> tableID = std::nullopt, std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Get an object in a transportable form, e.g. packaged for serialisation
|
||||
@param ID The object ID
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (when the object is bound to a specific document)
|
||||
@return: The requested wrapped cargo (nullptr on failure)
|
||||
*/
|
||||
active::serialise::Cargo::Unique getObjectCargo(const ObjID& objID, std::optional<RecordID> tableID = std::nullopt, std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Get all objects
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (filter for this document only - nullopt = all objects)
|
||||
@return The requested objects (nullptr on failure)
|
||||
*/
|
||||
active::container::Vector<Obj> getObjects(std::optional<RecordID> tableID = std::nullopt, std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Get a filtered list of objects
|
||||
@param filter The object filter
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (filter for this document only - nullopt = all objects)
|
||||
@return The filtered objects (nullptr on failure)
|
||||
*/
|
||||
active::container::Vector<Obj> getObjects(const Filter& filter, std::optional<RecordID> tableID = std::nullopt,
|
||||
std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Write an object to the database
|
||||
@param object The object to write
|
||||
@param objID The object ID
|
||||
@param objDocID The object document-specific ID (unique within a specific document - nullopt if not document-bound)
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (when the object is bound to a specific document)
|
||||
*/
|
||||
void write(const Obj& object, const ObjID& objID, std::optional<ObjID> objDocID = std::nullopt,
|
||||
std::optional<RecordID> tableID = std::nullopt, std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Erase an object by index
|
||||
@param ID The object ID
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (when the object is bound to a specific document)
|
||||
@throw Exception thrown on SQL error
|
||||
*/
|
||||
void erase(const ObjID& ID, std::optional<RecordID> tableID = std::nullopt,
|
||||
std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Erase all objects
|
||||
@param tableID Optional table ID (defaults to the first table)
|
||||
@param documentID Optional document ID (when the object is bound to a specific document)
|
||||
@throw Exception thrown on SQL error
|
||||
*/
|
||||
void erase(std::optional<RecordID> tableID = std::nullopt, std::optional<RecordID> documentID = std::nullopt) const override;
|
||||
/*!
|
||||
Get the database outline
|
||||
@return The database outline
|
||||
*/
|
||||
Outline getOutline() const override;
|
||||
|
||||
protected:
|
||||
/*!
|
||||
Get the cache of records built from the data stored in the document
|
||||
@return The cached records
|
||||
*/
|
||||
Cache* getCache() const;
|
||||
/*!
|
||||
Build new store data from the latest records
|
||||
@return Data to store from the latest records
|
||||
*/
|
||||
active::utility::Memory buildStore() override;
|
||||
/*!
|
||||
Merge existing stored data with incoming stored data (from an external source)
|
||||
@param toMerge The external stored data to merge
|
||||
@return The merged data to be stored
|
||||
*/
|
||||
void mergeStore(const active::utility::Memory& toMerge) override;
|
||||
/*!
|
||||
Reset the stored data (some external change has invalidated previous data, e.g. the document was closed)
|
||||
*/
|
||||
void resetStore() override {
|
||||
DocumentStoreCore::resetStore();
|
||||
m_cache.reset();
|
||||
}
|
||||
|
||||
private:
|
||||
//Cached records from the document store
|
||||
mutable std::unique_ptr<Cache> m_cache;
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the cache of records built from the data stored in the document
|
||||
|
||||
return: The cached records (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
typename DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::Cache* DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getCache() const {
|
||||
if (m_cache)
|
||||
return m_cache.get();
|
||||
//Read the data stored in the document
|
||||
auto storedData = readStore();
|
||||
m_cache = std::make_unique<Cache>();
|
||||
if (!storedData)
|
||||
return m_cache.get(); //Return an empty container if there's no data
|
||||
//Import the document data into the record cache
|
||||
if constexpr (std::is_same_v<ObjWrapper, Obj>)
|
||||
Transport().receive(std::forward<active::serialise::Cargo&&>(*m_cache), active::serialise::Identity{}, storedData);
|
||||
else
|
||||
Transport().receive(active::serialise::PackageWrap{*m_cache}, active::serialise::Identity{}, storedData);
|
||||
return m_cache.get();
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getCache
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get an object by index
|
||||
|
||||
index: The object index
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (when the object is bound to a specific document)
|
||||
|
||||
return: The requested object (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
std::unique_ptr<Obj> DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObject(const ObjID& ID, std::optional<RecordID> tableID,
|
||||
std::optional<RecordID> documentID) const {
|
||||
return getCache()->read(ID);
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObject
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get an object in a transportable form, e.g. packaged for serialisation
|
||||
|
||||
index: The object index
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (when the object is bound to a specific document)
|
||||
|
||||
return: The requested wrapped cargo (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
active::serialise::Cargo::Unique DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObjectCargo(const ObjID& ID, std::optional<RecordID> tableID,
|
||||
std::optional<RecordID> documentID) const {
|
||||
if (auto object = getObject(ID, tableID, documentID); object)
|
||||
return std::make_unique<active::serialise::CargoHold<ObjWrapper, Obj>>(std::move(object));
|
||||
return nullptr;
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObject
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get all objects
|
||||
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (filter for this document only - nullopt = all objects)
|
||||
|
||||
return: The requested objects (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
active::container::Vector<Obj> DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObjects(std::optional<RecordID> tableID,
|
||||
std::optional<RecordID> documentID) const {
|
||||
return getCache()->read();
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObjects
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get all objects
|
||||
|
||||
filter: The object filter
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (filter for this document only - nullopt = all objects)
|
||||
|
||||
return: The requested objects (nullptr on failure)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
active::container::Vector<Obj> DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObjects(const Filter& filter, std::optional<RecordID> tableID,
|
||||
std::optional<RecordID> documentID) const {
|
||||
return getCache()->read(filter);
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getObjects
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Write an object to the database
|
||||
|
||||
object: The object to write
|
||||
objID: The object ID
|
||||
objDocID: The object document-specific ID (unique within a specific document - nullopt if not document-bound)
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (when the object is bound to a specific document)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
void DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::write(const Obj& object, const ObjID& objID, std::optional<ObjID> objDocID,
|
||||
std::optional<RecordID> tableID, std::optional<RecordID> documentID) const {
|
||||
getCache()->write(object); //NB: In future we might support duplicating records if objID != obj.id
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::write
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Erase an object by index
|
||||
|
||||
objID: The object ID
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (when the object is bound to a specific document)
|
||||
|
||||
return: True if the object was successfully erased
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
void DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::erase(const ObjID& ID, std::optional<RecordID> tableID,
|
||||
std::optional<RecordID> documentID) const {
|
||||
getCache()->erase(ID);
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::erase
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Erase all objects
|
||||
|
||||
tableID: Optional table ID (defaults to the first table)
|
||||
documentID: Optional document ID (filter for this document only - nullopt = all objects)
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
void DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::erase(std::optional<RecordID> tableID, std::optional<RecordID> documentID) const {
|
||||
getCache()->erase();
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::erase
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the database outline
|
||||
|
||||
return: The database outline
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::Outline DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getOutline() const {
|
||||
Outline result;
|
||||
if (getSchema().empty())
|
||||
return result;
|
||||
//NB: Currently implementing only a single table in a document store
|
||||
result.emplace_back(std::make_pair(getSchema()[0].ID, getCache()->keys()));
|
||||
return result;
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::getOutline
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Build new store data from the latest records
|
||||
|
||||
return: Data to store from the latest records
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
active::utility::Memory DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::buildStore() {
|
||||
active::utility::Memory result;
|
||||
Transport().send(std::forward<active::serialise::Cargo&&>(*getCache()), active::serialise::Identity{}, result);
|
||||
return result;
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::buildStore
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Merge existing stored data with incoming stored data (from an external source)
|
||||
|
||||
toMerge: The external stored data to merge
|
||||
|
||||
return: The merged data to be stored
|
||||
--------------------------------------------------------------------*/
|
||||
template<typename Obj, typename ObjWrapper, typename Transport, typename ObjID>
|
||||
requires DocumentStorable<Obj, ObjWrapper, Transport>
|
||||
void DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::mergeStore(const active::utility::Memory& toMerge) {
|
||||
//Import the incoming records from the data to merge
|
||||
Cache incoming;
|
||||
if constexpr (std::is_same_v<ObjWrapper, Obj>)
|
||||
Transport().receive(std::forward<active::serialise::Cargo&&>(incoming), active::serialise::Identity{}, toMerge);
|
||||
else
|
||||
Transport().receive(ObjWrapper{incoming}, active::serialise::Identity{}, toMerge);
|
||||
//Get the data currently stored in the document
|
||||
getCache()->merge(std::forward<Cache&&>(incoming));
|
||||
} //DocumentStoreEngine<Obj, ObjWrapper, Transport, ObjID>::mergeStore
|
||||
|
||||
}
|
||||
|
||||
#endif //SPECKLE_DATABASE_DOCUMENT_STORE_ENGINE
|
||||
@@ -1,16 +1,10 @@
|
||||
#include "Speckle/Environment/Addon.h"
|
||||
|
||||
#include "Speckle/Environment/Project.h"
|
||||
#include "Speckle/Event/Type/ProjectEvent.h"
|
||||
|
||||
#include <limits>
|
||||
|
||||
#ifdef ARCHICAD
|
||||
#include <ACAPinc.h>
|
||||
#endif
|
||||
|
||||
using namespace speckle::environment;
|
||||
using namespace speckle::event;
|
||||
using namespace speckle::utility;
|
||||
|
||||
namespace {
|
||||
@@ -52,23 +46,11 @@ String Addon::getLocalString(short itemIndex, short resourceIndex) const {
|
||||
RSGetIndString(&string, itemIndex, resourceIndex, ACAPI_GetOwnResModule());
|
||||
return string;
|
||||
#else
|
||||
return String{};
|
||||
return String{}
|
||||
#endif
|
||||
} //Addon::getLocalString
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Get the active project
|
||||
|
||||
return: The active project (nullptr = no open project)
|
||||
--------------------------------------------------------------------*/
|
||||
std::weak_ptr<Project> Addon::getActiveProject() const {
|
||||
if (m_activeProject)
|
||||
return m_activeProject;
|
||||
return std::weak_ptr<Project>{};
|
||||
} //Addon::getActiveProject
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Publish an event from an external source to subscribers
|
||||
|
||||
@@ -78,9 +60,7 @@ void Addon::publishExternal(const active::event::Event& event) {
|
||||
if (!logCallback())
|
||||
return;
|
||||
try {
|
||||
preprocessEvent(event);
|
||||
publish(event);
|
||||
postprocessEvent(event);
|
||||
} catch (...) {
|
||||
//Add error logging in future
|
||||
}
|
||||
@@ -151,7 +131,7 @@ speckle::environment::Addon* speckle::environment::addon() {
|
||||
|
||||
return: True if the callback can continue (false on error)
|
||||
--------------------------------------------------------------------*/
|
||||
bool Addon::logCallback(bool initialise) {
|
||||
bool speckle::environment::Addon::logCallback(bool initialise) {
|
||||
if (initialise)
|
||||
m_callDepth = 1;
|
||||
else
|
||||
@@ -166,53 +146,3 @@ bool Addon::logCallback(bool initialise) {
|
||||
}
|
||||
return true;
|
||||
} //Addon::publishExternalEvent
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Preprocess an external event (allowing key add-on operations to act before other subscribers)
|
||||
|
||||
event: An incoming event
|
||||
|
||||
return: True if the event should be closed, i.e. not passed to other subscribers
|
||||
--------------------------------------------------------------------*/
|
||||
bool Addon::preprocessEvent(const active::event::Event& event) {
|
||||
if (auto projectEvent = dynamic_cast<const ProjectEvent*>(&event); projectEvent != nullptr) {
|
||||
using enum ProjectEvent::Type;
|
||||
switch (projectEvent->getType()) {
|
||||
case newDocument: case newAndReset: case open:
|
||||
m_activeProject = makeProject(); //Ensure a project object is available
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} //Addon::preprocessEvent
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Postprocess an external event (allowing key add-on operations to act after all other subscribers are complete)
|
||||
|
||||
event: An incoming (completed) event
|
||||
--------------------------------------------------------------------*/
|
||||
void Addon::postprocessEvent(const active::event::Event& event) {
|
||||
if (auto projectEvent = dynamic_cast<const ProjectEvent*>(&event); projectEvent != nullptr) {
|
||||
using enum ProjectEvent::Type;
|
||||
switch (projectEvent->getType()) {
|
||||
case close: case quit:
|
||||
m_activeProject.reset(); //Release the active project on close/quit
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} //Addon::postprocessEvent
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
Make a new new project. Allows Addon subclasses to define a Project subclass with additional functions/databases
|
||||
|
||||
return: A new project instance
|
||||
--------------------------------------------------------------------*/
|
||||
std::shared_ptr<Project> Addon::makeProject() const {
|
||||
auto project = new Project; //make_shared can't use protected constructor
|
||||
return std::shared_ptr<Project>{project};
|
||||
} //Addon::makeProject
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user