2025-01-30 20:29:55 +00:00

68 lines
2.0 KiB
Scala

package ocelot.desktop.node.nodes
import ocelot.desktop.geometry.Rect2D
import ocelot.desktop.graphics.{Graphics, IconSource}
import ocelot.desktop.inventory.SyncedInventory
import ocelot.desktop.node.Node.{HighlightThickness, NoHighlightSize}
import ocelot.desktop.node.{EntityNode, LabeledEntityNode, ShiftClickNode, WindowedNode}
import ocelot.desktop.ui.event.ClickEvent
import ocelot.desktop.ui.event.handlers.DiskActivityHandler
import ocelot.desktop.ui.widget.contextmenu.ContextMenu
import ocelot.desktop.util.DiskDriveAware
import ocelot.desktop.windows.DiskDriveWindow
import totoro.ocelot.brain.entity.FloppyDiskDrive
class DiskDriveNode(entity: FloppyDiskDrive)
extends EntityNode(entity)
with SyncedInventory
with LabeledEntityNode
with DiskDriveAware
with DiskActivityHandler
with ShiftClickNode
with WindowedNode[DiskDriveWindow] {
override def iconSource: IconSource = IconSource.Nodes.DiskDrive.Default
override def setupContextMenu(menu: ContextMenu, event: ClickEvent): Unit = {
if (isFloppyItemPresent) {
addEjectContextMenuEntry(menu)
menu.addSeparator()
}
super.setupContextMenu(menu, event)
}
override def draw(g: Graphics): Unit = {
super.draw(g)
drawActivityAndFloppy(
g,
Rect2D(
position.x + HighlightThickness,
position.y + HighlightThickness,
NoHighlightSize,
NoHighlightSize,
),
IconSource.Nodes.DiskDrive,
)
}
// -------------------------------- LabeledEntityNode --------------------------------
override def fallbackLabelAddress: Option[String] = entity.filesystemNode.map(_.address)
// ---------------------------- DiskDriveAware ----------------------------
override def floppyDiskDrive: FloppyDiskDrive = entity
// ---------------------------- ShiftClickNode ----------------------------
override protected def onShiftClick(event: ClickEvent): Unit = {
if (isFloppyItemPresent)
eject()
}
override protected def hoveredShiftStatusBarText: String = "Eject floppy"
}