Class: Menu

Inherits:
Object
  • Object
show all
Includes:
Item
Defined in:
lib/menu.rb

Direct Known Subclasses

Editor, Root_Menu, Run_Menu

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Menu

Returns a new instance of Menu.



11
12
13
14
15
16
# File 'lib/menu.rb', line 11

def initialize name
    self.name = name
    @items = Hash.new
    self.style = Style.new
    set_item(Editor.new self) unless self.is_a? Dynamic
end

Instance Attribute Details

#nameObject



43
44
45
# File 'lib/menu.rb', line 43

def name
    "> #{super}"
end

#styleObject

Returns the value of attribute style.



8
9
10
# File 'lib/menu.rb', line 8

def style
  @style
end

Instance Method Details

#encode_with(coder) ⇒ Object



18
19
20
21
22
# File 'lib/menu.rb', line 18

def encode_with coder
    coder['name'] = @name
    coder['items'] = items
    coder['style'] = style
end

#executeObject



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/menu.rb', line 52

def execute
    show = true
    while show
        selection = show_menu @items.keys.sort, @name
        item = @items[selection]
        if item.nil?
            show = false
        else
            show = !item.execute unless item.nil?
        end
    end
    !item.nil?
end

#filter_entries(entries) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/menu.rb', line 65

def filter_entries entries
    if @items.nil?
        entries
    else
        entries.reject {|entry| @items[entry].is_a?(Editor)}
    end
end

#get_font_stringObject



81
82
83
84
85
86
87
# File 'lib/menu.rb', line 81

def get_font_string
    font = ""
    unless self.style.font.nil?
        font = "-fn \"#{self.style.font}\""
    end
    font
end

#init_with(coder) ⇒ Object



24
25
26
27
28
29
# File 'lib/menu.rb', line 24

def init_with coder
    self.name = coder['name']
    @items = coder['items']
    self.style = coder['style']
    set_item(Editor.new self)
end

#itemsObject



35
36
37
# File 'lib/menu.rb', line 35

def items
    @items.reject { |name,item| item.is_a?(Dynamic) }
end

#remove_item(item) ⇒ Object



39
40
41
# File 'lib/menu.rb', line 39

def remove_item item
    @items.delete item.name unless item.is_a? Dynamic
end

#set_item(item) ⇒ Object



31
32
33
# File 'lib/menu.rb', line 31

def set_item item
    @items[item.name] = item unless @items[item.name].is_a? Dynamic
end

#show_menu(entries, name, show_edit_menu = true) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/menu.rb', line 72

def show_menu entries, name, show_edit_menu = true
    entries = filter_entries entries
    unless $read_only || self.is_a?(Dynamic)
        entries << "> #{Editor.name}"
    end
    command = "echo \"#{entries.join "\n"}\" | dmenu -i #{$location}-l #{$lines} #{get_font_string} -nf \"#{@style.color :fg}\" -nb \"#{@style.color :bg}\" -sf \"#{@style.color :fg_hi}\" -sb \"#{@style.color :bg_hi}\" -p \"#{name}\""
    (`#{command}`).strip
end

#to_sObject



47
48
49
50
# File 'lib/menu.rb', line 47

def to_s
    string = "#{name}\n"
    string += (@items.keys.sort.map {|name| name.prepend("  ")}).join("\n")
end