From ea3152d942cec391383b7c4b3f90c863b58c9ea3 Mon Sep 17 00:00:00 2001 From: Ralph Wessel Date: Mon, 9 Sep 2024 12:59:07 +0100 Subject: [PATCH] Added GetSendFilter Reactivated sendBinding --- .../Connector.xcodeproj/project.pbxproj | 20 +++++ .../Browser/Bridge/Base/Arg/DocumentInfo.h | 6 +- .../Browser/Bridge/Send/Arg/SendFilter.cpp | 80 +++++++++++++++++++ .../Browser/Bridge/Send/Arg/SendFilter.h | 67 ++++++++++++++++ .../Browser/Bridge/Send/GetSendFilters.cpp | 37 +++++++++ .../Browser/Bridge/Send/GetSendFilters.h | 36 +++++++++ .../Browser/Bridge/Send/SendBridge.cpp | 2 + .../Connector/Interface/ConnectorPalette.cpp | 2 +- 8 files changed, 246 insertions(+), 4 deletions(-) create mode 100644 SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.cpp create mode 100644 SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.h create mode 100644 SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.cpp create mode 100644 SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.h diff --git a/SpeckleConnector/Connector.xcodeproj/project.pbxproj b/SpeckleConnector/Connector.xcodeproj/project.pbxproj index 95f0a96..028a510 100644 --- a/SpeckleConnector/Connector.xcodeproj/project.pbxproj +++ b/SpeckleConnector/Connector.xcodeproj/project.pbxproj @@ -46,6 +46,8 @@ 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 */; }; + 21D0BD9B2C8F154B0077E104 /* SendFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD982C8F154B0077E104 /* SendFilter.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 */; }; @@ -315,6 +317,10 @@ 21D0BD692C8A0DB40077E104 /* GetIsDevMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetIsDevMode.h; sourceTree = ""; }; 21D0BD8A2C8EE4490077E104 /* Send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Send.h; sourceTree = ""; }; 21D0BD8D2C8EE4490077E104 /* Send.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Send.cpp; sourceTree = ""; }; + 21D0BD952C8F13F30077E104 /* GetSendFilters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetSendFilters.h; sourceTree = ""; }; + 21D0BD962C8F13F30077E104 /* GetSendFilters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetSendFilters.cpp; sourceTree = ""; }; + 21D0BD982C8F154B0077E104 /* SendFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SendFilter.cpp; sourceTree = ""; }; + 21D0BD992C8F154B0077E104 /* SendFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SendFilter.h; sourceTree = ""; }; 21D1E9152BF14AEC00957EAA /* BIMData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BIMData.framework; path = "../Archicad 27/Support/Frameworks/BIMData.framework"; sourceTree = ""; }; 21D1E9162BF14AEC00957EAA /* TeamworkPortalServerClient.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TeamworkPortalServerClient.framework; path = "../Archicad 27/Support/Frameworks/TeamworkPortalServerClient.framework"; sourceTree = ""; }; 21D1E9172BF14AEC00957EAA /* GDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GDL.framework; path = "../Archicad 27/Support/Frameworks/GDL.framework"; sourceTree = ""; }; @@ -982,6 +988,9 @@ 21D0BD5D2C89BFEA0077E104 /* Send */ = { isa = PBXGroup; children = ( + 21D0BD9A2C8F154B0077E104 /* Arg */, + 21D0BD962C8F13F30077E104 /* GetSendFilters.cpp */, + 21D0BD952C8F13F30077E104 /* GetSendFilters.h */, 21D0BD8D2C8EE4490077E104 /* Send.cpp */, 21D0BD8A2C8EE4490077E104 /* Send.h */, 21D0BD5B2C89BFEA0077E104 /* SendBridge.cpp */, @@ -990,6 +999,15 @@ path = Send; sourceTree = ""; }; + 21D0BD9A2C8F154B0077E104 /* Arg */ = { + isa = PBXGroup; + children = ( + 21D0BD982C8F154B0077E104 /* SendFilter.cpp */, + 21D0BD992C8F154B0077E104 /* SendFilter.h */, + ); + path = Arg; + sourceTree = ""; + }; 21D1EA472BF14B6C00957EAA /* Archicad */ = { isa = PBXGroup; children = ( @@ -1309,11 +1327,13 @@ 21B67CE32C78D1FB00FD64FC /* SayHiArg.cpp in Sources */, 21F69FBB2C762EF0008B6A06 /* ConfigBridge.cpp in Sources */, 21F69F8A2C70D2C4008B6A06 /* AccountBridge.cpp in Sources */, + 21D0BD9B2C8F154B0077E104 /* SendFilter.cpp in Sources */, 21D0BD8E2C8EE4490077E104 /* Send.cpp in Sources */, 21B67CF72C78D4DE00FD64FC /* GetComplexType.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 */, diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h index fa82f75..b9ed59f 100644 --- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h @@ -1,5 +1,5 @@ -#ifndef CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG -#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG +#ifndef CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO +#define CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO #include "Active/Serialise/Package/Package.h" #include "Speckle/Utility/String.h" @@ -58,4 +58,4 @@ namespace connector::interfac::browser::bridge { } -#endif //CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG +#endif //CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.cpp new file mode 100644 index 0000000..8abef93 --- /dev/null +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.cpp @@ -0,0 +1,80 @@ +#include "Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.h" + +#include "Active/Serialise/Item/Wrapper/ValueWrap.h" + +#include + +using namespace active::serialise; +using namespace connector::interfac::browser::bridge; +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"}, + }; + +} + +/*-------------------------------------------------------------------- + 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 }, + { fieldID[defaultID], defaultID, element }, + }, + }.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>(name); + case summaryID: + return std::make_unique>(summary); + case defaultID: + return std::make_unique>(isDefault); + default: + return nullptr; //Requested an unknown index + } +} //SendFilter::getCargo + + +/*-------------------------------------------------------------------- + Set to the default package content + --------------------------------------------------------------------*/ +void SendFilter::setDefault() { + name.clear(); + summary.clear(); + isDefault = false; +} //SendFilter::setDefault diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.h b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.h new file mode 100644 index 0000000..d86abc6 --- /dev/null +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/Arg/SendFilter.h @@ -0,0 +1,67 @@ +#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_FILTER +#define CONNECTOR_INTERFACE_BRIDGE_SEND_FILTER + +#include "Active/Serialise/Package/Package.h" +#include "Active/Utility/Cloner.h" +#include "Speckle/Utility/String.h" + +namespace connector::interfac::browser::bridge { + + /*! + A connector send filter + */ + 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) : + name{nm}, summary{sum}, isDefault{isDef} {} + /*! + Record cloning + @return A clone of this record + */ + virtual SendFilter* clonePtr() const override { return new SendFilter(*this); }; + + // MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity) + + ///The filter name + speckle::utility::String name; + ///A summary + speckle::utility::String summary; + ///True if this is the default filter + bool isDefault = 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; + /*! + 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; + }; + +} + +#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_FILTER diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.cpp new file mode 100644 index 0000000..6897267 --- /dev/null +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.cpp @@ -0,0 +1,37 @@ +#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/Interface/Browser/Bridge/Send/Arg/SendFilter.h" + +using namespace active::container; +using namespace active::serialise; +using namespace connector::interfac::browser::bridge; +using namespace speckle::utility; + +namespace { + + using WrappedValue = active::serialise::CargoHold, Vector>; + +} + +/*-------------------------------------------------------------------- + Default constructor + --------------------------------------------------------------------*/ +GetSendFilters::GetSendFilters() : BridgeMethod{"GetSendFilters", [&]() { + return run(); +}} {} + + +/*-------------------------------------------------------------------- + Get the send filters + + return: The send filters + --------------------------------------------------------------------*/ +std::unique_ptr GetSendFilters::run() const { + Vector filters; + ///TODO: Get real filters + return std::make_unique(filters); +} //GetSendFilters::run diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.h b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.h new file mode 100644 index 0000000..9f52396 --- /dev/null +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/GetSendFilters.h @@ -0,0 +1,36 @@ +#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 { + 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 run() const; + }; + +} + +#endif //CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/SendBridge.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/SendBridge.cpp index 6484156..d4180e6 100644 --- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/SendBridge.cpp +++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Send/SendBridge.cpp @@ -1,5 +1,6 @@ #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; @@ -9,5 +10,6 @@ using namespace connector::interfac::browser::bridge; --------------------------------------------------------------------*/ SendBridge::SendBridge() : BrowserBridge{"sendBinding"} { //Add bridge methods + addMethod(); addMethod(); } //SendBridge::SendBridge diff --git a/SpeckleConnector/Connector/Interface/ConnectorPalette.cpp b/SpeckleConnector/Connector/Interface/ConnectorPalette.cpp index acc4979..53c0ab8 100644 --- a/SpeckleConnector/Connector/Interface/ConnectorPalette.cpp +++ b/SpeckleConnector/Connector/Interface/ConnectorPalette.cpp @@ -166,7 +166,7 @@ BrowserPalette::BrowserPalette() : install(); install(); install(); - //install(); + install(); install(); InitBrowserControl(); }