module RNDK::Traverse
Public Class Methods
exit_cancel(screen)
click to toggle source
# File lib/rndk/core/traverse.rb, line 96 def Traverse.exit_cancel screen screen.exit_status = RNDK::Screen::EXITCANCEL end
exit_cancel_of(obj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 104 def Traverse.exit_cancel_of(obj) exit_cancel obj.screen end
exit_ok(screen)
click to toggle source
# File lib/rndk/core/traverse.rb, line 92 def Traverse.exit_ok screen screen.exit_status = RNDK::Screen::EXITOK end
exit_ok_of(obj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 100 def Traverse.exit_ok_of(obj) exit_ok obj.screen end
get_current_focus(screen)
click to toggle source
Returns the widget on which the focus lies.
# File lib/rndk/core/traverse.rb, line 113 def Traverse.get_current_focus(screen) result = nil n = screen.widget_focus if n >= 0 && n < screen.widget_count result = screen.widget[n] end return result end
once(screen, curobj, key_code, function_key, func_menu_key)
click to toggle source
Traverse
the screen just one time.
# File lib/rndk/core/traverse.rb, line 8 def Traverse.once(screen, curobj, key_code, function_key, func_menu_key) case key_code when Ncurses::KEY_BTAB switch_focus(set_previous_focus(screen), curobj) when RNDK::KEY_TAB switch_focus(set_next_focus(screen), curobj) when RNDK.KEY_F(10) # save data and exit exit_ok(screen) when RNDK.CTRL('X') exit_cancel screen when RNDK.CTRL('R') # reset data to defaults reset(screen) set_focus(curobj) when RNDK::REFRESH # redraw screen screen.refresh set_focus(curobj) else # not everyone wants menus, so we make them optional here if !(func_menu_key.nil?) && (func_menu_key.call(key_code, function_key)) # find and enable drop down menu screen.widget.each do |widget| if !(widget.nil?) && widget.widget_type == :MENU Traverse.handleMenu(screen, widget, curobj) end end else curobj.inject(key_code) end end end
over(screen)
click to toggle source
Traverse
continuously the widgets on a screen.
# File lib/rndk/core/traverse.rb, line 56 def Traverse.over screen result = 0 curobj = set_first_focus(screen) unless curobj.nil? refresh_data(screen) screen.exit_status = RNDK::Screen::NOEXIT while !((curobj = get_current_focus(screen)).nil?) && screen.exit_status == RNDK::Screen::NOEXIT function = [] key = curobj.getch(function) # TODO look at more direct way to do this check_menu_key = lambda do |key_code, function_key| Traverse.checkMenuKey(key_code, function_key) end Traverse.once(screen, curobj, key, function[0], check_menu_key) end if screen.exit_status == RNDK::Screen::EXITOK save_data(screen) result = 1 end end return result end
reset(screen)
click to toggle source
# File lib/rndk/core/traverse.rb, line 88 def Traverse.reset screen refresh_data(screen) end
reset_of(obj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 108 def Traverse.reset_of(obj) reset(obj.screen) end
set_current_focus(screen, newobj)
click to toggle source
Set focus to a specific widget, returning it. If the widget cannot be found, return nil.
# File lib/rndk/core/traverse.rb, line 178 def Traverse.set_current_focus(screen, newobj) result = nil curobj = nil n = getFocusIndex(screen) first = n while true n += 1 if n >= screen.widget_count n = 0 end curobj = screen.widget[n] if curobj == newobj result = curobj break elsif n == first break end end set_focusIndex(screen, if !(result.nil?) then n else -1 end) return result end
set_first_focus(screen)
click to toggle source
Set focus to the first widget in the screen.
# File lib/rndk/core/traverse.rb, line 204 def Traverse.set_first_focus(screen) set_focusIndex(screen, screen.widget_count - 1) return switch_focus(set_next_focus(screen), nil) end
set_last_focus(screen)
click to toggle source
Set focus to the last widget in the screen.
# File lib/rndk/core/traverse.rb, line 210 def Traverse.set_last_focus(screen) set_focusIndex(screen, 0) return switch_focus(set_previous_focus(screen), nil) end
set_next_focus(screen)
click to toggle source
Set focus to the next widget, returning it.
# File lib/rndk/core/traverse.rb, line 125 def Traverse.set_next_focus(screen) result = nil curobj = nil n = getFocusIndex(screen) first = n while true n+= 1 if n >= screen.widget_count n = 0 end curobj = screen.widget[n] if !(curobj.nil?) && curobj.accepts_focus result = curobj break else if n == first break end end end set_focusIndex(screen, if !(result.nil?) then n else -1 end) return result end
set_previous_focus(screen)
click to toggle source
Set focus to the previous widget, returning it.
# File lib/rndk/core/traverse.rb, line 152 def Traverse.set_previous_focus(screen) result = nil curobj = nil n = getFocusIndex(screen) first = n while true n -= 1 if n < 0 n = screen.widget_count - 1 end curobj = screen.widget[n] if !(curobj.nil?) && curobj.accepts_focus result = curobj break elsif n == first break end end set_focusIndex(screen, if !(result.nil?) then n else -1 end) return result end
Private Class Methods
checkMenuKey(key_code, function_key)
click to toggle source
# File lib/rndk/core/traverse.rb, line 257 def Traverse.checkMenuKey(key_code, function_key) key_code == RNDK::KEY_ESC && !function_key end
getFocusIndex(screen)
click to toggle source
# File lib/rndk/core/traverse.rb, line 225 def Traverse.getFocusIndex(screen) return limitFocusIndex(screen, screen.widget_focus) end
handleMenu(screen, menu, oldobj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 261 def Traverse.handleMenu(screen, menu, oldobj) done = false switch_focus(menu, oldobj) while !done key = menu.getch case key when RNDK::KEY_TAB done = true when RNDK::KEY_ESC # cleanup the menu menu.inject(key) done = true else done = (menu.inject(key) >= 0) end end if (newobj = Traverse.get_current_focus(screen)).nil? newobj = Traverse.set_next_focus(screen) end return switch_focus(newobj, menu) end
limitFocusIndex(screen, value)
click to toggle source
# File lib/rndk/core/traverse.rb, line 217 def Traverse.limitFocusIndex(screen, value) if value >= screen.widget_count || value < 0 0 else value end end
refresh_data(screen)
click to toggle source
Calls Widget#refresh_data
on all widgets of ‘screen`.
# File lib/rndk/core/traverse.rb, line 295 def Traverse.refresh_data screen screen.widget.each do |widget| widget.refresh_data unless widget.nil? end end
save_data(screen)
click to toggle source
Calls Widget#save_data
on all widgets of ‘screen`.
# File lib/rndk/core/traverse.rb, line 288 def Traverse.save_data screen screen.widget.each do |widget| widget.save_data unless widget.nil? end end
set_focus(obj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 241 def Traverse.set_focus(obj) unless obj.nil? obj.has_focus = true obj.focus end RNDK::blink_cursor true end
set_focusIndex(screen, value)
click to toggle source
# File lib/rndk/core/traverse.rb, line 229 def Traverse.set_focusIndex(screen, value) screen.widget_focus = limitFocusIndex(screen, value) end
switch_focus(newobj, oldobj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 249 def Traverse.switch_focus(newobj, oldobj) if oldobj != newobj Traverse.unset_focus(oldobj) Traverse.set_focus(newobj) end return newobj end
unset_focus(obj)
click to toggle source
# File lib/rndk/core/traverse.rb, line 233 def Traverse.unset_focus(obj) RNDK::blink_cursor false unless obj.nil? obj.has_focus = false obj.unfocus end end