diff options
| author | Alexander Gavrilov | 2012-08-21 11:35:39 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-08-21 11:35:39 +0400 |
| commit | 451e965936c8e3fb911366abe40f2753772acfc2 (patch) | |
| tree | 2a0330da7b43ae8d4e33a8cca109c2e677706f55 /scripts | |
| parent | be7bce1541665909283769d1847e6793c4715df3 (diff) | |
| download | dfhack-451e965936c8e3fb911366abe40f2753772acfc2.tar.gz dfhack-451e965936c8e3fb911366abe40f2753772acfc2.tar.bz2 dfhack-451e965936c8e3fb911366abe40f2753772acfc2.tar.xz | |
Add a Painter class for lua viewscreens, and extract other utilities.
Painter clips to an arbitrary rectangle window, and
tracks current cursor and color state.
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/devel/viewscreen.lua | 6 | ||||
| -rw-r--r-- | scripts/gui/mechanisms.lua | 62 |
2 files changed, 27 insertions, 41 deletions
diff --git a/scripts/devel/viewscreen.lua b/scripts/devel/viewscreen.lua index c516a731..a07ea6f3 100644 --- a/scripts/devel/viewscreen.lua +++ b/scripts/devel/viewscreen.lua @@ -2,11 +2,11 @@ local gui = require 'gui' -local screen = gui.Screen.new({ +local screen = mkinstance(gui.Screen, { onRender = function(self) local text = 'Woohoo, lua viewscreen :)' - local x,y,w,h = self:renderFrame(COLOR_GREY,'Hello World',#text+6,3) - self.paintString({fg=COLOR_LIGHTGREEN},x+3,y+1,text) + local dc = self:renderFrame(COLOR_GREY,'Hello World',#text+6,3) + dc:seek(3,1):string(text, {fg=COLOR_LIGHTGREEN}) end, onInput = function(self,keys) if keys and (keys.LEAVESCREEN or keys.SELECT) then diff --git a/scripts/gui/mechanisms.lua b/scripts/gui/mechanisms.lua index b333f427..f96d8d63 100644 --- a/scripts/gui/mechanisms.lua +++ b/scripts/gui/mechanisms.lua @@ -1,16 +1,11 @@ -- Shows mechanisms linked to the current building. +local utils = require 'utils' local gui = require 'gui' local guidm = require 'gui.dwarfmode' function getBuildingName(building) - return dfhack.with_temp_object( - df.new "string", - function(str) - building:getName(str) - return str.value - end - ) + return utils.call_with_string(building, 'getName') end function listMechanismLinks(building) @@ -45,53 +40,51 @@ function listMechanismLinks(building) return lst end -MechanismList = defclass(MechanismList, guidm.DwarfOverlay) +MechanismList = defclass(MechanismList, guidm.MenuOverlay) MechanismList.focus_path = 'mechanisms' function MechanismList.new(building) + local links = listMechanismLinks(building) local self = { - old_cursor = guidm.getCursorPos(), - links = listMechanismLinks(building), + links = links, selected = 1 } - self.links[1].viewport = guidm.getViewportPos() - self.links[1].cursor = guidm.getCursorPos() + links[1].viewport = guidm.getViewportPos() + links[1].cursor = guidm.getCursorPos() + if #links <= 1 then + links[1].mode = 'none' + end return mkinstance(MechanismList, self) end local colors = { - self = COLOR_CYAN, trigger = COLOR_MAGENTA, target = COLOR_GREEN + self = COLOR_CYAN, none = COLOR_CYAN, + trigger = COLOR_GREEN, target = COLOR_GREEN } local icons = { - self = 128, trigger = 17, target = 16 + self = 128, none = 63, trigger = 27, target = 26 } -function MechanismList:onRender() - self:renderParent() - self:updateLayout() - local x,y,w,h = self:clearMenu() - - self.paintString({fg=COLOR_WHITE},x+1,y+1,"Mechanism Links") +function MechanismList:onRenderBody(dc) + dc:clear() + dc:seek(1,1):string("Mechanism Links", COLOR_WHITE):newline() for i,v in ipairs(self.links) do local pen = { fg=colors[v.mode], bold = (i == self.selected) } - self.paintTile(pen, x+2, y+2+i, icons[v.mode]) - self.paintString(pen, x+4, y+2+i, v.name) + dc:newline(1):pen(pen):char(icons[v.mode]) + dc:advance(1):string(v.name) end local nlinks = #self.links - local line = y+4+nlinks if nlinks <= 1 then - self.paintString({fg=COLOR_LIGHTRED},x+1,line,"This building has no links") - line = line+2 + dc:newline():newline(1):string("This building has no links", COLOR_LIGHTRED) end - self.paintString({fg=COLOR_LIGHTGREEN},x+1,line,"Esc") - self.paintString({fg=COLOR_WHITE},x+4,line,": Back,") - self.paintString({fg=COLOR_LIGHTGREEN},x+12,line,"Enter") - self.paintString({fg=COLOR_WHITE},x+17,line,": Switch") + dc:newline():newline(1):pen(COLOR_WHITE) + dc:string("Esc", COLOR_LIGHTGREEN):string(": Back, ") + dc:string("Enter", COLOR_LIGHTGREEN):string(": Switch") end function MechanismList:zoomToLink(link) @@ -105,14 +98,7 @@ function MechanismList:zoomToLink(link) end guidm.setCursorPos(cursor) - if not guidm.isInViewport(self.df_layout, self.df_viewport, cursor, 5) then - local vp = link.viewport - if vp then - guidm.setViewportPos(self.df_layout,vp) - else - guidm.centerViewportOn(self.df_layout,cursor) - end - end + guidm.revealInViewport(cursor, 5, link.viewport, self.df_layout) end function MechanismList:changeSelected(delta) @@ -127,10 +113,10 @@ function MechanismList:onInput(keys) elseif keys.STANDARDSCROLL_DOWN or keys.SECONDSCROLL_DOWN then self:changeSelected(1) elseif keys.LEAVESCREEN then + self:dismiss() if self.selected ~= 1 then self:zoomToLink(self.links[1]) end - self:dismiss() elseif keys.SELECT then self:dismiss() end |
