With mappings from C++ to C being pretty ugly, the code won't exactly win elegance contests. Also, there may be some C-to-HTML ickiness here, so bear that in mind.
#include "libcharlemagne.h"#include <stdio.h> int32_t InitApp(void *pobject, PArgList *foo_in, PArgList *foo_out) { /* This accomplishes the same kinds of tasks as what would normally be done in a BApplication's child class constructor */ void *mainwin = pobject_create("PWindow"); pdata_set_bool_property(mainwin, "Visible", 0); pdata_set_string_property(mainwin, "Title", "CHaikuRun"); pdata_set_rect_property(mainwin, "Frame", 100, 100, 500, 400); pdata_set_bool_property(mainwin, "Visible", 1); pdata_set_int_property(mainwin, "Flags", 0x00180000); /* Here is an example of how to run a method for an object in C*/ void *backview = pobject_create("PView"); pdata_set_rect_property(backview, "Frame", 0, 0, 400, 300); pdata_set_color_property(backview, "BackColor", 224, 224, 224, 255); /* These have to exist for running a method, but they can be reused */ PArgList *in = create_parglist(); PArgList *out = create_parglist(); /* AddChild requires the object ID of the child view to add */ add_parg_int64(in, "id", pobject_get_id(backview)); pobject_run_method(mainwin, "AddChild", in, out); void *label = pobject_create("PLabel"); pdata_set_rect_property(label, "Frame", 10, 10, 350, 60); pdata_set_string_property(label, "Text", "Hello Haiku from the C language!"); empty_parglist(in); add_parg_int64(in, "id", pobject_get_id(label)); pobject_run_method(backview, "AddChild", in, out); /* Free allocated heap memory */ destroy_parglist(in); destroy_parglist(out); return B_OK; } int main(void) { /* Start up the object system. Without this, we can't do anything with libcharlemagne */ pobjectspace_init(); void *papp = pobject_create("PApplication"); run_app(papp, "application/x-vnd.dw-CHaikuRun", InitApp); /* Not absolutely necessary here, but it frees all objects allocated by the broker */ pobjectspace_shutdown(); return 0; }
Its not that uggly when you get it into classes etc =) But isnt the BApplication complete yet? ... Events like "ReadyToRun" on application doesnt seem to be called? =)
ReplyDeletei use pobject_connect_event(fApp, "ReadyToRun", &myReadyToRunFunc); but nothing happends? :)
Oops. :D Bleeding edge development... you gotta love it. I must have missed implementing PApplication's event code last night. Consider that next on my to-do list and keep an eye on the repository.
ReplyDelete