diff --git a/textview.go b/textview.go index aabab6e..ff92b11 100644 --- a/textview.go +++ b/textview.go @@ -2,23 +2,77 @@ package objects import "image" import "git.tebibyte.media/tomo/tomo" +import "git.tebibyte.media/tomo/tomo/text" +import "git.tebibyte.media/tomo/tomo/event" + +var _ tomo.Object = new(TabbedContainer) // TextView is an area for displaying a large amount of multi-line text. type TextView struct { - tomo.TextBox + box tomo.TextBox } // NewTextView creates a new text view. func NewTextView (text string) *TextView { - this := &TextView { TextBox: tomo.NewTextBox() } - this.SetRole(tomo.R("objects", "TextView")) - this.SetFocusable(true) - this.SetSelectable(true) - this.SetText(text) - this.SetAttr(tomo.AOverflow(false, true)) - this.SetAttr(tomo.AWrap(true)) - this.OnScroll(this.handleScroll) - return this + textView := &TextView { box: tomo.NewTextBox() } + textView.box.SetRole(tomo.R("objects", "TextView")) + textView.box.SetFocusable(true) + textView.box.SetSelectable(true) + textView.SetText(text) + textView.box.SetAttr(tomo.AOverflow(false, true)) + textView.box.SetAttr(tomo.AWrap(true)) + textView.box.OnScroll(textView.handleScroll) + return textView +} + +// GetBox returns the underlying box. +func (this *TextView) GetBox () tomo.Box { + return this.box +} + +// SetFocused sets whether or not this text view has keyboard focus. If set to +// true, this method will steal focus away from whichever object currently has +// focus. +func (this *TextView) SetFocused (focused bool) { + this.box.SetFocused(focused) +} + +// Select sets the text cursor or selection. +func (this *TextView) Select (dot text.Dot) { + this.box.Select(dot) +} + +// Dot returns the text cursor or selection. +func (this *TextView) Dot () text.Dot { + return this.box.Dot() +} + +// SetAlign sets the X and Y alignment of the text view. +func (this *TextView) SetAlign (x, y tomo.Align) { + this.box.SetAttr(tomo.AAlign(x, y)) +} + +// ContentBounds returns the bounds of the inner content of the text view +// relative to the text view's InnerBounds. +func (this *TextView) ContentBounds () image.Rectangle { + return this.box.ContentBounds() +} + +// ScrollTo shifts the origin of the text view's content to the origin of the +// text view's InnerBounds, offset by the given point. +func (this *TextView) ScrollTo (position image.Point) { + this.box.ScrollTo(position) +} + +// OnContentBoundsChange specifies a function to be called when the text view's +// ContentBounds or InnerBounds changes. +func (this *TextView) OnContentBoundsChange (callback func ()) event.Cookie { + return this.box.OnContentBoundsChange(callback) +} + +// SetText sets the text content of the view. +func (this *TextView) SetText (text string) { + this.box.SetText(text) } func (this *TextView) handleScroll (x, y float64) bool {