Commit Graph

184 Commits

Author SHA1 Message Date
HP van Braam
6f7525c396 Improve Scene Tree editor performance
We now cache the Node*<>TreeItem* mapping in the SceneTreeEditor. This
allows us to make targeted updates to the Tree used to display the scene
tree in the editor.

Previously on almost all changes to the scene tree the editor would
rebuild the entire widget, causing a large number of deallocations an
allocations. We now carefully manipulate the Tree widget in-situ saving
a large number of these allocations.

In order to know what Nodes need to be updated we add a
editor_state_changed signal to Node, this is a TOOLS_ENABLED,
editor-only signal fired when changes to Node happen that are relevant
to editor state.

We also now make sure that when nodes are moved/renamed we don't check
expensive properties that cannot contain NodePaths. This saves a lot of
time when SceneTreeDock renames a node in a scene with a lot of
MeshInstances. This makes renaming nodes go from ~27 seconds to ~2
seconds on large scenes.

SceneTreeEditor instances will now also not do all of the potentially
expensive update work if they are invisible. This behavior is turned off
by default so it won't affect existing users. This change allows the
editor to only update SceneTreeEditors that actually in view. In
practice this means that for most changes instead of updating 6
SceneTreeEditors we only update 1 instantly, and the others only when
they become visible.

There is definitely more that could be done, but this is already a
massive improvement. In complex scenes we see an improvement of 10x,
things that used to take ~30 seconds now only take 2.

This fixes #83460

I want to thank KoBeWi, TokisanGames, a-johnston, aniel080400 for
their tireless testing. And AeioMuch for their testing and providing a
fix for the hover issue.
2024-12-12 22:47:05 +01:00
Rémi Verschelde
d2c82a8ffc
Merge pull request #97378 from rune-scape/less-const-cast
Get rid of easily removable uses of `const_cast`
2024-12-02 15:50:06 +01:00
rune-scape
d58b2e879f Get rid of easily removable uses of const_cast 2024-12-01 17:50:13 -08:00
A Thousand Ships
77549dd1f3
[Tree] Allow disabling auto generated tooltip for TreeItem 2024-12-01 14:39:51 +01:00
David Giardi
ebe1a2d7ec Add hover state to Tree items display 2024-10-17 00:21:52 +02:00
Haoyu Qiu
3c365a7fa5 Add auto translate mode for cells in Tree 2024-10-01 21:24:10 +08:00
bruvzg
da4f5fb953
[FileSystem Dock] Add symlink indicator and tooltip. 2024-09-06 14:55:07 +03:00
A Thousand Ships
cd4221c1e2
[Tree] Fix error when removing child from Tree
New `last_child` member was not properly updated
2024-08-28 12:40:26 +02:00
aaronp64
040f241f39 Improve Tree performance
Added TreeItem::last_child to avoid needing to iterate through all children to get to the end.  This mainly helps in cases where one TreeItem has many children (1000s), and new children are added to the end, as each add had to iterate through all previously added children.
2024-07-26 11:32:45 -04:00
Fredia Huya-Kouadio
70d450d086 Fix issue causing input lock when drag scrolling a Tree element on touchscreen devices
Prior to this fix, scrolling via mouse drag on touchscreen devices, and
drag&drop operation on a `TreeItem` element would conflict with each other
preventing the drag scroll from being released when the mouse button is
released.

The issue is addressed by disabling drag&drop when drag scrolling is ongoing.
2024-07-18 04:09:54 -07:00
bruvzg
7d4d63b807
Fix Tree and FileSystemList edit popup double events and ESC behavior. 2024-05-17 10:03:52 +03:00
Haoyu Qiu
c78e9c3fbd Fix TreeItem button handling
- Fix incorrect tooltip and `get_button_id_at_position()` when column
  title is visible and when RTL layout is used
- Take `button_margin`, `h_separation`, and `item_margin` into account
2024-04-18 18:51:36 +08:00
Haoyu Qiu
00f0043227 Revert "Correctly display tooltips for buttons in Tree when they overlap cell content"
This reverts commit 8278a5f274.
2024-04-18 17:35:26 +08:00
Rémi Verschelde
c84d3385f7
Merge pull request #88300 from FaycalElOuariachi/add-TreeItem-is_visible_in_tree
Add `is_visible_in_tree` in `TreeItem`
2024-03-05 23:44:29 +01:00
Faycal ElOuariachi
50cf7e1778 Add is_visible_in_tree in TreeItem 2024-03-05 03:38:33 +01:00
Michael Alexsander
612eed164c
Add auto translation to Tree 2024-03-01 12:21:45 -03:00
radzo73
de5b0d7103 Add get_button_color(column, id)
Docs should point to Color constuctor instead of just the class, but I unfortunately cannot.
2024-01-28 19:09:20 -05:00
A Thousand Ships
257d03681c
Use callable for TreeItem custom draw
Deprecating old functionality
2024-01-23 12:07:43 +01:00
Stanislav Labzyuk
ff8797e980 Implement disabled state for Checkbox in Tree 2023-11-15 17:13:34 +01:00
Yuri Sizov
2924bfd4d3 Register theme properties with ThemeDB 2023-09-11 13:45:23 +02:00
Miguel Pereira
8278a5f274 Correctly display tooltips for buttons in Tree when they overlap cell content 2023-08-27 18:21:12 +02:00
Danil Alexeev
07d23489f4
GUI: Fix text overlapping icon in Tree 2023-08-24 22:09:02 +03:00
Danil Alexeev
5fb975e4a5
GUI: Fix Tree performance regression by using cache 2023-08-04 16:11:26 +03:00
Yuri Sizov
b54d6cf466 Merge pull request #78393 from AThousandShips/tree_tooltip
Add ability to set the tooltip text of a `TreeItem` button
2023-07-12 15:09:09 +02:00
Yuri Sizov
b4a11294e6 Merge pull request #75460 from joao-pedro-braz/add_new_item_stylebox_to_the_tree_control
Add a new "inner_item_margin" Theme constant to the Tree control
2023-07-12 15:08:36 +02:00
Ninni Pipping
75b355ee99 Add ability to set the tooltip text of a TreeItem button 2023-06-18 11:14:32 +02:00
Danil Alexeev
010829f962
Tree: Add ability to configure text autowrap mode for individual cells 2023-06-03 15:17:35 +03:00
João Pedro Braz
670b7bec9a Add the "inner_item_margin" Theme constant to the Tree control
This PR adds the "inner_item_margin" Theme constant to the Tree Control.
It behaves like a horizontal padding (in CSS), but only in the active
writing direction (So on LTR it'll apply a left padding and on RTL right
padding).

The Editor Theme has been updated to make use of this and a result items
in Trees and ItemLists no longer "hugs" their border, expressing a proper
spacing instead.
2023-06-02 11:32:40 +02:00
Yuri Sizov
3ed7bdc26f Implement TreeItem.add_child 2023-05-31 11:36:23 +02:00
Rémi Verschelde
4020cc8acb
Merge pull request #76794 from Wiwip/inline-edit
Inline editor for the file system dock
2023-05-11 11:46:45 +02:00
Hendrik Brucker
dc46163b12 Improve editor state persistence 2023-05-11 04:17:03 +02:00
Wiwip
b08a6084af Modifies the file system dock to use the inline editor instead of a dialog.
*Bugsquad edit:* Closes https://github.com/godotengine/godot-proposals/issues/4933
2023-05-10 18:49:35 -04:00
Danil Alexeev
865d6f5ed0
Fix multiline items drawing in Tree 2023-04-28 12:02:26 +03:00
Danil Alexeev
005937b576
Add support for multiline strings to Tree 2023-04-25 18:43:26 +03:00
needleful
9a968088db Add allow_search property to ItemList and Tree 2023-04-18 09:21:18 -07:00
Haoyu Qiu
498d538578 Add scrollbar offset theme constants to Tree 2023-04-06 15:04:28 +08:00
Rémi Verschelde
9c492204ca
Merge pull request #75340 from Barugon/tree_colunm_title_alignment
Implement column title alignment for `Tree`
2023-04-03 16:03:10 +02:00
Yuri Sizov
1522762dc9 Make icons of scripted and custom classes fit the editor UI
Also:
- Add an option to limit the icon size in PopupMenu.
This is similar to how this works in Tree and TreeItem.
- Add the same option to TabBar.
- Add a theme constant for Tree, PopupMenu, Button, and
TabBar to apply this limit on the control level.

Co-authored-by: Daylily-Zeleen <daylily-zeleen@foxmail.com>
2023-03-31 21:39:02 +02:00
Barugon
c56ff437ae Implement column title alignment for Tree 2023-03-27 09:23:46 -07:00
Rémi Verschelde
ce278b1b7a
Merge pull request #70433 from Sauermann/fix-treeitem-id
Fix confusion about TreeItem.add_button ambiguity between id and index
2023-01-16 09:15:15 +01:00
Rémi Verschelde
d95794ec8a
One Copyright Update to rule them all
As many open source projects have started doing it, we're removing the
current year from the copyright notice, so that we don't need to bump
it every year.

It seems like only the first year of publication is technically
relevant for copyright notices, and even that seems to be something
that many companies stopped listing altogether (in a version controlled
codebase, the commits are a much better source of date of publication
than a hardcoded copyright statement).

We also now list Godot Engine contributors first as we're collectively
the current maintainers of the project, and we clarify that the
"exclusive" copyright of the co-founders covers the timespan before
opensourcing (their further contributions are included as part of Godot
Engine contributors).

Also fixed "cf." Frenchism - it's meant as "refer to / see".
2023-01-05 13:25:55 +01:00
Markus Sauermann
06f0184b63 Fix confusion about TreeItem.add_button ambiguity between id and index
A TreeItem button has an id and an index, which can be distinct.
This leads to confusion.

This PR documents the distinction between id and index.
2022-12-29 00:43:45 +01:00
Iceflower
908f392af6
Rename theme cache separation names 2022-11-30 16:06:14 +01:00
bruvzg
35528b800c
[Font] Add an import option to pre-render all glyphs required for the translation. 2022-11-10 10:43:15 +02:00
Ninni Pipping
df9eaf5f47 Tree recursive folding 2022-09-21 13:28:29 +02:00
Yuri Sizov
43f03e2ce6 Improve naming of theme properties throughout GUI code
Rename ItemList's bg -> panel
Rename ItemList's bg_focus -> focus
Rename ProgressBar's bg -> background
Rename ProgressBar's fg -> fill
Rename Tree's bg -> panel
Rename Tree's bg_focus -> focus
Rename ScrollContainer's bg -> panel
Rename FileDialog's *_icon_modulate -> *_icon_color
Rename FileDialog's files_disabled -> file_disabled_color
Rename CheckButton's on/off -> checked/unchecked
Rename check_v_adjust -> check_v_offset
2022-09-06 22:53:17 +03:00
Yuri Sizov
3b1aa240dc Add a lifecycle method for manual theme item caching to Control 2022-09-01 16:35:36 +03:00
Micky
97f8c9b97c Rename TreeItem's set_tooltip to set_tooltip_text
`set_tooltip` -> `set_tooltip_text`
`get_tooltip` -> `get_tooltip_text`

For consistency:
`get_button_tooltip` -> `get_button_tooltip_text`
And the `tooltip` parameter in `add_button` was renamed to `tooltip_text`
2022-08-30 11:16:23 +02:00
kobewi
f7f4873ed0 Replace Array return types with TypedArray 3 2022-08-24 12:53:36 +02:00
derammo
4e6c8e00fc fixed Tree UI control bug corrupting child cache 2022-08-04 08:24:51 -04:00