button element for html-defined menus
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
72673ba08c
commit
cbdfb63663
@ -5,3 +5,4 @@ testClass {
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<p class="testClass">Hello!</p>
|
<p class="testClass">Hello!</p>
|
||||||
|
<button onclick="testButton()">Test button!</button>
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { clientUIButtonHook } from "/Scripts/client/uihooks";
|
||||||
import { Engine } from "/Scripts/types/engine";
|
import { Engine } from "/Scripts/types/engine";
|
||||||
import { Hook } from "/Scripts/types/hook";
|
import { Hook } from "/Scripts/types/hook";
|
||||||
|
|
||||||
@ -64,5 +65,6 @@ export const clientHooks: Hook[] = [
|
|||||||
callback: (engine: Engine) => {
|
callback: (engine: Engine) => {
|
||||||
engine.classes.areaUtils.static.selectAreaRectangular()
|
engine.classes.areaUtils.static.selectAreaRectangular()
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
clientUIButtonHook,
|
||||||
]
|
]
|
||||||
13
assets/Scripts/client/uihooks.ts
Normal file
13
assets/Scripts/client/uihooks.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { Engine } from "/Scripts/types/engine";
|
||||||
|
import { Hook } from "/Scripts/types/hook";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The hook that fires every time a dynamic button in the ui is clicked
|
||||||
|
*/
|
||||||
|
export const clientUIButtonHook: Hook =
|
||||||
|
{
|
||||||
|
signal: "uiButton",
|
||||||
|
callback: (engine: Engine, data: string) => {
|
||||||
|
console.log("button clicked " + data)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1683,6 +1683,7 @@ Scaffolding for structure scanning service
|
|||||||
Add JSoup dependency
|
Add JSoup dependency
|
||||||
Proof of concept of loading html to define ui
|
Proof of concept of loading html to define ui
|
||||||
Styling support for html-defined menus
|
Styling support for html-defined menus
|
||||||
|
Dynamic html-defined menus support button elements that call a client hook when clicked
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,9 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import org.jsoup.nodes.Node;
|
import org.jsoup.nodes.Node;
|
||||||
|
|
||||||
|
import electrosphere.client.script.ClientScriptUtils;
|
||||||
|
import electrosphere.logger.LoggerInterface;
|
||||||
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
@ -69,6 +72,25 @@ public class HtmlParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case "button": {
|
||||||
|
String onClick = jsoupNode.attr("onclick");
|
||||||
|
Runnable callback = null;
|
||||||
|
if(onClick == null){
|
||||||
|
LoggerInterface.loggerUI.WARNING("Button with undefined onclick " + jsoupNode);
|
||||||
|
callback = () -> {};
|
||||||
|
} else {
|
||||||
|
callback = () -> {
|
||||||
|
ClientScriptUtils.fireSignal("uiButton", onClick);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
rVal = Button.createEmptyButton(callback);
|
||||||
|
for(Node child : jsoupNode.childNodes()){
|
||||||
|
Element childEl = HtmlParser.recursivelyParseChildren(child, styleAccumulator);
|
||||||
|
if(childEl != null){
|
||||||
|
((Button)rVal).addChild(childEl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case "style":
|
case "style":
|
||||||
//silently ignore
|
//silently ignore
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -200,6 +200,28 @@ public class Button extends StandardContainerElement implements DrawableElement,
|
|||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a button with no label inside
|
||||||
|
* @param callback The callback to fire when the button is clicked
|
||||||
|
* @return The button
|
||||||
|
*/
|
||||||
|
public static Button createEmptyButton(Runnable callback){
|
||||||
|
Button rVal = new Button();
|
||||||
|
rVal.setPaddingTop(DEFAULT_PADDING);
|
||||||
|
rVal.setPaddingRight(DEFAULT_PADDING);
|
||||||
|
rVal.setPaddingLeft(DEFAULT_PADDING);
|
||||||
|
rVal.setPaddingBottom(DEFAULT_PADDING);
|
||||||
|
rVal.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
|
callback.run();
|
||||||
|
if(Globals.virtualAudioSourceManager != null && rVal.audioPathOnClick != null){
|
||||||
|
Globals.virtualAudioSourceManager.createUI(rVal.audioPathOnClick);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
rVal.setAlignSelf(YogaAlignment.Start);
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user