【Godot4.2】基于EasyTreeData解析的扩展Tree控件 - ETDTree

news2024/9/20 5:22:41

概述

基于EasyTreeData解析的扩展Tree控件。

EasyTreeData(ETD)

EasyTreeData(ETD)是一种基于Tab缩进的简单层级结构数据,可以用于描述树形结构。能够被解析为Tree控件或表示树形结构的其他类或控件。

根目录 | 0
	节点1
	节点2 | 0
		节点3
			节点4
	节点5
		节点6

ETD相关文章

  • 【Godot 4.2】Tree控件与TreeItem完全解析
  • 【Godot4.2】Tree控件自定义树形数据ETD及其解析
  • 【Godot4.2】EasyTreeData通用解析
  • 【Godot4.2】基于EasyTreeData解析的扩展Tree控件 - ETDTree

Godot4.2自定义控件系列目录

  • 文件系统自定义控件 - FileSystemTree
  • 文件系统自定义控件 - GroupButtons
  • 文件系统自定义控件 - DirListView
  • 基于EasyTreeData解析的扩展Tree控件 - ETDTree

类图关系

在这里插入图片描述

代码

# =============================================
# 名称:ETDTree
# 类型:自定义节点(扩展控件)
# 描述:基于EasyTreeDataETD)数据的扩展Tree控件
# 作者:巽星石
# Godot版本:v4.3.stable.steam [77dcf97d8]
# 创建时间:202491923:40:06
# 最后修改时间:202491923:55:59
# =============================================
@tool
class_name ETDTree extends Tree

# ================================ 参数 ================================
## EasyTreeData
@export_multiline var data:String:
	set(val):
		data = val
		reload()

## 图标集
@export var icons:Array[Texture2D]:
	set(val):
		icons = val
		reload()

## 图标最大宽度
@export var icon_width = 16:
	set(val):
		icon_width = val
		reload()

# ================================ 方法 ================================
# 解析和重新加载Tree结构
func reload():
	clear() # 清空
	var items = data.split("\n",false)    # 将ETD字符串按行切分为字符串数组
	var pre_itm:TreeItem                  # 记录前一项对应的TreeItem
	var p_itm = null                      # 记录父节点

	# 遍历每行数据
	for i in range(items.size()):
		# 第1行直接添加为Tree控件的根节点(跳过下面if部分)
		# 从第2行开始比较当前行与前一行的缩进深度(也就是\t的数目)
		if i > 0: 
			var d_deep = deep(items[i-1]) - deep(items[i])  # 与前一行数据的缩进差值
			match d_deep:
				-1:                                # 缩进比前一项深:
					p_itm = pre_itm                # 将前一项作为父节点
				0:                                 # 缩进深度与前一项一样:
					p_itm = pre_itm.get_parent()   # 父节点与前一项父节点一样
				_:                                 
					if d_deep>0:                   # 缩进比前一项浅
												   # 通过缩进差值计算获得合适的父节点
						p_itm = pre_itm            
						for j in range(d_deep+1):
							p_itm = p_itm.get_parent()
		
		# 实际创建和添加TreeItemTree控件
		var itm:TreeItem = create_item(p_itm)
		# 解析单项的具体信息
		if items[i].find(" | ")>0:
			var itm_data = items[i].split(" | ")
			itm.set_text(0,itm_data[0])
			if icons.size() > int(itm_data[1]):
				itm.set_icon(0,icons[int(itm_data[1])])
			itm.set_icon_max_width(0,icon_width)
		else:
			itm.set_text(0,items[i])
		pre_itm = itm                              # 将当前项记录为前一项

# 返回字符串的Tab缩进值
func deep(sttr:String):
	return sttr.rstrip(" ").count("\t")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cadence SPB17.4 - allegro - 用板子外形创建整板铺铜

文章目录 cadence SPB17.4 - allegro - 用板子外形创建整板铺铜概述笔记先确定自己板子的 board Geometry/Design_Outline 是否有外形shape为了将软件提示看得更清楚,在每个操作之前,先将命令提示区内容先删了用Z-copy从外形层生成整板的铺铜备注END cad…

Maven 和 gradle JavaFX 项目的休眠行为差异

我一直在尝试将Hibernate与我的JavaFX Maven项目集成。它与Hibernate社区包、Jakarta和xerial配合得很好。我还将persistence.xml文件放在了src/main/resources/META-INF/persistence.xml。 我还尝试使用gradle创建另一个项目,并按照此maven项目的步骤操作&#xf…

《高等代数》行列式转置(应用)

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:1)“行列式转置值不变”这一性质在求解行列式的过程中也有极大的作用。

代码随想录算法训练营第51天 | 岛屿数量、岛屿的最大面积

目录 岛屿数量 题目描述 输入描述 输出描述 输入示例 输出示例 提示信息 1. 深搜解法 2. 广搜解法 岛屿的最大面积 题目描述 输入描述 输出描述 输入示例 输出示例 提示信息 1. 深搜解法 2. 广搜解法 岛屿数量 题目描述 给定一个由 1(陆地&…

Python和C++气候模型算法模型气候学模拟和统计学数据可视化及指标评估

🎯要点 贝叶斯推理气候模型辐射对流及干湿能量平衡模型时间空间气象变化预测模型评估统计指标气象预测数据变换天气和气象变化长短期影响预估降低气候信息尺度评估算法气象行为模拟:碳循环、辐射强迫和温度响应温室气体排放碳循环温室诱导气候变化评估气…

影刀RPA实战:网页爬虫之苦瓜书籍数据

书籍常常被视为心灵的慰藉,因为它们能够在不同的层面上为人们提供支持和安慰。 1. 书籍对我们的重要性 书籍是人类知识的载体,也是智慧的结晶。它们不仅是学习的工具,更是人类心灵的慰藉。在忙碌的生活中,书籍能够提供知识、启发…

VMWare17.5.2中Windows7企业版安装VMWareTools失败及解决办法

一、问题产生环境 宿主机系统:Windows11专业版 x64 虚拟机版本:VMWare17.5.2 虚拟机系统:Windows 7企业版 x64(sp1纯净版) 二、问题表现现象 在Windows 7企业版系统安装完成后,点击虚拟机编辑,…

安科瑞智能塑壳断路器适用于物联网配电电网中-安科瑞黄安南

智能塑壳断路器是一款多功能、体积小、智能化的塑壳断路器,适用于物联网配电电网中。用于三相四线中性点直接接地的供电、用电系统,能全面采集功率、电能量、功率因数、谐波等用电参数;具有过载、短路、缺相、过压、欠压、剩余电流动作保护等功能&#x…

vscode 环境搭建

1. 插件离线安装 官网链接是:https://marketplace.visualstudio.com/vscode 下载需要的插件: vscode 离线安装 在打开的文件中选择扩展包,点击安装即可 2. 故障解决 参考:https://blog.csdn.net/weixin_63712639/article/det…

Modbus_RTU和Modbus库

目录 一.Modbus_RTU 1. 与Modbus TCP的区别 2. Modbus RTU特点 3. Modbus RTU协议格式 4. 报文详解 5. 代码实现RTU通信 1. 打开模拟的RTU从机 2. linux端使用代码实现和串口连接 2.1. 框架搭建 2.2 代码 二.Modbus库 1.库函数 一.Modbus_RTU 1. 与Modbus T…

el-form中三级动态添加数据

el-form中三级动态添加数据 data数据view按钮触发事件 data数据 submitForm: {id: undefined, //修改IDapp_id: undefined, //IP类型name: , //规则名称sort: undefined, //排序detail: [{keycode: 0,title_one: undefined, //一级标题desc_detail: [{keycode: 0,title_two: u…

vue之我不会 计算属性 vuex 路由 插槽

一、计算属性 例子&#xff1a; 注意&#xff1a;调用计算属性时&#xff0c;不可以带括号&#xff0c;那样调用的就是方法&#xff0c;如&#xff1a;以下调用fullName时不可funnName() <div id"root">姓&#xff1a;<input type"text" v-model&…

iotop 命令:磁盘IO监控和诊断

一、命令简介 ​iotop​命令用于监视磁盘I/O&#xff0c;实时显示每个进程或线程的读写速率等信息。非常适合用于诊断系统中的I/O瓶颈。 ‍ ​​ ‍ 安装 iotop 在大多数Linux发行版中&#xff0c;iotop​可能不是预装的。可以使用包管理器来安装它。 例如&#xff0c;在…

C#|.net core 基础 - 扩展数组添加删除性能最好的方法

今天在编码的时候遇到了一个问题&#xff0c;需要对数组变量添加新元素和删除元素&#xff0c;因为数组是固定大小的&#xff0c;因此对新增和删除并不友好&#xff0c;但有时候又会用到&#xff0c;因此想针对数组封装两个扩展方法&#xff1a;新增元素与删除元素&#xff0c;…

MySQL5.7.42高可用MHA搭建及故障切换演示

系列文章目录 rpmbuild构建mysql5.7RPM安装包 MySQL基于GTID同步模式搭建主从复制 文章目录 系列文章目录前言一、MHA架构介绍1.MHA的功能2.MHA组成3.MHA故障转移过程4.MHA架构优缺点 二、环境准备1.服务器免密2.基于GTID主从复制搭建3.下载mha组件 三、MHA组件安装1.安装依赖…

数据结构——C语言单链表的实现

单链表的实现 一.链表的节点二.如何在在链表中插入数据1.尾插2.改进3.头插4.指定位置pos&#xff0c;在pos前插入数据 三 .删除数据1.头删2.尾删3.指定位置删除数据 一.链表的节点 //链表中的数据类型,方便后续的更改 typedef int SLTDatatype;//链表的节点 typedef struct SL…

学习ROS2第一天—新手笔记(humble版本)

————今早七点达到实验室&#xff0c;吃了早饭收拾了一下现在07&#xff1a;24开始学习———— 1. RO2与ROS1的不同架构&#xff1a; ROS1架构下&#xff0c;所有节点都是Master进行管理 ROS使用基于DDS的Discovery机制&#xff0c;和Master说再见 API的重新设计 编译…

查看ip地址的方法有几种?探索多样方法

在当今数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;在网络连接、数据传输、网络安全等方面扮演着至关重要的角色。无论是普通用户进行网络设置&#xff0c;还是网络管理员进行故障排查&#xff0c;了解如何查看IP地址都是一项基础且必备的技能。本文将深…

2-99 基于matlab多尺度形态学提取眼前节组织

基于matlab多尺度形态学提取眼前节组织&#xff0c;通过应用不同尺度的结构元素进行边缘检测&#xff0c;再通过加权融合的思想来整合检测到的边缘&#xff0c;降低图像噪声的影响&#xff0c;提高边缘检测的精度。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&…

18.DHT11编程案例

温湿度传感器 产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器&#xff0c;应用领域&#xff1a;暖通 空调&#xff1b;汽车&#xff1b;消费品&#xff1b;气象站&#xff1b;湿度调节器&#xff1b;除湿器&#xff1b;家电&#xff1b;医疗…