Initial Commit
This commit is contained in:
179
uiwidget/label.go
Normal file
179
uiwidget/label.go
Normal file
@ -0,0 +1,179 @@
|
||||
package uiwidget
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/data/binding"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
type LabelOpts interface {
|
||||
ApplyTo(*widget.Label)
|
||||
}
|
||||
|
||||
type allignmentOpt struct {
|
||||
Alignment fyne.TextAlign
|
||||
}
|
||||
|
||||
func AlignmentOpt(alignment fyne.TextAlign) LabelOpts {
|
||||
return &allignmentOpt{alignment}
|
||||
}
|
||||
|
||||
func (a *allignmentOpt) ApplyTo(lbl *widget.Label) {
|
||||
lbl.Alignment = a.Alignment
|
||||
}
|
||||
|
||||
type wrappingOpt struct {
|
||||
Wrapping fyne.TextWrap
|
||||
}
|
||||
|
||||
func WrappingOpt(wrapping fyne.TextWrap) LabelOpts {
|
||||
return &wrappingOpt{wrapping}
|
||||
}
|
||||
|
||||
func (w *wrappingOpt) ApplyTo(lbl *widget.Label) {
|
||||
lbl.Wrapping = w.Wrapping
|
||||
}
|
||||
|
||||
type textStyleOpt struct {
|
||||
Style fyne.TextStyle
|
||||
}
|
||||
|
||||
func TextStyleOpt(style fyne.TextStyle) LabelOpts {
|
||||
return &textStyleOpt{style}
|
||||
}
|
||||
|
||||
func (t *textStyleOpt) ApplyTo(lbl *widget.Label) {
|
||||
lbl.TextStyle = t.Style
|
||||
}
|
||||
|
||||
type truncationOpt struct {
|
||||
Truncation fyne.TextTruncation
|
||||
}
|
||||
|
||||
func TruncationOpt(truncation fyne.TextTruncation) LabelOpts {
|
||||
return &truncationOpt{truncation}
|
||||
}
|
||||
|
||||
func (t *truncationOpt) ApplyTo(lbl *widget.Label) {
|
||||
lbl.Truncation = t.Truncation
|
||||
}
|
||||
|
||||
type importanceOpt struct {
|
||||
Importance widget.Importance
|
||||
}
|
||||
|
||||
func ImportanceOpt(importance widget.Importance) LabelOpts {
|
||||
return &importanceOpt{importance}
|
||||
}
|
||||
|
||||
func (i *importanceOpt) ApplyTo(lbl *widget.Label) {
|
||||
lbl.Importance = i.Importance
|
||||
}
|
||||
|
||||
func NewLabel(text string, opts ...LabelOpts) *widget.Label {
|
||||
lbl := widget.NewLabel(text)
|
||||
for _, opt := range opts {
|
||||
opt.ApplyTo(lbl)
|
||||
}
|
||||
return lbl
|
||||
}
|
||||
|
||||
func NewLabelWithData(data binding.String, opts ...LabelOpts) *widget.Label {
|
||||
lbl := widget.NewLabelWithData(data)
|
||||
for _, opt := range opts {
|
||||
opt.ApplyTo(lbl)
|
||||
}
|
||||
return lbl
|
||||
}
|
||||
|
||||
func NewUpDownLabelWithData(
|
||||
data binding.String,
|
||||
upHandler func(),
|
||||
downHandler func(),
|
||||
) fyne.CanvasObject {
|
||||
c1 := container.NewWithoutLayout()
|
||||
c2 := container.NewWithoutLayout()
|
||||
w := NewWidgetBorder(
|
||||
widget.NewLabelWithData(data),
|
||||
)
|
||||
bu := widget.NewButtonWithIcon("", theme.MoveUpIcon(), upHandler)
|
||||
bd := widget.NewButtonWithIcon("", theme.MoveDownIcon(), downHandler)
|
||||
w.Resize(fyne.NewSize(100, w.MinSize().Height))
|
||||
c1.Add(w)
|
||||
c2.Move(fyne.NewPos(w.Size().Width, 0))
|
||||
c1.Add(c2)
|
||||
bu.Resize(fyne.NewSize(30, w.Size().Height*0.5))
|
||||
bd.Resize(fyne.NewSize(30, w.Size().Height*0.5))
|
||||
bd.Move(fyne.NewPos(0, w.Size().Height*0.5))
|
||||
c2.Add(bu)
|
||||
c2.Add(bd)
|
||||
return c1
|
||||
}
|
||||
|
||||
func NewH(level int, text string) *widget.RichText {
|
||||
return widget.NewRichTextFromMarkdown(
|
||||
fmt.Sprintf("%s %s", strings.Repeat("#", level), text))
|
||||
}
|
||||
|
||||
func NewHWithData(level int, data binding.String) *widget.RichText {
|
||||
txt, _ := data.Get()
|
||||
w := NewH(level, txt)
|
||||
data.AddListener(binding.NewDataListener(func() {
|
||||
txt, _ := data.Get()
|
||||
w.ParseMarkdown(fmt.Sprintf("%s %s", strings.Repeat("#", level), txt))
|
||||
}))
|
||||
return w
|
||||
}
|
||||
|
||||
func NewH1(text string) *widget.RichText {
|
||||
return NewH(1, text)
|
||||
}
|
||||
|
||||
func NewH1WithData(data binding.String) *widget.RichText {
|
||||
return NewHWithData(1, data)
|
||||
}
|
||||
|
||||
func NewH2(text string) *widget.RichText {
|
||||
return NewH(2, text)
|
||||
}
|
||||
|
||||
func NewH2WithData(data binding.String) *widget.RichText {
|
||||
return NewHWithData(2, data)
|
||||
}
|
||||
|
||||
func NewH3(text string) *widget.RichText {
|
||||
return NewH(3, text)
|
||||
}
|
||||
|
||||
func NewH3WithData(data binding.String) *widget.RichText {
|
||||
return NewHWithData(3, data)
|
||||
}
|
||||
|
||||
func NewH4(text string) *widget.RichText {
|
||||
return NewH(4, text)
|
||||
}
|
||||
|
||||
func NewH4WithData(data binding.String) *widget.RichText {
|
||||
return NewHWithData(4, data)
|
||||
}
|
||||
|
||||
func NewH5(text string) *widget.RichText {
|
||||
return NewH(5, text)
|
||||
}
|
||||
|
||||
func NewH5WithData(data binding.String) *widget.RichText {
|
||||
return NewHWithData(5, data)
|
||||
}
|
||||
|
||||
func NewH6(text string) *widget.RichText {
|
||||
return NewH(6, text)
|
||||
}
|
||||
|
||||
func NewH6WithData(data binding.String) *widget.RichText {
|
||||
return NewHWithData(6, data)
|
||||
}
|
19
uiwidget/widgetborder.go
Normal file
19
uiwidget/widgetborder.go
Normal file
@ -0,0 +1,19 @@
|
||||
package uiwidget
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/canvas"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
)
|
||||
|
||||
func NewWidgetBorder(widget fyne.CanvasObject) fyne.CanvasObject {
|
||||
b := canvas.NewRectangle(color.Transparent)
|
||||
b.StrokeColor = theme.InputBorderColor()
|
||||
b.StrokeWidth = theme.InputBorderSize()
|
||||
b.CornerRadius = theme.InputRadiusSize()
|
||||
l := container.NewStack(widget, b)
|
||||
return l
|
||||
}
|
Reference in New Issue
Block a user