190 likes | 412 Views
wxErlang. Mats-Ola Persson. wxErlang. GUI library for Erlang write GUI applications cross platform cross platform look and feel. Example. A “stupid” tic-tac-toe application No intelligent behavior is implemented Just the (good) looks. Creating a window. create_window() ->
E N D
wxErlang • Mats-Ola Persson
wxErlang • GUI library for Erlang • write GUI applications • cross platform • cross platform look and feel
Example • A “stupid” tic-tac-toe application • No intelligent behavior is implemented • Just the (good) looks
Creating a window create_window() -> wx:start(), % initialize wxErlang % create a frame (window) with no parent Frame = wx:frame(?NULL, ?wxID_ANY, “Hello World!”), wx:show(Frame). % make the frame visible
Creating a window • Not very exciting: an empty window
Event-driven programming • Things “react” to mouse clicks, mouse movements, etc. • Event-handlers, callback functions
Events create_window() -> wx:start(), Frame = wx:frame(?NULL, ?wxID_ANY, “Hello World!”), % event-handler that reacts to close clicks wx:connect(Frame, ?wxEVT_CLOSE_WINDOW, fun(_,_) -> wx:quit() end), wx:show(Frame).
Layouts • Platform independent layouts • Sizers • No fixed sized widgets, etc. • Arbitrary complex layouts • Let’s add the buttons!
Sizers create_grid(Frame) -> Grid = wx:grid_sizer(3), % a grid sizer with 3 cols create_buttons(Grid, Frame, 9), % create 9 buttons Grid. create_buttons(_, _, 0) -> ok;create_buttons(Grid, Frame, N) -> Button = wx:button(Frame, N), %a button without label wx:add(Grid, Button), % add button to the sizer create_buttons(Grid, Frame, N - 1).
The result • A “shell” of a tic-tac-toe application
wxEtop • Port of the old “etop” • New features • context menues • view running code • ...
From the programmers point of view • wxErlang is verbose - like most GUI libraries • Trial-and-error - like most GUI libraries • Interface designers • XRCed, DialogBlocks, etc.
Design decisions • Binding to the C++ GUI library wxWidgets • Get a lot for free • “free” features from wxWidgets • reduced maintenance work • wxErlang interface resembles wxWidgets C++ interface • free documentation(!)
Translation scheme • Easy • Functions • Multiple return values => tuples • ... • Constants
Translation scheme • Not as easy • Classes • Overloading and overriding functions • Type system
Safety • Checks arguments • Types • Primitive values • Objects • Sanity
Implementational details • Most of the code is generated from wxWidgets headers • Implemented as a “port program” • Has a lot of bugs
Wrap up • Current status - a prototyp • wxEtop • Perhaps 10% implemented • Future