rndk 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -4
  3. data/TODO +21 -1
  4. data/demos/appointment.rb +279 -299
  5. data/demos/clock.rb +13 -8
  6. data/demos/rss-reader.rb +84 -0
  7. data/examples/01-hello-world.rb +13 -11
  8. data/examples/02-colors.rb +14 -21
  9. data/examples/03-markup.rb +7 -7
  10. data/examples/04-quick-widgets.rb +2 -2
  11. data/examples/05-position-widget.rb +50 -31
  12. data/examples/06-callbacks.rb +77 -0
  13. data/examples/07-traverse.rb +90 -0
  14. data/examples/10-all-widgets.rb +165 -0
  15. data/examples/calendar.rb +20 -32
  16. data/examples/entry.rb +15 -20
  17. data/examples/label.rb +11 -11
  18. data/examples/scroll.rb +16 -60
  19. data/examples/slider.rb +18 -19
  20. data/examples/viewer.rb +65 -0
  21. data/lib/rndk.rb +28 -7
  22. data/lib/rndk/alphalist.rb +309 -313
  23. data/lib/rndk/button.rb +239 -157
  24. data/lib/rndk/buttonbox.rb +136 -103
  25. data/lib/rndk/calendar.rb +246 -203
  26. data/lib/rndk/core/color.rb +63 -13
  27. data/lib/rndk/core/display.rb +1 -1
  28. data/lib/rndk/core/draw.rb +11 -11
  29. data/lib/rndk/core/markup.rb +21 -21
  30. data/lib/rndk/core/quick_widgets.rb +75 -96
  31. data/lib/rndk/core/screen.rb +145 -102
  32. data/lib/rndk/core/traverse.rb +150 -136
  33. data/lib/rndk/core/utils.rb +5 -6
  34. data/lib/rndk/core/widget.rb +207 -191
  35. data/lib/rndk/core/widget_bind.rb +108 -0
  36. data/lib/rndk/dialog.rb +88 -56
  37. data/lib/rndk/entry.rb +79 -64
  38. data/lib/rndk/fscale.rb +38 -20
  39. data/lib/rndk/fslider.rb +38 -23
  40. data/lib/rndk/graph.rb +92 -53
  41. data/lib/rndk/itemlist.rb +80 -62
  42. data/lib/rndk/label.rb +111 -77
  43. data/lib/rndk/radio.rb +138 -128
  44. data/lib/rndk/scale.rb +123 -122
  45. data/lib/rndk/scroll.rb +444 -391
  46. data/lib/rndk/scroller.rb +21 -21
  47. data/lib/rndk/slider.rb +149 -140
  48. data/lib/rndk/template.rb +74 -61
  49. data/lib/rndk/version.rb +1 -1
  50. data/lib/rndk/viewer.rb +499 -298
  51. metadata +8 -14
  52. data/demos/fileview.rb +0 -141
  53. data/lib/rndk/dscale.rb +0 -13
  54. data/lib/rndk/fselect.rb +0 -938
  55. data/lib/rndk/histogram.rb +0 -412
  56. data/lib/rndk/marquee.rb +0 -244
  57. data/lib/rndk/matrix.rb +0 -1189
  58. data/lib/rndk/mentry.rb +0 -619
  59. data/lib/rndk/menu.rb +0 -478
  60. data/lib/rndk/selection.rb +0 -630
  61. data/lib/rndk/swindow.rb +0 -766
  62. data/lib/rndk/uscale.rb +0 -14
  63. data/lib/rndk/uslider.rb +0 -14
@@ -0,0 +1,108 @@
1
+
2
+ module RNDK
3
+ class Widget
4
+
5
+ # Returns the internal Widget that accepts key bindings.
6
+ #
7
+ # Some widgets are made of others.
8
+ # So when we bind keys to those complex widgets,
9
+ # we can specify which internal Widget accepts keybindings.
10
+ #
11
+ # For example, on an Alphalist (which is composed of Scroll
12
+ # and Entry), we bind keys to the Entry, not Scroll.
13
+ #
14
+ def bindable_widget rndktype
15
+ return nil if rndktype != @widget_type
16
+
17
+
18
+ if [:Fselect, :alphalist].include? @widget_type
19
+ return @entry_field
20
+
21
+ else
22
+ return self
23
+ end
24
+ end
25
+
26
+ # Binds a `function` to a `key`.
27
+ #
28
+ def bind_key(key, data=nil, &action)
29
+ obj = self.bindable_widget @widget_type
30
+
31
+ if (key.ord >= Ncurses::KEY_MAX) or (key.ord.zero?) or (obj.nil?)
32
+ return
33
+ end
34
+
35
+ obj.binding_list[key.ord] = [action, data]
36
+ end
37
+
38
+ def unbind_key key
39
+ obj = self.bindable_widget @widget_type
40
+
41
+ obj.binding_list.delete(key) unless obj.nil?
42
+ end
43
+
44
+ def clean_bindings
45
+ obj = self.bindable_widget @widget_type
46
+
47
+ if (not obj.nil?) and (not obj.binding_list.nil?)
48
+ obj.binding_list.clear
49
+ end
50
+ end
51
+
52
+ # Runs any binding that's set for `key`.
53
+ #
54
+ # @return The binding's return value or `false`, if no
55
+ # keybinding for `key` exists.
56
+
57
+ def run_key_binding key
58
+ obj = self.bindable_widget @widget_type
59
+
60
+ return false if obj.nil? or (not obj.binding_list.include? key)
61
+
62
+ function = obj.binding_list[key][0]
63
+ data = obj.binding_list[key][1]
64
+
65
+ # What the heck is this?
66
+ return data if function == :getc
67
+
68
+ function.call data
69
+ end
70
+
71
+ # Tells if the key binding for the key exists.
72
+ def is_bound? key
73
+ obj = self.bindable_widget @widget_type
74
+ return false if obj.nil?
75
+
76
+ obj.binding_list.include? key
77
+ end
78
+
79
+ # Binds an `action` to be executed when
80
+ # `signal` is activated.
81
+ def bind_signal(signal, &action)
82
+ return unless @supported_signals.include? signal
83
+
84
+ @actions[signal] = [] if @actions[signal].nil?
85
+
86
+ @actions[signal] << action
87
+ end
88
+
89
+ # Runs all actions based on `signal`, passing `data` as an
90
+ # argument.
91
+ #
92
+ # @note It interrupts executing when any action returns
93
+ # `false`.
94
+ # @return `true` if all actions were executed or no actions
95
+ # exist, `false` if they were interrupted.
96
+ def run_signal_binding(signal, data=nil)
97
+ return true if @actions[signal].nil?
98
+
99
+ @actions[signal].each do |action|
100
+ return false if action.call(data) == false
101
+ end
102
+
103
+ true
104
+ end
105
+
106
+ end
107
+ end
108
+
@@ -1,33 +1,72 @@
1
1
  require 'rndk'
2
2
 
3
3
  module RNDK
4
- class DIALOG < Widget
4
+
5
+ class Dialog < Widget
6
+
5
7
  attr_reader :current_button
8
+
6
9
  MIN_DIALOG_WIDTH = 10
7
10
 
8
- def initialize(rndkscreen, xplace, yplace, mesg, rows, button_label,
9
- button_count, highlight, separator, box, shadow)
11
+ def initialize(screen, config={})
10
12
  super()
11
- box_width = DIALOG::MIN_DIALOG_WIDTH
13
+ @widget_type = :dialog
14
+ @supported_signals += [:before_input, :after_input,
15
+ :before_pressing, :after_pressing]
16
+
17
+ x = 0
18
+ y = 0
19
+ text = "dialog"
20
+ buttons = ["button"]
21
+ highlight = RNDK::Color[:reverse]
22
+ separator = true
23
+ box = true
24
+ shadow = false
25
+
26
+ config.each do |key, val|
27
+ x = val if key == :x
28
+ y = val if key == :y
29
+ text = val if key == :text
30
+ buttons = val if key == :buttons
31
+ highlight = val if key == :highlight
32
+ separator = val if key == :separator
33
+ box = val if key == :box
34
+ shadow = val if key == :shadow
35
+ end
36
+
37
+ # Adjusting if the user sent us a String as text
38
+ text = [text] if text.class == String
39
+ return nil if text.class != Array or text.empty?
40
+ rows = text.size
41
+
42
+ # Adjusting if the user sent us a String as buttons
43
+ buttons = [buttons] if buttons.class == String
44
+ return nil if buttons.class != Array or buttons.empty?
45
+ button_count = buttons.size
46
+
47
+ box_width = Dialog::MIN_DIALOG_WIDTH
12
48
  max_message_width = -1
13
49
  button_width = 0
14
- xpos = xplace
15
- ypos = yplace
50
+ xpos = x
51
+ ypos = y
16
52
  temp = 0
17
53
  buttonadj = 0
18
54
  @info = []
19
55
  @info_len = []
20
56
  @info_pos = []
21
- @button_label = []
57
+ @buttons = []
22
58
  @button_len = []
23
59
  @button_pos = []
24
60
 
61
+ @screen = screen
62
+ @parent = screen.window
63
+
25
64
  if rows <= 0 || button_count <= 0
26
65
  self.destroy
27
66
  return nil
28
67
  end
29
68
 
30
- self.set_box(box)
69
+ self.set_box box
31
70
  box_height = if separator then 1 else 0 end
32
71
  box_height += rows + 2 * @border_size + 1
33
72
 
@@ -35,7 +74,7 @@ module RNDK
35
74
  (0...rows).each do |x|
36
75
  info_len = []
37
76
  info_pos = []
38
- @info << RNDK.char2Chtype(mesg[x], info_len, info_pos)
77
+ @info << RNDK.char2Chtype(text[x], info_len, info_pos)
39
78
  @info_len << info_len[0]
40
79
  @info_pos << info_pos[0]
41
80
  max_message_width = [max_message_width, info_len[0]].max
@@ -44,7 +83,7 @@ module RNDK
44
83
  # Translate the button label string to a chtype array
45
84
  (0...button_count).each do |x|
46
85
  button_len = []
47
- @button_label << RNDK.char2Chtype(button_label[x], button_len, [])
86
+ @buttons << RNDK.char2Chtype(buttons[x], button_len, [])
48
87
  @button_len << button_len[0]
49
88
  button_width += button_len[0] + 1
50
89
  end
@@ -58,13 +97,11 @@ module RNDK
58
97
  # Now we have to readjust the x and y positions.
59
98
  xtmp = [xpos]
60
99
  ytmp = [ypos]
61
- RNDK.alignxy(rndkscreen.window, xtmp, ytmp, box_width, box_height)
100
+ RNDK.alignxy(screen.window, xtmp, ytmp, box_width, box_height)
62
101
  xpos = xtmp[0]
63
102
  ypos = ytmp[0]
64
103
 
65
104
  # Set up the dialog box attributes.
66
- @screen = rndkscreen
67
- @parent = rndkscreen.window
68
105
  @win = Ncurses.newwin(box_height, box_width, ypos, xpos)
69
106
  @shadow_win = nil
70
107
  @button_count = button_count
@@ -105,20 +142,20 @@ module RNDK
105
142
  end
106
143
 
107
144
  # Register this baby.
108
- rndkscreen.register(:DIALOG, self)
145
+ screen.register(@widget_type, self)
109
146
  end
110
147
 
111
148
  # This lets the user select the button.
112
- def activate(actions)
149
+ def activate(actions=[])
113
150
  input = 0
114
151
 
115
152
  # Draw the dialog box.
116
- self.draw(@box)
153
+ self.draw
117
154
 
118
155
  # Lets move to the first button.
119
156
  Draw.writeChtypeAttrib(@win,
120
157
  @button_pos[@current_button],
121
- @box_height - 1 - @border_size, @button_label[@current_button],
158
+ @box_height - 1 - @border_size, @buttons[@current_button],
122
159
  @highlight,
123
160
  RNDK::HORIZONTAL,
124
161
  0,
@@ -127,7 +164,7 @@ module RNDK
127
164
 
128
165
  if actions.nil? || actions.size == 0
129
166
  while true
130
- input = self.getch([])
167
+ input = self.getch
131
168
 
132
169
  # Inject the character into the widget.
133
170
  ret = self.inject(input)
@@ -151,27 +188,26 @@ module RNDK
151
188
  end
152
189
 
153
190
  # This injects a single character into the dialog widget
154
- def inject(input)
191
+ def inject input
155
192
  first_button = 0
156
193
  last_button = @button_count - 1
157
- pp_return = 1
158
- ret = -1
194
+ pp_return = true
195
+ ret = false
159
196
  complete = false
160
197
 
161
198
  # Set the exit type.
162
199
  self.set_exit_type(0)
163
200
 
164
201
  # Check if there is a pre-process function to be called.
165
- unless @pre_process_func.nil?
166
- pp_return = @pre_process_func.call(:DIALOG, self,
167
- @pre_process_data, input)
168
- end
202
+ keep_going = self.run_signal_binding(:before_input, input)
203
+
204
+ if keep_going
169
205
 
170
- # Should we continue?
171
- if pp_return != 0
172
206
  # Check for a key binding.
173
- if self.checkBind(:DIALOG, input)
174
- complete = true
207
+ if self.is_bound? input
208
+ self.run_key_binding input
209
+ #complete = true
210
+
175
211
  else
176
212
  case input
177
213
  when Ncurses::KEY_LEFT, Ncurses::KEY_BTAB, Ncurses::KEY_BACKSPACE
@@ -196,22 +232,24 @@ module RNDK
196
232
  complete = true
197
233
  when Ncurses::ERR
198
234
  self.set_exit_type(input)
235
+
199
236
  when Ncurses::KEY_ENTER, RNDK::KEY_RETURN
200
- self.set_exit_type(input)
201
- ret = @current_button
202
- complete = true
237
+ keep_going = self.run_signal_binding(:before_pressing, @current_button)
238
+ if keep_going
239
+ self.set_exit_type(input)
240
+ ret = @current_button
241
+ complete = true
242
+ self.run_signal_binding(:after_pressing, ret)
243
+ end
203
244
  end
204
245
  end
205
246
 
206
247
  # Should we call a post_process?
207
- if !complete && !(@post_process_func.nil?)
208
- @post_process_func.call(:DIALOG, self,
209
- @post_process_data, input)
210
- end
248
+ self.run_signal_binding(:after_input) if not complete
211
249
  end
212
250
 
213
251
  unless complete
214
- self.drawButtons
252
+ self.draw_buttons
215
253
  Ncurses.wrefresh @win
216
254
  self.set_exit_type(0)
217
255
  end
@@ -221,16 +259,14 @@ module RNDK
221
259
  end
222
260
 
223
261
  # This function draws the dialog widget.
224
- def draw(box)
262
+ def draw
225
263
  # Is there a shadow?
226
264
  unless @shadow_win.nil?
227
265
  Draw.drawShadow(@shadow_win)
228
266
  end
229
267
 
230
268
  # Box the widget if they asked.
231
- if box
232
- Draw.drawObjBox(@win, self)
233
- end
269
+ Draw.drawObjBox(@win, self) if @box
234
270
 
235
271
  # Draw in the message.
236
272
  (0...@message_rows).each do |x|
@@ -244,7 +280,7 @@ module RNDK
244
280
  end
245
281
 
246
282
  # Draw in the buttons.
247
- self.drawButtons
283
+ self.draw_buttons
248
284
 
249
285
  Ncurses.wrefresh @win
250
286
  end
@@ -256,15 +292,15 @@ module RNDK
256
292
  RNDK.window_delete(@shadow_win)
257
293
 
258
294
  # Clean the key bindings
259
- self.clean_bindings(:DIALOG)
295
+ self.clean_bindings
260
296
 
261
- # Unregister this object
262
- RNDK::Screen.unregister(:DIALOG, self)
297
+ # Unregister this widget
298
+ @screen.unregister self
263
299
  end
264
300
 
265
301
  # This function erases the dialog widget from the screen.
266
302
  def erase
267
- if self.valid_widget?
303
+ if self.valid?
268
304
  RNDK.window_erase(@win)
269
305
  RNDK.window_erase(@shadow_win)
270
306
  end
@@ -296,17 +332,17 @@ module RNDK
296
332
  end
297
333
 
298
334
  # This sets the background attribute of the widget.
299
- def set_bg_attrib(attrib)
335
+ def set_bg_color(attrib)
300
336
  Ncurses.wbkgd(@win, attrib)
301
337
  end
302
338
 
303
339
  # This draws the dialog buttons and the separation line.
304
- def drawButtons
340
+ def draw_buttons
305
341
  (0...@button_count).each do |x|
306
342
  Draw.writeChtype(@win,
307
343
  @button_pos[x],
308
344
  @box_height -1 - @border_size,
309
- @button_label[x],
345
+ @buttons[x],
310
346
  RNDK::HORIZONTAL,
311
347
  0,
312
348
  @button_len[x])
@@ -335,7 +371,7 @@ module RNDK
335
371
  Draw.writeChtypeAttrib(@win,
336
372
  @button_pos[@current_button],
337
373
  @box_height - 1 - @border_size,
338
- @button_label[@current_button],
374
+ @buttons[@current_button],
339
375
  @highlight,
340
376
  RNDK::HORIZONTAL,
341
377
  0,
@@ -343,15 +379,11 @@ module RNDK
343
379
  end
344
380
 
345
381
  def focus
346
- self.draw @box
382
+ self.draw
347
383
  end
348
384
 
349
385
  def unfocus
350
- self.draw @box
351
- end
352
-
353
- def object_type
354
- :DIALOG
386
+ self.draw
355
387
  end
356
388
 
357
389
  def position
@@ -84,26 +84,25 @@ module RNDK
84
84
  attr_reader :win, :box_height, :box_width, :max, :field_width
85
85
  attr_reader :min, :max
86
86
 
87
-
88
87
  # Creates an Entry Widget.
89
88
  #
90
89
  # ## Arguments
91
90
  #
92
- # * `xplace` is the x position - can be an integer or
91
+ # * `x` is the x position - can be an integer or
93
92
  # `RNDK::LEFT`, `RNDK::RIGHT`, `RNDK::CENTER`.
94
- # * `yplace` is the y position - can be an integer or
93
+ # * `y` is the y position - can be an integer or
95
94
  # `RNDK::TOP`, `RNDK::BOTTOM`, `RNDK::CENTER`.
96
95
  # * `title` can be more than one line - just split them
97
96
  # with `\n`s.
98
97
  # * `label` is the String that will appear on the label
99
98
  # of the Entry field.
100
- # * `field_attr` is the attribute/color of the characters
99
+ # * `field_color` is the attribute/color of the characters
101
100
  # that are typed in.
102
101
  # * `filler_char` is the character to display on the
103
102
  # empty spaces in the entry field.
104
103
  # * `disp_type` tells how the entry field will behave.
105
104
  # _See main Entry documentation_.
106
- # * `f_width` is the width of the field. It it's 0,
105
+ # * `field_width` is the width of the field. It it's 0,
107
106
  # will be created with full width of the screen.
108
107
  # If it's a negative value, will create with full width
109
108
  # minus that value.
@@ -114,36 +113,57 @@ module RNDK
114
113
  # * `box` if the Widget is drawn with a box outside it.
115
114
  # * `shadow` turns on/off the shadow around the Widget.
116
115
  #
117
- def initialize(rndkscreen,
118
- xplace,
119
- yplace,
120
- title,
121
- label,
122
- field_attr,
123
- filler,
124
- disp_type,
125
- f_width,
126
- min,
127
- max,
128
- box,
129
- shadow)
116
+ def initialize(screen, config={})
130
117
  super()
118
+ @widget_type = :entry
119
+ @supported_signals += [:before_input, :after_input]
120
+
121
+ x = 0
122
+ y = 0
123
+ title = "entry"
124
+ label = "label"
125
+ field_color = RNDK::Color[:normal]
126
+ filler = '.'
127
+ disp_type = :MIXED
128
+ field_width = 0
129
+ initial_text = ""
130
+ min = 0
131
+ max = 9001
132
+ box = true
133
+ shadow = false
134
+
135
+ config.each do |key, val|
136
+ x = val if key == :x
137
+ y = val if key == :y
138
+ title = val if key == :title
139
+ label = val if key == :label
140
+ field_color = val if key == :field_color
141
+ filler = val if key == :filler
142
+ disp_type = val if key == :disp_type
143
+ field_width = val if key == :field_width
144
+ initial_text = val if key == :initial_text
145
+ min = val if key == :min
146
+ max = val if key == :max
147
+ box = val if key == :box
148
+ shadow = val if key == :shadow
149
+ end
131
150
 
132
- parent_width = Ncurses.getmaxx rndkscreen.window
133
- parent_height = Ncurses.getmaxy rndkscreen.window
151
+ parent_width = Ncurses.getmaxx screen.window
152
+ parent_height = Ncurses.getmaxy screen.window
134
153
 
135
- field_width = f_width
154
+ field_width = field_width
136
155
  box_width = 0
137
156
 
138
- xpos = xplace
139
- ypos = yplace
157
+ xpos = x
158
+ ypos = y
140
159
 
141
160
  self.set_box box
142
161
  box_height = @border_size*2 + 1
143
162
 
144
- # If the field_width is a negative value, the field_width will be
145
- # COLS-field_width, otherwise the field_width will be the given width.
146
- field_width = RNDK.setWidgetDimension(parent_width, field_width, 0)
163
+ # If the field_width is a negative value, the field_width
164
+ # WILL be COLS-field_width, otherwise the field_width will
165
+ # be the given width.
166
+ field_width = RNDK.set_widget_dimension(parent_width, field_width, 0)
147
167
  box_width = field_width + 2*@border_size
148
168
 
149
169
  # Set some basic values of the entry field.
@@ -174,12 +194,12 @@ module RNDK
174
194
  # Rejustify the x and y positions if we need to.
175
195
  xtmp = [xpos]
176
196
  ytmp = [ypos]
177
- RNDK.alignxy(rndkscreen.window, xtmp, ytmp, box_width, box_height)
197
+ RNDK.alignxy(screen.window, xtmp, ytmp, box_width, box_height)
178
198
  xpos = xtmp[0]
179
199
  ypos = ytmp[0]
180
200
 
181
201
  # Make the label window.
182
- @win = Ncurses.subwin(rndkscreen.window, box_height, box_width, ypos, xpos)
202
+ @win = Ncurses.subwin(screen.window, box_height, box_width, ypos, xpos)
183
203
  if @win.nil?
184
204
  self.destroy
185
205
  return nil
@@ -211,10 +231,10 @@ module RNDK
211
231
  @info_width = max + 3
212
232
 
213
233
  # Set up the rest of the structure.
214
- @screen = rndkscreen
215
- @parent = rndkscreen.window
234
+ @screen = screen
235
+ @parent = screen.window
216
236
  @shadow_win = nil
217
- @field_attr = field_attr
237
+ @field_color = field_color
218
238
  @field_width = field_width
219
239
  @filler = filler
220
240
  @hidden = filler
@@ -255,16 +275,18 @@ module RNDK
255
275
  end
256
276
  end
257
277
 
278
+ self.set_text initial_text
279
+
258
280
  # Do we want a shadow?
259
281
  if shadow
260
- @shadow_win = Ncurses.subwin(rndkscreen.window,
282
+ @shadow_win = Ncurses.subwin(screen.window,
261
283
  box_height,
262
284
  box_width,
263
285
  ypos + 1,
264
286
  xpos + 1)
265
287
  end
266
288
 
267
- rndkscreen.register(:entry, self)
289
+ screen.register(:entry, self)
268
290
  end
269
291
 
270
292
  # Activates the Entry Widget, letting the user interact with it.
@@ -280,11 +302,11 @@ module RNDK
280
302
  ret = 0
281
303
 
282
304
  # Draw the widget.
283
- self.draw(@box)
305
+ self.draw
284
306
 
285
307
  if actions.nil? or actions.size == 0
286
308
  while true
287
- input = self.getch([])
309
+ input = self.getch
288
310
 
289
311
  # Inject the character into the widget.
290
312
  ret = self.inject(input)
@@ -312,7 +334,7 @@ module RNDK
312
334
 
313
335
  # @see Widget#inject
314
336
  def inject input
315
- pp_return = 1
337
+ pp_return = true
316
338
  ret = 1
317
339
  complete = false
318
340
 
@@ -322,17 +344,15 @@ module RNDK
322
344
  # Refresh the widget field.
323
345
  self.drawField
324
346
 
325
- unless @pre_process_func.nil?
326
- pp_return = @pre_process_func.call(:entry, self,
327
- @pre_process_data, input)
328
- end
347
+ # Check if there is a pre-process function to be called.
348
+ keep_going = self.run_signal_binding(:before_input, input)
329
349
 
330
- # Should we continue?
331
- if pp_return != 0
350
+ if keep_going
332
351
 
333
352
  # Check a predefined binding
334
- if self.checkBind(:entry, input)
335
- complete = true
353
+ if self.is_bound? input
354
+ self.run_key_binding input
355
+ #complete = true
336
356
 
337
357
  else
338
358
  curr_pos = @screen_col + @left_char
@@ -472,9 +492,8 @@ module RNDK
472
492
  end
473
493
  end
474
494
 
475
- if !complete && !(@post_process_func.nil?)
476
- @post_process_func.call(:entry, self, @post_process_data, input)
477
- end
495
+ # Should we do a post-process?
496
+ self.run_signal_binding(:after_input) if not complete
478
497
  end
479
498
 
480
499
  unless complete
@@ -486,10 +505,10 @@ module RNDK
486
505
  end
487
506
 
488
507
  # @see Widget#move
489
- def move(xplace, yplace, relative, refresh_flag)
508
+ def move(x, y, relative, refresh_flag)
490
509
  windows = [@win, @field_win, @label_win, @shadow_win]
491
510
 
492
- self.move_specific(xplace, yplace, relative, refresh_flag, windows, [])
511
+ self.move_specific(x, y, relative, refresh_flag, windows, [])
493
512
  end
494
513
 
495
514
  # Clears the text from the entry field.
@@ -512,14 +531,14 @@ module RNDK
512
531
  # Draws the Widget on the Screen.
513
532
  #
514
533
  # If `box` is true, it is drawn with a box.
515
- def draw box
534
+ def draw
516
535
  # Did we ask for a shadow?
517
536
  Draw.drawShadow @shadow_win unless @shadow_win.nil?
518
537
 
519
538
  # Box the widget if asked.
520
- Draw.drawObjBox(@win, self) if box
539
+ Draw.drawObjBox(@win, self) if @box
521
540
 
522
- self.drawTitle @win
541
+ self.draw_title @win
523
542
  Ncurses.wrefresh @win
524
543
 
525
544
  # Draw in the label to the widget.
@@ -540,7 +559,7 @@ module RNDK
540
559
 
541
560
  # @see Widget#erase
542
561
  def erase
543
- if self.valid_widget?
562
+ if self.valid?
544
563
  RNDK.window_erase(@field_win)
545
564
  RNDK.window_erase(@label_win)
546
565
  RNDK.window_erase(@win)
@@ -550,16 +569,16 @@ module RNDK
550
569
 
551
570
  # @see Widget#destroy
552
571
  def destroy
553
- self.cleanTitle
572
+ self.clean_title
554
573
 
555
574
  RNDK.window_delete(@field_win)
556
575
  RNDK.window_delete(@label_win)
557
576
  RNDK.window_delete(@shadow_win)
558
577
  RNDK.window_delete(@win)
559
578
 
560
- self.clean_bindings(:entry)
579
+ self.clean_bindings
561
580
 
562
- RNDK::Screen.unregister(:entry, self)
581
+ @screen.unregister self
563
582
  end
564
583
 
565
584
  # Sets multiple attributes of the Widget.
@@ -635,7 +654,7 @@ module RNDK
635
654
  end
636
655
 
637
656
  # Sets the background attribute/color of the widget.
638
- def set_bg_attrib attrib
657
+ def set_bg_color attrib
639
658
  Ncurses.wbkgd(@win, attrib)
640
659
  Ncurses.wbkgd(@field_win, attrib)
641
660
 
@@ -648,7 +667,7 @@ module RNDK
648
667
  # See Ncurses#curs_set.
649
668
  def set_highlight(highlight, cursor)
650
669
  Ncurses.wbkgd(@field_win, highlight)
651
- @field_attr = highlight
670
+ @field_color = highlight
652
671
  Ncurses.curs_set cursor
653
672
 
654
673
  # FIXME(original) - if (cursor) { move the cursor to this widget }
@@ -660,7 +679,7 @@ module RNDK
660
679
  end
661
680
 
662
681
  def unfocus
663
- self.draw box
682
+ self.draw
664
683
  Ncurses.wrefresh @field_win
665
684
  end
666
685
 
@@ -669,10 +688,6 @@ module RNDK
669
688
  super @win
670
689
  end
671
690
 
672
- def object_type
673
- :entry
674
- end
675
-
676
691
  # Allows the programmer to set a different widget input handler.
677
692
  #
678
693
  # @note Unless you're very low-level and know what you're doing
@@ -696,7 +711,7 @@ module RNDK
696
711
  end
697
712
  else
698
713
  (@left_char...@info.size).each do |x|
699
- Ncurses.mvwaddch(@field_win, 0, x - @left_char, @info[x].ord | @field_attr)
714
+ Ncurses.mvwaddch(@field_win, 0, x - @left_char, @info[x].ord | @field_color)
700
715
  end
701
716
  end
702
717
  Ncurses.wmove(@field_win, 0, @screen_col)