18
19:- module(plgi, [
20 plgi_use_namespace/1,
21 plgi_use_namespace/2,
22 plgi_use_namespace_from_dir/2,
23 plgi_current_namespace/1,
24
25 plgi_registered_namespace/1,
26 plgi_registered_callback/1,
27 plgi_registered_enum/1,
28 plgi_registered_object/1,
29 plgi_registered_struct/1,
30 plgi_registered_union/1,
31
32 plgi_struct_new/2,
33 plgi_struct_get_field/3,
34 plgi_struct_set_field/3,
35 plgi_struct_term/2,
36
37 plgi_union_new/2,
38 plgi_union_get_field/3,
39 plgi_union_set_field/3,
40
41 plgi_enum_value/2,
42
43 plgi_version/1,
44
45 plgi_debug/1
46 ]). 47
48:- use_foreign_library(foreign(plgi), install_plgi). 49
50:- dynamic user:file_search_path/2. 51:- multifile user:file_search_path/2. 52
53user:file_search_path(plgi, library(plgi)).
54
55
56
57plgi_use_namespace(Namespace) :-
58 plgi_load_namespace(Namespace),
59 plgi_import_namespace(Namespace),
60 plgi_namespace_deps(Namespace, Dependencies),
61 forall(member(Dependency, Dependencies),
62 plgi_use_namespace(Dependency)
63 ).
64
65plgi_use_namespace(Namespace, Version) :-
66 plgi_load_namespace_version(Namespace, Version),
67 plgi_import_namespace(Namespace),
68 plgi_namespace_deps(Namespace, Dependencies),
69 forall(member(Dependency, Dependencies),
70 plgi_use_namespace(Dependency)
71 ).
72
73plgi_use_namespace_from_dir(Namespace, Directory) :-
74 plgi_load_namespace_from_dir(Namespace, Directory),
75 plgi_import_namespace(Namespace).
76
77plgi_import_namespace(Namespace) :-
78 ( plgi_overrides_module(Namespace, OverridesModule)
79 -> use_module(plgi(Namespace)),
80 forall(( current_predicate(OverridesModule:Name/Arity),
81 functor(Head, Name, Arity),
82 predicate_property(OverridesModule:Head, exported)
83 ),
84 ( user:import(OverridesModule:Name/Arity)
85 )
86 )
87 ; true
88 ),
89 forall(( current_predicate(Namespace:Predicate),
90 \+ current_predicate(user:Predicate)
91 ),
92 ( Namespace:export(Predicate),
93 user:import(Namespace:Predicate)
94 )
95 ).
96
97
98:- multifile
99 prolog:message/3. 100
101prolog:error_message(plgi_error(Message)) -->
102 [ 'PLGI Error: ~w'-[Message] ].
103
104prolog:error_message(glib_error(Domain, Code, Message)) -->
105 [ 'GLib Error: [~w:~w] ~w'-[Domain, Code, Message] ].
106
107prolog:message(plgi_warning(Message)) -->
108 [ 'PLGI Warning: ~w'-[Message] ].
109
110
111plgi_overrides_module('GLib', 'GLib_overrides').
112plgi_overrides_module('GObject', 'GObject_overrides').
113plgi_overrides_module('Gtk', 'Gtk_overrides')