2025-07-30 00:29:03 +02:00

92 lines
2.7 KiB
Scala

package ocelot.desktop.ui.widget
import ocelot.desktop.OcelotDesktop
import ocelot.desktop.color.RGBAColor
import ocelot.desktop.graphics.Graphics
import ocelot.desktop.ui.UiHandler
import ocelot.desktop.ui.layout.{CopyLayout, LinearLayout}
import ocelot.desktop.ui.widget.contextmenu.ContextMenus
import ocelot.desktop.ui.widget.itemdrag.DraggedItemPool
import ocelot.desktop.ui.widget.modal.ModalDialogPool
import ocelot.desktop.ui.widget.statusbar.StatusBar
import ocelot.desktop.ui.widget.tooltip.TooltipPool
import ocelot.desktop.util.Keybind.{Fullscreen, ReloadWorkspace, UIDebug}
import ocelot.desktop.util.Keymap.Release
import ocelot.desktop.util.{DrawUtils, Orientation}
import totoro.ocelot.brain.nbt.NBTTagCompound
class RootWidget(setupDefaultWorkspace: Boolean = true) extends Widget {
override protected val layout = new CopyLayout(this)
root = Some(this)
val workspaceView = new WorkspaceView
workspaceView.root = root
if (setupDefaultWorkspace)
workspaceView.createDefaultWorkspace()
val modalDialogPool = new ModalDialogPool
val draggedItemPool = new DraggedItemPool
val tooltipPool = new TooltipPool
val contextMenus = new ContextMenus
val menuBar = new MenuBar
val statusBar = new StatusBar
val flash = new Flash(this)
children :+= new Widget {
override protected val layout = new LinearLayout(this, orientation = Orientation.Vertical)
children :+= menuBar
children :+= workspaceView
children :+= statusBar
}
children :+= modalDialogPool
children :+= draggedItemPool
children :+= tooltipPool
children :+= contextMenus
private var isDebugViewVisible = false
eventHandlers += {
case Release(UIDebug) =>
isDebugViewVisible = !isDebugViewVisible
case Release(ReloadWorkspace) =>
OcelotDesktop.withTickLockAcquired {
val backendNBT = new NBTTagCompound
val frontendNBT = new NBTTagCompound
OcelotDesktop.workspace.save(backendNBT)
UiHandler.root.workspaceView.save(frontendNBT)
OcelotDesktop.workspace.load(backendNBT)
UiHandler.root.workspaceView.load(frontendNBT)
}
case Release(Fullscreen) =>
UiHandler.fullScreen = !UiHandler.fullScreen
}
override def draw(g: Graphics): Unit = {
super.draw(g)
flash.draw(g)
if (isDebugViewVisible) drawDebugView(g)
}
private def drawDebugView(g: Graphics): Unit = {
for (widget <- UiHandler.getHierarchy.reverseIterator) {
if (widget != null) {
val b = widget.clippedBounds
if (b.w > 1f && b.h > 1f) {
DrawUtils.ring(g, b.x, b.y, b.w, b.h, 1, RGBAColor(255, 0, 0, 50))
}
}
}
}
override def update(): Unit = {
super.update()
}
}