wNim is Nim's Windows GUI Framework, based on winim. Layout DSL is powered by Yuriy Glukhov's Kiwi constraint solving library.
Basic code structure:
import wNim
let app = App()
let frame = Frame(title="Hello World", size=(400, 300))
frame.center()
frame.show()
app.mainLoop()
button.wEvent_Button do ():
frame.delete()
frame.wIdExit do ():
frame.delete()
frame.wEvent_Size do ():
layout()
panel.layout:
staticText:
top = panel.top + 10
left = panel.left + 10
button:
right + 10 = panel.right
bottom + 10 = panel.bottom
panel.autolayout """
V:|-[col1:[child1(child2)]-[child2]]-|
V:|-[col2:[child3(child4,child5)]-[child4]-[child5]]-|
H:|-[col1(col2)]-[col2]-|
"""
Getter and Setter:
let frame = Frame()
# wxWidgets/wxPython style
frame.setLabel("Hello World")
echo frame.getLabel()
# nim style
frame.label = "Hello World"
echo frame.label
With git on windows:
nimble install wNim
Without git:
1. Download and unzip this moudle (by click "Code" button).
2. Start a console, change current dir to the folder which include "wNim.nimble" file.
(for example: C:\wNim-master\wNim-master>)
3. Run "nimble install"
The easiest way to use wNim is to import the whole package.
import wNim
However, the modules of wNim can be aslo imported one by one to speed up compilation time.
import wNim/[wApp, wFrame]
There are some simple rules:
1. For every classes in wNim, there is a corresponding module.
For example: wFrame, wIcon, wMenu, etc.
2. wApp module must be imported in every wNim program.
3. Symbols in wColors and wKeyCodes modules are imported automatically with wApp module.
4. All event classes in wNim share the same constructor: Event(), so all subclasses module
of wEvent will be imported with wEvent module automatically.
5. wMacros, wUtils, and wTypes modules are three special module in wNim.
See their document for more information.
To compile the examples, try following command:
nim c -d:release -d:strip --opt:size --app:gui demo.nim
For Windows XP compatibility, add:
-d:useWinXP
To compile by Tiny C Compiler, or want to add some resource files, take a look at https://github.com/khchen/winim/tree/master/tcclib
At first, I just wanted to write some code to test and prove my Winim library. I wrote some event handlers, some GUI control classes, and more. Finally, it became a whole GUI framework.
English is not my mother tongue. I often have no idea how to name an object or a function. So, I borrowed wxWidgets' names to develop my own framework.
I start from winim. It is just a Windows API module.
They are all good GUI libraries. I think wNim is easier to use and produces smaller .exe files. However, it only supports Windows.
Read license.txt for more details.
Copyright (c) 2017-2021 Kai-Hung Chen, Ward. All rights reserved.