Mercurial > hg > xemacs-beta
annotate lisp/gtk-widget-accessors.el @ 5413:7910031dd78a
Add explicit GPLv3 or later to xpm and xbm graphics.
author | Mats Lidell <matsl@xemacs.org> |
---|---|
date | Sun, 24 Oct 2010 01:10:23 +0200 |
parents | 91b3aa59f49b |
children | b9167d522a9a |
rev | line source |
---|---|
4709
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
1 ;; This file is part of XEmacs. |
5404
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
2 |
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
3 ;; XEmacs is free software: you can redistribute it and/or modify it |
4709
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
4 ;; under the terms of the GNU General Public License as published by the |
5404
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
5 ;; Free Software Foundation, either version 3 of the License, or (at your |
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
6 ;; option) any later version. |
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
7 |
4709
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
8 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT |
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
9 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
10 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
11 ;; for more details. |
5404
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
12 |
4709
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
13 ;; You should have received a copy of the GNU General Public License |
5404
91b3aa59f49b
Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5239
diff
changeset
|
14 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>. |
4709
db7068430402
Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents:
622
diff
changeset
|
15 |
622 | 16 (globally-declare-fboundp |
502 | 17 '(gtk-fundamental-type)) |
18 | |
462 | 19 (require 'gtk-ffi) |
20 | |
5239
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
21 (defconst GTK_TYPE_INVALID 0) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
22 (defconst GTK_TYPE_NONE 1) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
23 (defconst GTK_TYPE_CHAR 2) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
24 (defconst GTK_TYPE_UCHAR 3) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
25 (defconst GTK_TYPE_BOOL 4) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
26 (defconst GTK_TYPE_INT 5) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
27 (defconst GTK_TYPE_UINT 6) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
28 (defconst GTK_TYPE_LONG 7) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
29 (defconst GTK_TYPE_ULONG 8) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
30 (defconst GTK_TYPE_FLOAT 9) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
31 (defconst GTK_TYPE_DOUBLE 10) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
32 (defconst GTK_TYPE_STRING 11) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
33 (defconst GTK_TYPE_ENUM 12) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
34 (defconst GTK_TYPE_FLAGS 13) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
35 (defconst GTK_TYPE_BOXED 14) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
36 (defconst GTK_TYPE_POINTER 15) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
37 (defconst GTK_TYPE_SIGNAL 16) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
38 (defconst GTK_TYPE_ARGS 17) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
39 (defconst GTK_TYPE_CALLBACK 18) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
40 (defconst GTK_TYPE_C_CALLBACK 19) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
41 (defconst GTK_TYPE_FOREIGN 20) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
42 (defconst GTK_TYPE_OBJECT 21) |
462 | 43 |
44 (defconst gtk-value-accessor-names | |
45 '("INVALID" "NONE" "CHAR" "UCHAR" "BOOL" "INT" "UINT" "LONG" "ULONG" "FLOAT" "DOUBLE" | |
46 "STRING" "ENUM" "FLAGS" "BOXED" "POINTER" "SIGNAL" "ARGS" "CALLBACK" "C_CALLBACK" | |
47 "FOREIGN" "OBJECT")) | |
48 | |
49 (defun define-widget-accessors (gtk-class | |
50 wrapper | |
51 prefix args) | |
52 "Output stub C code to access parts of a widget from lisp. | |
53 GTK-CLASS is the GTK class to grant access to. | |
54 WRAPPER is a fragment to construct GTK C macros for typechecking/etc. (ie: WIDGET) | |
55 ARGS is a list of (type . name) cons cells. | |
56 Defines a whole slew of functions to access & set the slots in the | |
57 structure." | |
58 (set-buffer (get-buffer-create "emacs-widget-accessors.c")) | |
59 (goto-char (point-max)) | |
60 (let ((arg) | |
61 (base-arg-type nil) | |
62 (lisp-func-name nil) | |
63 (c-func-name nil) | |
64 (func-names nil)) | |
65 (setq gtk-class (symbol-name gtk-class) | |
66 wrapper (upcase wrapper)) | |
67 (while (setq arg (pop args)) | |
68 (setq lisp-func-name (format "gtk-%s-%s" prefix (cdr arg)) | |
69 lisp-func-name (replace-in-string lisp-func-name "_" "-") | |
70 c-func-name (concat "F" (replace-in-string lisp-func-name "-" "_"))) | |
71 (insert | |
72 "DEFUN (\"" lisp-func-name "\", " c-func-name ", 1, 1, 0, /*\n" | |
73 "Access the `" (symbol-name (cdr arg)) "' slot of OBJ, a " gtk-class " object.\n" | |
74 "*/\n" | |
75 "\t(obj))\n" | |
76 "{\n" | |
77 (format "\t%s *the_obj = NULL;\n" gtk-class) | |
78 "\tGtkArg arg;\n" | |
79 "\n" | |
80 "\tCHECK_GTK_OBJECT (obj);\n" | |
81 "\n" | |
82 (format "\tif (!GTK_IS_%s (XGTK_OBJECT (obj)->object))\n" wrapper) | |
83 "\t{\n" | |
591 | 84 (format "\t\twtaerror (\"Object is not a %s\", obj);\n" gtk-class) |
462 | 85 "\t};\n" |
86 "\n" | |
87 (format "\tthe_obj = GTK_%s (XGTK_OBJECT (obj)->object);\n" wrapper) | |
88 | |
5239
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
89 (format "\targ.type = gtk_type_from_name (\"%s\");\n" (symbol-name (car arg)))) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
90 ; (format "\targ.type = GTK_TYPE_%s;\n" (or |
462 | 91 ; (nth (gtk-fundamental-type (car arg)) |
92 ; gtk-value-accessor-names) | |
93 ; (case (car arg) | |
94 ; (GtkListOfString "STRING_LIST") | |
95 ; (GtkListOfObject "OBJECT_LIST") | |
96 ; (otherwise | |
97 ; "POINTER"))))) | |
98 | |
99 (setq base-arg-type (gtk-fundamental-type (car arg))) | |
100 (cond | |
5239
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
101 ((= base-arg-type GTK_TYPE_OBJECT) |
462 | 102 (insert |
103 (format "\tGTK_VALUE_OBJECT (arg) = GTK_OBJECT (the_obj->%s);" | |
104 (cdr arg)))) | |
5239
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
105 ((or (= base-arg-type GTK_TYPE_POINTER) |
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
106 (= base-arg-type GTK_TYPE_BOXED)) |
462 | 107 (insert |
108 (format "\tGTK_VALUE_%s (arg) = (void *)the_obj->%s;" | |
109 (nth (gtk-fundamental-type (car arg)) gtk-value-accessor-names) | |
110 (cdr arg)))) | |
111 (t | |
112 (insert | |
113 (format "\tGTK_VALUE_%s (arg) = the_obj->%s;" | |
114 (or (nth (gtk-fundamental-type (car arg)) gtk-value-accessor-names) "POINTER") | |
115 (cdr arg))))) | |
116 (insert | |
117 "\n" | |
5239
f19e6bc25969
Backed out changeset 6466bc9ebf15
Mike Sperber <sperber@deinprogramm.de>
parents:
5237
diff
changeset
|
118 "\treturn (gtk_type_to_lisp (&arg));\n" |
462 | 119 "}\n\n") |
120 (push c-func-name func-names)) | |
121 func-names)) | |
122 | |
123 (defun import-widget-accessors (file syms-function-name &rest description) | |
124 "Import multiple widgets, and emit a suitable vars_of_foo() function for them.\n" | |
523 | 125 (declare (special c-mode-common-hook c-mode-hook)) |
462 | 126 (let ((c-mode-common-hook nil) |
127 (c-mode-hook nil)) | |
128 (find-file file)) | |
129 (erase-buffer) | |
591 | 130 (insert "/* This file was automatically generated by ../lisp/gtk-widget-accessors.el */\n" |
131 "/* DO NOT EDIT BY HAND!!! */\n") | |
462 | 132 (let ((c-funcs nil)) |
133 (while description | |
134 (setq c-funcs (nconc (define-widget-accessors | |
135 (pop description) (pop description) | |
136 (pop description) (pop description)) c-funcs))) | |
137 (goto-char (point-max)) | |
138 (insert "void " syms-function-name " (void)\n" | |
139 "{\n\t" | |
140 (mapconcat (lambda (x) | |
141 (concat "DEFSUBR (" x ");")) c-funcs "\n\t") | |
142 "\n}")) | |
143 (save-buffer)) | |
144 | |
145 ;; Because the new FFI layer imports GTK types lazily, we need to load | |
146 ;; up all of the gtk types we know about, or we get errors about | |
147 ;; unknown GTK types later on. | |
148 (mapatoms (lambda (sym) | |
149 (if (string-match "gtk-[^-]+-get-type" (symbol-name sym)) | |
150 (funcall sym)))) | |
151 | |
152 (import-widget-accessors | |
591 | 153 "../src/emacs-widget-accessors.c" |
462 | 154 "syms_of_widget_accessors " |
155 | |
156 'GtkAdjustment "ADJUSTMENT" "adjustment" | |
157 '((gfloat . lower) | |
158 (gfloat . upper) | |
159 (gfloat . value) | |
160 (gfloat . step_increment) | |
161 (gfloat . page_increment) | |
162 (gfloat . page_size)) | |
163 | |
164 'GtkWidget "WIDGET" "widget" | |
165 '((GtkStyle . style) | |
166 (GdkWindow . window) | |
167 (GtkStateType . state) | |
168 (GtkString . name) | |
169 (GtkWidget . parent)) | |
170 | |
171 'GtkButton "BUTTON" "button" | |
172 '((GtkWidget . child) | |
173 (gboolean . in_button) | |
174 (gboolean . button_down)) | |
175 | |
176 'GtkCombo "COMBO" "combo" | |
177 '((GtkWidget . entry) | |
178 (GtkWidget . button) | |
179 (GtkWidget . popup) | |
180 (GtkWidget . popwin) | |
181 (GtkWidget . list)) | |
182 | |
183 'GtkGammaCurve "GAMMA_CURVE" "gamma-curve" | |
184 '((GtkWidget . table) | |
185 (GtkWidget . curve) | |
186 (gfloat . gamma) | |
187 (GtkWidget . gamma_dialog) | |
188 (GtkWidget . gamma_text)) | |
189 | |
190 'GtkCheckMenuItem "CHECK_MENU_ITEM" "check-menu-item" | |
191 '((gboolean . active)) | |
192 | |
193 'GtkNotebook "NOTEBOOK" "notebook" | |
194 '((GtkPositionType . tab_pos)) | |
195 | |
196 'GtkText "TEXT" "text" | |
197 '((GtkAdjustment . hadj) | |
198 (GtkAdjustment . vadj)) | |
199 | |
200 'GtkFileSelection "FILE_SELECTION" "file-selection" | |
201 '((GtkWidget . dir_list) | |
202 (GtkWidget . file_list) | |
203 (GtkWidget . selection_entry) | |
204 (GtkWidget . selection_text) | |
205 (GtkWidget . main_vbox) | |
206 (GtkWidget . ok_button) | |
207 (GtkWidget . cancel_button) | |
208 (GtkWidget . help_button) | |
209 (GtkWidget . action_area)) | |
210 | |
211 'GtkFontSelectionDialog "FONT_SELECTION_DIALOG" "font-selection-dialog" | |
212 '((GtkWidget . fontsel) | |
213 (GtkWidget . main_vbox) | |
214 (GtkWidget . action_area) | |
215 (GtkWidget . ok_button) | |
216 (GtkWidget . apply_button) | |
217 (GtkWidget . cancel_button)) | |
218 | |
219 'GtkColorSelectionDialog "COLOR_SELECTION_DIALOG" "color-selection-dialog" | |
220 '((GtkWidget . colorsel) | |
221 (GtkWidget . main_vbox) | |
222 (GtkWidget . ok_button) | |
223 (GtkWidget . reset_button) | |
224 (GtkWidget . cancel_button) | |
225 (GtkWidget . help_button)) | |
226 | |
227 'GtkDialog "DIALOG" "dialog" | |
228 '((GtkWidget . vbox) | |
229 (GtkWidget . action_area)) | |
230 | |
231 'GtkInputDialog "INPUT_DIALOG" "input-dialog" | |
232 '((GtkWidget . close_button) | |
233 (GtkWidget . save_button)) | |
234 | |
235 'GtkPlug "PLUG" "plug" | |
236 '((GdkWindow . socket_window) | |
237 (gint . same_app)) | |
238 | |
239 'GtkObject "OBJECT" "object" | |
240 '((guint . flags) | |
241 (guint . ref_count)) | |
242 | |
243 'GtkPaned "PANED" "paned" | |
244 '((GtkWidget . child1) | |
245 (GtkWidget . child2) | |
246 (gboolean . child1_resize) | |
247 (gboolean . child2_resize) | |
248 (gboolean . child1_shrink) | |
249 (gboolean . child2_shrink)) | |
250 | |
251 'GtkCList "CLIST" "clist" | |
252 '((gint . rows) | |
253 (gint . columns) | |
254 (GtkAdjustment . hadjustment) | |
255 (GtkAdjustment . vadjustment) | |
256 (GtkSortType . sort_type) | |
257 (gint . focus_row) | |
258 (gint . sort_column)) | |
259 | |
260 'GtkList "LIST" "list" | |
261 '((GtkListOfObject . children) | |
262 (GtkListOfObject . selection)) | |
263 | |
264 'GtkTree "TREE" "tree" | |
265 '((GtkListOfObject . children) | |
266 (GtkTree . root_tree) | |
267 (GtkWidget . tree_owner) | |
268 (GtkListOfObject . selection)) | |
269 | |
270 'GtkTreeItem "TREE_ITEM" "tree-item" | |
271 '((GtkWidget . subtree)) | |
272 | |
273 'GtkScrolledWindow "SCROLLED_WINDOW" "scrolled-window" | |
274 '((GtkWidget . hscrollbar) | |
275 (GtkWidget . vscrollbar) | |
276 (gboolean . hscrollbar_visible) | |
277 (gboolean . vscrollbar_visible)) | |
278 | |
279 ) |