Hello,

I do something similar in matrix-glib-sdk[1]: I get one specific key from a
JSON object, and based on that key I create different types of objects. For
that I have a type registry, which tells me what objects must be created
for what event type.

Your GtkBuilder approach also looks nice, although GTK would be a too heavy
dependency for my project.

Best,
Gergely

[1]
https://github.com/gergelypolonkai/matrix-glib-sdk/blob/develop/src/matrix-event-base.vala
On Mar 21, 2016 10:37 PM, "Alan Manuel Gloria" <almkg...@gmail.com> wrote:

> Yes, that's what I thought too.
>
> However, looking at GtkBuilder's source code, it has a function called
> type_name_mangle which converts a name like "GtkButton" to
> "gtk_button_get_type", then uses GModule to load that function.  Vala's C
> generation seems to create a function of the same/similar naming
> convention, so the equivalent of typeof(Weapon) in C is weapon_get_type().
>
> As a sketch, I suppose something like this ought to work:
>
> [CCode (has_target=false)]
> private delegate Type TypeOf();
> ...
> var module = Module.open(null, 0); // opens the program itself instead of
> a different module
> TypeOf get_type;
> module.symbol("weapon_get_type", (void*) &get_type); // the real program
> needs to generate the name and check the return value here
> Type type = get_type();
>
> Object obj = Object.create(type, "damage", 10);
> ...
>
>
> On Tue, Mar 22, 2016 at 2:19 AM, Felipe Lavratti <felipe...@gmail.com>
> wrote:
>
>> Hello, this is the minimum workaround I found to work, there might be a
>> simpler way of forcing the registration of non-literally used classes in
>> the GObject system.
>>
>> public class Weapon : Object {
>>   public uint damage { get; construct; }
>> }
>>
>> int main () {
>>
>>     /* Force class registration here, comment this line to see the
>> execution failing. */
>>     var klass = typeof(Weapon);
>>
>>     Type WeaponType = Type.from_name("Weapon");
>>     Object weapon = Object.new(WeaponType, damage: 10);
>>
>>     GLib.message("weapon.damage = %u", (weapon as Weapon).damage);
>>
>>     return 0;
>> }
>>
>>
>> On Mon, Mar 21, 2016 at 10:47 AM Gergely Polonkai <gerg...@polonkai.eu>
>> wrote:
>>
>>> Hello,
>>>
>>> for the first sight your format looks verybsimilar to key-value files
>>> already supported by GLib:
>>>
>>> https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html
>>> http://valadoc.org/#!api=glib-2.0/GLib.KeyFile
>>>
>>> Are you sure it won't work for your problem? If it would, you may want to
>>> subclass it.
>>>
>>> Best,
>>> Gergely
>>> On Mar 21, 2016 2:26 PM, "Alan Manuel Gloria" <almkg...@gmail.com>
>>> wrote:
>>>
>>> > Hi Vala world,
>>> >
>>> > I'm trying to make some kind of description loader.  I have a base
>>> class
>>> > like so:
>>> >
>>> > class Concept : Object {
>>> >   string name { get; construct; }
>>> >   string desc { get; construct; }
>>> > }
>>> >
>>> > And one or more classes, e.g.:
>>> >
>>> > class Component : Concept {
>>> >   uint size { get; construct; }
>>> >   uint cost { get; construct; }
>>> > }
>>> > class Weapon : Component {
>>> >   uint damage { get; construct; }
>>> > }
>>> >
>>> > My goal is to parse some text file like so:
>>> >
>>> > [Blaster I]
>>> > type = Weapon
>>> > desc = A simple blaster.
>>> > size = 20
>>> > cost = 200
>>> > damage = 1
>>> >
>>> > Then the parser class will provide a collection of Concept objects
>>> > indexable by name and type.
>>> >
>>> > My question is, how do I best do this?  Gtk.Buildable seems to
>>> approximate
>>> > what I want, so I suppose I need to figure out how that works.
>>> >
>>> > My initial research seems to suggest that I need to use GLib.Type
>>> somehow,
>>> > but my understanding is that the exact type does not get created until
>>> it
>>> > is used.  It seems to me that I'd need code like:
>>> >
>>> > var p = new MyTextFileParser();
>>> > p.register(typeof(Component));
>>> > p.register(typeof(Weapon));
>>> > // ... and so on ...
>>> >
>>> > Thanks in advance.
>>> >
>>> > Sincerely,
>>> > AmkG
>>> > _______________________________________________
>>> > vala-list mailing list
>>> > vala-list@gnome.org
>>> > https://mail.gnome.org/mailman/listinfo/vala-list
>>> >
>>> _______________________________________________
>>> vala-list mailing list
>>> vala-list@gnome.org
>>> https://mail.gnome.org/mailman/listinfo/vala-list
>>>
>>
>
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to