wNim
wNim copied to clipboard
cannot use layout dsl in wrapper object (Invalid node kind nnkDotExpr for macros.`$`)
import wnim
type
MainWin = object
app: wApp
frame: wFrame
but: wButton
proc newMain(): MainWin =
result = MainWin()
result.app = App()
result.frame = Frame(title="Hello World", size=(400, 300))
result.but = Button(result.frame, label = "foo")
result.frame.show()
result.frame.layout:
result.but:
height = 10
width = 20
var mm = newMain()
mm.app.mainLoop()
Error:
PS C:\Users\david> nim c -r "c:\Users\david\projects\nimPlayground\bugWnim.nim"
Hint: used config file 'C:\Users\david\.choosenim\toolchains\nim-1.4.8\config\nim.cfg' [Conf]
Hint: used config file 'C:\Users\david\.choosenim\toolchains\nim-1.4.8\config\config.nims' [Conf]
...........................................................................................................................................................
stack trace: (most recent call last)
C:\Users\david\.nimble\pkgs\wnim-#head\wNim\private\wResizable.nim(217, 25) layoutRealize
C:\Users\david\.nimble\pkgs\wnim-#head\wNim\private\wResizable.nim(213, 7) layoutParser
C:\Users\david\.nimble\pkgs\wnim-#head\wNim\private\wResizable.nim(210, 13) addConstraint
C:\Users\david\.nimble\pkgs\wnim-#head\wNim\private\wResizable.nim(198, 12) addConstraint
C:\Users\david\.choosenim\toolchains\nim-1.4.8\lib\core\macros.nim(1281, 5) $
c:\Users\david\projects\nimPlayground\bugWnim.nim(15, 15) template/generic instantiation of `layout` from here
C:\Users\david\.nimble\pkgs\wnim-#head\wNim\private\wResizable.nim(232, 20) template/generic instantiation of `layoutRealize` from here
c:\Users\david\projects\nimPlayground\bugWnim.nim(16, 11) Error: Invalid node kind nnkDotExpr for macros.`$`
PS C:\Users\david>
the workaround i found (which is tedious):
import wnim
type
MainWin = object
app: wApp
frame: wFrame
but: wButton
proc newMain(): MainWin =
result = MainWin()
result.app = App()
result.frame = Frame(title="Hello World", size=(400, 300))
result.but = Button(result.frame, label = "foo")
result.frame.show()
block:
var frame = result.frame
var but = result.but
frame.layout:
but:
height = 10
width = 20
var mm = newMain()
mm.app.mainLoop()
a little PS: wNim is awesome, well designed, well documented! Thank you for working on this!