Skip to content

Commit dcd3612

Browse files
authored
Merge pull request #1403 from wiktor-obrebski/tests/notes-overlay
Add tests for notes overlay script
2 parents 5310585 + ded651f commit dcd3612

File tree

6 files changed

+669
-52
lines changed

6 files changed

+669
-52
lines changed

gui/notes.lua

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ local overlay = require 'plugins.overlay'
99
local utils = require 'utils'
1010

1111
local note_manager = reqscript('internal/notes/note_manager')
12+
local notes_textures = reqscript('notes').textures
1213

1314
local map_points = df.global.plotinfo.waypoints.points
1415

@@ -17,13 +18,6 @@ local RESIZE_MIN = {w=65, h=30}
1718
local NOTE_SEARCH_BATCH_SIZE = 25
1819
local OVERLAY_NAME = 'notes.map_notes'
1920

20-
local green_pin = dfhack.textures.loadTileset(
21-
'hack/data/art/note_green_pin_map.png',
22-
32,
23-
32,
24-
true
25-
)
26-
2721
NotesWindow = defclass(NotesWindow, widgets.Window)
2822
NotesWindow.ATTRS {
2923
frame_title='DF Notes',
@@ -38,46 +32,51 @@ function NotesWindow:init()
3832
self.note_manager = nil
3933
self.curr_search_phrase = nil
4034

41-
self:addviews{
35+
local left_panel_content = {
4236
widgets.Panel{
43-
view_id='note_list_panel',
44-
frame={l=0, w=NOTE_LIST_RESIZE_MIN.w, t=0, b=1},
45-
visible=true,
46-
frame_inset={l=1,t=1,b=1,r=1},
47-
autoarrange_subviews=true,
37+
frame={l=0,h=3},
38+
frame_style=gui.FRAME_INTERIOR,
4839
subviews={
49-
widgets.TextArea{
40+
widgets.EditField{
5041
view_id='search',
51-
frame={l=0,h=3},
52-
frame_style=gui.FRAME_INTERIOR,
53-
one_line_mode=true,
54-
on_text_change=self:callback('loadFilteredNotes'),
42+
on_change=self:callback('loadFilteredNotes'),
5543
on_submit=function()
5644
self.subviews.note_list:submit()
5745
end
5846
},
59-
widgets.List{
60-
view_id='note_list',
61-
frame={l=0,b=2},
62-
frame_inset={t=1},
63-
row_height=1,
64-
on_select=function (ind, note)
65-
self:loadNote(note)
66-
end,
67-
on_submit=function (ind, note)
68-
self:loadNote(note)
69-
dfhack.gui.pauseRecenter(note.point.pos)
70-
end
71-
},
72-
},
47+
}
48+
},
49+
widgets.List{
50+
view_id='note_list',
51+
frame={l=0,b=2},
52+
frame_inset={t=1},
53+
row_height=1,
54+
on_select=function (ind, note)
55+
self:loadNote(note)
56+
end,
57+
on_submit=function (ind, note)
58+
self:loadNote(note)
59+
dfhack.gui.pauseRecenter(note.point.pos)
60+
end
61+
},
62+
}
63+
64+
self:addviews{
65+
widgets.Panel{
66+
view_id='note_list_panel',
67+
frame={l=0, w=NOTE_LIST_RESIZE_MIN.w, t=0, b=1},
68+
visible=true,
69+
frame_inset={l=1,t=1,b=1,r=1},
70+
autoarrange_subviews=true,
71+
subviews=left_panel_content,
7372
},
7473
widgets.HotkeyLabel{
7574
view_id='create',
7675
frame={l=1,b=1,h=1},
7776
auto_width=true,
7877
label='New note',
7978
key='CUSTOM_CTRL_N',
80-
visible=edit_mode,
79+
visible=true,
8180
on_activate=function()
8281
if self.on_note_add then
8382
self:on_note_add()
@@ -248,6 +247,7 @@ NotesScreen = defclass(NotesScreen, gui.ZScreen)
248247
NotesScreen.ATTRS {
249248
focus_path='gui/notes',
250249
pass_movement_keys=true,
250+
enable_selector_blink = true,
251251
}
252252

253253
function NotesScreen:init()
@@ -278,7 +278,7 @@ function NotesScreen:onInput(keys)
278278
if (keys.SELECT or keys._MOUSE_L) then
279279
self.adding_note_pos = dfhack.gui.getMousePos()
280280

281-
local manager = note_manager.NoteManager{
281+
local note_manager = note_manager.NoteManager{
282282
note=nil,
283283
on_update=function()
284284
dfhack.run_command_silent('overlay trigger notes.map_notes')
@@ -289,7 +289,8 @@ function NotesScreen:onInput(keys)
289289
self:stopNoteAdd()
290290
end
291291
}:show()
292-
manager:setNotePos(self.adding_note_pos)
292+
note_manager:setNotePos(self.adding_note_pos)
293+
self.subviews.notes_window.note_manager = note_manager
293294

294295
return true
295296
elseif (keys.LEAVESCREEN or keys._MOUSE_R)then
@@ -304,7 +305,7 @@ end
304305
function NotesScreen:onRenderFrame(dc, rect)
305306
NotesScreen.super.onRenderFrame(self, dc, rect)
306307

307-
if not dfhack.screen.inGraphicsMode() and not gui.blink_visible(500) then
308+
if self.enable_selector_blink and not gui.blink_visible(500) then
308309
return
309310
end
310311

@@ -316,7 +317,9 @@ function NotesScreen:onRenderFrame(dc, rect)
316317

317318
local function get_overlay_pen(pos)
318319
if same_xy(curr_pos, pos) then
319-
local texpos = dfhack.textures.getTexposByHandle(green_pin[1])
320+
local texpos = dfhack.textures.getTexposByHandle(
321+
notes_textures.green_pin[1]
322+
)
320323
return dfhack.pen.parse{
321324
ch='X',
322325
fg=COLOR_BLUE,
@@ -345,10 +348,15 @@ function NotesScreen:onDismiss()
345348
if self.should_disable_overlay then
346349
overlay.overlay_command({'disable', 'notes.map_notes'})
347350
end
351+
352+
if self.subviews.notes_window.note_manager then
353+
self.subviews.notes_window.note_manager:dismiss()
354+
end
355+
348356
view = nil
349357
end
350358

351-
function main(options)
359+
function main()
352360
if not dfhack.isMapLoaded() or not dfhack.world.isFortressMode() then
353361
qerror('notes requires a fortress map to be loaded')
354362
end

internal/notes/note_manager.lua

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ function NoteManager:init()
3939
frame={t=1,h=3},
4040
frame_style=gui.FRAME_INTERIOR,
4141
init_text=self.note and self.note.point.name or '',
42-
-- init_cursor=self.note and #self.note.point.name + 1 or 1,
4342
one_line_mode=true
4443
},
4544
widgets.HotkeyLabel {
@@ -97,11 +96,11 @@ function NoteManager:init()
9796
end
9897

9998
function NoteManager:setNotePos(note_pos)
100-
self.notes_pos = note_pos
99+
self.note_pos = note_pos
101100
end
102101

103102
function NoteManager:createNote()
104-
local cursor_pos = self.notes_pos or guidm.getCursorPos()
103+
local cursor_pos = self.note_pos or guidm.getCursorPos()
105104
if cursor_pos == nil then
106105
dfhack.printerr('Enable keyboard cursor to add a note.')
107106
return
@@ -150,8 +149,8 @@ function NoteManager:saveNote()
150149

151150
self.note.point.name = name
152151
self.note.point.comment = comment
153-
if self.notes_pos then
154-
self.note.pos=self.notes_pos
152+
if self.note_pos then
153+
self.note.pos=self.note_pos
155154
end
156155

157156
if self.on_update then

notes.lua

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ local overlay = require('plugins.overlay')
44
local guidm = require('gui.dwarfmode')
55
local note_manager = reqscript('internal/notes/note_manager')
66

7-
local green_pin = dfhack.textures.loadTileset(
8-
'hack/data/art/note_green_pin_map.png',
9-
32,
10-
32,
11-
true
12-
)
7+
textures = {
8+
green_pin = dfhack.textures.loadTileset(
9+
'hack/data/art/note_green_pin_map.png',
10+
32,
11+
32,
12+
true
13+
)
14+
}
1315

1416
NotesOverlay = defclass(NotesOverlay, overlay.OverlayWidget)
1517
NotesOverlay.ATTRS{
@@ -113,7 +115,7 @@ function NotesOverlay:onRenderFrame(dc)
113115

114116
dc:map(true)
115117

116-
local texpos = dfhack.textures.getTexposByHandle(green_pin[1])
118+
local texpos = dfhack.textures.getTexposByHandle(textures.green_pin[1])
117119
dc:pen({fg=COLOR_BLACK, bg=COLOR_LIGHTCYAN, tile=texpos})
118120

119121
for _, note in pairs(self.visible_notes) do

test/gui/journal.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ config = {
66
mode = 'fortress'
77
}
88

9-
local df_major_version = tonumber(dfhack.getCompiledDFVersion():match('%d+'))
10-
119
local function simulate_input_keys(...)
1210
local keys = {...}
1311
for _,key in ipairs(keys) do

0 commit comments

Comments
 (0)