Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create gui/tooltips.lua: show info (f.e. job name) at units and/or mouse cursor #1365

Open
wants to merge 13 commits into
base: master
Choose a base branch
from

Conversation

TymurGubayev
Copy link
Contributor

image

The script shows some info (currently: name of the job) in tooltips (sort of...) following units and or mouse (see screenshot).

@myk002
Copy link
Member

myk002 commented Jan 6, 2025

I am intrigued and delighted : )

@myk002
Copy link
Member

myk002 commented Jan 6, 2025

Let me finish reviewing DFHack/dfhack#4959 so getUnitsInBox no longer returns inactive units

image

@@ -0,0 +1,281 @@
-- Show tooltips on units and/or mouse

local RELOAD = false -- set to true when actively working on this script
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI, devel/clear-script-env has the same effect:

multicmd devel/clear-script-env gui/tooltips; gui/tooltips

gui/tooltips.lua Outdated Show resolved Hide resolved
:tags: fort inspection

This script shows "tooltips" following units and/or mouse with job names.

Copy link
Member

@myk002 myk002 Jan 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs disclaimer that tooltips will show over any vanilla UI elements:
image

The dig ascii overlays suffer from the same problem. I don't know of any good solution here. I'm not saying that any behavior needs to change -- just needs to be documented.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added an **IMPORTANT NOTE** at the beginning of the description text

docs/gui/tooltips.rst Outdated Show resolved Hide resolved
:summary: Show tooltips with useful info.
:tags: fort inspection

This script shows "tooltips" following units and/or mouse with job names.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs more description of the two options and their effects.

Copy link
Contributor Author

@TymurGubayev TymurGubayev Jan 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added a bit of clarification...
It's kind of hard to describe though

gui/tooltips.lua Outdated Show resolved Hide resolved
gui/tooltips.lua Outdated Show resolved Hide resolved
gui/tooltips.lua Outdated Show resolved Hide resolved
gui/tooltips.lua Outdated Show resolved Hide resolved
gui/tooltips.lua Show resolved Hide resolved
@myk002
Copy link
Member

myk002 commented Jan 6, 2025

Btw this PR has started some discussion on the Discord server where your input would be valuable: https://discord.com/channels/793331351645323264/807444515194798090/1325754489659195502

Copy link
Member

@myk002 myk002 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My feedback:

  • this would be better as a fullscreen overlay that could be toggled via a keybinding bound to dwarfmode/Default and dungeonmode/Default (file). It could also be toggleable from gui/tooltips (which becomes just the configuration interface instead of the rendering mechanism). I don't want to promote leaving a windowed DFHack tool on the screen indefinitely because of Prevent crash if DFHack GUI window is open when exiting fort dfhack#4183
  • the enabled state should be managed by the overlay framework. this means that whether the tooltips are displayed is a per-player global setting. The tooltip behavior/contents configuration would likewise be global, stored in dfhack-config/tooltips.json

There were some reservations about the name gui/tooltips -- I'll get more feedback from people about that on Discord.

not required for this PR but maybe consider as a future enhancement:

  • the configuration for which elements to display could be a matrix of checkboxes so players could choose any combination of information for the tooltip and the mouseover.

@TymurGubayev
Copy link
Contributor Author

  • the configuration for which elements to display could be a matrix of checkboxes so players could choose any combination of information for the tooltip and the mouseover.

is there a CheckBox control, or what should I use for this?

@myk002
Copy link
Member

myk002 commented Jan 15, 2025

There isn't a super convenient widget for that yet, largely because every place I've needed toggle checkboxes so far, they've been in a list (which doesn't take widgets). See gui/control-panel or maybe the prototype code in gui/manipulator for examples of the list-based approach. You could likely reuse the graphic assets and just slap them on a Label for a non-List option.

@TymurGubayev
Copy link
Contributor Author

Config UI with current defaults

image

image

@@ -267,7 +269,7 @@ function MouseTooltip:render(dc)

local pos = dfhack.gui.getMousePos()
local text = GetTooltipText(pos)
if #text == 0 then return end
if not text or #text == 0 then return end
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not just an ascii mode exception -- dfhack.gui.getMousePos() would return nil in graphics mode too if the mouse cursor is not over the DF window

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't reproduce it in graphics though, probably because of the check just above for the dfhack.screen.getMousePos() return value.

@myk002
Copy link
Member

myk002 commented Jan 20, 2025

should probably ensure the mouseover panel renders over the other floating text:
image

Copy link
Member

@myk002 myk002 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as discussed on Discord, could you rename gui/tooltips to gui/spectate and move the overlay code to plugins/lua/spectate.lua? spectate itself will need a bit of an overhaul. I can do that or you can if you'd like to.

local gui = require('gui')
local widgets = require('gui.widgets')
local overlay = require('plugins.overlay')
local ResizingPanel = require('gui.widgets.containers.resizing_panel')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this doesn't need to be individually imported -- it can already be addressed as widgets.ResizingPanel


-- pens are the same as gui/control-panel.lua
local textures = require('gui.textures')
local function get_icon_pens()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is ugly duplication, but we don't have a good widget API for it yet, so I don't think there's a better option. We can change this later once we have a better way to address this fairly common use case. I see orders.lua does some similar duplication for the workshop labor restrictions overlay.

@TymurGubayev
Copy link
Contributor Author

TymurGubayev commented Jan 20, 2025

should probably ensure the mouseover panel renders over the other floating text

yeah, that might be a good idea :) But how?

@myk002
Copy link
Member

myk002 commented Jan 20, 2025

order of rendering in render()

@TymurGubayev
Copy link
Contributor Author

as discussed on Discord, could you rename gui/tooltips to gui/spectate and move the overlay code to plugins/lua/spectate.lua? spectate itself will need a bit of an overhaul. I can do that or you can if you'd like to.

I'll try to do that, just can't promise when.

@myk002
Copy link
Member

myk002 commented Jan 20, 2025

I can overhaul spectate in the 51.01-r2 release timeframe. that would give us about a month to get this all finalized and merged

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Todo
Development

Successfully merging this pull request may close these issues.

2 participants