iup-ffi 0.13.0-x86_64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/LICENCE.md +21 -0
  3. data/README.md +139 -0
  4. data/lib/iup-ffi-plain.rb +51 -0
  5. data/lib/iup-ffi.rb +70 -0
  6. data/lib/library/linux/libcd.so +0 -0
  7. data/lib/library/linux/libim.so +0 -0
  8. data/lib/library/linux/libiup.so +0 -0
  9. data/lib/library/linux/libiup_scintilla.so +0 -0
  10. data/lib/library/linux/libiupcd.so +0 -0
  11. data/lib/library/linux/libiupcontrols.so +0 -0
  12. data/lib/library/linux/libiupim.so +0 -0
  13. data/lib/library/linux/libiupimglib.so +0 -0
  14. data/lib/plain/iupcdlib.rb +158 -0
  15. data/lib/plain/iupcontrolslib.rb +28 -0
  16. data/lib/plain/iupimglib.rb +15 -0
  17. data/lib/plain/iupimlib.rb +18 -0
  18. data/lib/plain/iuplib.rb +354 -0
  19. data/lib/plain/scintilla-lib.rb +17 -0
  20. data/lib/wrapped/attribute-builders.rb +93 -0
  21. data/lib/wrapped/attribute-reference.rb +27 -0
  22. data/lib/wrapped/background-box.rb +37 -0
  23. data/lib/wrapped/button.rb +152 -0
  24. data/lib/wrapped/callback-setter.rb +78 -0
  25. data/lib/wrapped/canvas.rb +698 -0
  26. data/lib/wrapped/colorbar.rb +212 -0
  27. data/lib/wrapped/colordialog.rb +121 -0
  28. data/lib/wrapped/common-attributes.rb +34 -0
  29. data/lib/wrapped/constants.rb +504 -0
  30. data/lib/wrapped/dial.rb +129 -0
  31. data/lib/wrapped/dialog.rb +309 -0
  32. data/lib/wrapped/drag-drop-attributes.rb +98 -0
  33. data/lib/wrapped/dynamic-fill-methods.rb +22 -0
  34. data/lib/wrapped/expander.rb +128 -0
  35. data/lib/wrapped/filedialog.rb +168 -0
  36. data/lib/wrapped/fill.rb +29 -0
  37. data/lib/wrapped/fontdialog.rb +71 -0
  38. data/lib/wrapped/frame.rb +70 -0
  39. data/lib/wrapped/gridbox.rb +188 -0
  40. data/lib/wrapped/hbox.rb +90 -0
  41. data/lib/wrapped/image-attributes.rb +58 -0
  42. data/lib/wrapped/image.rb +178 -0
  43. data/lib/wrapped/iup-global.rb +46 -0
  44. data/lib/wrapped/label.rb +110 -0
  45. data/lib/wrapped/link.rb +54 -0
  46. data/lib/wrapped/list.rb +567 -0
  47. data/lib/wrapped/matrix.rb +575 -0
  48. data/lib/wrapped/menu.rb +91 -0
  49. data/lib/wrapped/menuitem.rb +150 -0
  50. data/lib/wrapped/messagedialog.rb +127 -0
  51. data/lib/wrapped/progressbar.rb +91 -0
  52. data/lib/wrapped/progressdialog.rb +85 -0
  53. data/lib/wrapped/radio.rb +74 -0
  54. data/lib/wrapped/scintilla.rb +1112 -0
  55. data/lib/wrapped/scrollbar-attributes.rb +178 -0
  56. data/lib/wrapped/scrollbox.rb +40 -0
  57. data/lib/wrapped/separator.rb +24 -0
  58. data/lib/wrapped/splitbox.rb +114 -0
  59. data/lib/wrapped/stretchbox.rb +70 -0
  60. data/lib/wrapped/submenu.rb +58 -0
  61. data/lib/wrapped/tabs.rb +223 -0
  62. data/lib/wrapped/text.rb +382 -0
  63. data/lib/wrapped/timer.rb +82 -0
  64. data/lib/wrapped/toggle.rb +150 -0
  65. data/lib/wrapped/tree.rb +612 -0
  66. data/lib/wrapped/val.rb +162 -0
  67. data/lib/wrapped/vbox.rb +93 -0
  68. data/lib/wrapped/widget.rb +282 -0
  69. data/lib/wrapped/zbox.rb +80 -0
  70. metadata +131 -0
@@ -0,0 +1,504 @@
1
+ # Iup is the main module, in which all controls and widgets are named.
2
+ #
3
+ # The module also provides constants and supporting methods.
4
+ #
5
+ module Iup
6
+
7
+ # :section: Callback return values
8
+
9
+ # Used by some actions so that callback is ignored.
10
+ IGNORE = -1
11
+ # Continues with user interaction: this is the return value to use, if in
12
+ # doubt.
13
+ DEFAULT = -2
14
+ # Calls +IupExitLoop+ on returning; in most cases, this closes the
15
+ # application.
16
+ CLOSE = -3
17
+ # Used by some action to pass control to parent.
18
+ CONTINUE = -4
19
+
20
+ # :section: Dialog show position
21
+
22
+ # To place at center of screen.
23
+ CENTER = 0xFFFF # 65535
24
+
25
+ # To place at left border of screen.
26
+ LEFT = 0xFFFE # 65534
27
+
28
+ # To place at right border of screen.
29
+ RIGHT = 0xFFFD # 65533
30
+
31
+ # To center on the mouse cursor.
32
+ MOUSEPOS = 0xFFFC # 65532
33
+
34
+ # To center on the current dialog's position.
35
+ CURRENT = 0xFFFB # 65531
36
+
37
+ # To center on the parent dialog.
38
+ CENTERPARENT = 0xFFFA # 65530
39
+
40
+ # To place at top border of screen.
41
+ TOP = LEFT
42
+
43
+ # To place at bottom border of screen.
44
+ BOTTOM = RIGHT
45
+
46
+ # :section: Dialog show_cb state
47
+
48
+ # When shown
49
+ IUP_SHOW = 0
50
+ # When restored
51
+ IUP_RESTORE = 1
52
+ # When minimized
53
+ IUP_MINIMIZE = 2
54
+ # When maximized
55
+ IUP_MAXIMIZE = 3
56
+ # When hidden
57
+ IUP_HIDE = 4
58
+
59
+ # :section: Button values
60
+
61
+ # Left mouse button
62
+ BUTTON1 = '1'
63
+ # Middle mouse button
64
+ BUTTON2 = '2'
65
+ # Right mouse button
66
+ BUTTON3 = '3'
67
+ # Extra button
68
+ BUTTON4 = '4'
69
+ # Extra button
70
+ BUTTON5 = '5'
71
+
72
+ # :section: Masks
73
+
74
+ MASK_FLOAT = "[+/-]?(/d+/.?/d*|/./d+)"
75
+ MASK_UFLOAT = "(/d+/.?/d*|/./d+)"
76
+ MASK_EFLOAT = "[+/-]?(/d+/.?/d*|/./d+)([eE][+/-]?/d+)?"
77
+ MASK_INT = "[+/-]?/d+"
78
+ MASK_UINT = "/d+"
79
+ MASK_FLOATCOMMA = "[+/-]?(/d+/,?/d*|/,/d+)"
80
+ MASK_UFLOATCOMMA = "(/d+/,?/d*|/,/d+)"
81
+
82
+ # :section: Key definitions
83
+
84
+ K_SP = ' '.ord
85
+ K_exclam = '!'.ord
86
+ K_quotedbl = "\"".ord
87
+ K_numbersign = '#'.ord
88
+ K_dollar = '$'.ord
89
+ K_percent = '%'.ord
90
+ K_ampersand = '&'.ord
91
+ K_apostrophe = "\'".ord
92
+ K_parentleft = '('.ord
93
+ K_parentright =')'.ord
94
+ K_plus = '+'.ord
95
+ K_comma = ','.ord
96
+ K_minus = '-'.ord
97
+ K_period = '.'.ord
98
+ K_slash = '/'.ord
99
+ K_0 = '0'.ord
100
+ K_1 = '1'.ord
101
+ K_2 = '2'.ord
102
+ K_3 = '3'.ord
103
+ K_4 = '4'.ord
104
+ K_5 = '5'.ord
105
+ K_6 = '6'.ord
106
+ K_7 = '7'.ord
107
+ K_8 = '8'.ord
108
+ K_9 = '9'.ord
109
+ K_colon = ':'.ord
110
+ K_semicolon = ';'.ord
111
+ K_less = '<'.ord
112
+ K_equal = '='.ord
113
+ K_greater = '>'.ord
114
+ K_question = '?'.ord
115
+ K_at = '@'.ord
116
+ K_A = 'A'.ord
117
+ K_B = 'B'.ord
118
+ K_C = 'C'.ord
119
+ K_D = 'D'.ord
120
+ K_E = 'E'.ord
121
+ K_F = 'F'.ord
122
+ K_G = 'G'.ord
123
+ K_H = 'H'.ord
124
+ K_I = 'I'.ord
125
+ K_J = 'J'.ord
126
+ K_K = 'K'.ord
127
+ K_L = 'L'.ord
128
+ K_M = 'M'.ord
129
+ K_N = 'N'.ord
130
+ K_O = 'O'.ord
131
+ K_P = 'P'.ord
132
+ K_Q = 'Q'.ord
133
+ K_R = 'R'.ord
134
+ K_S = 'S'.ord
135
+ K_T = 'T'.ord
136
+ K_U = 'U'.ord
137
+ K_V = 'V'.ord
138
+ K_W = 'W'.ord
139
+ K_X = 'X'.ord
140
+ K_Y = 'Y'.ord
141
+ K_Z = 'Z'.ord
142
+ K_bracketleft ='['.ord
143
+ K_backslash = "\\".ord
144
+ K_bracketright =']'.ord
145
+ K_circum = '^'.ord
146
+ K_underscore = '_'.ord
147
+ K_grave = '`'.ord
148
+ K_a = 'a'.ord
149
+ K_b = 'b'.ord
150
+ K_c = 'c'.ord
151
+ K_d = 'd'.ord
152
+ K_e = 'e'.ord
153
+ K_f = 'f'.ord
154
+ K_g = 'g'.ord
155
+ K_h = 'h'.ord
156
+ K_i = 'i'.ord
157
+ K_j = 'j'.ord
158
+ K_k = 'k'.ord
159
+ K_l = 'l'.ord
160
+ K_m = 'm'.ord
161
+ K_n = 'n'.ord
162
+ K_o = 'o'.ord
163
+ K_p = 'p'.ord
164
+ K_q = 'q'.ord
165
+ K_r = 'r'.ord
166
+ K_s = 's'.ord
167
+ K_t = 't'.ord
168
+ K_u = 'u'.ord
169
+ K_v = 'v'.ord
170
+ K_w = 'w'.ord
171
+ K_x = 'x'.ord
172
+ K_y = 'y'.ord
173
+ K_z = 'z'.ord
174
+ K_braceleft = '{'.ord
175
+ K_bar = '|'.ord
176
+ K_braceright = '}'.ord
177
+ K_tilde = '~'.ord
178
+
179
+ K_BS = "\b".ord
180
+ K_TAB = "\t".ord
181
+ K_LF = "\n".ord
182
+ K_CR = "\r".ord
183
+
184
+ K_PAUSE = 0xFF13
185
+ K_ESC = 0xFF1B
186
+ K_HOME = 0xFF50
187
+ K_LEFT = 0xFF51
188
+ K_UP = 0xFF52
189
+ K_RIGHT = 0xFF53
190
+ K_DOWN = 0xFF54
191
+ K_PGUP = 0xFF55
192
+ K_PGDN = 0xFF56
193
+ K_END = 0xFF57
194
+ K_MIDDLE = 0xFF0B
195
+ K_Print = 0xFF61
196
+ K_INS = 0xFF63
197
+ K_Menu = 0xFF67
198
+ K_DEL = 0xFFFF
199
+ K_F1 = 0xFFBE
200
+ K_F2 = 0xFFBF
201
+ K_F3 = 0xFFC0
202
+ K_F4 = 0xFFC1
203
+ K_F5 = 0xFFC2
204
+ K_F6 = 0xFFC3
205
+ K_F7 = 0xFFC4
206
+ K_F8 = 0xFFC5
207
+ K_F9 = 0xFFC6
208
+ K_F10 = 0xFFC7
209
+ K_F11 = 0xFFC8
210
+ K_F12 = 0xFFC9
211
+
212
+ K_LSHIFT = 0xFFE1
213
+ K_RSHIFT = 0xFFE2
214
+ K_LCTRL = 0xFFE3
215
+ K_RCTRL = 0xFFE4
216
+ K_LALT = 0xFFE9
217
+ K_RALT = 0xFFEA
218
+
219
+ K_NUM = 0xFF7F
220
+ K_SCROLL = 0xFF14
221
+ K_CAPS = 0xFFE5
222
+
223
+ # :section: Scrollbar operations
224
+
225
+ # Operation on vertical scrollbar - used in scroll_cb callback.
226
+ IUP_SBUP = 0
227
+ # Operation on vertical scrollbar - used in scroll_cb callback.
228
+ IUP_SBDN = 1
229
+ # Operation on vertical scrollbar - used in scroll_cb callback.
230
+ IUP_SBPGUP = 2
231
+ # Operation on vertical scrollbar - used in scroll_cb callback.
232
+ IUP_SBPGDN = 3
233
+ # Operation on vertical scrollbar - used in scroll_cb callback.
234
+ IUP_SBPOSV = 4
235
+ # Operation on vertical scrollbar - used in scroll_cb callback.
236
+ IUP_SBDRAGV = 5
237
+
238
+ # Operation on horizontal scrollbar - used in scroll_cb callback.
239
+ IUP_SBLEFT = 6
240
+ # Operation on horizontal scrollbar - used in scroll_cb callback.
241
+ IUP_SBRIGHT = 7
242
+ # Operation on horizontal scrollbar - used in scroll_cb callback.
243
+ IUP_SBPGLEFT = 8
244
+ # Operation on horizontal scrollbar - used in scroll_cb callback.
245
+ IUP_SBPGRIGHT = 9
246
+ # Operation on horizontal scrollbar - used in scroll_cb callback.
247
+ IUP_SBPOSH = 10
248
+ # Operation on horizontal scrollbar - used in scroll_cb callback.
249
+ IUP_SBDRAGH = 11
250
+
251
+ # :section: CD library
252
+
253
+ CD_QUERY = -1
254
+
255
+ # :section: CD bitmap type
256
+
257
+ CD_RGB = 0
258
+ CD_MAP = 1
259
+ CD_RGBA = 0x100
260
+
261
+ # :section: CD bitmap data
262
+
263
+ CD_IRED = 0
264
+ CD_IGREEN = 1
265
+ CD_IBLUE = 2
266
+ CD_IALPHA = 3
267
+ CD_INDEX = 4
268
+ CD_COLORS = 5
269
+
270
+ # :section: CD status report
271
+
272
+ CD_ERROR = -1
273
+ CD_OK = 0
274
+
275
+ # :section: CD clip mode
276
+
277
+ CD_CLIPOFF = 0
278
+ CD_CLIPAREA = 1
279
+ CD_CLIPPOLYGON = 2
280
+ CD_CLIPREGION = 3
281
+
282
+ # :section: CD region combine mode
283
+
284
+ CD_UNION = 0
285
+ CD_INTERSECT = 1
286
+ CD_DIFFERENCE = 2
287
+ CD_NOTINTERSECT = 3
288
+
289
+ # :section: CD polygon mode
290
+
291
+ CD_FILL = 0
292
+ CD_OPEN_LINES = 1
293
+ CD_CLOSED_LINES = 2
294
+ CD_CLIP = 3
295
+ CD_BEZIER = 4
296
+ CD_REGION = 5
297
+ CD_PATH = 6
298
+
299
+ CD_POLYCUSTOM = 10
300
+
301
+ # :section: CD path action
302
+
303
+ CD_PATH_NEW = 0
304
+ CD_PATH_MOVETO = 1
305
+ CD_PATH_LINETO = 2
306
+ CD_PATH_ARC = 3
307
+ CD_PATH_CURVETO = 4
308
+ CD_PATH_CLOSE = 5
309
+ CD_PATH_FILL = 6
310
+ CD_PATH_STROKE = 7
311
+ CD_PATH_FILLSTROKE = 7
312
+ CD_PATH_CLIP = 8
313
+
314
+ # :section: CD fill mode
315
+
316
+ CD_EVENODD = 0
317
+ CD_WINDING = 1
318
+
319
+ # :section: CD line join
320
+
321
+ CD_MITER = 0
322
+ CD_BEVEL = 1
323
+ CD_ROUND = 2
324
+
325
+ # :section: CD line cap
326
+
327
+ CD_CAPFLAT = 0
328
+ CD_CAPSQUARE = 1
329
+ CD_CAPROUND = 2
330
+
331
+ # :section: CD background opacity mode
332
+
333
+ CD_OPAQUE = 0
334
+ CD_TRANSPARENT = 1
335
+
336
+ # :section: CD write mode
337
+
338
+ CD_REPLACE = 0
339
+ CD_XOR = 1
340
+ CD_NOT_XOR = 2
341
+
342
+ # :section: CD color allocation mode (palette)
343
+
344
+ CD_POLITE = 0
345
+ CD_FORCE = 1
346
+
347
+ # :section: CD line style
348
+
349
+ CD_CONTINUOUS = 0
350
+ CD_DASHED = 1
351
+ CD_DOTTED = 2
352
+ CD_DASH_DOT = 3
353
+ CD_DASH_DOT_DOT = 4
354
+ CD_CUSTOM = 5
355
+
356
+ # :section: CD mark type
357
+
358
+ CD_PLUS = 0
359
+ CD_STAR = 1
360
+ CD_CIRCLE = 2
361
+ CD_X = 3
362
+ CD_BOX = 4
363
+ CD_DIAMOND = 5
364
+ CD_HOLLOW_CIRCLE = 6
365
+ CD_HOLLOW_BOX = 7
366
+ CD_HOLLOW_DIAMOND = 8
367
+
368
+ # :section: CD hatch type
369
+
370
+ CD_HORIZONTAL = 0
371
+ CD_VERTICAL = 1
372
+ CD_FDIAGONAL = 2
373
+ CD_BDIAGONAL = 3
374
+ CD_CROSS = 4
375
+ CD_DIAGCROSS = 5
376
+
377
+ # :section: CD interior style
378
+
379
+ CD_SOLID = 0
380
+ CD_HATCH = 1
381
+ CD_STIPPLE = 2
382
+ CD_PATTERN = 3
383
+ CD_HOLLOW = 4
384
+
385
+ # :section: CD text alignment
386
+
387
+ CD_NORTH = 0
388
+ CD_SOUTH = 1
389
+ CD_EAST = 2
390
+ CD_WEST = 3
391
+ CD_NORTH_EAST = 4
392
+ CD_NORTH_WEST = 5
393
+ CD_SOUTH_EAST = 6
394
+ CD_SOUTH_WEST = 7
395
+ CD_CENTER = 8
396
+ CD_BASE_LEFT = 9
397
+ CD_BASE_CENTER = 10
398
+ CD_BASE_RIGHT = 11
399
+
400
+ # :section: CD text style
401
+
402
+ CD_PLAIN = 0
403
+ CD_BOLD = 1
404
+ CD_ITALIC = 2
405
+ CD_UNDERLINE = 4
406
+ CD_STRIKEOUT = 8
407
+
408
+ # compatibility name
409
+ CD_BOLD_ITALIC = (CD_BOLD|CD_ITALIC)
410
+
411
+ # :section: CD font sizes
412
+
413
+ CD_SMALL = 8
414
+ CD_STANDARD = 12
415
+ CD_LARGE = 18
416
+
417
+ # :section: CD context capabilities
418
+
419
+ CD_CAP_NONE = 0x00000000
420
+ CD_CAP_FLUSH = 0x00000001
421
+ CD_CAP_CLEAR = 0x00000002
422
+ CD_CAP_PLAY = 0x00000004
423
+ CD_CAP_YAXIS = 0x00000008
424
+ CD_CAP_CLIPAREA = 0x00000010
425
+ CD_CAP_CLIPPOLY = 0x00000020
426
+ CD_CAP_REGION = 0x00000040
427
+ CD_CAP_RECT = 0x00000080
428
+ CD_CAP_CHORD = 0x00000100
429
+ CD_CAP_IMAGERGB = 0x00000200
430
+ CD_CAP_IMAGERGBA = 0x00000400
431
+ CD_CAP_IMAGEMAP = 0x00000800
432
+ CD_CAP_GETIMAGERGB = 0x00001000
433
+ CD_CAP_IMAGESRV = 0x00002000
434
+ CD_CAP_BACKGROUND = 0x00004000
435
+ CD_CAP_BACKOPACITY = 0x00008000
436
+ CD_CAP_WRITEMODE = 0x00010000
437
+ CD_CAP_LINESTYLE = 0x00020000
438
+ CD_CAP_LINEWITH = 0x00040000
439
+ CD_CAP_FPRIMTIVES = 0x00080000
440
+ CD_CAP_HATCH = 0x00100000
441
+ CD_CAP_STIPPLE = 0x00200000
442
+ CD_CAP_PATTERN = 0x00400000
443
+ CD_CAP_FONT = 0x00800000
444
+ CD_CAP_FONTDIM = 0x01000000
445
+ CD_CAP_TEXTSIZE = 0x02000000
446
+ CD_CAP_TEXTORIENTATION = 0x04000000
447
+ CD_CAP_PALETTE = 0x08000000
448
+ CD_CAP_LINECAP = 0x10000000
449
+ CD_CAP_LINEJOIN = 0x20000000
450
+ CD_CAP_PATH = 0x40000000
451
+ CD_CAP_BEZIER = 0x80000000
452
+ CD_CAP_ALL = 0xFFFFFFFF
453
+
454
+ # :section: CD simulation flags
455
+
456
+ CD_SIM_NONE = 0x0000
457
+ CD_SIM_LINE = 0x0001
458
+ CD_SIM_RECT = 0x0002
459
+ CD_SIM_BOX = 0x0004
460
+ CD_SIM_ARC = 0x0008
461
+ CD_SIM_SECTOR = 0x0010
462
+ CD_SIM_CHORD = 0x0020
463
+ CD_SIM_POLYLINE = 0x0040
464
+ CD_SIM_POLYGON = 0x0080
465
+ CD_SIM_TEXT = 0x0100
466
+ CD_SIM_ALL = 0xFFFF
467
+
468
+ CD_SIM_LINES = (CD_SIM_LINE | CD_SIM_RECT | CD_SIM_ARC | CD_SIM_POLYLINE)
469
+ CD_SIM_FILLS = (CD_SIM_BOX | CD_SIM_SECTOR | CD_SIM_CHORD | CD_SIM_POLYGON)
470
+
471
+ # :section: CD colors
472
+
473
+ CD_RED = 0xFF0000 # 255, 0, 0
474
+ CD_DARK_RED = 0x800000 # 128, 0, 0
475
+ CD_GREEN = 0x00FF00 # 0,255, 0
476
+ CD_DARK_GREEN = 0x008000 # 0,128, 0
477
+ CD_BLUE = 0x0000FF # 0, 0,255
478
+ CD_DARK_BLUE = 0x000080 # 0, 0,128
479
+
480
+ CD_YELLOW = 0xFFFF00 # 255,255, 0
481
+ CD_DARK_YELLOW = 0x808000 # 128,128, 0
482
+ CD_MAGENTA = 0xFF00FF # 255, 0,255
483
+ CD_DARK_MAGENTA = 0x800080 # 128, 0,128
484
+ CD_CYAN = 0x00FFFF # 0,255,255
485
+ CD_DARK_CYAN = 0x008080 # 0,128,128
486
+
487
+ CD_WHITE = 0xFFFFFF # 255,255,255
488
+ CD_BLACK = 0x000000 # 0, 0, 0
489
+
490
+ CD_DARK_GRAY = 0x808080 # 128,128,128
491
+ CD_GRAY = 0xC0C0C0 # 192,192,192
492
+
493
+ # :section: CD conversion factors
494
+
495
+ # milimeters to points (pt = CD_MM2PT * mm)
496
+ CD_MM2PT = 2.834645669
497
+ # radians to degrees (deg = CD_RAD2DEG * rad)
498
+ CD_RAD2DEG = 57.295779513
499
+ # degrees to radians (rad = CD_DEG2RAD * deg)
500
+ CD_DEG2RAD = 0.01745329252
501
+
502
+ # :section:
503
+ end
504
+
@@ -0,0 +1,129 @@
1
+ module Iup
2
+
3
+ # Creates a dial for setting an angular variable.
4
+ #
5
+ # === Example
6
+ #
7
+ # The following creates a horizontal dial which updates a label whenever its value
8
+ # changes.
9
+ #
10
+ # Iup::Dial.new do |d|
11
+ # d.valuechanged_cb = ->{
12
+ # label.title = "dial value: #{'%0.2f' % d.value}"
13
+ # Iup::DEFAULT
14
+ # }
15
+ # end
16
+ #
17
+ class Dial < Iup::Canvas
18
+
19
+ # Creates a new instance.
20
+ # If a block is given, the new instance is yielded to it.
21
+ # * +orientation+ - 'horizontal' / 'vertical' / 'circular'
22
+ def initialize(orientation = 'horizontal')
23
+ open_controls
24
+ @handle = ControlsLib.IupDial(orientation)
25
+
26
+ # run any provided block on instance, to set up further attributes
27
+ yield self if block_given?
28
+ end
29
+
30
+ # -- attributes
31
+
32
+ ##
33
+ # :attr: orientation
34
+ # Value one of 'horizontal' / 'vertical' / 'circular'.
35
+ # Horizontal or vertical orientations show a dial to be scrolled across;
36
+ # a circular orientation shows a round dial to be rotated.
37
+ define_attribute :orientation
38
+
39
+ ##
40
+ # :attr: unit
41
+ # 'radians' / 'degrees' - used in the callbacks.
42
+ define_attribute :unit
43
+
44
+ ##
45
+ # :attr: value
46
+ # Angular value of dial in radians. Except for circular dials, the value
47
+ # resets to 0 when interaction begins.
48
+
49
+ # --
50
+ def value
51
+ IupLib.IupGetAttribute(@handle, 'VALUE').first.to_f
52
+ end
53
+
54
+ def value= val # :nodoc:
55
+ IupLib.IupSetAttribute(@handle, 'VALUE', val.to_s)
56
+ end
57
+
58
+ # :section: Callbacks
59
+
60
+ include ButtonCallback
61
+
62
+ ##
63
+ # :attr_writer: button_press_cb
64
+ # Called when the user presses the left mouse button over the dial.
65
+ # Callback must respond to +call+ and is a 1-argument function: (angle)
66
+ # * +angle+ - zero when interaction starts, except for the circular dial.
67
+
68
+ # --
69
+ def button_press_cb= callback
70
+ unless callback.arity == 1
71
+ raise ArgumentError, 'button_press_cb callback must take 1 argument: (angle)'
72
+ end
73
+ cb = Proc.new do |ih, angle|
74
+ callback.call angle
75
+ end
76
+ define_callback cb, 'BUTTON_PRESS_CB', :d_i
77
+ end
78
+
79
+ ##
80
+ # :attr_writer: button_release_cb
81
+ # Called when the user releases the left mouse button after pressing it over the dial.
82
+ # Callback must respond to +call+ and is a 1-argument function: (angle)
83
+ # * +angle+ - the dial value, converted according to #unit.
84
+
85
+ # --
86
+ def button_release_cb= callback
87
+ unless callback.arity == 1
88
+ raise ArgumentError, 'button_release_cb callback must take 1 argument: (angle)'
89
+ end
90
+ cb = Proc.new do |ih, angle|
91
+ callback.call angle
92
+ end
93
+ define_callback cb, 'BUTTON_RELEASE_CB', :d_i
94
+ end
95
+
96
+ ##
97
+ # :attr_writer: mousemove_cb
98
+ # Called each time the user moves the dial with the mouse button pressed.
99
+ # Callback must respond to +call+ and is a 1-argument function: (angle)
100
+ # * +angle+ - the dial value, converted according to #unit.
101
+
102
+ # --
103
+ def mousemove_cb= callback
104
+ unless callback.arity == 1
105
+ raise ArgumentError, 'mousemove_cb callback must take 1 argument: (angle)'
106
+ end
107
+ cb = Proc.new do |ih, angle|
108
+ callback.call angle
109
+ end
110
+ define_callback cb, 'MOUSEMOVE_CB', :d_i
111
+ end
112
+
113
+ ##
114
+ # :attr_writer: valuechanged_cb
115
+ # Called after the value was interactively changed by the user.
116
+ # Callback must respond to +call+ and take no arguments.
117
+
118
+ # --
119
+ def valuechanged_cb= callback
120
+ unless callback.arity.zero?
121
+ raise ArgumentError, 'valuechanged_cb callback must take 0 arguments'
122
+ end
123
+ cb = Proc.new do |ih|
124
+ callback.call
125
+ end
126
+ define_callback cb, 'VALUECHANGED_CB', :plain
127
+ end
128
+ end
129
+ end