Skip to content

Instantly share code, notes, and snippets.

@LoganBarnett
Created January 2, 2009 22:38
Show Gist options
  • Save LoganBarnett/42720 to your computer and use it in GitHub Desktop.
Save LoganBarnett/42720 to your computer and use it in GitHub Desktop.
class CheckTreeManager < Java::java::awt::event::MouseAdapter
include_class 'javax.swing.tree.DefaultTreeSelectionModel'
include_class 'javax.swing.JCheckBox'
include Java::javax::swing::event::TreeSelectionListener
#include Java::javax::swing::event::MouseInputListener
CHECKBOX_WIDTH = JCheckBox.new.preferred_size.width
def initialize(tree)
@tree = tree
@model = DefaultTreeSelectionModel.new #(tree.model)
@model.selection_mode = DefaultTreeSelectionModel::DISCONTIGUOUS_TREE_SELECTION
@tree.cell_renderer = Java::swing::CheckTreeCellRenderer.new(@tree.cell_renderer, @model)
@tree.add_mouse_listener self.java_object
# @model.add_tree_selection_listener do
# @tree.tree_did_change
# end
@model.add_tree_selection_listener self.java_object
puts "done"
end
def mouseClicked(event)
begin
return if 1 < event.click_count
path = @tree.get_path_for_location(event.x, event.y)
return if path.nil?
return if event.x > @tree.get_path_bounds(path).x + CHECKBOX_WIDTH
selected = @model.path_selected? path
@odel.remove_tree_selection_listener self.java_object
begin
if selected
@model.remove_selection_path path
else
@model.add_selection_path path
end
ensure
@model.add_tree_selection_listener self.java_object
@tree.tree_did_change
end
rescue => e
puts e
puts e.backtrace
end
end
def valueChanged(event)
@tree.tree_did_change
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment