You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			GDScript
		
	
| 
											2 years ago
										 | @tool | ||
|  | extends HBoxContainer | ||
|  | 
 | ||
|  | @export @onready var node_editor_view_root : Control = $"../../../.." | ||
|  | 
 | ||
|  | var rows_per_page := 50 | ||
|  | var current_page := 0 | ||
|  | var first_row := 0 | ||
|  | var last_row := 50 | ||
|  | 
 | ||
|  | 
 | ||
|  | func _on_grid_updated(): | ||
|  | 	visible = true | ||
|  | 
 | ||
|  | 	var page_count = (node_editor_view_root.rows.size() - 1) / rows_per_page + 1 | ||
|  | 	first_row = min(current_page, page_count) * rows_per_page | ||
|  | 	last_row = min(first_row + rows_per_page, node_editor_view_root.rows.size()) | ||
|  | 
 | ||
|  | 	var pagelist_node = $"Pagelist" | ||
|  | 	for x in pagelist_node.get_children(): | ||
|  | 		x.queue_free() | ||
|  | 	 | ||
|  | 	var button_group = ButtonGroup.new() | ||
|  | 	var btns = [] | ||
|  | 	btns.resize(page_count) | ||
|  | 	for i in page_count: | ||
|  | 		var btn = Button.new() | ||
|  | 		btns[i] = btn | ||
|  | 		btn.toggle_mode = true | ||
|  | 		btn.button_group = button_group | ||
|  | 		btn.text = str(i + 1) | ||
|  | 		btn.pressed.connect(_on_button_pressed.bind(btn)) | ||
|  | 		pagelist_node.add_child(btn) | ||
|  | 			 | ||
|  | 	btns[current_page].button_pressed = true | ||
|  | 
 | ||
|  | 	var sort_property = node_editor_view_root.sorting_by | ||
|  | 	if sort_property == "": sort_property = "resource_path" | ||
|  | 	var sort_type = node_editor_view_root.column_types[node_editor_view_root.columns.find(sort_property)] | ||
|  | 	var property_values = [] | ||
|  | 	property_values.resize(page_count) | ||
|  | 	if(node_editor_view_root.rows.size() == 0): | ||
|  | 		return | ||
|  | 	for i in page_count: | ||
|  | 		property_values[i] = node_editor_view_root.rows[i * rows_per_page].get(sort_property) | ||
|  | 
 | ||
|  | 	if sort_type == TYPE_FLOAT or sort_type == TYPE_INT: | ||
|  | 		for i in page_count: | ||
|  | 			btns[i].text = str(property_values[i]) | ||
|  | 			 | ||
|  | 	elif sort_type == TYPE_COLOR: | ||
|  | 		for i in page_count: | ||
|  | 			btns[i].self_modulate = property_values[i] * 0.75 + Color(0.25, 0.25, 0.25, 1.0) | ||
|  | 	 | ||
|  | 	elif sort_type == TYPE_STRING: | ||
|  | 		var strings = [] | ||
|  | 		strings.resize(page_count) | ||
|  | 		for i in page_count: | ||
|  | 			strings[i] = property_values[i].get_file() | ||
|  | 			if strings[i] == "": | ||
|  | 				strings[i] = str(i) | ||
|  | 			 | ||
|  | 		_fill_buttons_with_prefixes(btns, strings, page_count) | ||
|  | 	 | ||
|  | 	elif sort_type == TYPE_OBJECT: | ||
|  | 		var strings = [] | ||
|  | 		strings.resize(page_count + 1) | ||
|  | 		for i in page_count: | ||
|  | 			if is_instance_valid(property_values[i]): | ||
|  | 				strings[i] = property_values[i].resource_path.get_file() | ||
|  | 		 | ||
|  | 		_fill_buttons_with_prefixes(btns, strings, page_count) | ||
|  | 
 | ||
|  | 
 | ||
|  | func _fill_buttons_with_prefixes(btns, strings, page_count): | ||
|  | 	for i in page_count: | ||
|  | 		if i == 0: | ||
|  | 			btns[0].text = strings[0][0] | ||
|  | 			continue | ||
|  | 
 | ||
|  | 		for j in strings[i].length(): | ||
|  | 			if strings[i].unicode_at(j) != strings[i - 1].unicode_at(j): | ||
|  | 				btns[i].text = strings[i].left(j + 1) | ||
|  | 				btns[i - 1].text = strings[i - 1].left(max(j + 1, btns[i - 1].text.length())) | ||
|  | 				break | ||
|  | 	 | ||
|  | 	for i in page_count - 1: | ||
|  | 		btns[i].text = btns[i].text + "-" + btns[i + 1].text | ||
|  | 
 | ||
|  | 	btns[page_count - 1].text += "-[End]" | ||
|  | 
 | ||
|  | 
 | ||
|  | func _on_button_pressed(button): | ||
|  | 	button.button_pressed = true | ||
|  | 	current_page = button.get_index() | ||
|  | 	_update_view() | ||
|  | 
 | ||
|  | 
 | ||
|  | func _on_LineEdit_value_changed(value): | ||
|  | 	rows_per_page = value | ||
|  | 	current_page = 0 | ||
|  | 	_update_view() | ||
|  | 
 | ||
|  | 
 | ||
|  | func _update_view(): | ||
|  | 	_on_grid_updated() | ||
|  | 	node_editor_view_root.refresh(false) |