Reference pin style

This commit is contained in:
barsdeveloper
2022-09-20 17:37:01 +02:00
parent 4e715568fe
commit bf2c3ec939
7 changed files with 79 additions and 21 deletions

46
dist/ueblueprint.js vendored
View File

@@ -3210,9 +3210,7 @@ class PinTemplate extends ITemplate {
`
}
/**
* @param {PinElement} pin
*/
/** @param {PinElement} pin */
renderIcon(pin) {
return $`
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
@@ -3265,14 +3263,12 @@ class IInputPinTemplate extends PinTemplate {
}
static stringFromInputToUE(value) {
return value
.replace(/(?=\n\s*)\n$/, "") // Remove trailing double newline
.replaceAll("\n", "\\r\n") // Replace newline with \r\n (default newline in UE)
}
static stringFromUEToInput(value) {
return value
.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g, "") // Remove \r leftover from \r\n
.replace(/(?<=\n\s*)$/, "\n") // Put back trailing double newline
@@ -3583,6 +3579,21 @@ class StringPinTemplate extends IInputPinTemplate {
class VectorPinTemplate extends RealPinTemplate {
/**
* @param {PinElement} pin
* @param {String[]?} values
*/
setInputs(pin, values = [], updateDefaultValue = true) {
this.inputContentElements.forEach(
(element, i) => element.innerText = values[i]
);
if (updateDefaultValue) {
pin.setDefaultValue(values
.map(v => IInputPinTemplate.stringFromInputToUE(v)) // Double newline at the end of a contenteditable element
.reduce((acc, cur) => acc + cur, ""));
}
}
/** @param {PinElement} pin */
renderInput(pin) {
if (pin.isInput()) {
@@ -3590,17 +3601,17 @@ class VectorPinTemplate extends RealPinTemplate {
<span class="ueb-pin-input-label">X</span>
<div class="ueb-pin-input">
<span class="ueb-pin-input-content ueb-pin-input-x" role="textbox" contenteditable="true"
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.unreactiveDefaultValue.X.toString())}"></span>
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.entity.getDefaultValue().X.toString())}"></span>
</div>
<span class="ueb-pin-input-label">Y</span>
<div class="ueb-pin-input">
<span class="ueb-pin-input-content ueb-pin-input-y" role="textbox" contenteditable="true"
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.unreactiveDefaultValue.Y.toString())}"></span>
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.entity.getDefaultValue().Y.toString())}"></span>
</div>
<span class="ueb-pin-input-label">Z</span>
<div class="ueb-pin-input">
<span class="ueb-pin-input-content ueb-pin-input-z" role="textbox" contenteditable="true"
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.unreactiveDefaultValue.Z.toString())}"></span>
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.entity.getDefaultValue().Z.toString())}"></span>
</div>
`
}
@@ -3608,6 +3619,18 @@ class VectorPinTemplate extends RealPinTemplate {
}
}
class ReferencePinTemplate extends PinTemplate {
/** @param {PinElement} pin */
renderIcon(pin) {
return $`
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<polygon class="ueb-pin-tofill" points="4 16 16 4 28 16 16 28" stroke="currentColor" stroke-width="5" />
</svg>
`
}
}
/**
* @typedef {import("../entity/GuidEntity").default} GuidEntity
* @typedef {import("../entity/PinEntity").default} PinEntity
@@ -3626,6 +3649,7 @@ class PinElement extends IElement {
"name": NamePinTemplate,
"real": RealPinTemplate,
"string": StringPinTemplate,
"REFERENCE": ReferencePinTemplate,
}
static properties = {
@@ -3674,7 +3698,11 @@ class PinElement extends IElement {
* @return {PinTemplate}
*/
static getTypeTemplate(pinEntity) {
let result = PinElement.#typeTemplateMap[pinEntity.getType()];
let result = PinElement.#typeTemplateMap[
pinEntity.PinType.bIsReference
? "REFERENCE"
: pinEntity.getType()
];
return result ?? PinTemplate
}

File diff suppressed because one or more lines are too long

View File

@@ -12,6 +12,7 @@ import RealPinTemplate from "../template/RealPinTemplate"
import StringPinTemplate from "../template/StringPinTemplate"
import Utility from "../Utility"
import VectorPinTemplate from "../template/VectorPinTemplate"
import ReferencePinTemplate from "../template/ReferencePinTemplate"
/**
* @typedef {import("../entity/GuidEntity").default} GuidEntity
@@ -31,6 +32,7 @@ export default class PinElement extends IElement {
"name": NamePinTemplate,
"real": RealPinTemplate,
"string": StringPinTemplate,
"REFERENCE": ReferencePinTemplate,
}
static properties = {
@@ -79,7 +81,11 @@ export default class PinElement extends IElement {
* @return {PinTemplate}
*/
static getTypeTemplate(pinEntity) {
let result = PinElement.#typeTemplateMap[pinEntity.getType()]
let result = PinElement.#typeTemplateMap[
pinEntity.PinType.bIsReference
? "REFERENCE"
: pinEntity.getType()
]
return result ?? PinTemplate
}

View File

@@ -1,6 +1,5 @@
import { html } from "lit"
import MouseIgnore from "../input/mouse/MouseIgnore"
import Utility from "../Utility"
import PinTemplate from "./PinTemplate"
/**
@@ -16,14 +15,12 @@ export default class IInputPinTemplate extends PinTemplate {
}
static stringFromInputToUE(value) {
return value
.replace(/(?=\n\s*)\n$/, "") // Remove trailing double newline
.replaceAll("\n", "\\r\n") // Replace newline with \r\n (default newline in UE)
}
static stringFromUEToInput(value) {
return value
.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g, "") // Remove \r leftover from \r\n
.replace(/(?<=\n\s*)$/, "\n") // Put back trailing double newline

View File

@@ -56,9 +56,7 @@ export default class PinTemplate extends ITemplate {
`
}
/**
* @param {PinElement} pin
*/
/** @param {PinElement} pin */
renderIcon(pin) {
return html`
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">

View File

@@ -0,0 +1,14 @@
import { html } from "lit"
import PinTemplate from "./PinTemplate"
export default class ReferencePinTemplate extends PinTemplate {
/** @param {PinElement} pin */
renderIcon(pin) {
return html`
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<polygon class="ueb-pin-tofill" points="4 16 16 4 28 16 16 28" stroke="currentColor" stroke-width="5" />
</svg>
`
}
}

View File

@@ -9,6 +9,21 @@ import RealPinTemplate from "./RealPinTemplate"
export default class VectorPinTemplate extends RealPinTemplate {
/**
* @param {PinElement} pin
* @param {String[]?} values
*/
setInputs(pin, values = [], updateDefaultValue = true) {
this.inputContentElements.forEach(
(element, i) => element.innerText = values[i]
)
if (updateDefaultValue) {
pin.setDefaultValue(values
.map(v => IInputPinTemplate.stringFromInputToUE(v)) // Double newline at the end of a contenteditable element
.reduce((acc, cur) => acc + cur, ""))
}
}
/** @param {PinElement} pin */
renderInput(pin) {
if (pin.isInput()) {
@@ -16,17 +31,17 @@ export default class VectorPinTemplate extends RealPinTemplate {
<span class="ueb-pin-input-label">X</span>
<div class="ueb-pin-input">
<span class="ueb-pin-input-content ueb-pin-input-x" role="textbox" contenteditable="true"
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.unreactiveDefaultValue.X.toString())}"></span>
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.entity.getDefaultValue().X.toString())}"></span>
</div>
<span class="ueb-pin-input-label">Y</span>
<div class="ueb-pin-input">
<span class="ueb-pin-input-content ueb-pin-input-y" role="textbox" contenteditable="true"
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.unreactiveDefaultValue.Y.toString())}"></span>
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.entity.getDefaultValue().Y.toString())}"></span>
</div>
<span class="ueb-pin-input-label">Z</span>
<div class="ueb-pin-input">
<span class="ueb-pin-input-content ueb-pin-input-z" role="textbox" contenteditable="true"
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.unreactiveDefaultValue.Z.toString())}"></span>
.innerText="${IInputPinTemplate.stringFromUEToInput(pin.entity.getDefaultValue().Z.toString())}"></span>
</div>
`
}