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)
							 |