Sha256: cedbd72faaf29dbcdd0cacc28d89b1484daeb81d09046b917f4074038e44f245
Contents?: true
Size: 1.72 KB
Versions: 3
Compression:
Stored size: 1.72 KB
Contents
module PPCurses #noinspection RubyResolve class RadioMenu < BaseMenu # TODO - duplicate code from Menu ... def initialize( menu_items, action_items=nil ) @items = Array.new @actions = Array.new @menu_length = 0 menu_items.each do |item| @items.push item @menu_length += item.length + 5 end @selection = 0 unless action_items.nil? action_items.each do |item| @actions.push item end end w_width = @menu_length + 4 @win = Window.new(3, w_width ,0, (Curses.cols - w_width) / 2) @win.timeout=-1 # Enables reading arrow keys in getch @win.keypad(true) end def show @win.box('|', '-') y = 1 x = 2 @win.setpos(y, x) for i in 0...@items.length @win.addstr( @items[i] ) if @selection == i then @win.addstr(' [*] ') else @win.addstr(' [ ] ') end end @win.refresh end def menu_selection while 1 c = @win.getch self.handle_menu_selection(c) if c == ESCAPE @win.clear @win.refresh break end end end def handle_menu_selection(c) n_choices = @items.length if c == KEY_RIGHT if @selection < n_choices - 1 then @selection += 1 else @selection = 0 end self.show end if c == KEY_LEFT if @selection > 0 then @selection -= 1 else @selection = n_choices-1 end self.show end if c == ENTER then unless @actions.nil? @actions[@selection].execute self.show end end end def selected_menu_name @items[@selection] end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ppcurses-0.1.2 | lib/ppcurses/menu/RadioMenu.rb |
ppcurses-0.1.1 | lib/ppcurses/menu/RadioMenu.rb |
ppcurses-0.1.0 | lib/ppcurses/menu/RadioMenu.rb |