summaryrefslogtreecommitdiff
path: root/Scripts/OutputContainer.cs
diff options
context:
space:
mode:
authorSophia Pearson <codergal89@gmail.com>2022-05-20 00:45:25 +0200
committerSophia Pearson <codergal89@gmail.com>2022-05-20 18:56:04 +0200
commit05d29ccce1898ed89c0b650c77242c2fa2805128 (patch)
treee8ee3bcb570fa6f3d9d96273c2bf4d4c8618d08b /Scripts/OutputContainer.cs
downloadtexty-05d29ccce1898ed89c0b650c77242c2fa2805128.tar.xz
texty-05d29ccce1898ed89c0b650c77242c2fa2805128.zip
texty: initial commit
Diffstat (limited to 'Scripts/OutputContainer.cs')
-rw-r--r--Scripts/OutputContainer.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/Scripts/OutputContainer.cs b/Scripts/OutputContainer.cs
new file mode 100644
index 0000000..d5a5bea
--- /dev/null
+++ b/Scripts/OutputContainer.cs
@@ -0,0 +1,53 @@
+using System.Linq;
+using Godot;
+
+namespace Texty.Scripts
+{
+ public abstract class OutputContainer : PanelContainer
+ {
+ private double _lastScrollLimit;
+
+ private VScrollBar _scrollBar;
+
+ [Export(PropertyHint.Range, "10,40,1")]
+ public int MaximumRows = 20;
+
+ public VBoxContainer OutputRows;
+ public ScrollContainer ScrollContainer;
+
+ public override void _Ready()
+ {
+ ScrollContainer = GetNode<ScrollContainer>(nameof(ScrollContainer));
+ _scrollBar = ScrollContainer.GetVScrollbar();
+ OutputRows = ScrollContainer.GetNode<VBoxContainer>(nameof(OutputRows));
+
+ _lastScrollLimit = _scrollBar.MaxValue;
+ _scrollBar.Connect("changed", this, nameof(OnScrollLimitChanged));
+ }
+
+ public void Add(OutputRow row)
+ {
+ OutputRows.AddChild(row);
+ ExpungeOldRows();
+ }
+
+ public void OnScrollLimitChanged()
+ {
+ if (!(_lastScrollLimit < _scrollBar.MaxValue)) return;
+ _lastScrollLimit = _scrollBar.MaxValue;
+ ScrollContainer.ScrollVertical = (int)_scrollBar.MaxValue;
+ }
+
+ private void ExpungeOldRows()
+ {
+ GD.Range(OutputRows.GetChildCount() - MaximumRows)
+ .Select(idx => OutputRows.GetChild(idx))
+ .ToList()
+ .ForEach(row =>
+ {
+ OutputRows.RemoveChild(row);
+ row.QueueFree();
+ });
+ }
+ }
+} \ No newline at end of file