Class: RubyCurses::MenuBar
Overview
An application related menubar. Currently, I am adding this to a form. But should this not be application specific ? It should popup no matter which window you are on ?? XXX
Instance Attribute Summary collapse
-
#_object_created ⇒ Object
2011-10-7 if visible then Form will call this.
-
#active_index ⇒ Object
Returns the value of attribute active_index.
-
#bgcolor ⇒ Object
2011-09-25 V1.3.1.
-
#color ⇒ Object
2011-09-25 V1.3.1.
-
#items ⇒ Object
readonly
Returns the value of attribute items.
-
#panel ⇒ Object
readonly
Returns the value of attribute panel.
-
#selected ⇒ Object
readonly
Returns the value of attribute selected.
-
#state ⇒ Object
normal, selected, highlighted.
-
#text ⇒ Object
readonly
temp 2011-09-24 V1.3.1.
-
#toggle_key ⇒ Object
key used to popup, should be set prior to attaching to form.
-
#visible ⇒ Object
Returns the value of attribute visible.
-
#window ⇒ Object
readonly
Returns the value of attribute window.
Instance Method Summary collapse
-
#add(menu) ⇒ Object
(also: #<<)
add a precreated menu.
- #create_window_menubar ⇒ Object
- #current_menu ⇒ Object
- #destroy ⇒ Object
- #focusable ⇒ Object
-
#handle_keys ⇒ Object
menubar LEFT, RIGHT, DOWN.
- #hide ⇒ Object
- #init_vars ⇒ Object
-
#initialize(&block) ⇒ MenuBar
constructor
A new instance of MenuBar.
- #keep_visible(flag = nil) ⇒ Object
-
#menu(text, &block) ⇒ Object
add a menu through the block, this would happen through instance eval 2010-09-10 12:07 added while simplifying the interface this calls add so you get the MB back, not a ref to the menu created NOTE.
- #next_menu ⇒ Object
- #prev_menu ⇒ Object
-
#repaint ⇒ Object
menubar TODO: check for menu to be flush right (only for last one).
- #set_menu(index) ⇒ Object
- #show ⇒ Object
-
#toggle ⇒ Object
called by set_menu_bar in widget.rb (class Form).
Constructor Details
#initialize(&block) ⇒ MenuBar
Returns a new instance of MenuBar.
677 678 679 680 681 682 683 684 685 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 677 def initialize &block @window = nil @text = "menubar" @items = [] init_vars @visible = false @cols = Ncurses.COLS-1 instance_eval &block if block_given? end |
Instance Attribute Details
#_object_created ⇒ Object
2011-10-7 if visible then Form will call this
676 677 678 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 676 def _object_created @_object_created end |
#active_index ⇒ Object
Returns the value of attribute active_index.
672 673 674 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 672 def active_index @active_index end |
#bgcolor ⇒ Object
2011-09-25 V1.3.1
675 676 677 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 675 def bgcolor @bgcolor end |
#color ⇒ Object
2011-09-25 V1.3.1
675 676 677 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 675 def color @color end |
#items ⇒ Object (readonly)
Returns the value of attribute items.
666 667 668 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 666 def items @items end |
#panel ⇒ Object (readonly)
Returns the value of attribute panel.
668 669 670 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 668 def panel @panel end |
#selected ⇒ Object (readonly)
Returns the value of attribute selected.
669 670 671 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 669 def selected @selected end |
#state ⇒ Object
normal, selected, highlighted
673 674 675 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 673 def state @state end |
#text ⇒ Object (readonly)
temp 2011-09-24 V1.3.1
670 671 672 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 670 def text @text end |
#toggle_key ⇒ Object
key used to popup, should be set prior to attaching to form
674 675 676 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 674 def toggle_key @toggle_key end |
#visible ⇒ Object
Returns the value of attribute visible.
671 672 673 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 671 def visible @visible end |
#window ⇒ Object (readonly)
Returns the value of attribute window.
667 668 669 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 667 def window @window end |
Instance Method Details
#add(menu) ⇒ Object Also known as: <<
add a precreated menu
694 695 696 697 698 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 694 def add #$log.debug "YYYY inside MB: add #{menu.text} " @items << return self end |
#create_window_menubar ⇒ Object
875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 875 def @layout = { :height => 1, :width => 0, :top => 0, :left => 0 } @win = VER::Window.new(@layout) @window = @win att = get_attrib @attr @win.bkgd(Ncurses.COLOR_PAIR(5)); # <---- FIXME len = @window.width len = Ncurses.COLS-0 if len == 0 # print a bar across the screen , which hopefully will not go blank in some terms @window.attron(Ncurses.COLOR_PAIR(@color_pair) | att) @window.mvhline(0, 0, 1, len) @window.attroff(Ncurses.COLOR_PAIR(@color_pair) | att) @panel = @win.panel return @window end |
#current_menu ⇒ Object
813 814 815 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 813 def @items[@active_index] end |
#destroy ⇒ Object
890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 890 def destroy $log.debug "DESTRY menubar " # when we close, but keep visible, we don't want menu to still be hightlighted # added on 2011-12-12 = @items[@active_index] .on_leave # hide its window, if open @items.each do |item| item.destroy end # TODO the current menu should not be highlighted return if @keep_visible @visible = false panel = @window.panel Ncurses::Panel.del_panel(panel.pointer) if !panel.nil? @window.delwin if !@window.nil? @window = nil end |
#focusable ⇒ Object
690 691 692 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 690 def focusable false end |
#handle_keys ⇒ Object
menubar LEFT, RIGHT, DOWN
747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 747 def handle_keys @selected = false @repaint_required = true # added 2011-12-12 otherwise keeps repainting and you see a flicker @toggle_key ||= 27 # default switch off with ESC, if nothing else defined 0 begin catch(:menubarclose) do while((ch = @window.getchar()) != @toggle_key ) #$log.debug "menuubar inside handle_keys : #{ch}" if ch != -1 case ch when -1 next when KEY_DOWN #$log.debug "insdie keyDOWN : #{ch}" if !@selected .fire else .handle_key ch end @selected = true when KEY_ENTER, 10, 13, 32 @selected = true #$log.debug " mb insdie ENTER : #{current_menu}" ret = .handle_key ch #$log.debug "ret = #{ret} mb insdie ENTER : #{current_menu}" #break; ## 2008-12-29 18:00 This will close after firing #anything break if ret == :CLOSE when KEY_UP #$log.debug " mb insdie keyUPP : #{ch}" .handle_key ch when KEY_LEFT #$log.debug " mb insdie KEYLEFT : #{ch}" ret = .handle_key ch if ret == :UNHANDLED #display_items if @selected when KEY_RIGHT #$log.debug " mb insdie KEYRIGHT : #{ch}" ret = .handle_key ch if ret == :UNHANDLED when ?\C-g.getbyte(0) # abort throw :menubarclose else #$log.debug " mb insdie ELSE : #{ch}" ret = .handle_key ch if ret == :UNHANDLED Ncurses.beep else break # we handled a menu action, close menubar (THIS WORKS FOR MNEMONICS ONLY and always) end end Ncurses::Panel.update_panels(); Ncurses.doupdate(); @window.wrefresh end end # catch ensure #ensure is required becos one can throw a :close $log.debug " DESTROY IN ENSURE" . #@@menus = [] # added 2009-01-23 13:21 @repaint_required = false destroy # Note that we destroy the menu bar upon exit end end |
#hide ⇒ Object
835 836 837 838 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 835 def hide @visible = false @window.hide if !@window.nil? # seems to cause auto-firing when we resume toggle 2011-09-26 end |
#init_vars ⇒ Object
686 687 688 689 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 686 def init_vars @active_index = 0 @repaint_required = true end |
#keep_visible(flag = nil) ⇒ Object
740 741 742 743 744 745 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 740 def keep_visible flag=nil return @keep_visible unless flag @keep_visible = flag @visible = flag self end |
#menu(text, &block) ⇒ Object
add a menu through the block, this would happen through instance eval 2010-09-10 12:07 added while simplifying the interface this calls add so you get the MB back, not a ref to the menu created NOTE
704 705 706 707 708 709 710 711 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 704 def text, &block #$log.debug "YYYY inside MB: menu text #{text} " m = Menu.new text, &block m.color = @color m.bgcolor = @bgcolor add m return m end |
#next_menu ⇒ Object
712 713 714 715 716 717 718 719 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 712 def #$log.debug "next meu: #{@active_index} " if @active_index < @items.length-1 @active_index + 1 else 0 end end |
#prev_menu ⇒ Object
720 721 722 723 724 725 726 727 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 720 def #$log.debug "prev meu: #{@active_index} " if @active_index > 0 @active_index-1 else @items.length-1 end end |
#repaint ⇒ Object
menubar TODO: check for menu to be flush right (only for last one). TODO: repaint only if needed
850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 850 def repaint return if !@visible return unless @repaint_required @repaint_required = false @color_pair = get_color($reversecolor, @color, @bgcolor) @window ||= #@window.printstring( 0, 0, "%-*s" % [@cols," "], @color_pair) # this becomes blank in some terms c = 1; r = 0; @items.each do |item| item.row = r; item.col = c; item.coffset = c; item.parent = self item.color = @color item.bgcolor = @bgcolor @window.printstring( r, c, " %s " % item.text, @color_pair) # 2011-09-26 V1.3.1 quick dirty highlighting of first menu on menubar # on opening since calling highlight was giving bug in parent.width #if c == 1 #att = Ncurses::A_REVERSE #@window.mvchgat(y=r, x=c+1, item.text.length+1, att, @color_pair, nil) #end c += (item.text.length + 2) end #@items[0].on_enter # 2011-09-25 V1.3.1 caused issues when toggling, first item fired on DOWN @items[0].highlight unless @keep_visible # 2011-09-26 V1.3.1 fixed to take both cases into account @window.wrefresh end |
#set_menu(index) ⇒ Object
728 729 730 731 732 733 734 735 736 737 738 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 728 def index #$log.debug "set meu: #{@active_index} #{index}" = @items[@active_index] .on_leave # hide its window, if open @active_index = index = @items[@active_index] .on_enter #display window, if previous was displayed @window.wmove .row, .col # menu.show # menu.window.wrefresh # XXX we need this end |
#show ⇒ Object
839 840 841 842 843 844 845 846 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 839 def show @visible = true if @window.nil? repaint # XXX FIXME else @window.show end end |
#toggle ⇒ Object
called by set_menu_bar in widget.rb (class Form).
817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 |
# File 'lib/rbcurse/core/widgets/rmenu.rb', line 817 def toggle # added keeping it visible, 2011-10-7 being tested in dbdemo if @keep_visible init_vars show @items[0].highlight @window.ungetch(KEY_DOWN) return end #@items.each { |i| $log.debug " ITEM DDD : #{i.text}" } @visible = !@visible if !@visible hide else init_vars show end end |