mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
2 Commits
v5.5.237
...
feature/hi
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e36d6018cb | ||
![]() |
c0665dbba0 |
@@ -839,6 +839,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
|||||||
"edges, but are not overlapping (default: no)"),
|
"edges, but are not overlapping (default: no)"),
|
||||||
"",
|
"",
|
||||||
true)
|
true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("no")
|
.SetDefaultValue("no")
|
||||||
.MarkAsSimple();
|
.MarkAsSimple();
|
||||||
|
|
||||||
|
@@ -40,6 +40,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0")
|
.SetDefaultValue("0")
|
||||||
.MarkAsAdvanced();
|
.MarkAsAdvanced();
|
||||||
|
|
||||||
@@ -62,6 +63,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0")
|
.SetDefaultValue("0")
|
||||||
.MarkAsAdvanced();
|
.MarkAsAdvanced();
|
||||||
|
|
||||||
@@ -116,6 +118,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0")
|
.SetDefaultValue("0")
|
||||||
.MarkAsAdvanced();
|
.MarkAsAdvanced();
|
||||||
|
|
||||||
@@ -234,6 +237,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0");
|
.SetDefaultValue("0");
|
||||||
|
|
||||||
// TODO Deprecated: hide this action in a future release.
|
// TODO Deprecated: hide this action in a future release.
|
||||||
@@ -262,10 +266,12 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
_("Anticipate the movement of the object (yes by default)"),
|
_("Anticipate the movement of the object (yes by default)"),
|
||||||
"",
|
"",
|
||||||
true)
|
true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("yes")
|
.SetDefaultValue("yes")
|
||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0")
|
.SetDefaultValue("0")
|
||||||
.MarkAsAdvanced();
|
.MarkAsAdvanced();
|
||||||
|
|
||||||
@@ -291,6 +297,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0")
|
.SetDefaultValue("0")
|
||||||
.MarkAsAdvanced();
|
.MarkAsAdvanced();
|
||||||
|
|
||||||
@@ -309,10 +316,12 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
|
|||||||
_("Anticipate the movement of the object (yes by default)"),
|
_("Anticipate the movement of the object (yes by default)"),
|
||||||
"",
|
"",
|
||||||
true)
|
true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("yes")
|
.SetDefaultValue("yes")
|
||||||
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
.AddParameter("layer", _("Layer (base layer if empty)"), "", true)
|
||||||
.SetDefaultValue("\"\"")
|
.SetDefaultValue("\"\"")
|
||||||
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
.AddParameter("expression", _("Camera number (default : 0)"), "", true)
|
||||||
|
.MarkParameterAsAdvanced()
|
||||||
.SetDefaultValue("0")
|
.SetDefaultValue("0")
|
||||||
.MarkAsSimple();
|
.MarkAsSimple();
|
||||||
|
|
||||||
|
@@ -202,6 +202,18 @@ class GD_CORE_API InstructionMetadata {
|
|||||||
return *this;
|
return *this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the parameter is harder for a user to understand
|
||||||
|
* and not necessary for common usages.
|
||||||
|
*
|
||||||
|
* \see AddParameter
|
||||||
|
*/
|
||||||
|
InstructionMetadata &MarkParameterAsAdvanced() {
|
||||||
|
if (!parameters.empty())
|
||||||
|
parameters.back().MarkAsAdvanced();
|
||||||
|
return *this;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Add the default parameters for an instruction manipulating the
|
* \brief Add the default parameters for an instruction manipulating the
|
||||||
* specified type ("string", "number") with the default operators.
|
* specified type ("string", "number") with the default operators.
|
||||||
|
@@ -91,6 +91,18 @@ class GD_CORE_API MultipleInstructionMetadata {
|
|||||||
return *this;
|
return *this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the parameter is harder for a user to understand
|
||||||
|
* and not necessary for common usages.
|
||||||
|
*
|
||||||
|
* \see AddParameter
|
||||||
|
*/
|
||||||
|
MultipleInstructionMetadata &MarkParameterAsAdvanced() {
|
||||||
|
if (condition) condition->MarkParameterAsAdvanced();
|
||||||
|
if (action) action->MarkParameterAsAdvanced();
|
||||||
|
return *this;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \see gd::InstructionMetadata::SetHidden
|
* \see gd::InstructionMetadata::SetHidden
|
||||||
*/
|
*/
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
namespace gd {
|
namespace gd {
|
||||||
|
|
||||||
ParameterMetadata::ParameterMetadata() : optional(false), codeOnly(false) {}
|
ParameterMetadata::ParameterMetadata() : optional(false), codeOnly(false), usageComplexity(5) {}
|
||||||
|
|
||||||
void ParameterMetadata::SerializeTo(SerializerElement& element) const {
|
void ParameterMetadata::SerializeTo(SerializerElement& element) const {
|
||||||
element.SetAttribute("type", type);
|
element.SetAttribute("type", type);
|
||||||
@@ -21,6 +21,7 @@ void ParameterMetadata::SerializeTo(SerializerElement& element) const {
|
|||||||
element.SetAttribute("codeOnly", codeOnly);
|
element.SetAttribute("codeOnly", codeOnly);
|
||||||
element.SetAttribute("defaultValue", defaultValue);
|
element.SetAttribute("defaultValue", defaultValue);
|
||||||
element.SetAttribute("name", name);
|
element.SetAttribute("name", name);
|
||||||
|
element.SetAttribute("usageComplexity", usageComplexity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParameterMetadata::UnserializeFrom(const SerializerElement& element) {
|
void ParameterMetadata::UnserializeFrom(const SerializerElement& element) {
|
||||||
@@ -33,6 +34,7 @@ void ParameterMetadata::UnserializeFrom(const SerializerElement& element) {
|
|||||||
codeOnly = element.GetBoolAttribute("codeOnly");
|
codeOnly = element.GetBoolAttribute("codeOnly");
|
||||||
defaultValue = element.GetStringAttribute("defaultValue");
|
defaultValue = element.GetStringAttribute("defaultValue");
|
||||||
name = element.GetStringAttribute("name");
|
name = element.GetStringAttribute("name");
|
||||||
|
usageComplexity = element.GetIntAttribute("usageComplexity");
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace gd
|
} // namespace gd
|
||||||
|
@@ -151,6 +151,37 @@ class GD_CORE_API ParameterMetadata {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the parameter is easy for a user to understand.
|
||||||
|
*/
|
||||||
|
ParameterMetadata &MarkAsSimple() {
|
||||||
|
usageComplexity = 2;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the parameter is harder for a user to understand
|
||||||
|
* than a normal parameter.
|
||||||
|
*/
|
||||||
|
ParameterMetadata &MarkAsAdvanced() {
|
||||||
|
usageComplexity = 7;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the parameter is complex for a user to understand.
|
||||||
|
*/
|
||||||
|
ParameterMetadata &MarkAsComplex() {
|
||||||
|
usageComplexity = 9;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Return the usage complexity of this parameter for the user,
|
||||||
|
* from 0 (simple&easy to use) to 10 (complex to understand).
|
||||||
|
*/
|
||||||
|
int GetUsageComplexity() const { return usageComplexity; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Return true if the type of the parameter is "object", "objectPtr" or
|
* \brief Return true if the type of the parameter is "object", "objectPtr" or
|
||||||
* "objectList".
|
* "objectList".
|
||||||
@@ -235,6 +266,8 @@ class GD_CORE_API ParameterMetadata {
|
|||||||
///< optional parameter is empty.
|
///< optional parameter is empty.
|
||||||
gd::String name; ///< The name of the parameter to be used in code
|
gd::String name; ///< The name of the parameter to be used in code
|
||||||
///< generation. Optional.
|
///< generation. Optional.
|
||||||
|
int usageComplexity; ///< Evaluate the parameter from 0 (simple&easy to
|
||||||
|
///< use) to 10 (complex to understand)
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace gd
|
} // namespace gd
|
||||||
|
@@ -27,6 +27,7 @@ void PropertyDescriptor::SerializeTo(SerializerElement& element) const {
|
|||||||
extraInformationElement.AddChild("").SetStringValue(information);
|
extraInformationElement.AddChild("").SetStringValue(information);
|
||||||
}
|
}
|
||||||
element.AddChild("hidden").SetBoolValue(hidden);
|
element.AddChild("hidden").SetBoolValue(hidden);
|
||||||
|
element.AddChild("usageComplexity").SetIntValue(usageComplexity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyDescriptor::UnserializeFrom(const SerializerElement& element) {
|
void PropertyDescriptor::UnserializeFrom(const SerializerElement& element) {
|
||||||
@@ -47,6 +48,7 @@ void PropertyDescriptor::UnserializeFrom(const SerializerElement& element) {
|
|||||||
hidden = element.HasChild("hidden")
|
hidden = element.HasChild("hidden")
|
||||||
? element.GetChild("hidden").GetBoolValue()
|
? element.GetChild("hidden").GetBoolValue()
|
||||||
: false;
|
: false;
|
||||||
|
usageComplexity = element.GetChild("usageComplexity").GetIntValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyDescriptor::SerializeValuesTo(SerializerElement& element) const {
|
void PropertyDescriptor::SerializeValuesTo(SerializerElement& element) const {
|
||||||
|
@@ -28,12 +28,12 @@ class GD_CORE_API PropertyDescriptor {
|
|||||||
* \param propertyValue The value of the property.
|
* \param propertyValue The value of the property.
|
||||||
*/
|
*/
|
||||||
PropertyDescriptor(gd::String propertyValue)
|
PropertyDescriptor(gd::String propertyValue)
|
||||||
: currentValue(propertyValue), type("string"), label(""), hidden(false) {}
|
: currentValue(propertyValue), type("string"), label(""), hidden(false), usageComplexity(5) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Empty constructor creating an empty property to be displayed.
|
* \brief Empty constructor creating an empty property to be displayed.
|
||||||
*/
|
*/
|
||||||
PropertyDescriptor() : hidden(false){};
|
PropertyDescriptor() : hidden(false), usageComplexity(5) {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Destructor
|
* \brief Destructor
|
||||||
@@ -104,6 +104,37 @@ class GD_CORE_API PropertyDescriptor {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the property is easy for a user to understand.
|
||||||
|
*/
|
||||||
|
PropertyDescriptor &MarkAsSimple() {
|
||||||
|
usageComplexity = 2;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the property is harder for a user to understand
|
||||||
|
* than a normal property.
|
||||||
|
*/
|
||||||
|
PropertyDescriptor &MarkAsAdvanced() {
|
||||||
|
usageComplexity = 7;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Consider that the property is complex for a user to understand.
|
||||||
|
*/
|
||||||
|
PropertyDescriptor &MarkAsComplex() {
|
||||||
|
usageComplexity = 9;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Return the usage complexity of this property for the user,
|
||||||
|
* from 0 (simple&easy to use) to 10 (complex to understand).
|
||||||
|
*/
|
||||||
|
int GetUsageComplexity() const { return usageComplexity; }
|
||||||
|
|
||||||
const gd::String& GetValue() const { return currentValue; }
|
const gd::String& GetValue() const { return currentValue; }
|
||||||
const gd::String& GetType() const { return type; }
|
const gd::String& GetType() const { return type; }
|
||||||
const gd::String& GetLabel() const { return label; }
|
const gd::String& GetLabel() const { return label; }
|
||||||
@@ -168,6 +199,8 @@ class GD_CORE_API PropertyDescriptor {
|
|||||||
///< choices, if a property is a displayed as a combo
|
///< choices, if a property is a displayed as a combo
|
||||||
///< box.
|
///< box.
|
||||||
bool hidden;
|
bool hidden;
|
||||||
|
int usageComplexity; ///< Evaluate the parameter from 0 (simple&easy to
|
||||||
|
///< use) to 10 (complex to understand)
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace gd
|
} // namespace gd
|
||||||
|
@@ -88,7 +88,8 @@ PlatformerObjectBehavior::GetProperties(
|
|||||||
.SetValue(behaviorContent.GetBoolAttribute("canGrabWithoutMoving", false)
|
.SetValue(behaviorContent.GetBoolAttribute("canGrabWithoutMoving", false)
|
||||||
? "true"
|
? "true"
|
||||||
: "false")
|
: "false")
|
||||||
.SetType("Boolean");
|
.SetType("Boolean")
|
||||||
|
.MarkAsAdvanced();
|
||||||
properties[_("Grab offset on Y axis")]
|
properties[_("Grab offset on Y axis")]
|
||||||
.SetGroup(_("Ledge"))
|
.SetGroup(_("Ledge"))
|
||||||
.SetValue(
|
.SetValue(
|
||||||
@@ -104,13 +105,15 @@ PlatformerObjectBehavior::GetProperties(
|
|||||||
.SetValue(behaviorContent.GetBoolAttribute("useLegacyTrajectory", true)
|
.SetValue(behaviorContent.GetBoolAttribute("useLegacyTrajectory", true)
|
||||||
? "true"
|
? "true"
|
||||||
: "false")
|
: "false")
|
||||||
.SetType("Boolean");
|
.SetType("Boolean")
|
||||||
|
.MarkAsComplex();
|
||||||
properties[_("Can go down from jumpthru platforms")]
|
properties[_("Can go down from jumpthru platforms")]
|
||||||
.SetGroup(_("Walk"))
|
.SetGroup(_("Walk"))
|
||||||
.SetValue(behaviorContent.GetBoolAttribute("canGoDownFromJumpthru", false)
|
.SetValue(behaviorContent.GetBoolAttribute("canGoDownFromJumpthru", false)
|
||||||
? "true"
|
? "true"
|
||||||
: "false")
|
: "false")
|
||||||
.SetType("Boolean");
|
.SetType("Boolean")
|
||||||
|
.MarkAsAdvanced();
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -87,20 +87,23 @@ TopDownMovementBehavior::GetProperties(
|
|||||||
.AddExtraInfo(_("Top-Down"))
|
.AddExtraInfo(_("Top-Down"))
|
||||||
.AddExtraInfo(_("Isometry 2:1 (26.565°)"))
|
.AddExtraInfo(_("Isometry 2:1 (26.565°)"))
|
||||||
.AddExtraInfo(_("True Isometry (30°)"))
|
.AddExtraInfo(_("True Isometry (30°)"))
|
||||||
.AddExtraInfo(_("Custom Isometry"));
|
.AddExtraInfo(_("Custom Isometry"))
|
||||||
|
.MarkAsAdvanced();
|
||||||
properties[_("Custom isometry angle")]
|
properties[_("Custom isometry angle")]
|
||||||
.SetGroup(_("Viewpoint"))
|
.SetGroup(_("Viewpoint"))
|
||||||
.SetValue(gd::String::From(
|
.SetValue(gd::String::From(
|
||||||
behaviorContent.GetDoubleAttribute("customIsometryAngle")))
|
behaviorContent.GetDoubleAttribute("customIsometryAngle")))
|
||||||
.SetDescription(_("If you choose \"Custom Isometry\", this allows to "
|
.SetDescription(_("If you choose \"Custom Isometry\", this allows to "
|
||||||
"specify the angle of your isometry projection."));
|
"specify the angle of your isometry projection."))
|
||||||
|
.MarkAsAdvanced();
|
||||||
properties[_("Movement angle offset")]
|
properties[_("Movement angle offset")]
|
||||||
.SetGroup(_("Viewpoint"))
|
.SetGroup(_("Viewpoint"))
|
||||||
.SetValue(gd::String::From(
|
.SetValue(gd::String::From(
|
||||||
behaviorContent.GetDoubleAttribute("movementAngleOffset")))
|
behaviorContent.GetDoubleAttribute("movementAngleOffset")))
|
||||||
.SetDescription(_(
|
.SetDescription(_(
|
||||||
"Usually 0, unless you choose an *Isometry* viewpoint in which case "
|
"Usually 0, unless you choose an *Isometry* viewpoint in which case "
|
||||||
"-45 is recommended."));
|
"-45 is recommended."))
|
||||||
|
.MarkAsAdvanced();
|
||||||
|
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
@@ -773,6 +773,11 @@ interface PropertyDescriptor {
|
|||||||
[Ref] VectorString GetExtraInfo();
|
[Ref] VectorString GetExtraInfo();
|
||||||
[Ref] PropertyDescriptor SetHidden(boolean enable);
|
[Ref] PropertyDescriptor SetHidden(boolean enable);
|
||||||
boolean IsHidden();
|
boolean IsHidden();
|
||||||
|
|
||||||
|
long GetUsageComplexity();
|
||||||
|
[Ref] PropertyDescriptor MarkAsSimple();
|
||||||
|
[Ref] PropertyDescriptor MarkAsAdvanced();
|
||||||
|
[Ref] PropertyDescriptor MarkAsComplex();
|
||||||
|
|
||||||
void SerializeTo([Ref] SerializerElement element);
|
void SerializeTo([Ref] SerializerElement element);
|
||||||
void UnserializeFrom([Const, Ref] SerializerElement element);
|
void UnserializeFrom([Const, Ref] SerializerElement element);
|
||||||
@@ -1138,6 +1143,7 @@ interface InstructionMetadata {
|
|||||||
[Ref] InstructionMetadata SetDefaultValue([Const] DOMString defaultValue);
|
[Ref] InstructionMetadata SetDefaultValue([Const] DOMString defaultValue);
|
||||||
[Ref] InstructionMetadata SetParameterLongDescription([Const] DOMString longDescription);
|
[Ref] InstructionMetadata SetParameterLongDescription([Const] DOMString longDescription);
|
||||||
[Ref] InstructionMetadata SetParameterExtraInfo([Const] DOMString extraInfo);
|
[Ref] InstructionMetadata SetParameterExtraInfo([Const] DOMString extraInfo);
|
||||||
|
[Ref] InstructionMetadata MarkParameterAsAdvanced();
|
||||||
|
|
||||||
[Ref] InstructionMetadata UseStandardOperatorParameters([Const] DOMString type);
|
[Ref] InstructionMetadata UseStandardOperatorParameters([Const] DOMString type);
|
||||||
[Ref] InstructionMetadata UseStandardRelationalOperatorParameters([Const] DOMString type);
|
[Ref] InstructionMetadata UseStandardRelationalOperatorParameters([Const] DOMString type);
|
||||||
@@ -1200,6 +1206,7 @@ interface MultipleInstructionMetadata {
|
|||||||
[Const] DOMString type, [Const] DOMString supplementaryInformation);
|
[Const] DOMString type, [Const] DOMString supplementaryInformation);
|
||||||
[Ref] MultipleInstructionMetadata SetDefaultValue([Const] DOMString defaultValue);
|
[Ref] MultipleInstructionMetadata SetDefaultValue([Const] DOMString defaultValue);
|
||||||
[Ref] MultipleInstructionMetadata SetParameterLongDescription([Const] DOMString longDescription);
|
[Ref] MultipleInstructionMetadata SetParameterLongDescription([Const] DOMString longDescription);
|
||||||
|
[Ref] MultipleInstructionMetadata MarkParameterAsAdvanced();
|
||||||
|
|
||||||
[Ref] MultipleInstructionMetadata UseStandardParameters([Const] DOMString type);
|
[Ref] MultipleInstructionMetadata UseStandardParameters([Const] DOMString type);
|
||||||
|
|
||||||
@@ -1255,6 +1262,10 @@ interface ParameterMetadata {
|
|||||||
[Ref] ParameterMetadata SetCodeOnly(boolean codeOnly_);
|
[Ref] ParameterMetadata SetCodeOnly(boolean codeOnly_);
|
||||||
[Const, Ref] DOMString GetDefaultValue();
|
[Const, Ref] DOMString GetDefaultValue();
|
||||||
[Ref] ParameterMetadata SetDefaultValue([Const] DOMString defaultValue_);
|
[Ref] ParameterMetadata SetDefaultValue([Const] DOMString defaultValue_);
|
||||||
|
[Ref] ParameterMetadata MarkAsSimple();
|
||||||
|
[Ref] ParameterMetadata MarkAsAdvanced();
|
||||||
|
[Ref] ParameterMetadata MarkAsComplex();
|
||||||
|
long GetUsageComplexity();
|
||||||
boolean STATIC_IsObject([Const] DOMString param);
|
boolean STATIC_IsObject([Const] DOMString param);
|
||||||
boolean STATIC_IsBehavior([Const] DOMString param);
|
boolean STATIC_IsBehavior([Const] DOMString param);
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ declare class gdInstructionMetadata {
|
|||||||
setDefaultValue(defaultValue: string): gdInstructionMetadata;
|
setDefaultValue(defaultValue: string): gdInstructionMetadata;
|
||||||
setParameterLongDescription(longDescription: string): gdInstructionMetadata;
|
setParameterLongDescription(longDescription: string): gdInstructionMetadata;
|
||||||
setParameterExtraInfo(extraInfo: string): gdInstructionMetadata;
|
setParameterExtraInfo(extraInfo: string): gdInstructionMetadata;
|
||||||
|
markParameterAsAdvanced(): gdInstructionMetadata;
|
||||||
useStandardOperatorParameters(type: string): gdInstructionMetadata;
|
useStandardOperatorParameters(type: string): gdInstructionMetadata;
|
||||||
useStandardRelationalOperatorParameters(type: string): gdInstructionMetadata;
|
useStandardRelationalOperatorParameters(type: string): gdInstructionMetadata;
|
||||||
setRequiresBaseObjectCapability(capability: string): gdInstructionMetadata;
|
setRequiresBaseObjectCapability(capability: string): gdInstructionMetadata;
|
||||||
|
@@ -4,6 +4,7 @@ declare class gdMultipleInstructionMetadata {
|
|||||||
addCodeOnlyParameter(type: string, supplementaryInformation: string): gdMultipleInstructionMetadata;
|
addCodeOnlyParameter(type: string, supplementaryInformation: string): gdMultipleInstructionMetadata;
|
||||||
setDefaultValue(defaultValue: string): gdMultipleInstructionMetadata;
|
setDefaultValue(defaultValue: string): gdMultipleInstructionMetadata;
|
||||||
setParameterLongDescription(longDescription: string): gdMultipleInstructionMetadata;
|
setParameterLongDescription(longDescription: string): gdMultipleInstructionMetadata;
|
||||||
|
markParameterAsAdvanced(): gdMultipleInstructionMetadata;
|
||||||
useStandardParameters(type: string): gdMultipleInstructionMetadata;
|
useStandardParameters(type: string): gdMultipleInstructionMetadata;
|
||||||
setHidden(): gdMultipleInstructionMetadata;
|
setHidden(): gdMultipleInstructionMetadata;
|
||||||
setFunctionName(functionName: string): gdMultipleInstructionMetadata;
|
setFunctionName(functionName: string): gdMultipleInstructionMetadata;
|
||||||
|
@@ -17,6 +17,10 @@ declare class gdParameterMetadata {
|
|||||||
setCodeOnly(codeOnly_: boolean): gdParameterMetadata;
|
setCodeOnly(codeOnly_: boolean): gdParameterMetadata;
|
||||||
getDefaultValue(): string;
|
getDefaultValue(): string;
|
||||||
setDefaultValue(defaultValue_: string): gdParameterMetadata;
|
setDefaultValue(defaultValue_: string): gdParameterMetadata;
|
||||||
|
markAsSimple(): gdParameterMetadata;
|
||||||
|
markAsAdvanced(): gdParameterMetadata;
|
||||||
|
markAsComplex(): gdParameterMetadata;
|
||||||
|
getUsageComplexity(): number;
|
||||||
static isObject(param: string): boolean;
|
static isObject(param: string): boolean;
|
||||||
static isBehavior(param: string): boolean;
|
static isBehavior(param: string): boolean;
|
||||||
serializeTo(element: gdSerializerElement): void;
|
serializeTo(element: gdSerializerElement): void;
|
||||||
|
@@ -16,6 +16,10 @@ declare class gdPropertyDescriptor {
|
|||||||
getExtraInfo(): gdVectorString;
|
getExtraInfo(): gdVectorString;
|
||||||
setHidden(enable: boolean): gdPropertyDescriptor;
|
setHidden(enable: boolean): gdPropertyDescriptor;
|
||||||
isHidden(): boolean;
|
isHidden(): boolean;
|
||||||
|
getUsageComplexity(): number;
|
||||||
|
markAsSimple(): gdPropertyDescriptor;
|
||||||
|
markAsAdvanced(): gdPropertyDescriptor;
|
||||||
|
markAsComplex(): gdPropertyDescriptor;
|
||||||
serializeTo(element: gdSerializerElement): void;
|
serializeTo(element: gdSerializerElement): void;
|
||||||
unserializeFrom(element: gdSerializerElement): void;
|
unserializeFrom(element: gdSerializerElement): void;
|
||||||
serializeValuesTo(element: gdSerializerElement): void;
|
serializeValuesTo(element: gdSerializerElement): void;
|
||||||
|
@@ -10,6 +10,7 @@ import { mapFor } from '../../Utils/MapFor';
|
|||||||
import EmptyMessage from '../../UI/EmptyMessage';
|
import EmptyMessage from '../../UI/EmptyMessage';
|
||||||
import ParameterRenderingService from '../ParameterRenderingService';
|
import ParameterRenderingService from '../ParameterRenderingService';
|
||||||
import HelpButton from '../../UI/HelpButton';
|
import HelpButton from '../../UI/HelpButton';
|
||||||
|
import FlatButton from '../../UI/FlatButton';
|
||||||
import {
|
import {
|
||||||
type ResourceSource,
|
type ResourceSource,
|
||||||
type ChooseResourceFunction,
|
type ChooseResourceFunction,
|
||||||
@@ -32,6 +33,7 @@ import { ColumnStackLayout } from '../../UI/Layout';
|
|||||||
import { setupInstructionParameters } from '../../InstructionOrExpression/SetupInstructionParameters';
|
import { setupInstructionParameters } from '../../InstructionOrExpression/SetupInstructionParameters';
|
||||||
import ScrollView from '../../UI/ScrollView';
|
import ScrollView from '../../UI/ScrollView';
|
||||||
import { getInstructionTutorialIds } from '../../Utils/GDevelopServices/Tutorial';
|
import { getInstructionTutorialIds } from '../../Utils/GDevelopServices/Tutorial';
|
||||||
|
import PreferencesContext from '../../MainFrame/Preferences/PreferencesContext';
|
||||||
const gd: libGDevelop = global.gd;
|
const gd: libGDevelop = global.gd;
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
@@ -80,6 +82,7 @@ type Props = {|
|
|||||||
|};
|
|};
|
||||||
type State = {|
|
type State = {|
|
||||||
isDirty: boolean,
|
isDirty: boolean,
|
||||||
|
showAdvancedParameter: boolean,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
const isParameterVisible = (
|
const isParameterVisible = (
|
||||||
@@ -100,9 +103,13 @@ export default class InstructionParametersEditor extends React.Component<
|
|||||||
Props,
|
Props,
|
||||||
State
|
State
|
||||||
> {
|
> {
|
||||||
|
static contextType = PreferencesContext;
|
||||||
|
|
||||||
_firstVisibleField: ?any = {};
|
_firstVisibleField: ?any = {};
|
||||||
state = {
|
state = {
|
||||||
isDirty: false,
|
isDirty: false,
|
||||||
|
showAdvancedParameter: this.context.values
|
||||||
|
.showAdvancedParametersAndProperties,
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@@ -233,6 +240,9 @@ export default class InstructionParametersEditor extends React.Component<
|
|||||||
objectName
|
objectName
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const preferences = this.context;
|
||||||
|
let anyAdvancedParameterIsHidden = false;
|
||||||
|
|
||||||
let parameterFieldIndex = 0;
|
let parameterFieldIndex = 0;
|
||||||
return (
|
return (
|
||||||
<I18n>
|
<I18n>
|
||||||
@@ -306,6 +316,15 @@ export default class InstructionParametersEditor extends React.Component<
|
|||||||
)
|
)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
if (
|
||||||
|
!this.state.showAdvancedParameter &&
|
||||||
|
parameterMetadata.isOptional() &&
|
||||||
|
parameterMetadata.getUsageComplexity() > 5
|
||||||
|
) {
|
||||||
|
anyAdvancedParameterIsHidden = true;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const parameterMetadataType = parameterMetadata.getType();
|
const parameterMetadataType = parameterMetadata.getType();
|
||||||
const ParameterComponent = ParameterRenderingService.getParameterComponent(
|
const ParameterComponent = ParameterRenderingService.getParameterComponent(
|
||||||
parameterMetadataType
|
parameterMetadataType
|
||||||
@@ -351,6 +370,28 @@ export default class InstructionParametersEditor extends React.Component<
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
{!this.state.showAdvancedParameter &&
|
||||||
|
anyAdvancedParameterIsHidden && (
|
||||||
|
<FlatButton
|
||||||
|
label={<Trans>Show advanced parameters</Trans>}
|
||||||
|
onClick={() =>
|
||||||
|
this.setState({
|
||||||
|
showAdvancedParameter: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{this.state.showAdvancedParameter &&
|
||||||
|
!preferences.values.showAdvancedParametersAndProperties && (
|
||||||
|
<FlatButton
|
||||||
|
label={<Trans>Always show advanced parameters</Trans>}
|
||||||
|
onClick={() =>
|
||||||
|
preferences.setShowAdvancedParametersAndProperties(
|
||||||
|
true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</ColumnStackLayout>
|
</ColumnStackLayout>
|
||||||
{this._getVisibleParametersCount(
|
{this._getVisibleParametersCount(
|
||||||
instructionMetadata,
|
instructionMetadata,
|
||||||
|
@@ -193,6 +193,7 @@ export type PreferencesValues = {|
|
|||||||
isAlwaysOnTopInPreview: boolean,
|
isAlwaysOnTopInPreview: boolean,
|
||||||
backdropClickBehavior: 'nothing' | 'apply' | 'cancel',
|
backdropClickBehavior: 'nothing' | 'apply' | 'cancel',
|
||||||
eventsSheetCancelInlineParameter: 'cancel' | 'apply',
|
eventsSheetCancelInlineParameter: 'cancel' | 'apply',
|
||||||
|
showAdvancedParametersAndProperties: boolean,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -251,6 +252,8 @@ export type Preferences = {|
|
|||||||
getIsAlwaysOnTopInPreview: () => boolean,
|
getIsAlwaysOnTopInPreview: () => boolean,
|
||||||
setIsAlwaysOnTopInPreview: (enabled: boolean) => void,
|
setIsAlwaysOnTopInPreview: (enabled: boolean) => void,
|
||||||
setEventsSheetCancelInlineParameter: (value: string) => void,
|
setEventsSheetCancelInlineParameter: (value: string) => void,
|
||||||
|
getShowAdvancedParametersAndProperties: () => boolean,
|
||||||
|
setShowAdvancedParametersAndProperties: (enabled: boolean) => void,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
export const initialPreferences = {
|
export const initialPreferences = {
|
||||||
@@ -286,6 +289,7 @@ export const initialPreferences = {
|
|||||||
isAlwaysOnTopInPreview: false,
|
isAlwaysOnTopInPreview: false,
|
||||||
backdropClickBehavior: 'nothing',
|
backdropClickBehavior: 'nothing',
|
||||||
eventsSheetCancelInlineParameter: 'apply',
|
eventsSheetCancelInlineParameter: 'apply',
|
||||||
|
showAdvancedParametersAndProperties: false,
|
||||||
},
|
},
|
||||||
setLanguage: () => {},
|
setLanguage: () => {},
|
||||||
setThemeName: () => {},
|
setThemeName: () => {},
|
||||||
@@ -334,6 +338,8 @@ export const initialPreferences = {
|
|||||||
getIsAlwaysOnTopInPreview: () => true,
|
getIsAlwaysOnTopInPreview: () => true,
|
||||||
setIsAlwaysOnTopInPreview: () => {},
|
setIsAlwaysOnTopInPreview: () => {},
|
||||||
setEventsSheetCancelInlineParameter: () => {},
|
setEventsSheetCancelInlineParameter: () => {},
|
||||||
|
getShowAdvancedParametersAndProperties: () => true,
|
||||||
|
setShowAdvancedParametersAndProperties: (enabled: boolean) => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
const PreferencesContext = React.createContext<Preferences>(initialPreferences);
|
const PreferencesContext = React.createContext<Preferences>(initialPreferences);
|
||||||
|
@@ -44,6 +44,7 @@ const PreferencesDialog = ({ i18n, onClose }: Props) => {
|
|||||||
setAutosaveOnPreview,
|
setAutosaveOnPreview,
|
||||||
setUseNewInstructionEditorDialog,
|
setUseNewInstructionEditorDialog,
|
||||||
setUseUndefinedVariablesInAutocompletion,
|
setUseUndefinedVariablesInAutocompletion,
|
||||||
|
setShowAdvancedParametersAndProperties,
|
||||||
setUseGDJSDevelopmentWatcher,
|
setUseGDJSDevelopmentWatcher,
|
||||||
setEventsSheetUseAssignmentOperators,
|
setEventsSheetUseAssignmentOperators,
|
||||||
getDefaultEditorMosaicNode,
|
getDefaultEditorMosaicNode,
|
||||||
@@ -274,6 +275,18 @@ const PreferencesDialog = ({ i18n, onClose }: Props) => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</Line>
|
</Line>
|
||||||
|
<Line>
|
||||||
|
<Toggle
|
||||||
|
onToggle={(e, check) =>
|
||||||
|
setShowAdvancedParametersAndProperties(check)
|
||||||
|
}
|
||||||
|
toggled={values.showAdvancedParametersAndProperties}
|
||||||
|
labelPosition="right"
|
||||||
|
label={
|
||||||
|
<Trans>Always show advanced parameters and properties</Trans>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Line>
|
||||||
<Line>
|
<Line>
|
||||||
<SelectField
|
<SelectField
|
||||||
floatingLabelText={
|
floatingLabelText={
|
||||||
|
@@ -103,6 +103,12 @@ export default class PreferencesProvider extends React.Component<Props, State> {
|
|||||||
setUseUndefinedVariablesInAutocompletion: this._setUseUndefinedVariablesInAutocompletion.bind(
|
setUseUndefinedVariablesInAutocompletion: this._setUseUndefinedVariablesInAutocompletion.bind(
|
||||||
this
|
this
|
||||||
),
|
),
|
||||||
|
getShowAdvancedParametersAndProperties: this._getShowAdvancedParametersAndProperties.bind(
|
||||||
|
this
|
||||||
|
),
|
||||||
|
setShowAdvancedParametersAndProperties: this._setShowAdvancedParametersAndProperties.bind(
|
||||||
|
this
|
||||||
|
),
|
||||||
setUseGDJSDevelopmentWatcher: this._setUseGDJSDevelopmentWatcher.bind(this),
|
setUseGDJSDevelopmentWatcher: this._setUseGDJSDevelopmentWatcher.bind(this),
|
||||||
setEventsSheetUseAssignmentOperators: this._setEventsSheetUseAssignmentOperators.bind(
|
setEventsSheetUseAssignmentOperators: this._setEventsSheetUseAssignmentOperators.bind(
|
||||||
this
|
this
|
||||||
@@ -205,6 +211,26 @@ export default class PreferencesProvider extends React.Component<Props, State> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getShowAdvancedParametersAndProperties(
|
||||||
|
showAdvancedParametersAndProperties: boolean
|
||||||
|
) {
|
||||||
|
return this.state.values.showAdvancedParametersAndProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
_setShowAdvancedParametersAndProperties(
|
||||||
|
showAdvancedParametersAndProperties: boolean
|
||||||
|
) {
|
||||||
|
this.setState(
|
||||||
|
state => ({
|
||||||
|
values: {
|
||||||
|
...state.values,
|
||||||
|
showAdvancedParametersAndProperties,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
() => this._persistValuesToLocalStorage(this.state)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
_setUseGDJSDevelopmentWatcher(useGDJSDevelopmentWatcher: boolean) {
|
_setUseGDJSDevelopmentWatcher(useGDJSDevelopmentWatcher: boolean) {
|
||||||
this.setState(
|
this.setState(
|
||||||
state => ({
|
state => ({
|
||||||
|
@@ -37,6 +37,7 @@ export default (
|
|||||||
|
|
||||||
const propertyDescription = property.getDescription();
|
const propertyDescription = property.getDescription();
|
||||||
const valueType = property.getType().toLowerCase();
|
const valueType = property.getType().toLowerCase();
|
||||||
|
const usageComplexity = property.getUsageComplexity();
|
||||||
const getLabel = (instance: Instance) => {
|
const getLabel = (instance: Instance) => {
|
||||||
const propertyName = getProperties(instance)
|
const propertyName = getProperties(instance)
|
||||||
.get(name)
|
.get(name)
|
||||||
@@ -72,6 +73,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'string' || valueType === '') {
|
} else if (valueType === 'string' || valueType === '') {
|
||||||
@@ -88,6 +90,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'boolean') {
|
} else if (valueType === 'boolean') {
|
||||||
@@ -106,6 +109,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'choice') {
|
} else if (valueType === 'choice') {
|
||||||
@@ -128,6 +132,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'behavior') {
|
} else if (valueType === 'behavior') {
|
||||||
@@ -160,6 +165,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'resource') {
|
} else if (valueType === 'resource') {
|
||||||
@@ -180,6 +186,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'color') {
|
} else if (valueType === 'color') {
|
||||||
@@ -196,6 +203,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (valueType === 'textarea') {
|
} else if (valueType === 'textarea') {
|
||||||
@@ -212,6 +220,7 @@ export default (
|
|||||||
},
|
},
|
||||||
getLabel,
|
getLabel,
|
||||||
getDescription,
|
getDescription,
|
||||||
|
usageComplexity,
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -26,12 +26,14 @@ import {
|
|||||||
ColumnStackLayout,
|
ColumnStackLayout,
|
||||||
} from '../UI/Layout';
|
} from '../UI/Layout';
|
||||||
import RaisedButton from '../UI/RaisedButton';
|
import RaisedButton from '../UI/RaisedButton';
|
||||||
|
import FlatButton from '../UI/FlatButton';
|
||||||
import UnsavedChangesContext, {
|
import UnsavedChangesContext, {
|
||||||
type UnsavedChanges,
|
type UnsavedChanges,
|
||||||
} from '../MainFrame/UnsavedChangesContext';
|
} from '../MainFrame/UnsavedChangesContext';
|
||||||
import { Line, Spacer } from '../UI/Grid';
|
import { Line, Spacer } from '../UI/Grid';
|
||||||
import Text from '../UI/Text';
|
import Text from '../UI/Text';
|
||||||
import useForceUpdate from '../Utils/UseForceUpdate';
|
import useForceUpdate from '../Utils/UseForceUpdate';
|
||||||
|
import PreferencesContext from '../MainFrame/Preferences/PreferencesContext';
|
||||||
|
|
||||||
// An "instance" here is the objects for which properties are shown
|
// An "instance" here is the objects for which properties are shown
|
||||||
export type Instance = Object; // This could be improved using generics.
|
export type Instance = Object; // This could be improved using generics.
|
||||||
@@ -45,6 +47,7 @@ export type ValueFieldCommonProperties = {|
|
|||||||
getExtraDescription?: Instance => string,
|
getExtraDescription?: Instance => string,
|
||||||
disabled?: boolean,
|
disabled?: boolean,
|
||||||
onEditButtonClick?: Instance => void,
|
onEditButtonClick?: Instance => void,
|
||||||
|
usageComplexity?: number,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
// "Primitive" value fields are "simple" fields.
|
// "Primitive" value fields are "simple" fields.
|
||||||
@@ -140,6 +143,7 @@ type Props = {|
|
|||||||
resourceSources?: ?Array<ResourceSource>,
|
resourceSources?: ?Array<ResourceSource>,
|
||||||
onChooseResource?: ?ChooseResourceFunction,
|
onChooseResource?: ?ChooseResourceFunction,
|
||||||
resourceExternalEditors?: ?Array<ResourceExternalEditor>,
|
resourceExternalEditors?: ?Array<ResourceExternalEditor>,
|
||||||
|
shouldShowAdvancedProperties?: boolean,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
@@ -210,6 +214,22 @@ const getFieldLabel = (instances: Instances, field: ValueField): any => {
|
|||||||
return field.name;
|
return field.name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const containsAdvancedFields = (schema: Schema): boolean => {
|
||||||
|
return schema.some(
|
||||||
|
field =>
|
||||||
|
(field.usageComplexity && field.usageComplexity > 5) ||
|
||||||
|
(field.children && containsAdvancedFields(field.children))
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const containsBasicFields = (schema: Schema): boolean => {
|
||||||
|
return schema.some(
|
||||||
|
field =>
|
||||||
|
!(field.usageComplexity && field.usageComplexity > 5) ||
|
||||||
|
(field.children && containsBasicFields(field.children))
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const PropertiesEditor = ({
|
const PropertiesEditor = ({
|
||||||
onInstancesModified,
|
onInstancesModified,
|
||||||
instances,
|
instances,
|
||||||
@@ -221,9 +241,23 @@ const PropertiesEditor = ({
|
|||||||
resourceSources,
|
resourceSources,
|
||||||
onChooseResource,
|
onChooseResource,
|
||||||
resourceExternalEditors,
|
resourceExternalEditors,
|
||||||
|
shouldShowAdvancedProperties,
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
const forceUpdate = useForceUpdate();
|
const forceUpdate = useForceUpdate();
|
||||||
|
|
||||||
|
const {
|
||||||
|
getShowAdvancedParametersAndProperties,
|
||||||
|
setShowAdvancedParametersAndProperties,
|
||||||
|
} = React.useContext(PreferencesContext);
|
||||||
|
|
||||||
|
let [
|
||||||
|
showAdvancedProperties,
|
||||||
|
setShowAdvancedProperties,
|
||||||
|
] = React.useState<boolean>(getShowAdvancedParametersAndProperties());
|
||||||
|
if (shouldShowAdvancedProperties !== undefined) {
|
||||||
|
showAdvancedProperties = shouldShowAdvancedProperties;
|
||||||
|
}
|
||||||
|
|
||||||
const _onInstancesModified = React.useCallback(
|
const _onInstancesModified = React.useCallback(
|
||||||
(instances: Instances) => {
|
(instances: Instances) => {
|
||||||
// This properties editor is dealing with fields that are
|
// This properties editor is dealing with fields that are
|
||||||
@@ -548,18 +582,58 @@ const PropertiesEditor = ({
|
|||||||
[instances]
|
[instances]
|
||||||
);
|
);
|
||||||
|
|
||||||
return renderContainer(
|
const fieldComponents = schema.map(field => {
|
||||||
schema.map(field => {
|
if (
|
||||||
if (!!field.nonFieldType) {
|
!showAdvancedProperties &&
|
||||||
if (field.nonFieldType === 'sectionTitle') {
|
field.usageComplexity &&
|
||||||
return renderSectionTitle(field);
|
field.usageComplexity > 5
|
||||||
} else if (field.nonFieldType === 'button') {
|
) {
|
||||||
return renderButton(field);
|
return null;
|
||||||
}
|
}
|
||||||
|
if (!!field.nonFieldType) {
|
||||||
|
if (field.nonFieldType === 'sectionTitle') {
|
||||||
|
return renderSectionTitle(field);
|
||||||
|
} else if (field.nonFieldType === 'button') {
|
||||||
|
return renderButton(field);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
} else if (field.children) {
|
||||||
|
if (!showAdvancedProperties && !containsBasicFields(field.children)) {
|
||||||
return null;
|
return null;
|
||||||
} else if (field.children) {
|
}
|
||||||
if (field.type === 'row') {
|
if (field.type === 'row') {
|
||||||
const contentView = (
|
const contentView = (
|
||||||
|
<UnsavedChangesContext.Consumer key={field.name}>
|
||||||
|
{unsavedChanges => (
|
||||||
|
<PropertiesEditor
|
||||||
|
project={project}
|
||||||
|
resourceSources={resourceSources}
|
||||||
|
onChooseResource={onChooseResource}
|
||||||
|
resourceExternalEditors={resourceExternalEditors}
|
||||||
|
schema={field.children}
|
||||||
|
instances={instances}
|
||||||
|
mode="row"
|
||||||
|
unsavedChanges={unsavedChanges}
|
||||||
|
onInstancesModified={onInstancesModified}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</UnsavedChangesContext.Consumer>
|
||||||
|
);
|
||||||
|
if (field.title) {
|
||||||
|
return [
|
||||||
|
<Text key={field.name + '-title'} size="title">
|
||||||
|
{field.title}
|
||||||
|
</Text>,
|
||||||
|
contentView,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return contentView;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div key={field.name}>
|
||||||
|
<Subheader>{field.name}</Subheader>
|
||||||
|
<div style={styles.subPropertiesEditorContainer}>
|
||||||
<UnsavedChangesContext.Consumer key={field.name}>
|
<UnsavedChangesContext.Consumer key={field.name}>
|
||||||
{unsavedChanges => (
|
{unsavedChanges => (
|
||||||
<PropertiesEditor
|
<PropertiesEditor
|
||||||
@@ -569,55 +643,45 @@ const PropertiesEditor = ({
|
|||||||
resourceExternalEditors={resourceExternalEditors}
|
resourceExternalEditors={resourceExternalEditors}
|
||||||
schema={field.children}
|
schema={field.children}
|
||||||
instances={instances}
|
instances={instances}
|
||||||
mode="row"
|
mode="column"
|
||||||
unsavedChanges={unsavedChanges}
|
unsavedChanges={unsavedChanges}
|
||||||
onInstancesModified={onInstancesModified}
|
onInstancesModified={onInstancesModified}
|
||||||
|
shouldShowAdvancedProperties={showAdvancedProperties}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</UnsavedChangesContext.Consumer>
|
</UnsavedChangesContext.Consumer>
|
||||||
);
|
|
||||||
if (field.title) {
|
|
||||||
return [
|
|
||||||
<Text key={field.name + '-title'} size="title">
|
|
||||||
{field.title}
|
|
||||||
</Text>,
|
|
||||||
contentView,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
return contentView;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div key={field.name}>
|
|
||||||
<Subheader>{field.name}</Subheader>
|
|
||||||
<div style={styles.subPropertiesEditorContainer}>
|
|
||||||
<UnsavedChangesContext.Consumer key={field.name}>
|
|
||||||
{unsavedChanges => (
|
|
||||||
<PropertiesEditor
|
|
||||||
project={project}
|
|
||||||
resourceSources={resourceSources}
|
|
||||||
onChooseResource={onChooseResource}
|
|
||||||
resourceExternalEditors={resourceExternalEditors}
|
|
||||||
schema={field.children}
|
|
||||||
instances={instances}
|
|
||||||
mode="column"
|
|
||||||
unsavedChanges={unsavedChanges}
|
|
||||||
onInstancesModified={onInstancesModified}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</UnsavedChangesContext.Consumer>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
</div>
|
||||||
} else if (field.valueType === 'resource') {
|
);
|
||||||
return renderResourceField(field);
|
} else if (field.valueType === 'resource') {
|
||||||
} else {
|
return renderResourceField(field);
|
||||||
if (field.getChoices && field.getValue) return renderSelectField(field);
|
} else {
|
||||||
if (field.getValue) return renderInputField(field);
|
if (field.getChoices && field.getValue) return renderSelectField(field);
|
||||||
}
|
if (field.getValue) return renderInputField(field);
|
||||||
return null;
|
}
|
||||||
})
|
return null;
|
||||||
);
|
});
|
||||||
|
if (shouldShowAdvancedProperties === undefined) {
|
||||||
|
if (!showAdvancedProperties && containsAdvancedFields(schema)) {
|
||||||
|
fieldComponents.push(
|
||||||
|
<FlatButton
|
||||||
|
key="show-advanced-properties"
|
||||||
|
label={<Trans>Show advanced properties</Trans>}
|
||||||
|
onClick={() => setShowAdvancedProperties(true)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (showAdvancedProperties && !getShowAdvancedParametersAndProperties()) {
|
||||||
|
fieldComponents.push(
|
||||||
|
<FlatButton
|
||||||
|
key="always-show-advanced-properties"
|
||||||
|
label={<Trans>Always show advanced properties</Trans>}
|
||||||
|
onClick={() => setShowAdvancedParametersAndProperties(true)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return renderContainer(fieldComponents);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default PropertiesEditor;
|
export default PropertiesEditor;
|
||||||
|
Reference in New Issue
Block a user