mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-20 02:59:19 +01:00
92 lines
2.7 KiB
Scala
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()
|
|
}
|
|
}
|