From 570381f059dd4bb13e36b22e6bc60017b529b0a5 Mon Sep 17 00:00:00 2001 From: Warmist Date: Sun, 1 Feb 2015 19:58:49 +0200 Subject: [PATCH 1/3] Added search. Access with "s". --- scripts/gui/gm-editor.lua | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/scripts/gui/gm-editor.lua b/scripts/gui/gm-editor.lua index 4d0b09c6a..3d7131f38 100644 --- a/scripts/gui/gm-editor.lua +++ b/scripts/gui/gm-editor.lua @@ -12,6 +12,7 @@ local keybindings={ insert={key="CUSTOM_ALT_I",desc="Insert a new value to the vector"}, delete={key="CUSTOM_ALT_D",desc="Delete selected entry"}, reinterpret={key="CUSTOM_ALT_R",desc="Open selected entry as something else"}, + start_filter={key="CUSTOM_S",desc="Start typing filter, Enter to finish"}, help={key="HELP",desc="Show this help"}, NOT_USED={key="SEC_SELECT",desc="Choose an enum value from a list"}, --not a binding... } @@ -63,6 +64,7 @@ function Disclaimer(tlb) end return dsc end + function GmEditorUi:init(args) self.stack={} self.item_count=0 @@ -84,6 +86,7 @@ function GmEditorUi:init(args) subviews={ mainList, widgets.Label{text={{text="",id="name"},{gap=1,text="Help",key="HELP",key_sep = '()'}}, view_id = 'lbl_current_item',frame = {l=1,t=1,yalign=0}}, + widgets.EditField{frame={l=1,t=2},active=false,on_change=self:callback('text_input'),on_submit=self:callback("enable_input",false),view_id="filter_input"}, --widgets.Label{text="BLAH2"} } ,view_id='page_main'} @@ -94,6 +97,12 @@ function GmEditorUi:init(args) } self:pushTarget(args.target) end +function GmEditorUi:text_input(new_text) + self:updateTarget(true,true) +end +function GmEditorUi:enable_input(enable) + self.subviews.filter_input.active=enable +end function GmEditorUi:find(test) local trg=self:currentTarget() @@ -247,7 +256,14 @@ function GmEditorUi:onInput(keys) else self:popTarget() end - elseif keys[keybindings.offset.key] then + end + + if self.subviews.filter_input.active then + self.super.onInput(self,keys) + return + end + + if keys[keybindings.offset.key] then local trg=self:currentTarget() local _,stoff=df.sizeof(trg.target) local size,off=df.sizeof(trg.target:_field(self:getSelectedKey())) @@ -263,6 +279,9 @@ function GmEditorUi:onInput(keys) self:deleteSelected(self:getSelectedKey()) elseif keys[keybindings.reinterpret.key] then self:openReinterpret(self:getSelectedKey()) + elseif keys[keybindings.start_filter.key] then + self:enable_input(true) + return end self.super.onInput(self,keys) @@ -283,10 +302,21 @@ function getStringValue(trg,field) end function GmEditorUi:updateTarget(preserve_pos,reindex) local trg=self:currentTarget() + local filter=self.subviews.filter_input.text + if reindex then trg.keys={} for k,v in pairs(trg.target) do - table.insert(trg.keys,k) + if filter~= "" then + local ok,ret=dfhack.pcall(string.match,tostring(k),filter) + if not ok then + table.insert(trg.keys,k) + elseif ret then + table.insert(trg.keys,k) + end + else + table.insert(trg.keys,k) + end end end self.subviews.lbl_current_item:itemById('name').text=tostring(trg.target) From c56d928dae88b0fddfa0a6c0d2cbf7a79d3115e7 Mon Sep 17 00:00:00 2001 From: Warmist Date: Sun, 1 Feb 2015 20:07:28 +0200 Subject: [PATCH 2/3] Update search bar after browsing. --- scripts/gui/gm-editor.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/gui/gm-editor.lua b/scripts/gui/gm-editor.lua index 3d7131f38..dccd3423d 100644 --- a/scripts/gui/gm-editor.lua +++ b/scripts/gui/gm-editor.lua @@ -257,7 +257,7 @@ function GmEditorUi:onInput(keys) self:popTarget() end end - + if self.subviews.filter_input.active then self.super.onInput(self,keys) return @@ -340,15 +340,17 @@ function GmEditorUi:pushTarget(target_to_push) new_tbl.target=target_to_push new_tbl.keys={} new_tbl.selected=1 + new_tbl.filter="" if self:currentTarget()~=nil then self:currentTarget().selected=self.subviews.list_main:getSelected() + self.stack[#self.stack].filter=self.subviews.filter_input.text end for k,v in pairs(target_to_push) do table.insert(new_tbl.keys,k) end new_tbl.item_count=#new_tbl.keys table.insert(self.stack,new_tbl) - + self.subviews.filter_input.text="" self:updateTarget() end function GmEditorUi:popTarget() @@ -357,6 +359,7 @@ function GmEditorUi:popTarget() self:dismiss() return end + self.subviews.filter_input.text=self.stack[#self.stack].filter --restore filter self:updateTarget() end function show_editor(trg) From ab14eae76c4c6b1cb71c808fbdd185ff9ab07304 Mon Sep 17 00:00:00 2001 From: Warmist Date: Tue, 3 Feb 2015 19:17:33 +0200 Subject: [PATCH 3/3] LEAVESCREEN now exits out of search too. --- scripts/gui/gm-editor.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/gui/gm-editor.lua b/scripts/gui/gm-editor.lua index dccd3423d..11fbdca99 100644 --- a/scripts/gui/gm-editor.lua +++ b/scripts/gui/gm-editor.lua @@ -251,6 +251,10 @@ function GmEditorUi:set(key,input) end function GmEditorUi:onInput(keys) if keys.LEAVESCREEN then + if self.subviews.filter_input.active then + self:enable_input(false) + return + end if self.subviews.pages:getSelected()==2 then self.subviews.pages:setSelected(1) else