Browse Source

Allowing GUI images to be changed at runtime.

David Piuva 4 years ago
parent
commit
0f1a780b91
2 changed files with 48 additions and 1 deletions
  1. 43 0
      Source/DFPSR/api/guiAPI.cpp
  2. 5 1
      Source/DFPSR/api/guiAPI.h

+ 43 - 0
Source/DFPSR/api/guiAPI.cpp

@@ -322,6 +322,49 @@ int64_t dsr::component_getProperty_integer(const Component& component, const Rea
 	}
 }
 
+ReturnCode dsr::component_setProperty_image(const Component& component, const ReadableString& propertyName, const OrderedImageRgbaU8& value, bool mustAssign) {
+	MUST_EXIST(component, component_setProperty_image);
+	Persistent* target = component->findAttribute(propertyName);
+	if (target == nullptr) {
+		if (mustAssign) {
+			throwError("component_setProperty_image: ", propertyName, " in ", component->getClassName(), " could not be found.\n");
+		}
+		return ReturnCode::KeyNotFound;
+	} else {
+		PersistentImage* imageTarget = dynamic_cast<PersistentImage*>(target);
+		if (imageTarget != nullptr) {
+			imageTarget->value = value;
+			component->changedAttribute(propertyName);
+			return ReturnCode::Good;
+		} else {
+			if (mustAssign) {
+				throwError("component_setProperty_image: ", propertyName, " in ", component->getClassName(), " was a ", target->getClassName(), " instead of an image.\n");
+			}
+			return ReturnCode::KeyNotFound;
+		}
+	}
+}
+OrderedImageRgbaU8 dsr::component_getProperty_image(const Component& component, const ReadableString& propertyName, bool mustExist) {
+	MUST_EXIST(component, component_getProperty_image);
+	Persistent* target = component->findAttribute(propertyName);
+	if (target == nullptr) {
+		if (mustExist) {
+			throwError("component_getProperty_image: ", propertyName, " in ", component->getClassName(), " could not be found.\n");
+		}
+		return OrderedImageRgbaU8();
+	} else {
+		PersistentImage* imageTarget = dynamic_cast<PersistentImage*>(target);
+		if (imageTarget != nullptr) {
+			return imageTarget->value;
+		} else {
+			if (mustExist) {
+				throwError("component_getProperty_image: ", propertyName, " in ", component->getClassName(), " was a ", target->getClassName(), " instead of an image.\n");
+			}
+			return OrderedImageRgbaU8();
+		}
+	}
+}
+
 String dsr::component_call(const Component& component, const ReadableString& methodName, const ReadableString& arguments) {
 	MUST_EXIST(component, component_call);
 	return component->call(methodName, arguments);

+ 5 - 1
Source/DFPSR/api/guiAPI.h

@@ -191,6 +191,8 @@ namespace dsr {
 	//     Use 1 (or another non-zero value) for true and 0 for false.
 	//     Boolean properties will convery any non-zero values into ones.
 	ReturnCode component_setProperty_integer(const Component& component, const ReadableString& propertyName, int64_t value, bool mustAssign = true);
+	// A version for setting images.
+	ReturnCode component_setProperty_image(const Component& component, const ReadableString& propertyName, const OrderedImageRgbaU8& value, bool mustAssign = true);
 	// A version optimized for basic strings to bypass quote mangling
 	//   The new value is given as it is without unmangling.
 	ReturnCode component_setProperty_string(const Component& component, const ReadableString& propertyName, const ReadableString& value, bool mustAssign = true);
@@ -202,9 +204,11 @@ namespace dsr {
 	//   If mustExist is false
 	//     Returns an empty string when propertyName isn't found.
 	String component_getProperty(const Component& component, const ReadableString& propertyName, bool mustExist = true);
-	// A version for setting integers and booleans.
+	// A version for getting integers and booleans.
 	//   Returns defaultValue on failure, which should use a value that is never actually used.
 	int64_t component_getProperty_integer(const Component& component, const ReadableString& propertyName, bool mustExist = true, int64_t defaultValue = 0);
+	// A version for getting images
+	OrderedImageRgbaU8 component_getProperty_image(const Component& component, const ReadableString& propertyName, bool mustExist = true);
 	// A version optimized for basic strings to bypass quote mangling.
 	//   Returns the result without adding any quote signs or escape characters.
 	String component_getProperty_string(const Component& component, const ReadableString& propertyName, bool mustExist = true);