Start DialogView
This commit is contained in:
parent
91c512c4e9
commit
db06b454b1
|
@ -41,6 +41,18 @@ class TestCacaoScreen: CacaoScreen() {
|
||||||
).apply {
|
).apply {
|
||||||
handler = {
|
handler = {
|
||||||
println("dropdown value: ${it.value}")
|
println("dropdown value: ${it.value}")
|
||||||
|
val dialog = DialogView(
|
||||||
|
"New redstone mode",
|
||||||
|
it.value.name,
|
||||||
|
arrayOf(DialogView.DefaultButtonType.OK),
|
||||||
|
Texture(Identifier("textures/block/birch_log_top.png"), 0, 0, 16, 16),
|
||||||
|
buttonCallback = { _, window ->
|
||||||
|
window.removeFromScreen()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
val dialogWindow = Window()
|
||||||
|
dialogWindow.addView(dialog)
|
||||||
|
this@TestCacaoScreen.addWindow(dialogWindow)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ open class CacaoScreen: Screen(TextComponent("CacaoScreen")) {
|
||||||
fun <T: Window> addWindow(window: T, index: Int = _windows.size): T {
|
fun <T: Window> addWindow(window: T, index: Int = _windows.size): T {
|
||||||
_windows.add(index, window)
|
_windows.add(index, window)
|
||||||
window.screen = this
|
window.screen = this
|
||||||
|
window.resize(width, height)
|
||||||
return window
|
return window
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
package net.shadowfacts.cacao.view
|
||||||
|
|
||||||
|
import net.minecraft.ChatFormat
|
||||||
|
import net.shadowfacts.cacao.Window
|
||||||
|
import net.shadowfacts.cacao.geometry.Axis
|
||||||
|
import net.shadowfacts.cacao.util.Color
|
||||||
|
import net.shadowfacts.cacao.util.texture.NinePatchTexture
|
||||||
|
import net.shadowfacts.cacao.util.texture.Texture
|
||||||
|
import net.shadowfacts.cacao.view.button.Button
|
||||||
|
import net.shadowfacts.kiwidsl.dsl
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author shadowfacts
|
||||||
|
*/
|
||||||
|
class DialogView(
|
||||||
|
val title: String,
|
||||||
|
val message: String,
|
||||||
|
val buttonTypes: Array<ButtonType>,
|
||||||
|
val iconTexture: Texture?,
|
||||||
|
val buttonCallback: (ButtonType, Window) -> Unit
|
||||||
|
): View() {
|
||||||
|
|
||||||
|
interface ButtonType {
|
||||||
|
val localizedName: String
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class DefaultButtonType: ButtonType {
|
||||||
|
CANCEL, CONFIRM, OK, CLOSE;
|
||||||
|
|
||||||
|
override val localizedName: String
|
||||||
|
get() = name.toLowerCase().capitalize() // todo: actually localize me
|
||||||
|
}
|
||||||
|
|
||||||
|
private lateinit var background: NinePatchView
|
||||||
|
private lateinit var hStack: StackView
|
||||||
|
private var iconView: TextureView? = null
|
||||||
|
private lateinit var vStack: StackView
|
||||||
|
private lateinit var messageLabel: Label
|
||||||
|
private var buttonContainer: View? = null
|
||||||
|
private var buttonStack: StackView? = null
|
||||||
|
|
||||||
|
override fun wasAdded() {
|
||||||
|
background = addSubview(NinePatchView(NinePatchTexture.PANEL_BG).apply { zIndex = -1.0 })
|
||||||
|
|
||||||
|
hStack = addSubview(StackView(Axis.HORIZONTAL, StackView.Distribution.LEADING))
|
||||||
|
|
||||||
|
if (iconTexture != null) {
|
||||||
|
iconView = hStack.addArrangedSubview(TextureView(iconTexture))
|
||||||
|
}
|
||||||
|
|
||||||
|
vStack = hStack.addArrangedSubview(StackView(Axis.VERTICAL))
|
||||||
|
|
||||||
|
vStack.addArrangedSubview(Label(ChatFormat.BOLD.toString() + title, shadow = false).apply {
|
||||||
|
textColor = Color(0x404040)
|
||||||
|
})
|
||||||
|
messageLabel = vStack.addArrangedSubview(Label(message, shadow = false).apply {
|
||||||
|
textColor = Color(0x404040)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (buttonTypes.isNotEmpty()) {
|
||||||
|
buttonContainer = vStack.addArrangedSubview(View())
|
||||||
|
buttonStack = buttonContainer!!.addSubview(StackView(Axis.HORIZONTAL))
|
||||||
|
for (type in buttonTypes) {
|
||||||
|
buttonStack!!.addArrangedSubview(Button(Label(type.localizedName)).apply {
|
||||||
|
handler = {
|
||||||
|
this@DialogView.buttonCallback(type, this@DialogView.window)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.wasAdded()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createInternalConstraints() {
|
||||||
|
super.createInternalConstraints()
|
||||||
|
|
||||||
|
solver.dsl {
|
||||||
|
centerXAnchor equalTo window.centerXAnchor
|
||||||
|
centerYAnchor equalTo window.centerYAnchor
|
||||||
|
|
||||||
|
widthAnchor greaterThanOrEqualTo 150
|
||||||
|
|
||||||
|
background.leftAnchor equalTo leftAnchor - 8
|
||||||
|
background.rightAnchor equalTo rightAnchor + 8
|
||||||
|
background.topAnchor equalTo topAnchor - 8
|
||||||
|
background.bottomAnchor equalTo bottomAnchor + 8
|
||||||
|
|
||||||
|
hStack.leftAnchor equalTo leftAnchor
|
||||||
|
hStack.rightAnchor equalTo rightAnchor
|
||||||
|
hStack.topAnchor equalTo topAnchor
|
||||||
|
hStack.bottomAnchor equalTo bottomAnchor
|
||||||
|
|
||||||
|
if (iconView != null) {
|
||||||
|
hStack.bottomAnchor greaterThanOrEqualTo iconView!!.bottomAnchor
|
||||||
|
}
|
||||||
|
hStack.bottomAnchor greaterThanOrEqualTo vStack.bottomAnchor
|
||||||
|
|
||||||
|
if (iconView != null) {
|
||||||
|
iconView!!.widthAnchor equalTo 30
|
||||||
|
iconView!!.heightAnchor equalTo 30
|
||||||
|
}
|
||||||
|
|
||||||
|
messageLabel.heightAnchor greaterThanOrEqualTo 50
|
||||||
|
|
||||||
|
if (buttonContainer != null) {
|
||||||
|
buttonStack!!.heightAnchor equalTo buttonContainer!!.heightAnchor
|
||||||
|
buttonStack!!.centerYAnchor equalTo buttonContainer!!.centerYAnchor
|
||||||
|
|
||||||
|
buttonStack!!.rightAnchor equalTo buttonContainer!!.rightAnchor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue