Modified tracing builder

Color are always in the same order for the segment
Can choose the letter to modify
save dont change the letter
This commit is contained in:
Laurent Tourte
2024-05-06 15:23:34 +02:00
parent 87eb16abd0
commit 8cc53f8db6
6 changed files with 239 additions and 26 deletions
+24 -6
View File
@@ -1,7 +1,10 @@
extends HBoxContainer
class_name SegmentContainer
signal changed()
@export var points_per_lines: = 25
@export var points_per_gradient: = 7
@onready var grapheme_label: = %GraphemeLabel
@onready var buttons_parent: = %ButtonsParent
@@ -26,6 +29,8 @@ func reset() -> void:
current_segment = null
current_button = null
await get_tree().process_frame
func load_segment(points: Array) -> void:
@@ -88,10 +93,14 @@ func match_segment_with_buttons() -> void:
func _on_button_point_down(button: SegmentPointButton) -> void:
current_button = button
changed.emit()
func _on_button_point_up(_button: SegmentPointButton) -> void:
current_button = null
changed.emit()
func _on_button_minus_pressed(button: SegmentPointButton) -> void:
@@ -100,11 +109,15 @@ func _on_button_minus_pressed(button: SegmentPointButton) -> void:
buttons.erase(button)
button.queue_free()
changed.emit()
func _on_place_point_button_pressed() -> void:
if is_instance_valid(current_segment):
current_segment.add_point(get_global_mouse_position() - lines.global_position)
changed.emit()
func _on_add_segment_button_pressed() -> void:
@@ -123,20 +136,23 @@ func _on_add_segment_button_pressed() -> void:
line.joint_mode = Line2D.LINE_JOINT_ROUND
lines.add_child(line)
var segments: = segments_container.get_children()
var all_lines: = lines.get_children()
for i in range(segments.size()):
var color: = gradient.sample(float(i) / float(segments.size() - 1))
segments[i].set_color(color)
all_lines[i].default_color = color
var i: = segments_container.get_child_count()
var r: = float(i % points_per_gradient) / float(points_per_gradient)
var color: = gradient.sample(r)
segment_build.set_color(color)
line.default_color = color
match_segment_with_buttons()
changed.emit()
func _on_segment_modify(segment: SegmentBuild) -> void:
current_segment = segment
match_segment_with_buttons()
changed.emit()
func _on_segment_delete(segment: SegmentBuild) -> void:
@@ -151,3 +167,5 @@ func _on_segment_delete(segment: SegmentBuild) -> void:
var ind_seg: = segments_container.get_children().find(segment)
lines.get_child(ind_seg).queue_free()
changed.emit()
+98
View File
@@ -0,0 +1,98 @@
[gd_scene load_steps=7 format=3 uid="uid://d2dsqx38l6yqc"]
[ext_resource type="PackedScene" uid="uid://dbl3r8426473v" path="res://sources/language_tool/plus_button.tscn" id="1_kgjbj"]
[ext_resource type="Script" path="res://sources/language_tool/tracing_builder.gd" id="1_rm5fr"]
[ext_resource type="Texture2D" uid="uid://5n02dxd66fw4" path="res://assets/menus/save_button.png" id="3_2sbjh"]
[ext_resource type="Texture2D" uid="uid://cw15lg6j37pvj" path="res://assets/menus/back_button.png" id="4_83j0b"]
[ext_resource type="PackedScene" uid="uid://bvb8iewnsnsoj" path="res://sources/language_tool/segment_container.tscn" id="4_frjng"]
[sub_resource type="Gradient" id="Gradient_1lmt0"]
offsets = PackedFloat32Array(0, 0.166667, 0.333333, 0.5, 0.666667, 0.833333, 1)
colors = PackedColorArray(1, 0, 0, 1, 1, 0.983333, 0, 1, 0, 1, 0.0833333, 1, 0, 0.983334, 1, 1, 0.028, 0, 0.84, 1, 0.566667, 0, 1, 1, 1, 0, 0.716667, 1)
metadata/_snap_enabled = true
metadata/_snap_count = 6
[node name="TracingBuilder" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_rm5fr")
grapheme = null
gradient = SubResource("Gradient_1lmt0")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/PanelContainer"]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/PanelContainer/MarginContainer"]
layout_mode = 2
[node name="Title" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 128
text = "Tracing Builder"
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2"]
layout_mode = 2
[node name="Help" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/VBoxContainer"]
layout_mode = 2
text = "- Left click to add and move points.
- Right click on a point to delete it.
"
[node name="Help2" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.560784, 0, 0, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 42
text = "- Unsaved changes when switching letters will be lost"
[node name="SaveButton" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2" instance=ExtResource("1_kgjbj")]
layout_mode = 2
[node name="TextureRect" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" index="0"]
texture = ExtResource("3_2sbjh")
[node name="OptionButton" type="OptionButton" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2"]
layout_mode = 2
[node name="BackButton" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2" instance=ExtResource("1_kgjbj")]
layout_mode = 2
[node name="TextureRect" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/BackButton" index="0"]
texture = ExtResource("4_83j0b")
[node name="LowerContainer" parent="VBoxContainer" instance=ExtResource("4_frjng")]
unique_name_in_owner = true
layout_mode = 2
[node name="UpperContainer" parent="VBoxContainer" instance=ExtResource("4_frjng")]
unique_name_in_owner = true
layout_mode = 2
[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" to="." method="_on_save_button_pressed"]
[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/BackButton" to="." method="_on_back_button_pressed"]
[editable path="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton"]
[editable path="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/BackButton"]
+44 -15
View File
@@ -1,14 +1,15 @@
extends Control
@export var grapheme: = "azertyuiopmlkjhgfdsqwxcvbnéàùèç"
@export var gradient: Gradient
@onready var lower_container: = %LowerContainer
@onready var upper_container: = %UpperContainer
@onready var letter_picker: = %LetterPicker
@onready var save_ok: = %SaveOk
const extension: = ".csv"
var letters: Array[String] = []
var current_letter: = -1
@@ -16,21 +17,33 @@ func _ready() -> void:
lower_container.gradient = gradient
upper_container.gradient = gradient
_find_all_letters()
_next_letter()
func _find_all_letters() -> void:
letters = []
var query: = "Select * FROM GPs"
Database.db.query(query)
var result: = Database.db.query_result
for element in result:
for letter in element.Grapheme:
if not letter in letters:
letters.append(letter)
letter_picker.add_item(letter)
func _next_letter() -> void:
current_letter += 1
if current_letter >= grapheme.length():
current_letter = 0
current_letter = (current_letter + 1) % letters.size()
lower_container.reset()
upper_container.reset()
await lower_container.reset()
await upper_container.reset()
lower_container.grapheme_label.text = grapheme[current_letter].to_lower()
upper_container.grapheme_label.text = grapheme[current_letter].to_upper()
lower_container.grapheme_label.text = letters[current_letter].to_lower()
upper_container.grapheme_label.text = letters[current_letter].to_upper()
Database.db.query("Select LowerTracingPath, UpperTracingPath FROM LettersTracingData WHERE Letter = '" + grapheme[current_letter] + "'")
Database.db.query("Select LowerTracingPath, UpperTracingPath FROM LettersTracingData WHERE Letter = '" + letters[current_letter] + "'")
if not Database.db.query_result.is_empty():
var lower_path: String = Database.db.query_result[0]["LowerTracingPath"]
@@ -38,6 +51,9 @@ func _next_letter() -> void:
_load_segments(lower_container, lower_path)
_load_segments(upper_container, upper_path)
letter_picker.selected = current_letter
save_ok.visible = true
func _load_segments(segment_container: SegmentContainer, path: String) -> void:
@@ -74,19 +90,32 @@ func real_path(path: String) -> String:
func _on_save_button_pressed() -> void:
var lower_path: = grapheme[current_letter] + "_lower"
var upper_path: = grapheme[current_letter] + "_upper"
var lower_path: = letters[current_letter] + "_lower"
var upper_path: = letters[current_letter] + "_upper"
_save_segments(lower_container.segments_container.get_children(), lower_path)
_save_segments(upper_container.segments_container.get_children(), upper_path)
Database.db.query("Select LowerTracingPath, UpperTracingPath FROM LettersTracingData WHERE Letter = '" + grapheme[current_letter] + "'")
Database.db.query("Select LowerTracingPath, UpperTracingPath FROM LettersTracingData WHERE Letter = '" + letters[current_letter] + "'")
if Database.db.query_result.is_empty():
Database.db.query("INSERT INTO LettersTracingData (Letter, LowerTracingPath, UpperTracingPath) VALUES ('" + grapheme[current_letter] + "','" + lower_path + "','" + upper_path + "')")
Database.db.query("INSERT INTO LettersTracingData (Letter, LowerTracingPath, UpperTracingPath) VALUES ('" + letters[current_letter] + "','" + lower_path + "','" + upper_path + "')")
_next_letter()
save_ok.visible = true
func _on_back_button_pressed() -> void:
get_tree().change_scene_to_file("res://sources/language_tool/prof_tool_menu.tscn")
func _on_letter_picker_item_selected(index: int) -> void:
current_letter = index - 1
_next_letter()
func _on_lower_container_changed() -> void:
save_ok.visible = false
func _on_upper_container_changed() -> void:
save_ok.visible = false
+39 -5
View File
@@ -1,10 +1,11 @@
[gd_scene load_steps=7 format=3 uid="uid://d2dsqx38l6yqc"]
[gd_scene load_steps=8 format=3 uid="uid://d2dsqx38l6yqc"]
[ext_resource type="PackedScene" uid="uid://dbl3r8426473v" path="res://sources/language_tool/plus_button.tscn" id="1_kgjbj"]
[ext_resource type="Script" path="res://sources/language_tool/tracing_builder.gd" id="1_rm5fr"]
[ext_resource type="Texture2D" uid="uid://5n02dxd66fw4" path="res://assets/menus/save_button.png" id="3_2sbjh"]
[ext_resource type="Texture2D" uid="uid://cw15lg6j37pvj" path="res://assets/menus/back_button.png" id="4_83j0b"]
[ext_resource type="PackedScene" uid="uid://bvb8iewnsnsoj" path="res://sources/language_tool/segment_container.tscn" id="4_frjng"]
[ext_resource type="Texture2D" uid="uid://cs7v0nap5hadi" path="res://assets/menus/save_ok.png" id="4_m23be"]
[sub_resource type="Gradient" id="Gradient_1lmt0"]
offsets = PackedFloat32Array(0, 0.166667, 0.333333, 0.5, 0.666667, 0.833333, 1)
@@ -51,11 +52,21 @@ theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 128
text = "Tracing Builder"
[node name="Help" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2"]
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2"]
layout_mode = 2
text = "- Right click to add and move points
- Left click on a point to delete it
- Save to move to the next letter"
[node name="Help" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/VBoxContainer"]
layout_mode = 2
text = "- Left click to add and move points.
- Right click on a point to delete it.
"
[node name="Help2" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.560784, 0, 0, 1)
theme_override_colors/font_outline_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 42
text = "- Unsaved changes when switching letters will be lost"
[node name="SaveButton" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2" instance=ExtResource("1_kgjbj")]
layout_mode = 2
@@ -63,6 +74,23 @@ layout_mode = 2
[node name="TextureRect" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" index="0"]
texture = ExtResource("3_2sbjh")
[node name="SaveOk" type="TextureRect" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton"]
unique_name_in_owner = true
custom_minimum_size = Vector2(120, 120)
layout_mode = 2
texture = ExtResource("4_m23be")
expand_mode = 1
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2"]
layout_mode = 2
theme_override_constants/margin_top = 42
theme_override_constants/margin_bottom = 42
[node name="LetterPicker" type="OptionButton" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 64
[node name="BackButton" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2" instance=ExtResource("1_kgjbj")]
layout_mode = 2
@@ -78,7 +106,13 @@ unique_name_in_owner = true
layout_mode = 2
[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" to="." method="_on_save_button_pressed"]
[connection signal="gui_input" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton/SaveOk" to="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" method="_on_texture_rect_gui_input"]
[connection signal="mouse_entered" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton/SaveOk" to="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" method="_on_texture_rect_mouse_entered"]
[connection signal="mouse_exited" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton/SaveOk" to="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton" method="_on_texture_rect_mouse_exited"]
[connection signal="item_selected" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/MarginContainer/LetterPicker" to="." method="_on_letter_picker_item_selected"]
[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/BackButton" to="." method="_on_back_button_pressed"]
[connection signal="changed" from="VBoxContainer/LowerContainer" to="." method="_on_lower_container_changed"]
[connection signal="changed" from="VBoxContainer/UpperContainer" to="." method="_on_upper_container_changed"]
[editable path="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/SaveButton"]
[editable path="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer2/BackButton"]