Class: RubyCurses::TabularWidget::TableRowSorter
- Defined in:
- lib/rbcurse/extras/tabularwidget.rb
Overview
This is our default table row sorter. It does a multiple sort and allows for reverse sort also. It’s a pretty simple sorter and uses sort, not sort_by. Improvements welcome. Usage: provide model in constructor or using model method Call toggle_sort_order(column_index) Call sort. Currently, this sorts the provided model in-place. Future versions may maintain a copy, or use a table that provides a mapping of model to result. # TODO check if column_sortable
Instance Attribute Summary collapse
-
#sort_keys ⇒ Object
readonly
Returns the value of attribute sort_keys.
Instance Method Summary collapse
-
#initialize(model = nil) ⇒ TableRowSorter
constructor
A new instance of TableRowSorter.
- #model=(model) ⇒ Object
- #set_sort_keys(list) ⇒ Object
-
#sort ⇒ Object
sorts the model based on sort keys and reverse flags.
- #sortable(colindex, tf) ⇒ Object
- #sortable?(colindex) ⇒ Boolean
-
#toggle_sort_order(index) ⇒ Object
toggle the sort order if given column offset is primary sort key Otherwise, insert as primary sort key, ascending.
-
#use_to_s(colindex) ⇒ Object
should to_s be used for this column.
Constructor Details
#initialize(model = nil) ⇒ TableRowSorter
Returns a new instance of TableRowSorter.
953 954 955 956 957 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 953 def initialize model=nil self.model = model @columns_sort = [] @sort_keys = nil end |
Instance Attribute Details
#sort_keys ⇒ Object (readonly)
Returns the value of attribute sort_keys.
952 953 954 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 952 def sort_keys @sort_keys end |
Instance Method Details
#model=(model) ⇒ Object
958 959 960 961 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 958 def model=(model) @model = model @sort_keys = nil end |
#set_sort_keys(list) ⇒ Object
1009 1010 1011 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 1009 def set_sort_keys list @sort_keys = list end |
#sort ⇒ Object
sorts the model based on sort keys and reverse flags
976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 976 def sort return unless @model return if @sort_keys.empty? @model.sort!{|x,y| res = 0 @sort_keys.each { |ee| e = ee.abs-1 # since we had offsetted by 1 earlier abse = e.abs if ee < 0 res = y[abse] <=> x[abse] else res = x[e] <=> y[e] end break if res != 0 } res } end |
#sortable(colindex, tf) ⇒ Object
962 963 964 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 962 def sortable colindex, tf @columns_sort[colindex] = tf end |
#sortable?(colindex) ⇒ Boolean
965 966 967 968 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 965 def sortable? colindex return false if @columns_sort[colindex]==false return true end |
#toggle_sort_order(index) ⇒ Object
toggle the sort order if given column offset is primary sort key Otherwise, insert as primary sort key, ascending.
996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 996 def toggle_sort_order index index += 1 # increase by 1, since 0 won't multiple by -1 # internally, reverse sort is maintained by multiplying number by -1 @sort_keys ||= [] if @sort_keys.first && index == @sort_keys.first.abs @sort_keys[0] *= -1 else @sort_keys.delete index # in case its already there @sort_keys.delete(index*-1) # in case its already there @sort_keys.unshift index # TODO delete beyond a max, default 3 end end |
#use_to_s(colindex) ⇒ Object
should to_s be used for this column
970 971 972 |
# File 'lib/rbcurse/extras/tabularwidget.rb', line 970 def use_to_s colindex return true # TODO end |