mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-20 11:09:20 +01:00
Extended item tooltips with additional info
This commit is contained in:
parent
6c1d41671a
commit
78c022dd14
@ -1 +1 @@
|
|||||||
Subproject commit d4d88f9680ce3b54aaf27acc50a91f1065187f16
|
Subproject commit f0352200bd0fc9b7d5e73af910a8f15bac1ae952
|
||||||
@ -1,14 +1,14 @@
|
|||||||
package ocelot.desktop.inventory.item
|
package ocelot.desktop.inventory.item
|
||||||
|
|
||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.{ComponentItem, CpuLikeItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{ComponentItem, CpuLikeItem, GpuLikeItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
import totoro.ocelot.brain.entity.APU
|
import totoro.ocelot.brain.entity.APU
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, GenericCPU}
|
import totoro.ocelot.brain.entity.traits.{Entity, GenericCPU, GenericGPU}
|
||||||
import totoro.ocelot.brain.util.Tier.Tier
|
import totoro.ocelot.brain.util.Tier.Tier
|
||||||
|
|
||||||
class ApuItem(val apu: APU) extends Item with ComponentItem with PersistableItem with CpuLikeItem {
|
class ApuItem(val apu: APU) extends Item with ComponentItem with PersistableItem with CpuLikeItem with GpuLikeItem {
|
||||||
override def component: Entity with GenericCPU = apu
|
override def component: Entity with GenericCPU with GenericGPU = apu
|
||||||
|
|
||||||
override def factory: ApuItem.Factory = new ApuItem.Factory(apu.tier)
|
override def factory: ApuItem.Factory = new ApuItem.Factory(apu.tier)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,12 +3,20 @@ package ocelot.desktop.inventory.item
|
|||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
|
import totoro.ocelot.brain.Settings
|
||||||
import totoro.ocelot.brain.entity.DataCard
|
import totoro.ocelot.brain.entity.DataCard
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
||||||
import totoro.ocelot.brain.util.Tier
|
import totoro.ocelot.brain.util.Tier
|
||||||
import totoro.ocelot.brain.util.Tier.Tier
|
import totoro.ocelot.brain.util.Tier.Tier
|
||||||
|
|
||||||
abstract class DataCardItem extends Item with ComponentItem with PersistableItem with CardItem
|
abstract class DataCardItem extends Item with ComponentItem with PersistableItem with CardItem {
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
tooltip.addLine(s"Soft limit (${Settings.get.dataCardTimeout} sec slowdown): ${Settings.get.dataCardSoftLimit} bytes")
|
||||||
|
tooltip.addLine(s"Hard limit (fail): ${Settings.get.dataCardHardLimit} bytes")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
object DataCardItem {
|
object DataCardItem {
|
||||||
abstract class Factory extends ItemFactory {
|
abstract class Factory extends ItemFactory {
|
||||||
|
|||||||
@ -3,7 +3,9 @@ package ocelot.desktop.inventory.item
|
|||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.RackMountableItem
|
import ocelot.desktop.inventory.traits.RackMountableItem
|
||||||
import ocelot.desktop.inventory.{ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{ItemFactory, ItemRecoverer}
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
import ocelot.desktop.util.DiskDriveAware
|
import ocelot.desktop.util.DiskDriveAware
|
||||||
|
import totoro.ocelot.brain.entity.traits.Floppy
|
||||||
import totoro.ocelot.brain.entity.{DiskDriveMountable, FloppyDiskDrive}
|
import totoro.ocelot.brain.entity.{DiskDriveMountable, FloppyDiskDrive}
|
||||||
import totoro.ocelot.brain.util.Tier.Tier
|
import totoro.ocelot.brain.util.Tier.Tier
|
||||||
|
|
||||||
@ -15,6 +17,17 @@ class DiskDriveMountableItem(val diskDriveMountable: DiskDriveMountable)
|
|||||||
|
|
||||||
override def component: DiskDriveMountable = diskDriveMountable
|
override def component: DiskDriveMountable = diskDriveMountable
|
||||||
override def factory: ItemFactory = DiskDriveMountableItem.Factory
|
override def factory: ItemFactory = DiskDriveMountableItem.Factory
|
||||||
|
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
if (diskDriveMountable != null) {
|
||||||
|
diskDriveMountable.inventory(0).get match {
|
||||||
|
case None => tooltip.addLine("Floppy: none")
|
||||||
|
case Some(floppy: Floppy) if floppy.name.isDefined => tooltip.addLine(s"Floppy: ${floppy.name.get}")
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object DiskDriveMountableItem {
|
object DiskDriveMountableItem {
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
|||||||
import ocelot.desktop.ui.widget.InputDialog
|
import ocelot.desktop.ui.widget.InputDialog
|
||||||
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuIcon, ContextMenuSubmenu}
|
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuIcon, ContextMenuSubmenu}
|
||||||
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
|
import totoro.ocelot.brain.Settings
|
||||||
import totoro.ocelot.brain.entity.EEPROM
|
import totoro.ocelot.brain.entity.EEPROM
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
||||||
import totoro.ocelot.brain.loot.Loot.{EEPROMFactory => LootEepromFactory}
|
import totoro.ocelot.brain.loot.Loot.{EEPROMFactory => LootEepromFactory}
|
||||||
@ -29,6 +30,15 @@ class EepromItem(val eeprom: EEPROM) extends Item with ComponentItem with Persis
|
|||||||
for (source <- source) {
|
for (source <- source) {
|
||||||
tooltip.addLine(source)
|
tooltip.addLine(source)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (source.isEmpty && eeprom != null) {
|
||||||
|
if (eeprom.codeBytes != null)
|
||||||
|
tooltip.addLine(s"Code: ${eeprom.codeBytes.map(_.length).getOrElse(0)} bytes / ${Settings.get.eepromSize} bytes")
|
||||||
|
if (eeprom.volatileData != null)
|
||||||
|
tooltip.addLine(s"Data: ${eeprom.volatileData.length} bytes / ${Settings.get.eepromDataSize} bytes")
|
||||||
|
if (eeprom.readonly)
|
||||||
|
tooltip.addLine("Readonly")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def fillRmbMenu(menu: ContextMenu): Unit = {
|
override def fillRmbMenu(menu: ContextMenu): Unit = {
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
package ocelot.desktop.inventory.item
|
package ocelot.desktop.inventory.item
|
||||||
|
|
||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, GpuLikeItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
import totoro.ocelot.brain.entity.GraphicsCard
|
import totoro.ocelot.brain.entity.GraphicsCard
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
import totoro.ocelot.brain.entity.traits.{Entity, GenericGPU}
|
||||||
import totoro.ocelot.brain.util.Tier.Tier
|
import totoro.ocelot.brain.util.Tier.Tier
|
||||||
|
|
||||||
class GraphicsCardItem(val gpu: GraphicsCard) extends Item with ComponentItem with PersistableItem with CardItem {
|
class GraphicsCardItem(val gpu: GraphicsCard) extends Item with ComponentItem with PersistableItem with CardItem with GpuLikeItem {
|
||||||
override def component: Entity with Environment = gpu
|
override def component: Entity with GenericGPU = gpu
|
||||||
|
|
||||||
override def factory: GraphicsCardItem.Factory = new GraphicsCardItem.Factory(gpu.tier)
|
override def factory: GraphicsCardItem.Factory = new GraphicsCardItem.Factory(gpu.tier)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package ocelot.desktop.inventory.item
|
|||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.{ComponentItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{ComponentItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
import totoro.ocelot.brain.entity.Memory
|
import totoro.ocelot.brain.entity.Memory
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
||||||
import totoro.ocelot.brain.util.ExtendedTier.ExtendedTier
|
import totoro.ocelot.brain.util.ExtendedTier.ExtendedTier
|
||||||
@ -12,6 +13,16 @@ class MemoryItem(val memory: Memory) extends Item with ComponentItem with Persis
|
|||||||
override def component: Entity with Environment = memory
|
override def component: Entity with Environment = memory
|
||||||
|
|
||||||
override def factory: ItemFactory = new MemoryItem.Factory(memory.memoryTier)
|
override def factory: ItemFactory = new MemoryItem.Factory(memory.memoryTier)
|
||||||
|
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
if (memory != null) {
|
||||||
|
tooltip.addLine(
|
||||||
|
if (memory.amount == Double.PositiveInfinity) "Capacity: infinite"
|
||||||
|
else s"Capacity: ${memory.amount.toInt} kB"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object MemoryItem {
|
object MemoryItem {
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package ocelot.desktop.inventory.item
|
|||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
import totoro.ocelot.brain.entity.NetworkCard
|
import totoro.ocelot.brain.entity.NetworkCard
|
||||||
import totoro.ocelot.brain.entity.traits.Entity
|
import totoro.ocelot.brain.entity.traits.Entity
|
||||||
import totoro.ocelot.brain.util.Tier
|
import totoro.ocelot.brain.util.Tier
|
||||||
@ -12,6 +13,17 @@ class NetworkCardItem(val card: NetworkCard) extends Item with ComponentItem wit
|
|||||||
override def component: Entity with NetworkCard = card
|
override def component: Entity with NetworkCard = card
|
||||||
|
|
||||||
override def factory: ItemFactory = NetworkCardItem.Factory
|
override def factory: ItemFactory = NetworkCardItem.Factory
|
||||||
|
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
if (card != null) {
|
||||||
|
tooltip.addLine(
|
||||||
|
if (card.openPorts.isEmpty) s"Open ports: none"
|
||||||
|
else s"Open ports: ${card.openPorts.mkString(", ")}"
|
||||||
|
)
|
||||||
|
tooltip.addLine(s"Max open ports: ${card.maxOpenPorts}")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object NetworkCardItem {
|
object NetworkCardItem {
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import ocelot.desktop.graphics.IconSource
|
|||||||
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry}
|
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry}
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
import ocelot.desktop.util.{Logging, OcelotInterfaceLogStorage}
|
import ocelot.desktop.util.{Logging, OcelotInterfaceLogStorage}
|
||||||
import totoro.ocelot.brain.util.Tier
|
import totoro.ocelot.brain.util.Tier
|
||||||
import totoro.ocelot.brain.util.Tier.Tier
|
import totoro.ocelot.brain.util.Tier.Tier
|
||||||
@ -37,6 +38,12 @@ class OcelotCardItem(val ocelotCard: OcelotCard)
|
|||||||
}
|
}
|
||||||
|
|
||||||
override def factory: ItemFactory = OcelotCardItem.Factory
|
override def factory: ItemFactory = OcelotCardItem.Factory
|
||||||
|
|
||||||
|
private val OcelotSays = Array("meow", ":3", "♥", "meooow", "~(=^–^)", "/ᐠ。ꞈ。ᐟ\\", "=^._.^=", "=’①。①’=")
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
tooltip.addLine(OcelotSays(((System.currentTimeMillis() / 5000) % OcelotSays.length).toInt))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object OcelotCardItem {
|
object OcelotCardItem {
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package ocelot.desktop.inventory.item
|
|||||||
import ocelot.desktop.graphics.IconSource
|
import ocelot.desktop.graphics.IconSource
|
||||||
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem}
|
||||||
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer}
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
import totoro.ocelot.brain.entity.SelfDestructingCard
|
import totoro.ocelot.brain.entity.SelfDestructingCard
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
import totoro.ocelot.brain.entity.traits.{Entity, Environment}
|
||||||
import totoro.ocelot.brain.util.Tier
|
import totoro.ocelot.brain.util.Tier
|
||||||
@ -17,6 +18,17 @@ class SelfDestructingCardItem(val card: SelfDestructingCard)
|
|||||||
override def component: Entity with Environment = card
|
override def component: Entity with Environment = card
|
||||||
|
|
||||||
override def factory: ItemFactory = SelfDestructingCardItem.Factory
|
override def factory: ItemFactory = SelfDestructingCardItem.Factory
|
||||||
|
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
if (card != null) {
|
||||||
|
tooltip.addLine(
|
||||||
|
if (card.remainingTime < 0) "Fuse has not been set"
|
||||||
|
else if (card.remainingTime == 0) "BOOM!"
|
||||||
|
else card.remainingTime.toString
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object SelfDestructingCardItem {
|
object SelfDestructingCardItem {
|
||||||
|
|||||||
@ -84,6 +84,13 @@ trait DiskItem extends ComponentItem with Windowed[DiskEditWindow] {
|
|||||||
case _: DiskUnmanaged => "Mode: unmanaged"
|
case _: DiskUnmanaged => "Mode: unmanaged"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
if (component != null) {
|
||||||
|
tooltip.addLine(s"Capacity: ${component.capacity / 1024} kB")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object DiskItem {
|
object DiskItem {
|
||||||
|
|||||||
@ -0,0 +1,25 @@
|
|||||||
|
package ocelot.desktop.inventory.traits
|
||||||
|
|
||||||
|
import ocelot.desktop.ui.widget.tooltip.ItemTooltip
|
||||||
|
import totoro.ocelot.brain.Settings
|
||||||
|
import totoro.ocelot.brain.entity.traits.{Entity, GenericGPU}
|
||||||
|
import totoro.ocelot.brain.util.ColorDepth
|
||||||
|
|
||||||
|
trait GpuLikeItem extends ComponentItem {
|
||||||
|
override def component: Entity with GenericGPU
|
||||||
|
|
||||||
|
override def fillTooltip(tooltip: ItemTooltip): Unit = {
|
||||||
|
super.fillTooltip(tooltip)
|
||||||
|
if (component != null) {
|
||||||
|
val resolution = Settings.screenResolutionsByTier(component.tier.id)
|
||||||
|
tooltip.addLine(s"Max resolution: ${resolution._1}x${resolution._2}")
|
||||||
|
val depth = Settings.screenDepthsByTier(component.tier.id) match {
|
||||||
|
case ColorDepth.OneBit => "1 bit"
|
||||||
|
case ColorDepth.FourBit => "4 bit"
|
||||||
|
case ColorDepth.EightBit => "8 bit"
|
||||||
|
}
|
||||||
|
tooltip.addLine(s"Max color depth: $depth")
|
||||||
|
tooltip.addLine(s"VRAM: ${component.totalVRAM.toInt}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -8,7 +8,7 @@ import ocelot.desktop.graphics.Graphics
|
|||||||
import ocelot.desktop.ui.layout.LinearLayout
|
import ocelot.desktop.ui.layout.LinearLayout
|
||||||
import ocelot.desktop.ui.widget.{Button, Filler, Label, PaddingBox, Widget}
|
import ocelot.desktop.ui.widget.{Button, Filler, Label, PaddingBox, Widget}
|
||||||
import ocelot.desktop.ui.widget.modal.ModalDialog
|
import ocelot.desktop.ui.widget.modal.ModalDialog
|
||||||
import ocelot.desktop.ui.widget.tooltip.{LabelTooltip, Tooltip}
|
import ocelot.desktop.ui.widget.tooltip.LabelTooltip
|
||||||
import ocelot.desktop.util.{DrawUtils, Orientation, Spritesheet}
|
import ocelot.desktop.util.{DrawUtils, Orientation, Spritesheet}
|
||||||
|
|
||||||
import java.awt.Desktop
|
import java.awt.Desktop
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user