From 9733b30ed6260bb7c316fe8a6bd7c4948a9190b4 Mon Sep 17 00:00:00 2001 From: Warmist Date: Sat, 26 Apr 2014 21:50:52 +0300 Subject: [PATCH] gui/gm-editor: Fixed enum editing. And added free pointer/reinterpret options --- scripts/gui/gm-editor.lua | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/scripts/gui/gm-editor.lua b/scripts/gui/gm-editor.lua index d6d4c0e17..4d0b09c6a 100644 --- a/scripts/gui/gm-editor.lua +++ b/scripts/gui/gm-editor.lua @@ -2,6 +2,7 @@ local gui = require 'gui' local dialog = require 'gui.dialogs' local widgets =require 'gui.widgets' +local guiScript = require 'gui.script' local args={...} local keybindings={ @@ -10,6 +11,7 @@ local keybindings={ lua_set={key="CUSTOM_ALT_S",desc="Set by using a lua function"}, 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"}, help={key="HELP",desc="Show this help"}, NOT_USED={key="SEC_SELECT",desc="Choose an enum value from a list"}, --not a binding... } @@ -180,6 +182,14 @@ function GmEditorUi:editSelectedEnum(index,choice) qerror("not an enum") end end +function GmEditorUi:openReinterpret(key) + local trg=self:currentTarget() + dialog.showInputPrompt(tostring(trg_key),"Enter new type:",COLOR_WHITE, + "",function(choice) + local ntype=df[tp] + self:pushTarget(df.reinterpret_cast(ntype,trg.target[key])) + end) +end function GmEditorUi:editSelected(index,choice) local trg=self:currentTarget() local trg_key=trg.keys[index] @@ -242,17 +252,17 @@ function GmEditorUi:onInput(keys) local _,stoff=df.sizeof(trg.target) local size,off=df.sizeof(trg.target:_field(self:getSelectedKey())) dialog.showMessage("Offset",string.format("Size hex=%x,%x dec=%d,%d\nRelative hex=%x dec=%d",size,off,size,off,off-stoff,off-stoff),COLOR_WHITE) - --elseif keys.CUSTOM_ALT_F then --filter? + elseif keys[keybindings.find.key] then self:find() elseif keys[keybindings.lua_set.key] then self:set(self:getSelectedKey()) - --elseif keys.CUSTOM_I then - -- self:insertSimple() elseif keys[keybindings.insert.key] then --insert self:insertNew() elseif keys[keybindings.delete.key] then --delete self:deleteSelected(self:getSelectedKey()) + elseif keys[keybindings.reinterpret.key] then + self:openReinterpret(self:getSelectedKey()) end self.super.onInput(self,keys) @@ -270,13 +280,6 @@ function getStringValue(trg,field) end end) return text - - --[[local ok,ret=pcall(function() return trg.target[field]._enum end) - if ok then - print(trg.target[field]._kind,ok,ret) - text=text.."("..tostring(ret[field])..")" - end - return text]] end function GmEditorUi:updateTarget(preserve_pos,reindex) local trg=self:currentTarget() @@ -337,6 +340,8 @@ if #args~=0 then show_editor(t) end dialog.showInputPrompt("Gm Editor", "Object to edit:", COLOR_GRAY, "",thunk) + elseif args[1]=="free" then + show_editor(df.reinterpret_cast(df[args[2]],args[3])) else local t=load("return "..args[1])() show_editor(t)