summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-08-21 11:35:39 +0400
committerAlexander Gavrilov2012-08-21 11:35:39 +0400
commit451e965936c8e3fb911366abe40f2753772acfc2 (patch)
tree2a0330da7b43ae8d4e33a8cca109c2e677706f55 /scripts
parentbe7bce1541665909283769d1847e6793c4715df3 (diff)
downloaddfhack-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.lua6
-rw-r--r--scripts/gui/mechanisms.lua62
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