go-xkcdreader/xkcdreader/app.go

111 lines
2.4 KiB
Go
Raw Normal View History

// Copyright 2022 wanderer <a_mirre at utb dot cz>
// SPDX-License-Identifier: GPL-3.0-or-later
package xkcdreader
import (
2022-05-23 00:49:04 +02:00
"log"
2022-05-21 01:18:06 +02:00
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
2022-05-21 01:18:06 +02:00
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
2022-05-23 00:49:04 +02:00
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"git.dotya.ml/wanderer/go-xkcdreader/cmd"
)
const appGreeting = "welcome to go-xkcdreader"
var a fyne.App
// RunApp performs sets up and runs the main application
func RunApp() {
// initialize the fyne application
newApp()
goxkcdreader := getApp()
w := goxkcdreader.NewWindow(cmd.GetAppName())
centered := container.New(
layout.NewHBoxLayout(),
layout.NewSpacer(),
makeGreeting(),
layout.NewSpacer(),
)
w.SetContent(container.New(
layout.NewVBoxLayout(),
makeToolbar(),
centered,
makeTabs(),
))
2022-05-21 01:18:06 +02:00
w.Resize(fyne.NewSize(400, 400))
w.ShowAndRun()
}
func newApp() {
a = app.New()
log.Println("Created a new fyne application")
}
func getApp() fyne.App {
return a
}
// makeGreeting creates a greeting label
func makeGreeting() *widget.Label {
2022-05-21 01:18:06 +02:00
w := widget.NewLabel(appGreeting)
w.TextStyle.Monospace = true
return w
}
2022-05-23 00:49:04 +02:00
func makeToolbar() *widget.Toolbar {
toolbar := widget.NewToolbar(
widget.NewToolbarSpacer(),
widget.NewToolbarAction(theme.HelpIcon(), func() {
log.Println("Display help")
}),
widget.NewToolbarAction(theme.SettingsIcon(), func() {
log.Println("Display settings")
}),
2022-05-24 23:27:39 +02:00
widget.NewToolbarAction(theme.InfoIcon(), aboutWindow),
2022-05-23 00:49:04 +02:00
)
return toolbar
}
2022-05-23 01:23:03 +02:00
func makeTabs() *container.AppTabs {
tabs := container.NewAppTabs(
2022-05-23 17:04:56 +02:00
container.NewTabItem("xkcd comic", makeBrowseUI()),
2022-05-23 01:23:03 +02:00
container.NewTabItem("what if?", widget.NewLabel("serious answers to absurd questions and absurd advice for common concerns from xkcd's Randall Munroe")),
container.NewTabItemWithIcon("search", theme.SearchIcon(), makeSearchTab()),
2022-05-23 01:23:03 +02:00
)
return tabs
}
2022-05-23 17:04:56 +02:00
func makeBrowseUI() *fyne.Container {
// container for the image and surrounding elements
imgC := container.New(
layout.NewHBoxLayout(),
2022-05-25 18:59:13 +02:00
widget.NewButtonWithIcon("", theme.NavigateBackIcon(), func() {
2022-05-23 17:04:56 +02:00
log.Println("Previous comic")
}),
layout.NewSpacer(),
widget.NewLabel("img placeholder"),
layout.NewSpacer(),
2022-05-25 18:59:13 +02:00
widget.NewButtonWithIcon("", theme.NavigateNextIcon(), func() {
2022-05-23 17:04:56 +02:00
log.Println("Next comic")
}))
browseTabLabel := "Latest comic..."
browseUI := container.New(
layout.NewVBoxLayout(),
widget.NewLabel(browseTabLabel),
layout.NewSpacer(),
imgC,
)
return browseUI
}