NAT Godot make playground tabs and entry panels

This commit is contained in:
2023-02-13 06:23:43 -07:00
parent 9c39c0cc13
commit c8d9fa81b4
8 changed files with 126 additions and 38 deletions

View File

@@ -0,0 +1,19 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://scripts/EntryContainer.gd" type="Script" id=1]
[node name="EntryPanel" type="PanelContainer"]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 1
script = ExtResource( 1 )
[node name="EntryLabel" type="Label" parent="."]
margin_left = 7.0
margin_top = 13.0
margin_right = 192.0
margin_bottom = 27.0
text = "Hello NAT Godot Playground!"
[connection signal="mouse_entered" from="." to="." method="_on_EntryPanel_mouse_entered"]
[connection signal="mouse_exited" from="." to="." method="_on_EntryPanel_mouse_exited"]

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=4 format=2]
[gd_scene load_steps=3 format=2]
[ext_resource path="res://scripts/Playground.gd" type="Script" id=1]
[ext_resource path="res://scripts/EntryContainer.gd" type="Script" id=2]
[ext_resource path="res://Playground.tscn" type="PackedScene" id=1]
[ext_resource path="res://build/src/RootNode.cs" type="Script" id=3]
[node name="RootNode" type="Control"]
@@ -18,33 +17,4 @@ anchor_bottom = 1.0
margin_right = 8.0
margin_bottom = 36.0
[node name="PlaygroundScrollContainer" type="ScrollContainer" parent="PlaygroundTabContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 4.0
margin_top = 32.0
margin_right = -4.0
margin_bottom = -4.0
rect_min_size = Vector2( 1280, 720 )
[node name="Playground" type="Control" parent="PlaygroundTabContainer/PlaygroundScrollContainer"]
margin_right = 1280.0
margin_bottom = 720.0
rect_min_size = Vector2( 1280, 720 )
script = ExtResource( 1 )
[node name="EntryContainer" type="PanelContainer" parent="PlaygroundTabContainer/PlaygroundScrollContainer/Playground"]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 1
script = ExtResource( 2 )
[node name="EntryLabel" type="Label" parent="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer"]
margin_left = 7.0
margin_top = 13.0
margin_right = 192.0
margin_bottom = 27.0
text = "Hello NAT Godot Playground!"
[connection signal="mouse_entered" from="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" to="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" method="_on_EntryContainer_mouse_entered"]
[connection signal="mouse_exited" from="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" to="PlaygroundTabContainer/PlaygroundScrollContainer/Playground/EntryContainer" method="_on_EntryContainer_mouse_exited"]
[node name="Playground" parent="PlaygroundTabContainer" instance=ExtResource( 1 )]

View File

@@ -0,0 +1,29 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://scripts/Playground.gd" type="Script" id=1]
[ext_resource path="res://scripts/EntryContainer.gd" type="Script" id=2]
[ext_resource path="res://EntryPanel.tscn" type="PackedScene" id=3]
[node name="Playground" type="ScrollContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 4.0
margin_top = 32.0
margin_right = -4.0
margin_bottom = -4.0
rect_min_size = Vector2( 1280, 720 )
[node name="Entries" type="Control" parent="."]
margin_right = 1280.0
margin_bottom = 720.0
rect_min_size = Vector2( 1280, 720 )
script = ExtResource( 1 )
[node name="EntryPanel" type="PanelContainer" parent="Entries" instance=ExtResource( 3 )]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 1
script = ExtResource( 2 )
[connection signal="mouse_entered" from="Entries/EntryPanel" to="Entries/EntryPanel" method="_on_EntryPanel_mouse_entered"]
[connection signal="mouse_exited" from="Entries/EntryPanel" to="Entries/EntryPanel" method="_on_EntryPanel_mouse_exited"]

View File

@@ -0,0 +1,6 @@
{
"default": "Playground-MAIN",
"Playground-MAIN": {
"catsMatch": "true"
}
}

View File

@@ -16,13 +16,13 @@ func _ready():
# pass
func _on_EntryContainer_mouse_entered():
func _on_EntryPanel_mouse_entered():
var current_focus_z = get_parent().current_focus_z
if is_nan(current_focus_z) or current_focus_z <= self.z:
get_parent().current_focus = self
get_parent().current_focus_z = self.z
func _on_EntryContainer_mouse_exited():
func _on_EntryPanel_mouse_exited():
if get_parent().current_focus == self:
get_parent().current_focus = null
get_parent().current_focus_z = NAN

View File

@@ -0,0 +1,6 @@
package;
import kiss.Prelude;
@:build(kiss.Kiss.build())
class EntryPanelSystem extends PlaygroundSystem<PanelContainer> {}

View File

@@ -0,0 +1,31 @@
(loadFrom "nat-archive-tool" "src/nat/Lib.kiss")
(loadFrom "kiss-godot" "src/kiss_godot/Macros.kiss")
(defNew [&prop :GodotUI godotUI
&prop :Node rootNode]
(super
godotUI
->[archive e] (hasComponent e Name)
// Create Entry node:
->[archive e pos &opt ui]
(let [:PackedScene ePanelScene (GD.load "res://EntryPanel.tscn")
:PanelContainer ePanel (cast (ePanelScene.instance))
:Label eLabel (getNode ePanel "EntryLabel")]
(set eLabel.text (readComponentOr e Name ""))
(.addChild (getNode pgScrollContainer "Entries") ePanel)
ePanel)
// Draw line:
->[archive e pos e2 pos2 &opt ui]
null
// Remove Entry node:
->[archive e &opt ui]
null))
(prop &mut :ScrollContainer pgScrollContainer null)
(method &override :Void switchPlaygroundKey [key]
(super.switchPlaygroundKey key)
(set pgScrollContainer (getNode rootNode key)))
(method &override :Void clear [:ColorF color]
null)

View File

@@ -1,18 +1,45 @@
(loadFrom "kiss-godot" "src/kiss_godot/Macros.kiss")
(prop &mut :ArchiveController controller (property default default))
(prop &mut :Null<KeyShortcutHandler<Entry>> shortcutHandler (property default null))
(method :Void showPrefixMap [:Map<String,String> map] (throw "TODO Not implemented!"))
(method :Void hidePrefixMap [] (throw "TODO Not implemented!"))
(method :Null<PlaygroundSystem> playgroundSystem [] (throw "TODO Not implemented!"))
(method :Null<PlaygroundSystem<Dynamic>> playgroundSystem [] pgSystem)
(method :Void enterText [:String prompt :String->Void resolve :Float maxLength] (throw "TODO Not implemented!"))
(method :Void enterNumber [:String prompt :Float->Void resolve :Float min :Float max &opt :Null<Float> inStepsOf &opt :Null<Bool> allowNaN] (throw "TODO Not implemented!"))
(method :Void chooseEntry [:String prompt :Archive archive :Entry->Void resolve] (throw "TODO Not implemented!"))
(method :Void chooseEntries [:String prompt :Archive archive :Array<Entry>->Void resolve :Int min :Float max] (throw "TODO Not implemented!"))
(method :Void handleChanges [:Archive archive :ChangeSet changeSet] (throw "TODO Not implemented!"))
(method :Void displayMessage [:String message] (throw "TODO Not implemented!"))
(method :Void reportError [:String error] (throw "TODO Not implemented!"))
(method :Void onSelectionChanged [:Array<Entry> selectedEntries :Array<Entry> lastSelectedEntries] (throw "TODO Not implemented!"))
(method :Void choosePosition [:String prompt :Position->Void resolve] (throw "TODO Not implemented!"))
(method :Option<Position> cursorPosition [] (throw "TODO Not implemented!"))(method :Void chooseBetweenStrings [:String prompt :Array<String> choices :String->Void resolve] (throw "TODO Not implemented!"))
(method :Option<Position> cursorPosition [] (throw "TODO Not implemented!"))
(method :Void chooseBetweenStrings [:String prompt :Array<String> choices :String->Void resolve] (throw "TODO Not implemented!"))
(defNew [&prop :Archive archive
&prop :Node rootNode])
&prop :Node rootNode]
[
:EntryPanelSystem pgSystem (new EntryPanelSystem this rootNode)
:TabContainer pgTabs (getNode rootNode "PlaygroundTabContainer")
:PackedScene pgScene (GD.load "res://Playground.tscn")
]
(doFor =>key playground archive.playgrounds
(let [pg (pgScene.instance)]
(set pg.name key)
(pgTabs.addChild pg))))