dwarfmonitor: Add mouse cursor widget

Suggested by @ragundo
develop
lethosor 2015-06-15 13:42:29 -04:00
parent 4e391603f5
commit 8145a04944
3 changed files with 52 additions and 11 deletions

@ -29,6 +29,7 @@ DFHack Future
Misc Improvements Misc Improvements
dwarfmonitor widgets' positions, formats, etc. are now customizable (see Readme) dwarfmonitor widgets' positions, formats, etc. are now customizable (see Readme)
dwarfmonitor weather display now separated from the date display dwarfmonitor weather display now separated from the date display
dwarfmonitor: New mouse cursor widget
gui/gm-editor: Pointers can now be displaced gui/gm-editor: Pointers can now be displaced
gui/hack-wish: renamed to gui/create-item gui/hack-wish: renamed to gui/create-item
"keybinding list" accepts a context "keybinding list" accepts a context

@ -1693,8 +1693,10 @@ Options:
``dwarfmonitor enable <mode>``: ``dwarfmonitor enable <mode>``:
Start monitoring ``mode``. ``mode`` can be "work", "misery", "weather", or "all". Start monitoring ``mode``. ``mode`` can be "work", "misery", "weather", or "all".
This will enable all corresponding widgets, if applicable.
``dwarfmonitor disable <mode>``: ``dwarfmonitor disable <mode>``:
Stop monitoring ``mode`` (see above) Stop monitoring ``mode`` (see above)
This will disable all corresponding widgets, if applicable.
``dwarfmonitor stats``: ``dwarfmonitor stats``:
Show statistics summary Show statistics summary
``dwarfmonitor prefs``: ``dwarfmonitor prefs``:
@ -1704,16 +1706,23 @@ Options:
Widget configuration: Widget configuration:
The following types of widgets (defined in ``hack/lua/plugins/dwarfmonitor.lua``)
can be displayed on the main fortress mode screen:
* ``date``: Shows the in-game date
* ``misery``: Shows overall happiness levels of all dwarves
* ``weather``: Shows current weather (rain/snow)
* ``cursor``: Shows the current mouse cursor position
The file ``dfhack-config/dwarfmonitor.json`` can be edited to control the The file ``dfhack-config/dwarfmonitor.json`` can be edited to control the
positions and settings of all widgets displayed on the main fortress mode screen positions and settings of all widgets displayed. This file should contain a
(currently weather, misery, and date indicators). This file should contain a
JSON object with the key ``widgets`` containing an array of objects - see the JSON object with the key ``widgets`` containing an array of objects - see the
included file in the ``dfhack-config`` folder for an example:: included file in the ``dfhack-config`` folder for an example::
{ {
"widgets": [ "widgets": [
{ {
"type": "widget type (weather, misery, or date)", "type": "widget type (weather, misery, etc.)",
"x": X coordinate, "x": X coordinate,
"y": Y coordinate "y": Y coordinate
<...additional options...> <...additional options...>
@ -1730,16 +1739,29 @@ By default, the x and y coordinates given correspond to the leftmost tile of
the widget. Including an ``anchor`` option set to ``right`` will cause the the widget. Including an ``anchor`` option set to ``right`` will cause the
rightmost tile of the widget to be located at this position instead. rightmost tile of the widget to be located at this position instead.
The date widget supports an additional option, ``format``, which replaces the Some widgets support additional options:
following characters (all others, such as punctuation, are not modified):
* ``date`` widget:
* ``format``: specifies the format of the date. The following characters
are replaced (all others, such as punctuation, are not modified)
* ``Y`` or ``y``: The current year
* ``M``: The current month, zero-padded if necessary
* ``m``: The current month, *not* zero-padded
* ``D``: The current day, zero-padded if necessary
* ``d``: The current day, *not* zero-padded
The default date format is ``Y-M-D``.
* ``Y`` or ``y``: The current year * ``cursor`` widget:
* ``M``: The current month, zero-padded if necessary
* ``m``: The current month, *not* zero-padded
* ``D``: The current day, zero-padded if necessary
* ``d``: The current day, *not* zero-padded
The default date format is ``Y-M-D``. * ``format``: Specifies the format. ``X``, ``x``, ``Y``, and ``y`` are
replaced with the corresponding cursor cordinates, while all other
characters are unmodified.
* ``show_invalid``: If set to ``true``, the mouse coordinates will both be
displayed as ``-1`` when the cursor is outside of the DF window; otherwise,
nothing will be displayed.
seedwatch seedwatch
--------- ---------

@ -128,6 +128,24 @@ function Widget_misery:render_body(p)
end end
end end
Widget_cursor = defclass(Widget_cursor, Widget)
function Widget_cursor:update()
if gps.mouse_x == -1 and not self.opts.show_invalid then
self.output = ''
return
end
self.output = (self.opts.format or '(x,y)'):gsub('[xX]', gps.mouse_x):gsub('[yY]', gps.mouse_y)
end
function Widget_cursor:get_width()
return #self.output
end
function Widget_cursor:render_body(p)
p:string(self.output)
end
function render_all() function render_all()
for _, w in pairs(widgets) do for _, w in pairs(widgets) do
w:render() w:render()