summaryrefslogtreecommitdiff
path: root/widgets.go
blob: 3f523e9764ebac68f6f925e4faada654bcf07aa5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main

import (
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/canvas"
	"fyne.io/fyne/v2/dialog"
	"fyne.io/fyne/v2/widget"
	"log"
	"random.chars.jp/git/image-board/store"
)

type link struct {
	onTap func()
	widget.Hyperlink
}

func (l *link) Tapped(*fyne.PointEvent) {
	l.onTap()
}

func newLink(text string, onTap func()) *link {
	l := &link{onTap: onTap}
	l.ExtendBaseWidget(l)
	l.Text = text
	return l
}

type imageButton struct {
	widget.BaseWidget
	objects []fyne.CanvasObject
	img     *canvas.Image
	meta    store.Image
}

func (i *imageButton) Tapped(*fyne.PointEvent) {
	setImage(i.meta)
}

func (i *imageButton) CreateRenderer() fyne.WidgetRenderer {
	return i
}

func (i *imageButton) Objects() []fyne.CanvasObject {
	return []fyne.CanvasObject{i.img}
}

func (i *imageButton) Layout(size fyne.Size) {
	i.img.Resize(size)
}

func (i *imageButton) Resize(size fyne.Size) {
	i.img.Resize(size)
}

func (i *imageButton) Destroy() {
	i.img = nil
}

func (i *imageButton) Size() fyne.Size {
	return i.img.Size()
}

func (i *imageButton) MinSize() fyne.Size {
	return i.img.MinSize()
}

func newImageButton(img *canvas.Image, meta store.Image) *imageButton {
	return &imageButton{img: img, meta: meta}
}

func loading(title, message string) (done func()) {
	hide := make(chan bool)
	finalized := false
	done = func() {
		if !finalized {
			finalized = true
			hide <- true
		}
	}
	go func() {
		diag := dialog.NewProgressInfinite(title, message, window)
		log.Printf("Showing loading view.")
		diag.Show()
		<-hide
		log.Printf("Hiding loading view.")
		diag.Hide()
	}()
	return
}

func progress(title, message string) (done func(), value func(progress float64)) {
	hide := make(chan bool)
	done = func() {
		hide <- true
	}
	diag := dialog.NewProgress(title, message, window)
	value = diag.SetValue
	go func() {
		log.Printf("Showing progress bar.")
		diag.Show()
		<-hide
		log.Printf("Hiding progress bar.")
		diag.Hide()
	}()
	return
}