Add DisplayView and ConsoleView components, integrate them into MTMCView, and update styles and main initialization logic

This commit is contained in:
2025-08-15 14:27:31 +02:00
parent d5314ce046
commit 4b17ce3cf5
5 changed files with 97 additions and 10 deletions

View File

@@ -17,13 +17,15 @@ class HelloKomponent : Komponent() {
}
}
val computer = MonTanaMiniComputer()
val mainView = MTMCView(computer)
fun main() {
val computer = MonTanaMiniComputer()
computer.speed = 1 // default to 1hz
val view = MTMCView(computer)
Komponent.create(document.body!!, view)
Komponent.create(document.body!!, mainView)
computer.start()
//computer.start()
}

View File

@@ -0,0 +1,63 @@
package mtmc.view
import kotlinx.html.div
import kotlinx.html.input
import kotlinx.html.js.onKeyUpFunction
import kotlinx.html.span
import mtmc.emulator.MonTanaMiniComputer
import mtmc.mainView
import mtmc.os.shell.Shell
import nl.astraeus.komp.HtmlBuilder
import nl.astraeus.komp.Komponent
import org.w3c.dom.HTMLInputElement
import org.w3c.dom.events.KeyboardEvent
class ConsoleView(
val computer: MonTanaMiniComputer
) : Komponent() {
val history: MutableList<String> = mutableListOf()
var input: String = ""
override fun HtmlBuilder.render() {
div("console") {
+"Console view"
div("console-history") {
for (line in history) {
div {
+line
}
}
}
div("console-input") {
span("console-prompt") {
+"mtmc$"
}
input {
value = input
onKeyUpFunction = { it ->
(it as? KeyboardEvent)?.let { ke ->
(ke.target as? HTMLInputElement)?.let { inp ->
if (ke.key == "Enter") {
handleCommand()
} else {
input = inp.value
}
}
}
}
}
}
}
}
private fun handleCommand() {
history.add(input)
input = ""
Shell.execCommand(input, computer)
mainView.requestUpdate()
}
}

View File

@@ -0,0 +1,18 @@
package mtmc.view
import kotlinx.html.div
import mtmc.emulator.MonTanaMiniComputer
import nl.astraeus.komp.HtmlBuilder
import nl.astraeus.komp.Komponent
class DisplayView(
val computer: MonTanaMiniComputer
) : Komponent() {
override fun HtmlBuilder.render() {
div("display") {
+"Display"
}
}
}

View File

@@ -11,6 +11,8 @@ class MTMCView(
val controlView = ControlView(computer)
val registerView = RegisterView(computer)
val memoryView = MemoryView(computer)
val displayView = DisplayView(computer)
val consoleView = ConsoleView(computer)
override fun HtmlBuilder.render() {
div("container") {
@@ -20,12 +22,8 @@ class MTMCView(
include(memoryView)
}
div("middle-column") {
div {
+"Console"
}
div {
+"Shell"
}
include(displayView)
include(consoleView)
}
div("right-column") {
+"Files"

View File

@@ -110,6 +110,12 @@ table.register-table tr td.register-lights {
overflow: auto;
}
/* display */
.display {
min-height: 480px;
}
/* console */
.small-button {