Skip to content

Commit 36220dd

Browse files
committed
make application more accessible to smaller screens
1 parent 0afbd67 commit 36220dd

File tree

8 files changed

+168
-89
lines changed

8 files changed

+168
-89
lines changed

cmd/gui/customStyles.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,35 @@ func (m MinSize) Layout(objects []fyne.CanvasObject, containerSize fyne.Size) {
124124
func NewSetMinSize(obj fyne.CanvasObject, width, height float32) *fyne.Container {
125125
return container.New(&MinSize{w: width, h: height}, obj)
126126
}
127+
128+
// --
129+
130+
type SizeSwitcher struct {
131+
switchSize float32
132+
size fyne.Size
133+
}
134+
135+
func (a *SizeSwitcher) Layout(objs []fyne.CanvasObject, cont fyne.Size) {
136+
a.size = cont
137+
o1 := objs[0]
138+
o2 := objs[1]
139+
if a.size.Width > a.switchSize {
140+
o1.Show()
141+
o2.Hide()
142+
o1.Resize(cont)
143+
} else {
144+
o1.Hide()
145+
o2.Show()
146+
o2.Resize(cont)
147+
}
148+
}
149+
func (a SizeSwitcher) MinSize(objs []fyne.CanvasObject) fyne.Size {
150+
if a.size.Width > a.switchSize {
151+
return objs[0].MinSize()
152+
}
153+
return objs[1].MinSize()
154+
}
155+
156+
func NewSizeSwitcher(switchSize float32, o1, o2 fyne.CanvasObject) *fyne.Container {
157+
return container.New(&SizeSwitcher{size: fyne.NewSize(10, 10), switchSize: switchSize}, o1, o2)
158+
}

cmd/gui/fileHandlers.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,7 @@ func saveMenu() {
2222
if closer == nil {
2323
return
2424
}
25-
defer func(closer fyne.URIWriteCloser) {
26-
err := closer.Close()
27-
if err != nil {
28-
log.Println(err)
29-
}
30-
}(closer)
25+
defer closeFile(closer)
3126

3227
err = activePlaylist.SavePretty(closer)
3328
if err != nil {
@@ -53,12 +48,7 @@ func openMenu() {
5348
if closer == nil {
5449
return
5550
}
56-
defer func(closer fyne.URIReadCloser) {
57-
err := closer.Close()
58-
if err != nil {
59-
log.Println(err)
60-
}
61-
}(closer)
51+
defer closeFile(closer)
6252

6353
p, err := playlist.Load(closer)
6454
if err != nil {

cmd/gui/gui.go

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package main
33
import (
44
"log"
55

6+
"fyne.io/fyne/v2/container"
7+
68
"fyne.io/fyne/v2/dialog"
79
"fyne.io/fyne/v2/storage"
810
"github.com/zivoy/BeatList/pkg/playlist"
@@ -23,6 +25,43 @@ type UI struct {
2325

2426
var ui UI
2527

28+
func MakePlaylistContainer() *fyne.Container {
29+
songListBar := makeSongListBar()
30+
31+
Split := container.NewVSplit(container.NewBorder(nil, songListBar, nil, nil, ui.songInfo.Songs),
32+
container.NewHScroll(ui.songInfo.songMeta))
33+
Split.Offset = .6
34+
vertical := NewSetMinSize(Split, 0, 350)
35+
36+
Split = container.NewHSplit(ui.songInfo.Songs, container.NewHScroll(ui.songInfo.songMeta))
37+
Split.Offset = .45
38+
horizontal := container.NewBorder(nil, songListBar, nil, nil, Split)
39+
40+
var songContainer *fyne.Container
41+
if fyne.CurrentDevice().IsMobile() {
42+
songContainer = container.NewMax(vertical)
43+
} else {
44+
songContainer = NewSizeSwitcher(600, horizontal, vertical)
45+
}
46+
47+
return container.NewBorder(
48+
NewShrinkingColumns(
49+
widget.NewCard("Info", "", widget.NewForm(
50+
widget.NewFormItem("Image", container.NewHBox(ui.Image, NewCenter(ui.ImageChangeButton, posCenter, posLeading))),
51+
widget.NewFormItem("Title", ui.Title),
52+
widget.NewFormItem("Author", ui.Author),
53+
widget.NewFormItem("Description", ui.Description),
54+
)),
55+
widget.NewCard("Metadata", "", widget.NewForm(
56+
widget.NewFormItem("Read only", ui.ReadOnly),
57+
widget.NewFormItem("Allow duplicates", ui.AllowDuplicates),
58+
widget.NewFormItem("Sync URL", NewSetMinSize(ui.SyncURL, 240, 0)),
59+
widget.NewFormItem("Archive URL", ui.ArchiveURL),
60+
))), nil, nil, nil,
61+
widget.NewCard("Songs", "", songContainer),
62+
)
63+
}
64+
2665
func initGUI() {
2766
ui = UI{}
2867
ui.LoadingBar = widget.NewProgressBar()
@@ -60,12 +99,7 @@ func initGUI() {
6099
if closer == nil {
61100
return
62101
}
63-
defer func(closer fyne.URIReadCloser) {
64-
err := closer.Close()
65-
if err != nil {
66-
log.Println(err)
67-
}
68-
}(closer)
102+
defer closeFile(closer)
69103

70104
cover, err := playlist.ReaderToCover(closer)
71105
if err != nil {
@@ -86,10 +120,15 @@ func initGUI() {
86120

87121
// metadata
88122
ui.ReadOnly = widget.NewCheck("", func(b bool) {
123+
if b != activePlaylist.CustomData.ReadOnly {
124+
changes(true)
125+
}
89126
activePlaylist.CustomData.ReadOnly = b
90-
changes(true)
91127
})
92128
ui.AllowDuplicates = widget.NewCheck("", func(b bool) {
129+
if b != activePlaylist.CustomData.AllowDuplicates {
130+
changes(true)
131+
}
93132
activePlaylist.CustomData.AllowDuplicates = b
94133
if !b {
95134
items := map[string]bool{}
@@ -107,7 +146,6 @@ func initGUI() {
107146
}
108147
activePlaylist.Songs = songs
109148
}
110-
changes(true)
111149
})
112150
ui.SyncURL = widget.NewEntry()
113151
ui.SyncURL.OnChanged = func(s string) {
@@ -127,6 +165,8 @@ func initGUI() {
127165
}
128166

129167
func (u UI) refresh() {
168+
UpdateTitle()
169+
130170
u.Author.SetText(activePlaylist.Author)
131171
u.Description.SetText(activePlaylist.Description)
132172
u.Title.SetText(activePlaylist.Title)

cmd/gui/main.go

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package main
22

33
import (
4+
"fmt"
45
"regexp"
6+
"strconv"
7+
"strings"
8+
9+
"fyne.io/fyne/v2/driver/desktop"
510

611
"fyne.io/fyne/v2"
712
"fyne.io/fyne/v2/app"
813
"fyne.io/fyne/v2/container"
9-
"fyne.io/fyne/v2/driver/desktop"
1014
"fyne.io/fyne/v2/theme"
11-
"fyne.io/fyne/v2/widget"
1215
)
1316

1417
const VERSION = "0.1.1"
@@ -22,49 +25,40 @@ func main() {
2225
window = a.NewWindow("BeatList")
2326
a.Settings().SetTheme(theme.DarkTheme())
2427
window.SetIcon(resourceIconPng)
25-
window.Resize(fyne.NewSize(920, 705))
28+
var w, h float64
29+
w = 920
30+
h = 705
31+
s := a.Preferences().StringWithFallback("size", fmt.Sprintf("%f,%f", w, h))
32+
size := strings.Split(s, ",")
33+
width, err := strconv.ParseFloat(size[0], 32)
34+
if err != nil {
35+
width = w
36+
}
37+
height, err := strconv.ParseFloat(size[1], 32)
38+
if err != nil {
39+
height = h
40+
}
41+
window.Resize(fyne.NewSize(float32(width), float32(height)))
2642

27-
initLogging(a)
43+
defer closeFile(initLogging(a))
2844

2945
initUpdater("zivoy", "BeatList")
3046
initSongListFuncs()
3147
initStorage(a)
3248

3349
initGUI()
3450

35-
songListBar := makeSongListBar()
36-
37-
var songContainer *fyne.Container
38-
if fyne.CurrentDevice().IsMobile() { //todo make a new layout that hides one once size is reached
39-
songContainer = container.NewMax(container.NewVSplit(
40-
container.NewBorder(nil, songListBar, nil, nil, ui.songInfo.Songs), ui.songInfo.songMeta))
41-
} else {
42-
Split := container.NewHSplit(ui.songInfo.Songs, container.NewHScroll(ui.songInfo.songMeta))
43-
Split.Offset = .45
44-
songContainer = container.NewBorder(nil, songListBar, nil, nil, Split)
45-
}
46-
47-
form := container.NewVBox(
48-
NewShrinkingColumns(
49-
widget.NewCard("Info", "", widget.NewForm(
50-
widget.NewFormItem("Image", container.NewHBox(ui.Image, NewCenter(ui.ImageChangeButton, posCenter, posLeading))),
51-
widget.NewFormItem("Title", ui.Title),
52-
widget.NewFormItem("Author", ui.Author),
53-
widget.NewFormItem("Description", ui.Description),
54-
)),
55-
widget.NewCard("Metadata", "", widget.NewForm(
56-
widget.NewFormItem("Read only", ui.ReadOnly),
57-
widget.NewFormItem("Allow duplicates", ui.AllowDuplicates),
58-
widget.NewFormItem("Sync URL", NewSetMinSize(ui.SyncURL, 240, 0)),
59-
widget.NewFormItem("Archive URL", ui.ArchiveURL),
60-
))),
61-
widget.NewCard("Songs", "", songContainer),
62-
)
63-
6451
loadLastSession()
6552

6653
window.SetMainMenu(getMainMenu(a))
6754

55+
window.SetContent(NewSetMinSize(container.NewBorder(nil, ui.LoadingBar, nil, nil,
56+
container.NewVScroll(MakePlaylistContainer())), 400, 400))
57+
58+
if outdated := IsOutdated(VERSION); outdated.Outdated {
59+
updateDialog(outdated.Current, VERSION, window)
60+
}
61+
6862
// registering shortcuts
6963
ctrlS := desktop.CustomShortcut{KeyName: fyne.KeyS, Modifier: desktop.ControlModifier}
7064
ctrlO := desktop.CustomShortcut{KeyName: fyne.KeyO, Modifier: desktop.ControlModifier}
@@ -79,13 +73,7 @@ func main() {
7973
saveMenu()
8074
})
8175

82-
window.SetContent(NewSetMinSize(container.NewBorder(nil, ui.LoadingBar, nil, nil, container.NewVScroll(form)), 600, 400))
83-
84-
if outdated := IsOutdated(VERSION); outdated.Outdated {
85-
updateDialog(outdated.Current, VERSION, window)
86-
}
87-
88-
window.SetOnClosed(cleanup)
8976
window.SetMaster()
9077
window.ShowAndRun()
78+
cleanup(a)
9179
}

cmd/gui/playlistHandler.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package main
22

33
import (
4+
"fmt"
5+
"log"
6+
"time"
7+
48
"fyne.io/fyne/v2/dialog"
59
"github.com/zivoy/BeatList/pkg/playlist"
610

@@ -20,14 +24,17 @@ func newBlank() {
2024
}
2125

2226
func loadLastSession() {
27+
defer ui.refresh()
2328
if fyne.CurrentApp().Preferences().BoolWithFallback("changes", false) {
2429
r, err := storage.Reader(lastOpened)
2530
if err != nil {
2631
activePlaylist = playlist.EmptyPlaylist()
2732
return
2833
}
2934
activePlaylist, err = playlist.Load(r)
35+
closeFile(r)
3036
if err != nil {
37+
log.Println(err)
3138
activePlaylist = playlist.EmptyPlaylist()
3239
return
3340
}
@@ -36,12 +43,13 @@ func loadLastSession() {
3643
// load info on songs
3744
go loadAll(activePlaylist.Songs)
3845

39-
_ = r.Close()
40-
_ = storage.Delete(lastOpened)
46+
err = storage.Delete(lastOpened)
47+
if err != nil {
48+
log.Println(err)
49+
}
4150
fyne.CurrentApp().Preferences().SetString("lastOpened", "")
4251
fyne.CurrentApp().Preferences().RemoveValue("lastOpened")
4352
lastOpened = defaultLoc
44-
ui.refresh()
4553
return
4654
}
4755
activePlaylist = playlist.EmptyPlaylist()
@@ -57,13 +65,27 @@ func changes(val ...bool) bool {
5765
return fyne.CurrentApp().Preferences().BoolWithFallback("changes", false)
5866
}
5967

60-
func cleanup() {
68+
func cleanup(a fyne.App) {
69+
w, h := window.Canvas().Size().Components()
70+
a.Preferences().SetString("size", fmt.Sprintf("%f,%f", w, h))
6171
if changes() {
62-
temp, _ := storage.Child(fyne.CurrentApp().Storage().RootURI(), lastOpened.Name())
63-
fyne.CurrentApp().Preferences().SetString("lastOpened", temp.String())
64-
w, _ := storage.Writer(temp)
65-
_ = activePlaylist.Save(w)
66-
_ = w.Close()
72+
<-time.After(200 * time.Millisecond) // second preference line won't write to file if there is no gap
73+
temp, err := storage.Child(a.Storage().RootURI(), lastOpened.Name())
74+
if err != nil {
75+
log.Println(err)
76+
return
77+
}
78+
a.Preferences().SetString("lastOpened", temp.String())
79+
w, err := storage.Writer(temp)
80+
defer closeFile(w)
81+
if err != nil {
82+
log.Println(err)
83+
return
84+
}
85+
err = activePlaylist.Save(w)
86+
if err != nil {
87+
log.Println(err)
88+
}
6789
}
6890
}
6991

cmd/gui/songList.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package main
33
import (
44
//"github.com/zivoy/BeatList/internal/beatsaver"
55
"BeatList/internal/beatsaver"
6+
"log"
67

78
"github.com/zivoy/BeatList/pkg/playlist"
89

910
"fmt"
10-
"log"
1111
"math"
1212
"net/url"
1313
"strings"
@@ -66,7 +66,7 @@ func initSongList() *SongListUI {
6666
widget.NewFormItem("Mapper", songListUI.SongMapper),
6767
widget.NewFormItem("Highlighted Diffs", songListUI.SongDiffs),
6868
widget.NewFormItem("Beatsaver ID", songListUI.SongId),
69-
), 0, 300)
69+
), 0, 160)
7070
songListUI.Songs.OnUnselected = func(id widget.ListItemID) {
7171
itemSelected = false
7272
songListUI.SongDiffChecks.Hide()

cmd/gui/songListHandlers.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,7 @@ func fetchCover(url string, stop func() bool) playlist.Cover {
204204
log.Println(err)
205205
return ""
206206
}
207-
defer func(Body io.ReadCloser) {
208-
_ = Body.Close()
209-
}(response.Body)
207+
defer closeFile(response.Body)
210208

211209
if response.StatusCode != 200 {
212210
log.Println(url, response.StatusCode)

0 commit comments

Comments
 (0)