@@ -9,6 +9,7 @@ local overlay = require 'plugins.overlay'
99local utils = require ' utils'
1010
1111local note_manager = reqscript (' internal/notes/note_manager' )
12+ local notes_textures = reqscript (' notes' ).textures
1213
1314local map_points = df .global .plotinfo .waypoints .points
1415
@@ -17,13 +18,6 @@ local RESIZE_MIN = {w=65, h=30}
1718local NOTE_SEARCH_BATCH_SIZE = 25
1819local 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-
2721NotesWindow = defclass (NotesWindow , widgets .Window )
2822NotesWindow .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)
248247NotesScreen .ATTRS {
249248 focus_path = ' gui/notes' ,
250249 pass_movement_keys = true ,
250+ enable_selector_blink = true ,
251251}
252252
253253function 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
304305function 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
349357end
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
0 commit comments