Topic Panel is feature complete now.
This commit is contained in:
parent
7d285bd607
commit
0ad993fcdc
1
.import/.gdignore
Normal file
1
.import/.gdignore
Normal file
@ -0,0 +1 @@
|
||||
|
@ -0,0 +1,3 @@
|
||||
source_md5="b0ae9c92bc10ddd8e279278d487e5640"
|
||||
dest_md5="dbaa22dbba4b13a17ab3a1c0a856c828"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="646f270783ecf83a085a8b426fb0e9cf"
|
||||
dest_md5="276e8a115a6e5f0985e7c0e128f64923"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="b4d0293b5eabe3095cd2ea42f46e4cf9"
|
||||
dest_md5="9513a4f65d3bb1e798b742c3982bfb60"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="b3a6590c0e666c8d942e688d308f4fa2"
|
||||
dest_md5="0990c93510b803afecad3919336da102"
|
||||
|
Binary file not shown.
3
.import/bubble.png-4f609f28c2c064c69f714259f156e4b9.md5
Normal file
3
.import/bubble.png-4f609f28c2c064c69f714259f156e4b9.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="879575973d60584e81e21b31f2060110"
|
||||
dest_md5="e02769059f24e9c5576b7552dc6efb67"
|
||||
|
BIN
.import/bubble.png-4f609f28c2c064c69f714259f156e4b9.stex
Normal file
BIN
.import/bubble.png-4f609f28c2c064c69f714259f156e4b9.stex
Normal file
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="99869ec16c048d160a913b764ed0b82c"
|
||||
dest_md5="3dd0fb4e9c48d36f33fed3c01a70ce10"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="13b33abcfd7fcdb382be2f8cc5241b90"
|
||||
dest_md5="d1879bc9fb29bfc2a49b5b453907b1b3"
|
||||
|
Binary file not shown.
3
.import/call0.png-bd301461443cfb2159f3203b22d64513.md5
Normal file
3
.import/call0.png-bd301461443cfb2159f3203b22d64513.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="c2f8ee7e4013f01b8975066b1777efc3"
|
||||
dest_md5="e6cfd3bf61f70ebbea21b68a617a8ea3"
|
||||
|
BIN
.import/call0.png-bd301461443cfb2159f3203b22d64513.stex
Normal file
BIN
.import/call0.png-bd301461443cfb2159f3203b22d64513.stex
Normal file
Binary file not shown.
3
.import/call01.png-6a8d3bd7cabe8fc7da1d3078de113ba3.md5
Normal file
3
.import/call01.png-6a8d3bd7cabe8fc7da1d3078de113ba3.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="986d1626ecf7c000ffc9a56f80b2df64"
|
||||
dest_md5="62bc505c9ab152918cacabee23655e14"
|
||||
|
BIN
.import/call01.png-6a8d3bd7cabe8fc7da1d3078de113ba3.stex
Normal file
BIN
.import/call01.png-6a8d3bd7cabe8fc7da1d3078de113ba3.stex
Normal file
Binary file not shown.
3
.import/call1.png-6cb5273ff894162c8dc068ddac753817.md5
Normal file
3
.import/call1.png-6cb5273ff894162c8dc068ddac753817.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="11112eaa7cf69b157d1f7c8f2ce01bab"
|
||||
dest_md5="8870411b528c6ffb49de9f8db6854cb5"
|
||||
|
BIN
.import/call1.png-6cb5273ff894162c8dc068ddac753817.stex
Normal file
BIN
.import/call1.png-6cb5273ff894162c8dc068ddac753817.stex
Normal file
Binary file not shown.
3
.import/emb.png-15b5f2ba8092793d40606e10ddccb660.md5
Normal file
3
.import/emb.png-15b5f2ba8092793d40606e10ddccb660.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="d818096e3b09ea2efe21b8c570a7edad"
|
||||
dest_md5="f3c4b8f0065b5357b5314ece0a6e1562"
|
||||
|
BIN
.import/emb.png-15b5f2ba8092793d40606e10ddccb660.stex
Normal file
BIN
.import/emb.png-15b5f2ba8092793d40606e10ddccb660.stex
Normal file
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="aace56fdaf060d8ad806d6acffdaf398"
|
||||
dest_md5="757b165757491783bb3824a9491427aa"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="cde40aca55b9fdb487c95290baec1db9"
|
||||
dest_md5="d9eda3d71265b4d019c6347fe1dc2111"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="88fd1903a3d90118752b89b4e08d2b4a"
|
||||
dest_md5="160e816cf9c2256e40dac87d5280bf60"
|
||||
|
Binary file not shown.
3
.import/hime.png-3859ec6e8920d1924f20ea8c659a69d3.md5
Normal file
3
.import/hime.png-3859ec6e8920d1924f20ea8c659a69d3.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="83094fe680afb95e3ef547fba8ed20ac"
|
||||
dest_md5="6b45f6ae8a80e3b55c421dc8af7a5223"
|
||||
|
BIN
.import/hime.png-3859ec6e8920d1924f20ea8c659a69d3.stex
Normal file
BIN
.import/hime.png-3859ec6e8920d1924f20ea8c659a69d3.stex
Normal file
Binary file not shown.
3
.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5
Normal file
3
.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="e5d3288a900b6d4421e9d3937d08ab5e"
|
||||
dest_md5="cc45eda6d302c77d5e7d876bb1d30a13"
|
||||
|
BIN
.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex
Normal file
BIN
.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex
Normal file
Binary file not shown.
3
.import/iee.png-2ace60c60bc9444db96f8335a0a42fd8.md5
Normal file
3
.import/iee.png-2ace60c60bc9444db96f8335a0a42fd8.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="32a1b014ad4cde8956c2e44802f75c9e"
|
||||
dest_md5="9fc64f8a0b81ed6bb90eee7e229797e3"
|
||||
|
BIN
.import/iee.png-2ace60c60bc9444db96f8335a0a42fd8.stex
Normal file
BIN
.import/iee.png-2ace60c60bc9444db96f8335a0a42fd8.stex
Normal file
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="427888e7a483b00e3a948e8d13c9bb4d"
|
||||
dest_md5="1228c88a5a6cf8d065d1bbb9b6b7e1ad"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="8a2523134958f934e46297ea2a697e1e"
|
||||
dest_md5="b31c9ec7e789f0ce100d338400bc6c38"
|
||||
|
Binary file not shown.
3
.import/note.png-efb60329feae1162eb5809ba1529a3d3.md5
Normal file
3
.import/note.png-efb60329feae1162eb5809ba1529a3d3.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="b891777939b10e39f5b113eef604d834"
|
||||
dest_md5="12f350577900d444c4a5484671df1ec7"
|
||||
|
BIN
.import/note.png-efb60329feae1162eb5809ba1529a3d3.stex
Normal file
BIN
.import/note.png-efb60329feae1162eb5809ba1529a3d3.stex
Normal file
Binary file not shown.
3
.import/off.png-9e318488e74f0027d75f0bc130ff17e4.md5
Normal file
3
.import/off.png-9e318488e74f0027d75f0bc130ff17e4.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="7ac917032afeec8a7824e5472cf13638"
|
||||
dest_md5="6930cf1e3a1ddce048f1fc4dc82e656d"
|
||||
|
BIN
.import/off.png-9e318488e74f0027d75f0bc130ff17e4.stex
Normal file
BIN
.import/off.png-9e318488e74f0027d75f0bc130ff17e4.stex
Normal file
Binary file not shown.
3
.import/on.png-30e09c905166ec12e325b6897eba5eab.md5
Normal file
3
.import/on.png-30e09c905166ec12e325b6897eba5eab.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="6a0879affdd3ff3272b40d2b876c493a"
|
||||
dest_md5="786aedb5f9921c46dec8adf5d5d80443"
|
||||
|
BIN
.import/on.png-30e09c905166ec12e325b6897eba5eab.stex
Normal file
BIN
.import/on.png-30e09c905166ec12e325b6897eba5eab.stex
Normal file
Binary file not shown.
3
.import/ping.wav-f50f49c78cdede9aeaa6d25c0d968e0c.md5
Normal file
3
.import/ping.wav-f50f49c78cdede9aeaa6d25c0d968e0c.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="56b1c187b72a468cf14cf1a6102bca1b"
|
||||
dest_md5="77be94894ee06b10d683d853b9b3fa78"
|
||||
|
BIN
.import/ping.wav-f50f49c78cdede9aeaa6d25c0d968e0c.sample
Normal file
BIN
.import/ping.wav-f50f49c78cdede9aeaa6d25c0d968e0c.sample
Normal file
Binary file not shown.
3
.import/plus0.png-5b08f8ec4468b765a90486e3bd698ea3.md5
Normal file
3
.import/plus0.png-5b08f8ec4468b765a90486e3bd698ea3.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="3e46c68a686c87959e97519c25a35e46"
|
||||
dest_md5="c25d3e0fc261f6ed19218d9c837850f4"
|
||||
|
BIN
.import/plus0.png-5b08f8ec4468b765a90486e3bd698ea3.stex
Normal file
BIN
.import/plus0.png-5b08f8ec4468b765a90486e3bd698ea3.stex
Normal file
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="f87a5b97cfcc8d33ad6da1278fccb2d2"
|
||||
dest_md5="13089c6bb347888f4b6c33170b30ff82"
|
||||
|
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
source_md5="ceec25b08b0d0ebb65b34989f2ac10b2"
|
||||
dest_md5="34ea352b537e79967ccf8d818710414f"
|
||||
|
Binary file not shown.
3
.import/stronk.png-84390bd08630eef7a8687f8b906bc8cb.md5
Normal file
3
.import/stronk.png-84390bd08630eef7a8687f8b906bc8cb.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="54e75b5a12f8fa52282f83a1809fce6b"
|
||||
dest_md5="b16dcd23cf359bc098e0552c775a70c0"
|
||||
|
BIN
.import/stronk.png-84390bd08630eef7a8687f8b906bc8cb.stex
Normal file
BIN
.import/stronk.png-84390bd08630eef7a8687f8b906bc8cb.stex
Normal file
Binary file not shown.
3
.import/sweat.png-2bb73a0e3fc2dab640bb3f479d92a16a.md5
Normal file
3
.import/sweat.png-2bb73a0e3fc2dab640bb3f479d92a16a.md5
Normal file
@ -0,0 +1,3 @@
|
||||
source_md5="da0a840df29fc886de0813fce80b8b97"
|
||||
dest_md5="53c81ab36d864c34b5e9a4905f2500f1"
|
||||
|
BIN
.import/sweat.png-2bb73a0e3fc2dab640bb3f479d92a16a.stex
Normal file
BIN
.import/sweat.png-2bb73a0e3fc2dab640bb3f479d92a16a.stex
Normal file
Binary file not shown.
@ -15,6 +15,7 @@ others_message_color = Color( 0.294118, 0.168627, 0.34902, 1 )
|
||||
scroll_bar_color = Color( 0.372549, 0.137255, 0.286275, 1 )
|
||||
scroll_bar_highlight_color = Color( 0.760784, 0.34902, 0.964706, 1 )
|
||||
scroll_bar_pressed_color = Color( 1, 0.631373, 0.701961, 1 )
|
||||
casual_topic_color = Color( 0.380392, 0.152941, 0.27451, 1 )
|
||||
daily_topic_color = Color( 0.294118, 0.168627, 0.34902, 1 )
|
||||
casual_topic_color = Color( 0.415686, 0.168627, 0.298039, 1 )
|
||||
daily_topic_color = Color( 0.341176, 0.168627, 0.337255, 1 )
|
||||
urgent_topic_color = Color( 0.352941, 0.129412, 0.243137, 1 )
|
||||
add_topic_button_color = Color( 0.745098, 0.301961, 0.521569, 1 )
|
||||
|
@ -18,3 +18,4 @@ scroll_bar_pressed_color = Color( 0.396078, 0.435294, 0.447059, 1 )
|
||||
casual_topic_color = Color( 0.14902, 0.172549, 0.203922, 1 )
|
||||
daily_topic_color = Color( 0.0980392, 0.180392, 0.305882, 1 )
|
||||
urgent_topic_color = Color( 0.290196, 0.152941, 0.203922, 1 )
|
||||
add_topic_button_color = Color( 0.258824, 0.290196, 0.345098, 1 )
|
||||
|
@ -9,7 +9,7 @@ func _ready():
|
||||
topics = TopicData.new()
|
||||
|
||||
var autosave_timer = Timer.new()
|
||||
autosave_timer.wait_time = 600.0 # Every ten minutes.
|
||||
autosave_timer.wait_time = 6.0 # Every ten minutes.
|
||||
autosave_timer.autostart = true
|
||||
autosave_timer.connect("timeout", self, "_save_data")
|
||||
add_child(autosave_timer)
|
||||
|
@ -10,12 +10,20 @@ const TOPIC_NODE = preload("res://user_interface/topic_panel/topic_node.tscn")
|
||||
var associated_node: Control
|
||||
|
||||
var content: String
|
||||
var type: int
|
||||
var type: int = TYPE_CASUAL
|
||||
|
||||
|
||||
func change_type(new_type: int):
|
||||
type = new_type
|
||||
associated_node.type = new_type
|
||||
associated_node._adjust_appearance_to_user()
|
||||
Data.topics.dirty_flag = true
|
||||
|
||||
|
||||
func delete():
|
||||
Data.topics.loaded_topics.erase(self)
|
||||
associated_node.parent.queue_free()
|
||||
Data.topics.dirty_flag = true
|
||||
|
||||
|
||||
# Used by the TopicFeed, to spawn topic nodes.
|
||||
|
@ -2,7 +2,7 @@ extends Node
|
||||
class_name TopicData
|
||||
|
||||
|
||||
signal topic_added(topic)
|
||||
signal topic_added(topic, position)
|
||||
|
||||
var dirty_flag = false
|
||||
var loaded_topics = []
|
||||
@ -10,11 +10,18 @@ var loaded_topics = []
|
||||
|
||||
func add_topic(position: int):
|
||||
var topic = Topic.new()
|
||||
topic.type = position # Delete this line later.
|
||||
loaded_topics.append(topic)
|
||||
dirty_flag = true
|
||||
|
||||
# TODO: Make it possible to vary in position in the array!!
|
||||
emit_signal("topic_added", topic)
|
||||
emit_signal("topic_added", topic, position)
|
||||
|
||||
|
||||
func sort_topics():
|
||||
loaded_topics.sort_custom(self, "_compare_topic_index")
|
||||
|
||||
|
||||
func _compare_topic_index(a, b):
|
||||
return a.associated_node.parent.get_index() < b.associated_node.parent.get_index()
|
||||
|
||||
|
||||
func load_data():
|
||||
@ -24,6 +31,7 @@ func load_data():
|
||||
|
||||
func save_data():
|
||||
if dirty_flag:
|
||||
sort_topics() # Important before saving, to remain the order.
|
||||
# TODO: Save data.
|
||||
pass
|
||||
|
||||
|
@ -15,6 +15,7 @@ export(Color) var scroll_bar_pressed_color
|
||||
export(Color) var casual_topic_color
|
||||
export(Color) var daily_topic_color
|
||||
export(Color) var urgent_topic_color
|
||||
export(Color) var add_topic_button_color
|
||||
|
||||
var message_box_content: String = ""
|
||||
|
||||
|
@ -44,6 +44,9 @@ margin_bottom = 472.0
|
||||
rect_min_size = Vector2( 0, 60 )
|
||||
theme = ExtResource( 1 )
|
||||
script = ExtResource( 6 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Margin" type="MarginContainer" parent="."]
|
||||
margin_right = 328.0
|
||||
@ -67,17 +70,10 @@ size_flags_vertical = 3
|
||||
size_flags_stretch_ratio = 4.0
|
||||
custom_constants/separation = 10
|
||||
|
||||
[node name="ProfileImageRect" type="TextureRect" parent="Margin/Structure/Profile" instance=ExtResource( 3 )]
|
||||
[node name="ProfileImageRect" parent="Margin/Structure/Profile" instance=ExtResource( 3 )]
|
||||
material = SubResource( 2 )
|
||||
margin_right = 48.0
|
||||
margin_bottom = 48.0
|
||||
rect_min_size = Vector2( 48, 48 )
|
||||
texture = ExtResource( 2 )
|
||||
expand = true
|
||||
stretch_mode = 1
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="UserTexts" type="VBoxContainer" parent="Margin/Structure/Profile"]
|
||||
margin_left = 58.0
|
||||
|
19
user_interface/topic_panel/add_button.gd
Normal file
19
user_interface/topic_panel/add_button.gd
Normal file
@ -0,0 +1,19 @@
|
||||
extends TextureButton
|
||||
|
||||
|
||||
onready var scroll_container = get_node("../..")
|
||||
|
||||
|
||||
func _ready():
|
||||
# warning-ignore:return_value_discarded
|
||||
Users.connect("switched", self, "_on_user_switched")
|
||||
|
||||
|
||||
func _on_user_switched():
|
||||
self_modulate = Users.get_current().add_topic_button_color
|
||||
|
||||
|
||||
func _on_pressed():
|
||||
Data.topics.add_topic(get_index())
|
||||
yield(get_tree(), "idle_frame")
|
||||
scroll_container.scroll_vertical += 64
|
20
user_interface/topic_panel/add_button.tscn
Normal file
20
user_interface/topic_panel/add_button.tscn
Normal file
@ -0,0 +1,20 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://user_interface/topic_panel/add_button_normal.png" type="Texture" id=1]
|
||||
[ext_resource path="res://user_interface/topic_panel/add_button_hover.png" type="Texture" id=2]
|
||||
[ext_resource path="res://user_interface/topic_panel/add_button_pressed.png" type="Texture" id=3]
|
||||
[ext_resource path="res://user_interface/topic_panel/add_button.gd" type="Script" id=4]
|
||||
|
||||
[node name="AddButton" type="TextureButton"]
|
||||
rect_min_size = Vector2( 0, 56 )
|
||||
size_flags_horizontal = 3
|
||||
texture_normal = ExtResource( 1 )
|
||||
texture_pressed = ExtResource( 3 )
|
||||
texture_hover = ExtResource( 2 )
|
||||
expand = true
|
||||
script = ExtResource( 4 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[connection signal="pressed" from="." to="." method="_on_pressed"]
|
BIN
user_interface/topic_panel/add_button_hover.png
Normal file
BIN
user_interface/topic_panel/add_button_hover.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
35
user_interface/topic_panel/add_button_hover.png.import
Normal file
35
user_interface/topic_panel/add_button_hover.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/add_button_hover.png-cdbe778a322e171ee118ec3db1548d1c.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://user_interface/topic_panel/add_button_hover.png"
|
||||
dest_files=[ "res://.import/add_button_hover.png-cdbe778a322e171ee118ec3db1548d1c.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
BIN
user_interface/topic_panel/add_button_normal.png
Normal file
BIN
user_interface/topic_panel/add_button_normal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
35
user_interface/topic_panel/add_button_normal.png.import
Normal file
35
user_interface/topic_panel/add_button_normal.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/add_button_normal.png-7610a20d621a1599612f2d10ba19a66e.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://user_interface/topic_panel/add_button_normal.png"
|
||||
dest_files=[ "res://.import/add_button_normal.png-7610a20d621a1599612f2d10ba19a66e.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
BIN
user_interface/topic_panel/add_button_pressed.png
Normal file
BIN
user_interface/topic_panel/add_button_pressed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
35
user_interface/topic_panel/add_button_pressed.png.import
Normal file
35
user_interface/topic_panel/add_button_pressed.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/add_button_pressed.png-21b54c26cf6425256cdf8732d7c7e54c.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://user_interface/topic_panel/add_button_pressed.png"
|
||||
dest_files=[ "res://.import/add_button_pressed.png-21b54c26cf6425256cdf8732d7c7e54c.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
process/normal_map_invert_y=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
@ -1,6 +1,7 @@
|
||||
extends Container
|
||||
class_name TopicDraggable
|
||||
|
||||
const SCROLL_SPEED = 25.0
|
||||
|
||||
onready var topic_feed: VBoxContainer = get_node("..")
|
||||
onready var scroll_container: ScrollContainer = get_node("../..")
|
||||
@ -9,44 +10,67 @@ onready var editable = get_node("TopicEditable")
|
||||
onready var tween = get_node("Tween")
|
||||
|
||||
var global_position setget _set_global_position
|
||||
var local_position setget _set_local_position
|
||||
var _in_fit_in_animation = false
|
||||
var _previous_position
|
||||
var _previous_global_position
|
||||
var _previous_scroll
|
||||
var _offset
|
||||
var _something_passed = false
|
||||
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
|
||||
func _gui_input(event):
|
||||
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
|
||||
if event.is_pressed():
|
||||
if event.shift:
|
||||
topic_feed._toggle_selection_result = _set_selection(null)
|
||||
topic_feed._shift_hold = true
|
||||
else:
|
||||
_deselect_all()
|
||||
if not editable.edit_mode:
|
||||
if event.doubleclick:
|
||||
editable._enable_edit_mode()
|
||||
editable.text_edit.grab_focus()
|
||||
yield(get_tree(), "idle_frame")
|
||||
editable.text_edit.select_all()
|
||||
elif !_in_fit_in_animation:
|
||||
_set_as_grabbed()
|
||||
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
|
||||
if event.is_pressed():
|
||||
if _is_mouse_on_control():
|
||||
if event.shift:
|
||||
topic_feed._toggle_selection_result = _set_selection(null)
|
||||
topic_feed._shift_hold = true
|
||||
else:
|
||||
_deselect_all()
|
||||
if not editable.edit_mode:
|
||||
if event.doubleclick:
|
||||
editable._enable_edit_mode()
|
||||
editable.text_edit.grab_focus()
|
||||
editable.text_edit.select_all()
|
||||
elif !_in_fit_in_animation:
|
||||
_set_as_grabbed()
|
||||
elif editable.edit_mode:
|
||||
if !_is_mouse_on_topic() and editable.edit_mode:
|
||||
editable.text_edit._confirm()
|
||||
else:
|
||||
_fit_in_animation()
|
||||
if _is_grabbed():
|
||||
_fit_in_animation()
|
||||
topic_feed._shift_hold = false
|
||||
|
||||
if event is InputEventMouseMotion:
|
||||
if topic_feed.currently_grabbed_topic == self:
|
||||
if _is_grabbed():
|
||||
_move_block(event)
|
||||
topic_feed.check_all_passings()
|
||||
if topic_feed._shift_hold and _is_mouse_on_control():
|
||||
if topic_feed._shift_hold and _is_mouse_on_topic():
|
||||
# warning-ignore:return_value_discarded
|
||||
_set_selection(topic_feed._toggle_selection_result)
|
||||
|
||||
if event is InputEventMouseButton:
|
||||
if _is_grabbed():
|
||||
var scroll_value = 0.0
|
||||
|
||||
if event.button_index == BUTTON_WHEEL_UP:
|
||||
scroll_value = -SCROLL_SPEED
|
||||
elif event.button_index == BUTTON_WHEEL_DOWN:
|
||||
scroll_value = SCROLL_SPEED
|
||||
|
||||
if scroll_value != 0.0:
|
||||
scroll_container.scroll_vertical += scroll_value
|
||||
_previous_scroll = scroll_container.scroll_vertical
|
||||
topic_feed.check_all_passings()
|
||||
|
||||
|
||||
func _set_selection(to) -> bool:
|
||||
@ -72,23 +96,52 @@ func _set_as_grabbed():
|
||||
var rect = editable.get_global_rect()
|
||||
rect_min_size.y = editable.rect_size.y
|
||||
editable.set_as_toplevel(true)
|
||||
editable.mouse_filter = MOUSE_FILTER_IGNORE
|
||||
editable.rect_position = rect.position
|
||||
topic_feed.currently_grabbed_topic = self
|
||||
_previous_position = editable.rect_global_position
|
||||
_previous_global_position = editable.rect_global_position
|
||||
_previous_scroll = scroll_container.scroll_vertical
|
||||
_offset = 0
|
||||
_move_block(InputEventMouseMotion.new())
|
||||
|
||||
|
||||
func _fit_in_animation():
|
||||
_in_fit_in_animation = true
|
||||
topic_feed.currently_grabbed_topic = null
|
||||
|
||||
var overhead = _topic_overhead(rect_global_position.y)
|
||||
|
||||
var from = editable.rect_global_position
|
||||
var to
|
||||
|
||||
if overhead > 0.0:
|
||||
var sc_rect = scroll_container.get_global_rect()
|
||||
to = Vector2(
|
||||
sc_rect.position.x,
|
||||
sc_rect.end.y - rect_size.y
|
||||
)
|
||||
elif overhead < 0.0:
|
||||
to = scroll_container.rect_global_position
|
||||
else:
|
||||
to = rect_global_position - Vector2(0.0, overhead)
|
||||
|
||||
tween.stop_all()
|
||||
tween.interpolate_property(self, "global_position",
|
||||
editable.rect_global_position, rect_global_position,
|
||||
from, to,
|
||||
0.12, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT
|
||||
)
|
||||
|
||||
if overhead != 0.0:
|
||||
tween.interpolate_property(scroll_container, "scroll_vertical",
|
||||
scroll_container.scroll_vertical, scroll_container.scroll_vertical + overhead,
|
||||
0.12, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT
|
||||
)
|
||||
|
||||
tween.start()
|
||||
|
||||
yield(tween, "tween_completed")
|
||||
editable.set_as_toplevel(false)
|
||||
editable.mouse_filter = MOUSE_FILTER_PASS
|
||||
rect_min_size.y = 0
|
||||
editable.rect_position = Vector2.ZERO
|
||||
_in_fit_in_animation = false
|
||||
@ -96,15 +149,52 @@ func _fit_in_animation():
|
||||
|
||||
func _move_block(event):
|
||||
_offset += event.relative.y
|
||||
editable.set_global_position(_previous_position + Vector2(0.0, _offset))
|
||||
|
||||
var virtual_position = _previous_global_position + Vector2(0.0, _offset)
|
||||
var overhead = _topic_overhead(virtual_position.y)
|
||||
|
||||
virtual_position.y -= overhead
|
||||
|
||||
if get_index() == topic_feed.get_child_count() - 2:
|
||||
if virtual_position.y > rect_global_position.y:
|
||||
virtual_position.y = rect_global_position.y
|
||||
|
||||
_set_global_position(virtual_position)
|
||||
scroll_container.scroll_vertical = _previous_scroll + overhead
|
||||
|
||||
|
||||
func _is_mouse_on_control() -> bool:
|
||||
return get_global_rect().has_point(get_viewport().get_mouse_position())
|
||||
# How much topic is out of scroll_container bounds.
|
||||
func _topic_overhead(y_pos):
|
||||
var scroll_rect = scroll_container.get_global_rect()
|
||||
scroll_rect.size.y -= editable.rect_size.y
|
||||
var overhead = 0
|
||||
|
||||
# Higher?
|
||||
if y_pos < scroll_rect.position.y:
|
||||
overhead = y_pos - scroll_rect.position.y
|
||||
|
||||
# Lower?
|
||||
if y_pos > scroll_rect.end.y:
|
||||
overhead = y_pos - scroll_rect.end.y
|
||||
|
||||
return overhead
|
||||
|
||||
|
||||
func _is_mouse_on_topic() -> bool:
|
||||
var on_topic = get_global_rect().has_point(get_global_mouse_position())
|
||||
return _is_mouse_on_topic_feed() and on_topic
|
||||
|
||||
|
||||
func _is_mouse_on_topic_feed() -> bool:
|
||||
return scroll_container.get_global_rect().has_point(get_global_mouse_position())
|
||||
|
||||
|
||||
func _is_grabbed() -> bool:
|
||||
return topic_feed.currently_grabbed_topic == self
|
||||
|
||||
|
||||
func set_previous_position():
|
||||
_previous_position = editable.rect_global_position
|
||||
_previous_global_position = editable.rect_global_position
|
||||
|
||||
|
||||
func check_for_passing() -> bool:
|
||||
@ -134,19 +224,29 @@ func check_for_passing() -> bool:
|
||||
topic_feed.currently_grabbed_topic,
|
||||
get_index()
|
||||
)
|
||||
_something_passed = true
|
||||
Data.topics.dirty_flag = true
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func setup_tween():
|
||||
if _previous_position != editable.rect_global_position:
|
||||
if _something_passed:
|
||||
var _previous_local_position = _previous_global_position - rect_global_position
|
||||
|
||||
tween.stop_all()
|
||||
tween.interpolate_property(self, "global_position",
|
||||
_previous_position, rect_global_position, 0.15,
|
||||
tween.interpolate_property(self, "local_position",
|
||||
_previous_local_position, Vector2.ZERO, 0.15,
|
||||
Tween.TRANS_LINEAR, Tween.EASE_IN_OUT
|
||||
)
|
||||
tween.start()
|
||||
_something_passed = false
|
||||
yield(tween, "tween_completed")
|
||||
|
||||
|
||||
func _set_global_position(value):
|
||||
editable.set_global_position(value)
|
||||
|
||||
|
||||
func _set_local_position(value):
|
||||
editable.rect_position = value
|
||||
|
@ -22,6 +22,25 @@ func _setup(): # Override.
|
||||
_setup_appearance()
|
||||
|
||||
|
||||
func _setup_popup_menu_items(): # Override.
|
||||
var is_selected = _is_part_of_multi_selection()
|
||||
|
||||
if not is_selected:
|
||||
popup_menu.add_item("Insert New", 0)
|
||||
popup_menu.add_item("Edit", 1)
|
||||
|
||||
popup_menu.add_separator("Change Type")
|
||||
if type != TYPE_CASUAL or is_selected:
|
||||
popup_menu.add_radio_check_item("Casual", 2)
|
||||
if type != TYPE_DAILY or is_selected:
|
||||
popup_menu.add_radio_check_item("Daily", 3)
|
||||
if type != TYPE_URGENT or is_selected:
|
||||
popup_menu.add_radio_check_item("Urgent", 4)
|
||||
popup_menu.add_separator("")
|
||||
|
||||
popup_menu.add_item("Delete", 5)
|
||||
|
||||
|
||||
func _adjust_appearance_to_user(): # Override.
|
||||
match type:
|
||||
TYPE_CASUAL:
|
||||
@ -40,7 +59,11 @@ func _adjust_appearance_to_user(): # Override.
|
||||
|
||||
|
||||
func _update_color():
|
||||
var addition = Color(0.1, 0.12, 0.15) if _is_selected() else Color.black
|
||||
var addition
|
||||
if _is_selected():
|
||||
addition = Color(0.1, 0.12, 0.15)
|
||||
else:
|
||||
addition = Color.black
|
||||
nine_patch.self_modulate = color + addition
|
||||
|
||||
|
||||
@ -51,10 +74,52 @@ func _is_selected() -> bool:
|
||||
return false
|
||||
|
||||
|
||||
func _is_part_of_multi_selection() -> bool:
|
||||
if get_parent().topic_feed:
|
||||
return _is_selected() and parent.topic_feed.selected_topics.size() > 1
|
||||
else:
|
||||
return false
|
||||
|
||||
|
||||
func _delete():
|
||||
associated_topic.delete()
|
||||
if _is_part_of_multi_selection():
|
||||
parent.topic_feed._delete_selected_topics()
|
||||
else:
|
||||
associated_topic.delete()
|
||||
|
||||
|
||||
func _on_popup_menu_id_pressed(id):
|
||||
match id:
|
||||
0: # Insert new Topic.
|
||||
Data.topics.add_topic(parent.get_index())
|
||||
1: # Edit.
|
||||
_enable_edit_mode()
|
||||
text_edit.grab_focus()
|
||||
yield(get_tree(), "idle_frame")
|
||||
text_edit.select_all()
|
||||
2: # Change type to CASUAL.
|
||||
if _is_part_of_multi_selection():
|
||||
parent.topic_feed._change_type_of_selected_topics(TYPE_CASUAL)
|
||||
else:
|
||||
associated_topic.change_type(TYPE_CASUAL)
|
||||
_adjust_appearance_to_user()
|
||||
3: # Change type to DAILY.
|
||||
if _is_part_of_multi_selection():
|
||||
parent.topic_feed._change_type_of_selected_topics(TYPE_DAILY)
|
||||
else:
|
||||
associated_topic.change_type(TYPE_DAILY)
|
||||
_adjust_appearance_to_user()
|
||||
4: # Change type to URGENT.
|
||||
if _is_part_of_multi_selection():
|
||||
parent.topic_feed._change_type_of_selected_topics(TYPE_URGENT)
|
||||
else:
|
||||
associated_topic.change_type(TYPE_URGENT)
|
||||
_adjust_appearance_to_user()
|
||||
5: # Delete.
|
||||
_delete()
|
||||
|
||||
|
||||
func _on_text_edit_confirmed(confirmed_content): # Override
|
||||
associated_topic.content = confirmed_content
|
||||
_disable_edit_mode()
|
||||
Data.topics.dirty_flag = true
|
||||
|
@ -25,8 +25,9 @@ func _input(event):
|
||||
|
||||
func set_all_previous_positions():
|
||||
for topic in get_children():
|
||||
if topic != currently_grabbed_topic:
|
||||
topic.set_previous_position()
|
||||
if topic is TopicDraggable:
|
||||
if topic != currently_grabbed_topic:
|
||||
topic.set_previous_position()
|
||||
|
||||
|
||||
func check_all_passings():
|
||||
@ -36,9 +37,10 @@ func check_all_passings():
|
||||
var did_passing_occur = false
|
||||
|
||||
for topic in get_children():
|
||||
if topic != currently_grabbed_topic:
|
||||
if topic.check_for_passing():
|
||||
did_passing_occur = true
|
||||
if topic is TopicDraggable:
|
||||
if topic != currently_grabbed_topic:
|
||||
if topic.check_for_passing():
|
||||
did_passing_occur = true
|
||||
|
||||
if did_passing_occur:
|
||||
yield(get_tree(), "idle_frame")
|
||||
@ -47,21 +49,34 @@ func check_all_passings():
|
||||
|
||||
func setup_all_tweens():
|
||||
for topic in get_children():
|
||||
if topic != currently_grabbed_topic:
|
||||
topic.setup_tween()
|
||||
if topic is TopicDraggable:
|
||||
if topic != currently_grabbed_topic:
|
||||
topic.setup_tween()
|
||||
|
||||
|
||||
func update_all_colors():
|
||||
for topic in get_children():
|
||||
topic.editable._update_color()
|
||||
if topic is TopicDraggable:
|
||||
topic.editable._update_color()
|
||||
|
||||
|
||||
func _delete_selected_topics():
|
||||
for topic in selected_topics:
|
||||
topic.editable._delete()
|
||||
topic.editable.associated_topic.delete()
|
||||
selected_topics.clear()
|
||||
|
||||
|
||||
func _on_data_topic_added(topic):
|
||||
func _change_type_of_selected_topics(type: int):
|
||||
for topic in selected_topics:
|
||||
topic.editable.associated_topic.change_type(type)
|
||||
topic.editable._adjust_appearance_to_user()
|
||||
selected_topics.clear()
|
||||
update_all_colors()
|
||||
|
||||
|
||||
func _on_data_topic_added(topic, position):
|
||||
var topic_node = topic.create_node()
|
||||
add_child(topic_node)
|
||||
move_child(topic_node, position)
|
||||
topic_node.editable._adjust_appearance_to_user()
|
||||
|
||||
|
@ -20,6 +20,7 @@ __meta__ = {
|
||||
[node name="TopicEditable" parent="." instance=ExtResource( 1 )]
|
||||
margin_right = 32.0
|
||||
margin_bottom = 171.0
|
||||
mouse_filter = 1
|
||||
size_flags_horizontal = 3
|
||||
script = ExtResource( 3 )
|
||||
|
||||
@ -36,6 +37,7 @@ patch_margin_bottom = 12
|
||||
[node name="VBoxContainer" parent="TopicEditable" index="1"]
|
||||
margin_right = 32.0
|
||||
margin_bottom = 171.0
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="MarginContainer" parent="TopicEditable/VBoxContainer" index="0"]
|
||||
margin_right = 32.0
|
||||
@ -44,6 +46,7 @@ margin_bottom = 166.0
|
||||
[node name="Content" parent="TopicEditable/VBoxContainer/MarginContainer" index="0"]
|
||||
margin_right = 15.0
|
||||
margin_bottom = 161.0
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="ReferenceLabel" parent="TopicEditable/VBoxContainer/MarginContainer" index="1"]
|
||||
margin_right = 15.0
|
||||
@ -53,12 +56,14 @@ autowrap = true
|
||||
[node name="ContentFitTextEdit" parent="TopicEditable/VBoxContainer/MarginContainer" index="2"]
|
||||
margin_right = 15.0
|
||||
margin_bottom = 161.0
|
||||
mouse_filter = 1
|
||||
expand_width = false
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="TopicEditable/VBoxContainer" index="1"]
|
||||
margin_top = 162.0
|
||||
margin_right = 32.0
|
||||
margin_bottom = 171.0
|
||||
mouse_filter = 2
|
||||
custom_constants/separation = 0
|
||||
alignment = 2
|
||||
|
||||
@ -74,6 +79,7 @@ margin_left = 24.0
|
||||
margin_right = 32.0
|
||||
margin_bottom = 9.0
|
||||
rect_min_size = Vector2( 8, 0 )
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="PopupMenu" parent="TopicEditable" index="2"]
|
||||
margin_right = 32.0
|
||||
|
@ -1,6 +0,0 @@
|
||||
extends PanelContainer
|
||||
|
||||
|
||||
func _ready():
|
||||
for _i in range(30):
|
||||
Data.topics.add_topic(randi() % 3)
|
@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://user_interface/main.theme" type="Theme" id=1]
|
||||
[ext_resource path="res://user_interface/topic_panel/topic_panel.gd" type="Script" id=2]
|
||||
[ext_resource path="res://user_interface/topic_panel/add_button.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://user_interface/topic_panel/topic_feed.gd" type="Script" id=3]
|
||||
|
||||
[node name="TopicPanel" type="PanelContainer"]
|
||||
@ -9,7 +9,9 @@ margin_right = 328.0
|
||||
margin_bottom = 396.0
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource( 1 )
|
||||
script = ExtResource( 2 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
margin_right = 328.0
|
||||
@ -24,5 +26,10 @@ scroll_horizontal_enabled = false
|
||||
|
||||
[node name="TopicFeed" type="VBoxContainer" parent="MarginContainer/ScrollContainer"]
|
||||
margin_right = 312.0
|
||||
margin_bottom = 56.0
|
||||
size_flags_horizontal = 3
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="AddButton" parent="MarginContainer/ScrollContainer/TopicFeed" instance=ExtResource( 2 )]
|
||||
margin_right = 312.0
|
||||
margin_bottom = 56.0
|
||||
|
Loading…
Reference in New Issue
Block a user