2022-05-21 00:49:13 +02:00
// Copyright 2022 wanderer <a_mirre at utb dot cz>
// SPDX-License-Identifier: GPL-3.0-or-later
2022-05-19 17:24:00 +02:00
package xkcdreader
import (
2022-05-23 00:49:04 +02:00
"log"
2022-05-21 01:18:06 +02:00
"fyne.io/fyne/v2"
2022-05-19 17:24:00 +02:00
"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"
2022-05-19 17:24:00 +02:00
"fyne.io/fyne/v2/widget"
"git.dotya.ml/wanderer/go-xkcdreader/cmd"
)
const appGreeting = "welcome to go-xkcdreader"
2022-05-23 17:56:24 +02:00
var a fyne . App
2022-05-19 17:24:00 +02:00
// RunApp performs sets up and runs the main application
func RunApp ( ) {
2022-05-23 17:56:24 +02:00
// initialize the fyne application
newApp ( )
goxkcdreader := getApp ( )
w := goxkcdreader . NewWindow ( cmd . GetAppName ( ) )
2022-05-19 17:24:00 +02:00
2022-05-23 16:54:31 +02:00
centered := container . New (
layout . NewHBoxLayout ( ) ,
layout . NewSpacer ( ) ,
makeGreeting ( ) ,
layout . NewSpacer ( ) ,
)
w . SetContent ( container . New (
layout . NewVBoxLayout ( ) ,
makeToolbar ( ) ,
centered ,
makeTabs ( ) ,
) )
2022-05-19 17:24:00 +02:00
2022-05-21 01:18:06 +02:00
w . Resize ( fyne . NewSize ( 400 , 400 ) )
2022-05-19 17:24:00 +02:00
w . ShowAndRun ( )
}
2022-05-23 17:56:24 +02:00
func newApp ( ) {
a = app . New ( )
log . Println ( "Created a new fyne application" )
}
func getApp ( ) fyne . App {
return a
}
2022-05-19 17:24:00 +02:00
// 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-19 17:24:00 +02:00
}
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" ) ) ,
2022-05-25 22:31:09 +02:00
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
}