Class: Canis::TabularWidget::TableRowSorter
- Defined in:
- lib/canis/core/widgets/deprecated/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.
974 975 976 977 978 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 974 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.
973 974 975 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 973 def sort_keys @sort_keys end |
Instance Method Details
#model=(model) ⇒ Object
979 980 981 982 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 979 def model=(model) @model = model @sort_keys = nil end |
#set_sort_keys(list) ⇒ Object
1034 1035 1036 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 1034 def set_sort_keys list @sort_keys = list end |
#sort ⇒ Object
sorts the model based on sort keys and reverse flags
997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 997 def sort return unless @model return if @sort_keys.empty? $log.debug "TABULAR SORT KEYS #{sort_keys} " @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
983 984 985 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 983 def sortable colindex, tf @columns_sort[colindex] = tf end |
#sortable?(colindex) ⇒ Boolean
986 987 988 989 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 986 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.
1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 1018 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 # don't let it go on increasing if @sort_keys.size > 3 @sort_keys.pop end end end |
#use_to_s(colindex) ⇒ Object
should to_s be used for this column
991 992 993 |
# File 'lib/canis/core/widgets/deprecated/tabularwidget.rb', line 991 def use_to_s colindex return true # TODO end |