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