[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Working with C++ and Lua on the same datastructure
- From: Carsten Fuchs <CarstenFuchs@...>
- Date: Wed, 15 Mar 2006 18:01:50 +0100
I'm pretty new to Lua, and as it is an excellent piece of software, I
now want to use it for scripting my C++ programs. I've read a good deal
of the Programming in Lua book (okay, mostly Part 1 (The Language) and
Part 4 (The C API)), and now I've a conceptual question.
For example, I want to create a scriptable GUI system. In C++, I'd write
a class like
unsigned long BackgroundColor;
// Many more attributes like position, size, border color...
virtual void OnDraw()
// C++ code here to draw the window (and it's children)
// to the screen.
virtual void OnActivatedEvent()
// Run some Lua script here!
// A lot more C++ related details follow here
// that are not relevant for this example though.
In words, there is a hierarchy of windows, each of which has a name, a
background color, a parent, children, etc.
Given this, I want to have C++ code in OnDraw() to render each window to
the screen (and possibly C++ code for several other methods), but I also
want to execute Lua scripts e.g. as the event handlers.
For example, say we have a window "MainFrame" that has three children
(sub-windows) with names "InfoText", "ButtonOK" and "ButtonCancel", then
I would like to be able to have a Lua script that can e.g. modify the
background color of the "MainFrame" window when the OnActivatedEvent()
of the "ButtonCancel" subwindow is run.
My question is, how can I achieve this??
I've been thinking about implementing OnActivatedEvent() by first
copying all C++ data of the entire window hierachy into a Lua table
(identifying the individual windows by name, storing their data in
sub-tables), then calling the associated Lua function, and finally
copying back the entire window hierachy state from the Lua table to the
C++ datastructures. This is of course a really bad and nonsense "solution".
Another, much better approach is probably to add SetX() and GetX()
methods for each attribute X of class WindowT, and then make these
methods available to the Lua function that is called from
Nonetheless, I was still wondering how this is "normally" done, i.e. if
maybe there is a much better solution to what looks like a common
problem to me.
In order words, my question rephrased:
How can I have a complex C++ datastructure, and work with it *both* in
C++ *and* in Lua code??
I'd be very grateful for any info. Thank you very much for your help!