lib/knj/gtk2_cb.rb in knjrbfw-0.0.92 vs lib/knj/gtk2_cb.rb in knjrbfw-0.0.93
- old
+ new
@@ -1,45 +1,43 @@
module Knj::Gtk2::Cb
+ #This method can be used to invoke autoloading of this file.
def self.init(paras)
return paras["cb"].init(paras["items"])
end
+ #This method can be used to invoke autoloading of this file.
def self.sel(cb)
return cb.sel
end
end
class Gtk::ComboBox
+ #Shortcut to initialize a combobox with items (or models).
def init(items)
@knj = {
:items => []
}
- ls = Gtk::ListStore.new(String, String)
+ @ls = Gtk::ListStore.new(String, String)
cr = Gtk::CellRendererText.new
self.pack_start(cr, false)
self.add_attribute(cr, "text", 0)
if items.is_a?(Array)
items.each do |appendob|
- iter = ls.append
-
if appendob.is_a?(String)
+ iter = @ls.append
iter[0] = appendob
elsif appendob.respond_to?(:is_knj?)
- iter[0] = appendob.title
- @knj[:items] << {
- :iter => iter,
- :object => appendob
- }
+ self.append_model(:model => appendob)
end
end
elsif items.is_a?(Hash)
@knj[:type] = :hash
items.each do |key, val|
- iter = ls.append
+ iter = @ls.append
iter[0] = val
@knj[:items] << {
:iter => iter,
:object => key
@@ -47,14 +45,36 @@
end
else
raise "Unsupported type: '#{items.class.name}'."
end
- self.model = ls
+ self.model = @ls
self.active = 0
end
+ #Appens a model to the list-store.
+ def append_model(args)
+ iter = @ls.append
+ appendob = args[:model]
+
+ if appendob.respond_to?(:name)
+ iter[0] = appendob.name
+ elsif appendob.respond_to?(:title)
+ iter[0] = appendob.title
+ else
+ raise "Could not figure out of the name of the object."
+ end
+
+ @knj[:items] << {
+ :iter => iter,
+ :object => appendob
+ }
+
+ return {}
+ end
+
+ #Returns the active item (or model) for the combobox.
def sel
iter = self.active_iter
if @knj[:items].length > 0
@knj[:items].each do |item|
@@ -70,10 +90,11 @@
"text" => iter[0]
}
end
end
+ #Sets the active element (or model) in the combobox.
def sel=(actob)
if actob.respond_to?(:is_knj?)
@knj[:items].each do |item|
if item[:object].id == actob.id
self.active_iter = item[:iter]
@@ -97,7 +118,27 @@
end
end
end
raise "Could not find such a row: '#{actob}'."
+ end
+
+ #Resorts all items in the list-store. If an item doesnt have an ID, then that item will be put first (for 'Choose', 'All' and such options).
+ def resort
+ @ls.set_sort_column_id(0)
+ @ls.set_sort_func(0, &lambda{|iter1, iter2|
+ item_id_1 = iter1[1].to_i
+ item_id_2 = iter2[1].to_i
+
+ item_name_1 = iter1[0].to_s.downcase
+ item_name_2 = iter2[0].to_s.downcase
+
+ if item_id_1 == 0
+ return -1
+ elsif item_id_2 == 0
+ return 1
+ else
+ return item_name_1 <=> item_name_2
+ end
+ })
end
end
\ No newline at end of file