18
19:- module('Gtk_overrides',
20 [
21 gtk_builder_add_from_string/3,
22 gtk_builder_add_objects_from_string/4,
23 gtk_builder_connect_signals/2,
24 gtk_dialog_new_with_buttons/5,
25 gtk_file_chooser_dialog_new/5,
26 gtk_list_store_new/2,
27 gtk_message_dialog_format_secondary_markup/2,
28 gtk_message_dialog_format_secondary_text/2,
29 gtk_message_dialog_new/6,
30 gtk_tree_store_new/2,
31 gtk_widget_hide_on_delete/4
32 ]). 33
34
35
37
38gtk_builder_add_from_string(Builder, String, Length0) :-
39 ( Length0 == -1
40 -> atom_length(String, Length1)
41 ; Length1 = Length0
42 ),
43 'Gtk':gtk_builder_add_from_string(Builder, String, Length1).
44
45gtk_builder_add_objects_from_string(Builder, String, Length0, ObjectIds) :-
46 ( Length0 == -1
47 -> atom_length(String, Length1)
48 ; Length1 = Length0
49 ),
50 'Gtk':gtk_builder_add_objects_from_string(Builder, String, Length1, ObjectIds).
51
52gtk_builder_connect_signals(Builder, UserData) :-
53 Marshaller = 'Gtk_overrides':gtk_builder_signal_connect_marshaller/7,
54 gtk_builder_connect_signals_full(Builder, Marshaller, UserData).
55
56gtk_builder_signal_connect_marshaller(_Builder, Object, SignalName, HandlerName, ConnectObject, Flags, UserData) :-
57 term_to_atom(HandlerTerm, HandlerName),
58 ( HandlerTerm = _:_/_
59 -> SignalHandler = HandlerTerm
60 ; HandlerTerm = _/_
61 -> SignalHandler = HandlerTerm
62 ; SignalHandler = HandlerTerm/_
63 ),
64 ( ConnectObject \== {null}
65 -> Data = ConnectObject
66 ; Data = UserData
67 ),
68 ( current_predicate(SignalHandler)
69 -> g_signal_connect_data(Object, SignalName, SignalHandler, Data, Flags, _)
70 ).
71
72
73
75gtk_dialog_new_with_buttons(Title, Parent, Flags, Buttons, Dialog) :-
76 gtk_dialog_new(Dialog),
77 ( Title \== {null}
78 -> gtk_window_set_title(Dialog, Title)
79 ; true
80 ),
81 ( Parent \== {null}
82 -> gtk_window_set_transient_for(Dialog, Parent)
83 ; true
84 ),
85 ( memberchk('GTK_DIALOG_USE_HEADER_BAR', Flags)
86 -> g_object_set_property(Dialog, 'use-header-bar', 1)
87 ; true
88 ),
89 ( memberchk('GTK_DIALOG_MODAL', Flags)
90 -> gtk_window_set_modal(Dialog, true)
91 ; true
92 ),
93 ( memberchk('GTK_DIALOG_DESTROY_WITH_PARENT', Flags)
94 -> gtk_window_set_destroy_with_parent(Dialog, true)
95 ; true
96 ),
97 forall(member(Text-ResponseId, Buttons),
98 gtk_dialog_add_button(Dialog, Text, ResponseId, _)).
99
100
101
103gtk_file_chooser_dialog_new(Title, Parent, Action, Buttons, Dialog) :-
104 g_object_new('GtkFileChooserDialog',
105 ['title'=Title,
106 'action'=Action],
107 Dialog),
108 g_object_ref(Dialog, _), 109 ( Parent \== {null}
110 -> gtk_window_set_transient_for(Dialog, Parent)
111 ; true
112 ),
113 forall(member(Text-ResponseId, Buttons),
114 gtk_dialog_add_button(Dialog, Text, ResponseId, _)).
115
116
117
119gtk_list_store_new(Types, ListStore) :-
120 gtk_list_store_newv(Types, ListStore).
121
122
123
125gtk_message_dialog_new(Parent, Flags, MessageType, Buttons, Message, Dialog) :-
126 g_object_new('GtkMessageDialog',
127 ['use-header-bar'=0,
128 'message-type'=MessageType,
129 'buttons'=Buttons],
130 Dialog),
131 g_object_ref(Dialog, _), 132 ( Message \== {null}
133 -> g_object_set_property(Dialog, 'text', Message)
134 ; true
135 ),
136 ( Parent \== {null}
137 -> gtk_window_set_transient_for(Dialog, Parent)
138 ; true
139 ),
140 ( memberchk('GTK_DIALOG_MODAL', Flags)
141 -> gtk_window_set_modal(Dialog, true)
142 ; true
143 ),
144 ( memberchk('GTK_DIALOG_DESTROY_WITH_PARENT', Flags)
145 -> gtk_window_set_destroy_with_parent(Dialog, true)
146 ; true
147 ).
148
149gtk_message_dialog_format_secondary_text(Dialog, Text) :-
150 g_object_set_property(Dialog, 'secondary-text', Text),
151 g_object_set_property(Dialog, 'secondary-use-markup', false).
152
153gtk_message_dialog_format_secondary_markup(Dialog, Markup) :-
154 g_object_set_property(Dialog, 'secondary-text', Markup),
155 g_object_set_property(Dialog, 'secondary-use-markup', true).
156
157
158
160gtk_tree_store_new(Types, ListStore) :-
161 gtk_tree_store_newv(Types, ListStore).
162
163
164
166gtk_widget_hide_on_delete(Widget, _Event, _UserData, Return) :-
167 gtk_widget_hide_on_delete(Widget, Return).
168
169
170
171:- ( current_prolog_flag(os_argv, Argv),
172 'Gtk':gtk_init_check(Argv, _, _)
173 ).