rbcurse-extras 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +75 -0
- data/VERSION +1 -0
- data/examples/data/list.txt +300 -0
- data/examples/data/lotr.txt +12 -0
- data/examples/data/table.txt +36 -0
- data/examples/data/tasks.txt +27 -0
- data/examples/data/unix1.txt +21 -0
- data/examples/inc/qdfilechooser.rb +70 -0
- data/examples/inc/rfe_renderer.rb +121 -0
- data/examples/newtabbedwindow.rb +100 -0
- data/examples/rfe.rb +1236 -0
- data/examples/test2.rb +670 -0
- data/examples/testeditlist.rb +78 -0
- data/examples/testtable.rb +270 -0
- data/examples/testvimsplit.rb +141 -0
- data/lib/rbcurse/extras/include/celleditor.rb +112 -0
- data/lib/rbcurse/extras/include/checkboxcellrenderer.rb +57 -0
- data/lib/rbcurse/extras/include/comboboxcellrenderer.rb +30 -0
- data/lib/rbcurse/extras/include/defaultlistselectionmodel.rb +79 -0
- data/lib/rbcurse/extras/include/listkeys.rb +37 -0
- data/lib/rbcurse/extras/include/listselectable.rb +144 -0
- data/lib/rbcurse/extras/include/tableextended.rb +40 -0
- data/lib/rbcurse/extras/widgets/horizlist.rb +203 -0
- data/lib/rbcurse/extras/widgets/menutree.rb +63 -0
- data/lib/rbcurse/extras/widgets/multilinelabel.rb +142 -0
- data/lib/rbcurse/extras/widgets/rcomboedit.rb +256 -0
- data/lib/rbcurse/extras/widgets/rlink.rb.moved +27 -0
- data/lib/rbcurse/extras/widgets/rlistbox.rb +1247 -0
- data/lib/rbcurse/extras/widgets/rmenulink.rb.moved +21 -0
- data/lib/rbcurse/extras/widgets/rmulticontainer.rb +304 -0
- data/lib/rbcurse/extras/widgets/rmultisplit.rb +722 -0
- data/lib/rbcurse/extras/widgets/rmultitextview.rb +306 -0
- data/lib/rbcurse/extras/widgets/rpopupmenu.rb +755 -0
- data/lib/rbcurse/extras/widgets/rtable.rb +1758 -0
- data/lib/rbcurse/extras/widgets/rvimsplit.rb +800 -0
- data/lib/rbcurse/extras/widgets/table/tablecellrenderer.rb +86 -0
- data/lib/rbcurse/extras/widgets/table/tabledatecellrenderer.rb +98 -0
- metadata +94 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
|
2
|
+
##
|
3
|
+
# This file gives us a mean of using a component as an editor in a list or later table.
|
4
|
+
# The component is created once and used with each row.
|
5
|
+
# It does not really have a form associated with it, although we do set a form
|
6
|
+
# so it can display itself. Otherwise it is not added to the forms widget list, so the
|
7
|
+
# form has no idea tha this widget exists.
|
8
|
+
#
|
9
|
+
# Tested with Field, combo and checkbox, tables.
|
10
|
+
#
|
11
|
+
module RubyCurses
|
12
|
+
class CellEditor
|
13
|
+
include ConfigSetup
|
14
|
+
include RubyCurses::Utils
|
15
|
+
|
16
|
+
def initialize component, config={}, &block
|
17
|
+
@component = component
|
18
|
+
s = @component.class.to_s.downcase()
|
19
|
+
s.slice!("rubycurses::")
|
20
|
+
@_class = s.to_sym
|
21
|
+
config_setup config # @config.each_pair { |k,v| variable_set(k,v) }
|
22
|
+
instance_eval &block if block_given?
|
23
|
+
end
|
24
|
+
def getvalue
|
25
|
+
case @_class
|
26
|
+
when :field
|
27
|
+
return field_getvalue
|
28
|
+
when :checkbox
|
29
|
+
return checkbox_getvalue
|
30
|
+
when :combobox
|
31
|
+
return combobox_getvalue
|
32
|
+
else
|
33
|
+
raise "Unknown class #{@_class} in CellEditor getv"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
# maybe this should check valid (on_leave) and throw exception
|
37
|
+
def field_getvalue
|
38
|
+
#@component.on_leave # throws exception! Added 2009-01-17 00:47
|
39
|
+
@component.init_vars # 2009-01-18 01:13 should not carry over to next row curpos and pcol
|
40
|
+
return @component.getvalue
|
41
|
+
end
|
42
|
+
def checkbox_getvalue
|
43
|
+
@component.getvalue
|
44
|
+
end
|
45
|
+
def combobox_getvalue
|
46
|
+
#@component.on_leave # added 2009-01-19 12:12
|
47
|
+
@component.getvalue
|
48
|
+
#@component.selected_item
|
49
|
+
end
|
50
|
+
def setvalue value
|
51
|
+
case @_class
|
52
|
+
when :field
|
53
|
+
@component.set_buffer value
|
54
|
+
when :checkbox
|
55
|
+
@component.checked value
|
56
|
+
when :combobox
|
57
|
+
@component.set_buffer value
|
58
|
+
#index = @component.list.index value
|
59
|
+
#@component.current_index = index
|
60
|
+
else
|
61
|
+
raise "Unknown class #{@_class} in CellEditor setv"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
def component
|
65
|
+
@component
|
66
|
+
end
|
67
|
+
# should be called from on_leave_cell of table, but is beng called from editing_stopped FIXME
|
68
|
+
def on_leave row, col
|
69
|
+
f = @component
|
70
|
+
f.on_leave
|
71
|
+
if f.respond_to? :editable and f.modified?
|
72
|
+
f.fire_handler(:CHANGED, f)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
def prepare_editor parent, row, col, value
|
76
|
+
#value = value.dup if value.respond_to? :dup
|
77
|
+
value = value.dup rescue value
|
78
|
+
setvalue value #.dup
|
79
|
+
widget = component()
|
80
|
+
widget.row = row
|
81
|
+
widget.col = col
|
82
|
+
# unfortunately 2009-01-11 19:47 combo boxes editable allows changing value
|
83
|
+
# FIXME so combo's can be editable, but no new value added
|
84
|
+
if @_class == :combobox
|
85
|
+
widget.editable = false if widget.respond_to? :editable # chb's don't ???
|
86
|
+
else
|
87
|
+
widget.editable = true if widget.respond_to? :editable # chb's don't ???
|
88
|
+
end
|
89
|
+
widget.focusable = true
|
90
|
+
widget.visible = true
|
91
|
+
widget.form = parent.form
|
92
|
+
#$log.debug " prepare editor value #{widget.display_length} displlen #{widget.maxlen}"
|
93
|
+
#$log.debug " prepare editor form: #{widget.form} " # 2011-11-15 12:54:41
|
94
|
+
#widget.display_length = widget.display_length -1
|
95
|
+
widget.bgcolor = 'yellow'
|
96
|
+
widget.color = 'black'
|
97
|
+
widget.on_enter
|
98
|
+
#widget.attr = Ncurses::A_REVERSE | Ncurses::A_BOLD
|
99
|
+
end
|
100
|
+
#This may not really be necessary since we paint the cell editor only if editing is on
|
101
|
+
def cancel_editor
|
102
|
+
widget = component()
|
103
|
+
# NOOO THIS IS CALLED BY CANCEL AND STOP
|
104
|
+
# somehow we need to ensure that if on_leave fails you can't get out. Here its a bit late
|
105
|
+
# i think FIXME TODO
|
106
|
+
#widget.on_leave # call so any triggers or validations can fire
|
107
|
+
widget.focusable = false
|
108
|
+
widget.visible = false
|
109
|
+
widget.attr = Ncurses::A_REVERSE
|
110
|
+
end
|
111
|
+
end # class
|
112
|
+
end # module
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rbcurse/core/include/listcellrenderer'
|
2
|
+
module RubyCurses
|
3
|
+
|
4
|
+
##
|
5
|
+
# This is a basic list cell renderer that will render the to_s value of anything.
|
6
|
+
# Using alignment one can use for numbers too.
|
7
|
+
# However, for booleans it will print true and false. If editing, you may want checkboxes
|
8
|
+
class CheckBoxCellRenderer < ListCellRenderer
|
9
|
+
dsl_accessor :value # text of label
|
10
|
+
dsl_accessor :surround_chars
|
11
|
+
|
12
|
+
def initialize boolean=nil, config={}, &block
|
13
|
+
@value = boolean
|
14
|
+
@text = "" # what if someone wants to show a label later. ??? XXX
|
15
|
+
@editable = false
|
16
|
+
@focusable = false
|
17
|
+
config_setup config # @config.each_pair { |k,v| variable_set(k,v) }
|
18
|
+
instance_eval &block if block_given?
|
19
|
+
init_vars
|
20
|
+
end
|
21
|
+
def init_vars
|
22
|
+
@justify ||= :left
|
23
|
+
@display_length ||= 5
|
24
|
+
@surround_chars = ['[',']']
|
25
|
+
end
|
26
|
+
def getvalue
|
27
|
+
@value
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
#
|
32
|
+
def repaint graphic, r=@row,c=@col, row_index=-1,value=@value, focussed=false, selected=false
|
33
|
+
#$log.debug "label :#{@text}, #{value}, #{r}, #{c} col= #{@color}, #{@bgcolor} acolor= #{acolor} j:#{@justify} dlL: #{@display_length} "
|
34
|
+
|
35
|
+
prepare_default_colors focussed, selected
|
36
|
+
|
37
|
+
buttontext = value ? "X" : " "
|
38
|
+
# HOW TO DO THE TEXT ??? XXX
|
39
|
+
# the space in dtext next line is a cheat, to clear off the space that the
|
40
|
+
# editor is leaving.
|
41
|
+
dtext = " " #@display_length.nil? ? @text : "%-*s" % [@display_length, @text]
|
42
|
+
if @align_right
|
43
|
+
#@text_offset = 0
|
44
|
+
#@col_offset = dtext.length + @surround_chars[0].length + 1
|
45
|
+
str = "#{dtext} " + @surround_chars[0] + buttontext + @surround_chars[1]
|
46
|
+
else
|
47
|
+
pretext = @surround_chars[0] + buttontext + @surround_chars[1]
|
48
|
+
#@text_offset = pretext.length + 1
|
49
|
+
#@col_offset = @surround_chars[0].length
|
50
|
+
#@surround_chars[0] + buttontext + @surround_chars[1] + " #{@text}"
|
51
|
+
str = pretext + " #{dtext}"
|
52
|
+
end
|
53
|
+
graphic.printstring r, c, str, @color_pair,@attr
|
54
|
+
end
|
55
|
+
# ADD HERE
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RubyCurses
|
2
|
+
|
3
|
+
##
|
4
|
+
# This is a list cell renderer that will render combo boxes.
|
5
|
+
# Since a combo box extends a field therefore the repaint of field is used.
|
6
|
+
# In other words there is nothing much to do here.
|
7
|
+
#
|
8
|
+
class ComboBoxCellRenderer < ListCellRenderer
|
9
|
+
include ConfigSetup
|
10
|
+
include RubyCurses::Utils
|
11
|
+
|
12
|
+
def initialize text="", config={}, &block
|
13
|
+
@text = text
|
14
|
+
@editable = false
|
15
|
+
@focusable = false
|
16
|
+
config_setup config # @config.each_pair { |k,v| variable_set(k,v) }
|
17
|
+
instance_eval &block if block_given?
|
18
|
+
init_vars
|
19
|
+
end
|
20
|
+
## me thinks this is unused
|
21
|
+
def getvalue
|
22
|
+
raise "I think this is unused. comboboxcellrenderer line 36"
|
23
|
+
@text
|
24
|
+
end
|
25
|
+
|
26
|
+
##
|
27
|
+
#
|
28
|
+
# ADD HERE
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rbcurse/extras/include/listselectable'
|
2
|
+
##
|
3
|
+
# Added ListSelectionEvents on 2009-02-13 23:33
|
4
|
+
# Data model for list selections. Uses index or indices, or value/values. Please avoid using "row"
|
5
|
+
# as this is not clear to user, and will be deprecated.
|
6
|
+
# 2010-09-21 19:43 source now contains List object, not this class
|
7
|
+
|
8
|
+
module RubyCurses
|
9
|
+
class DefaultListSelectionModel
|
10
|
+
include EventHandler
|
11
|
+
attr_accessor :selection_mode
|
12
|
+
attr_reader :anchor_selection_index
|
13
|
+
attr_reader :lead_selection_index
|
14
|
+
attr_reader :parent
|
15
|
+
def initialize parent
|
16
|
+
raise ArgumentError "Parent cannot be nil. Please pass List while creating" if parent.nil?
|
17
|
+
@parent = parent
|
18
|
+
|
19
|
+
@selected_indices=[]
|
20
|
+
@anchor_selection_index = -1
|
21
|
+
@lead_selection_index = -1
|
22
|
+
@selection_mode = 'multiple'
|
23
|
+
@_events = [:LIST_SELECTION_EVENT]
|
24
|
+
|
25
|
+
#$log.debug " created DefaultListSelectionModel XXX"
|
26
|
+
end
|
27
|
+
#def event_list
|
28
|
+
#return @@events if defined? @@events
|
29
|
+
#nil
|
30
|
+
#end
|
31
|
+
|
32
|
+
def clear_selection
|
33
|
+
ix0 = @selected_indices.first
|
34
|
+
ix1 = @selected_indices.last
|
35
|
+
@selected_indices=[]
|
36
|
+
return if ix0.nil?
|
37
|
+
lse = ListSelectionEvent.new(ix0, ix1, @parent, :DELETE)
|
38
|
+
fire_handler :LIST_SELECTION_EVENT, lse
|
39
|
+
end
|
40
|
+
def is_selected_index ix
|
41
|
+
@selected_indices.include? ix
|
42
|
+
end
|
43
|
+
def get_max_selection_index
|
44
|
+
@selected_indices[-1]
|
45
|
+
end
|
46
|
+
def get_min_selection_index
|
47
|
+
@selected_indices[0]
|
48
|
+
end
|
49
|
+
def get_selected_indices
|
50
|
+
@selected_indices
|
51
|
+
end
|
52
|
+
alias :get_selected_rows :get_selected_indices
|
53
|
+
## TODO should go in sorted, and no dupes
|
54
|
+
def add_selection_interval ix0, ix1
|
55
|
+
$log.debug " def add_selection_interval #{ix0}, #{ix1}, mode: #{@selection_mode} "
|
56
|
+
if @selection_mode != :multiple
|
57
|
+
clear_selection
|
58
|
+
end
|
59
|
+
@anchor_selection_index = ix0
|
60
|
+
@lead_selection_index = ix1
|
61
|
+
ix0.upto(ix1) {|i| @selected_indices << i unless @selected_indices.include? i }
|
62
|
+
lse = ListSelectionEvent.new(ix0, ix1, @parent, :INSERT)
|
63
|
+
fire_handler :LIST_SELECTION_EVENT, lse
|
64
|
+
$log.debug " DLSM firing LIST_SELECTION EVENT #{lse}"
|
65
|
+
end
|
66
|
+
def remove_selection_interval ix0, ix1
|
67
|
+
@anchor_selection_index = ix0
|
68
|
+
@lead_selection_index = ix1
|
69
|
+
@selected_indices.delete_if {|x| x >= ix0 and x <= ix1}
|
70
|
+
lse = ListSelectionEvent.new(ix0, ix1, @parent, :DELETE)
|
71
|
+
fire_handler :LIST_SELECTION_EVENT, lse
|
72
|
+
end
|
73
|
+
def insert_index_interval ix0, len
|
74
|
+
@anchor_selection_index = ix0
|
75
|
+
@lead_selection_index = ix0+len
|
76
|
+
add_selection_interval @anchor_selection_index, @lead_selection_index
|
77
|
+
end
|
78
|
+
end # class DefaultListSelectionModel
|
79
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module RubyCurses
|
2
|
+
module ListKeys
|
3
|
+
## Note: keeping variables gives the false feeling that one can change the var anytime.
|
4
|
+
# That was possible earlier, but now that i am binding the key at construction time
|
5
|
+
# any changes to the vars after construction won't have an effect.
|
6
|
+
def install_list_keys
|
7
|
+
#@KEY_ROW_SELECTOR ||= ?\C-x.getbyte(0) # need to changed from C-x since used for actions # changed 2011 dts
|
8
|
+
@KEY_ROW_SELECTOR ||= 32 # need to changed from C-x since used for actions
|
9
|
+
@KEY_BLOCK_SELECTOR ||= ?\M-x.getbyte(0) # need to change since M-x used for commands
|
10
|
+
@KEY_GOTO_TOP ||= ?\M-0.getbyte(0)
|
11
|
+
@KEY_GOTO_BOTTOM ||= ?\M-9.getbyte(0)
|
12
|
+
#@KEY_ASK_FIND_FORWARD ||= ?\M-f.getbyte(0)
|
13
|
+
#@KEY_ASK_FIND_BACKWARD ||= ?\M-F.getbyte(0)
|
14
|
+
#@KEY_FIND_NEXT ||= ?\M-g.getbyte(0)
|
15
|
+
#@KEY_FIND_PREV ||= ?\M-G.getbyte(0)
|
16
|
+
@KEY_SCROLL_FORWARD ||= ?\C-d.getbyte(0)
|
17
|
+
@KEY_SCROLL_BACKWARD ||= ?\C-b.getbyte(0)
|
18
|
+
@KEY_SCROLL_RIGHT ||= ?\M-8.getbyte(0)
|
19
|
+
@KEY_SCROLL_LEFT ||= ?\M-7.getbyte(0)
|
20
|
+
|
21
|
+
@KEY_CLEAR_SELECTION ||= ?\M-e.getbyte(0)
|
22
|
+
@KEY_PREV_SELECTION ||= ?\M-".getbyte(0)
|
23
|
+
@KEY_NEXT_SELECTION ||= ?\M-'.getbyte(0)
|
24
|
+
|
25
|
+
=begin
|
26
|
+
bind_key(@KEY_ROW_SELECTOR) { toggle_row_selection }
|
27
|
+
bind_key(@KEY_GOTO_TOP) { goto_top }
|
28
|
+
bind_key(@KEY_GOTO_BOTTOM) { goto_bottom }
|
29
|
+
bind_key(@KEY_CLEAR_SELECTION) { clear_selection }
|
30
|
+
bind_key(@KEY_ASK_FIND_FORWARD) { ask_search_forward }
|
31
|
+
bind_key(@KEY_ASK_FIND_BACKWARD) { ask_search_backward }
|
32
|
+
bind_key(@KEY_FIND_NEXT) { find_next }
|
33
|
+
bind_key(@KEY_FIND_PREV) { find_prev }
|
34
|
+
=end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# this is a companion file to defaultlistselectionmodel
|
2
|
+
# if you use that, include this to get all the methods to use it
|
3
|
+
require 'rbcurse/extras/include/defaultlistselectionmodel'
|
4
|
+
|
5
|
+
module RubyCurses
|
6
|
+
module ListSelectable
|
7
|
+
|
8
|
+
## modified on 2009-02-13 23:41 to return model if no param passed
|
9
|
+
# sets or returns a list selection model
|
10
|
+
# Also listbox listens to it for selections, so it can tell those
|
11
|
+
# who are interested 2010-09-21 16:02
|
12
|
+
def list_selection_model(*lsm)
|
13
|
+
if lsm.empty?
|
14
|
+
@list_selection_model
|
15
|
+
else
|
16
|
+
@list_selection_model = lsm[0]
|
17
|
+
# the listbox is listening to selection events on the
|
18
|
+
# selection model and will inform any listeners of the same.
|
19
|
+
@list_selection_model.bind :LIST_SELECTION_EVENT do |ev|
|
20
|
+
fire_handler :LIST_SELECTION_EVENT, ev
|
21
|
+
end
|
22
|
+
end
|
23
|
+
#@list_selection_model.selection_mode = @selection_mode || :MULTIPLE
|
24
|
+
end
|
25
|
+
def is_selected? row
|
26
|
+
@list_selection_model.is_selected_index row
|
27
|
+
end
|
28
|
+
# this is the old name, should be deprecated
|
29
|
+
alias :is_row_selected :is_selected?
|
30
|
+
|
31
|
+
def add_row_selection_interval ix0, ix1
|
32
|
+
$log.debug " def add_row_selection_interval #{ix0}, #{ix1}"
|
33
|
+
# if row_selection_allowed
|
34
|
+
@list_selection_model.add_selection_interval ix0, ix1
|
35
|
+
@repaint_required = true
|
36
|
+
end
|
37
|
+
def remove_row_selection_interval ix0, ix1
|
38
|
+
@list_selection_model.remove_selection_interval ix0, ix1
|
39
|
+
end
|
40
|
+
def toggle_row_selection row=@current_index
|
41
|
+
if is_selected? row
|
42
|
+
#$log.debug " deleting row #{row}"
|
43
|
+
remove_row_selection_interval(row, row)
|
44
|
+
else
|
45
|
+
#$log.debug " adding row #{row}"
|
46
|
+
add_row_selection_interval(row, row)
|
47
|
+
end
|
48
|
+
@repaint_required = true
|
49
|
+
end
|
50
|
+
|
51
|
+
def clear_selection
|
52
|
+
@list_selection_model.clear_selection
|
53
|
+
@repaint_required = true
|
54
|
+
end
|
55
|
+
# why is this commented off XXX could it override listscrollable
|
56
|
+
#def selected_item
|
57
|
+
#$log.warn "came in dummy selected_item of listselectable.rb"
|
58
|
+
# @list[@current_index]
|
59
|
+
#end
|
60
|
+
# returns selected indices
|
61
|
+
# TODO : if array passed, set those as selected indices
|
62
|
+
def selected_rows
|
63
|
+
@list_selection_model.get_selected_rows
|
64
|
+
end
|
65
|
+
def selected_row_count
|
66
|
+
selected_rows.size
|
67
|
+
end
|
68
|
+
# returns index of first selected row (lowest index)
|
69
|
+
# TODO: if param passed set that as selected_index
|
70
|
+
def selected_row
|
71
|
+
@list_selection_model.get_min_selection_index
|
72
|
+
end
|
73
|
+
alias :selected_index :selected_row
|
74
|
+
|
75
|
+
# returns value of first selected row (lowest index)
|
76
|
+
def selected_value
|
77
|
+
#@list[@current_index].to_s # old behavior since curr row was in reverse
|
78
|
+
return nil if selected_row().nil?
|
79
|
+
@list[selected_row()].to_s
|
80
|
+
end
|
81
|
+
# returns an array of selected values
|
82
|
+
# or yields values to given block
|
83
|
+
def selected_values &block
|
84
|
+
ar = []
|
85
|
+
selected_rows().each do |i|
|
86
|
+
val = @list[i]
|
87
|
+
if block_given?
|
88
|
+
yield val
|
89
|
+
else
|
90
|
+
ar << val
|
91
|
+
end
|
92
|
+
end
|
93
|
+
return ar unless block_given?
|
94
|
+
end
|
95
|
+
|
96
|
+
def do_next_selection
|
97
|
+
return if selected_rows().length == 0
|
98
|
+
row = selected_rows().sort.find { |i| i > @current_index }
|
99
|
+
row ||= @current_index
|
100
|
+
@current_index = row
|
101
|
+
@repaint_required = true # fire list_select XXX
|
102
|
+
end
|
103
|
+
def do_prev_selection
|
104
|
+
return if selected_rows().length == 0
|
105
|
+
row = selected_rows().sort{|a,b| b <=> a}.find { |i| i < @current_index }
|
106
|
+
row ||= @current_index
|
107
|
+
@current_index = row
|
108
|
+
@repaint_required = true # fire list_select XXX
|
109
|
+
end
|
110
|
+
# NOTE: I HAD removed this and put in listbox, but its required by rtable also
|
111
|
+
# create a default list selection model and set it
|
112
|
+
# NOTE: I am now checking if one is not already created, since
|
113
|
+
# a second creation would wipe out any listeners on it.
|
114
|
+
# @see ListSelectable
|
115
|
+
# @see DefaultListSelectionModel
|
116
|
+
def create_default_list_selection_model
|
117
|
+
if @list_selection_model.nil?
|
118
|
+
list_selection_model DefaultListSelectionModel.new(self)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
alias :selected_index :selected_row
|
122
|
+
attr_accessor :row_selection_allowed
|
123
|
+
attr_accessor :column_selection_allowed
|
124
|
+
end
|
125
|
+
# class containing information relating to selections on a list
|
126
|
+
# 2010-09-21 19:46 NOTE: Earlier source contained the model object, now it returns the parent
|
127
|
+
# You may do source.list_data_model() to get the model
|
128
|
+
# Typical operations on source would get selected_value(s), or selected_index
|
129
|
+
class ListSelectionEvent
|
130
|
+
attr_accessor :firstrow, :lastrow, :source, :type
|
131
|
+
def initialize firstrow, lastrow, source, type
|
132
|
+
@firstrow = firstrow
|
133
|
+
@lastrow = lastrow
|
134
|
+
@source = source
|
135
|
+
@type = type
|
136
|
+
end
|
137
|
+
def to_s
|
138
|
+
"#{@type.to_s}, firstrow: #{@firstrow}, lastrow: #{@lastrow}, source: #{@source}"
|
139
|
+
end
|
140
|
+
def inspect
|
141
|
+
to_s
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|