0
0
Fork 0
mirror of https://github.com/schollz/croc.git synced 2025-10-11 13:21:00 +02:00

improve ui

This commit is contained in:
Zack Scholl 2019-10-08 16:56:16 -07:00
parent 00c41387ba
commit 7fa4fc154a

View file

@ -1,11 +1,11 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"image"
"net/url" "net/url"
"os"
"strings" "strings"
"time"
"fyne.io/fyne" "fyne.io/fyne"
"fyne.io/fyne/app" "fyne.io/fyne/app"
@ -17,32 +17,40 @@ import (
nativedialog "github.com/sqweek/dialog" nativedialog "github.com/sqweek/dialog"
) )
func welcomeScreen(a fyne.App) fyne.CanvasObject { var logoImage image.Image
logo := canvas.NewImageFromResource(theme.FyneLogo())
logo.SetMinSize(fyne.NewSize(128, 128))
link, err := url.Parse("https://fyne.io/") func init() {
infile, err := os.Open("croc.png")
if err != nil {
panic(err)
}
defer infile.Close()
// Decode will figure out what type of image is in the file on its own.
// We just have to be sure all the image packages we want are imported.
logoImage, _, err = image.Decode(infile)
if err != nil {
panic(err)
}
}
func welcomeScreen(a fyne.App) fyne.CanvasObject {
logo := canvas.NewImageFromImage(logoImage)
logo.SetMinSize(fyne.NewSize(256, 128))
link, err := url.Parse("https://github.com/schollz/croc")
if err != nil { if err != nil {
fyne.LogError("Could not parse URL", err) fyne.LogError("Could not parse URL", err)
} }
return widget.NewVBox( return widget.NewVBox(
widget.NewLabelWithStyle("Welcome to the Fyne toolkit demo app", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}), widget.NewLabelWithStyle("croc - securely send a file", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}),
layout.NewSpacer(), layout.NewSpacer(),
widget.NewHBox(layout.NewSpacer(), logo, layout.NewSpacer()), widget.NewHBox(layout.NewSpacer(), logo, layout.NewSpacer()),
widget.NewHyperlinkWithStyle("fyne.io", link, fyne.TextAlignCenter, fyne.TextStyle{}), widget.NewLabel(`Send files using a secure PAKE-encrypted
peer-to-peer connection.`),
widget.NewHyperlinkWithStyle("help", link, fyne.TextAlignCenter, fyne.TextStyle{}),
layout.NewSpacer(), layout.NewSpacer(),
widget.NewGroup("Theme",
fyne.NewContainerWithLayout(layout.NewGridLayout(2),
widget.NewButton("Dark", func() {
a.Settings().SetTheme(theme.DarkTheme())
}),
widget.NewButton("Light", func() {
a.Settings().SetTheme(theme.LightTheme())
}),
),
),
) )
} }
@ -84,10 +92,8 @@ func makeCell() fyne.CanvasObject {
func main() { func main() {
a := app.New() a := app.New()
a.Settings().SetTheme(theme.LightTheme()) a.Settings().SetTheme(theme.LightTheme())
w := a.NewWindow("Hello") w := a.NewWindow("croc")
w.Resize(fyne.Size{200, 200}) w.Resize(fyne.Size{400, 200})
out := widget.NewEntry()
out.Text = "Hello"
progress := widget.NewProgressBar() progress := widget.NewProgressBar()
var sendFileButton *widget.Button var sendFileButton *widget.Button
@ -98,6 +104,7 @@ func main() {
sendFileButton.SetText(fnames[len(fnames)-1]) sendFileButton.SetText(fnames[len(fnames)-1])
} }
}) })
currentInfo := widget.NewLabel("")
sendScreen := widget.NewVBox( sendScreen := widget.NewVBox(
widget.NewLabelWithStyle("Send a file", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}), widget.NewLabelWithStyle("Send a file", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}),
@ -106,9 +113,7 @@ func main() {
fmt.Println("send") fmt.Println("send")
}), }),
layout.NewSpacer(), layout.NewSpacer(),
widget.NewHBox( currentInfo,
widget.NewLabel("Code phrase: something"),
),
widget.NewHBox( widget.NewHBox(
widget.NewLabel("Progress:"), widget.NewLabel("Progress:"),
progress, progress,
@ -141,6 +146,7 @@ func main() {
fmt.Println("codePhraseToReceive") fmt.Println("codePhraseToReceive")
}), }),
layout.NewSpacer(), layout.NewSpacer(),
currentInfo,
widget.NewHBox( widget.NewHBox(
widget.NewLabel("Progress:"), widget.NewLabel("Progress:"),
progress, progress,
@ -159,69 +165,13 @@ func main() {
top, bottom, left, right, sendScreen) top, bottom, left, right, sendScreen)
receiveScreenWrap := fyne.NewContainerWithLayout(borderLayout, receiveScreenWrap := fyne.NewContainerWithLayout(borderLayout,
top, bottom, left, right, receiveScreen) top, bottom, left, right, receiveScreen)
welcomeScreenWrap := fyne.NewContainerWithLayout(borderLayout,
box1 := widget.NewVBox( top, bottom, left, right, welcomeScreen(a))
widget.NewLabel("Hello Fyne!"),
makeFormTab(),
widget.NewButton("Send", func() {
filename, err := nativedialog.File().Title("Select a file to send").Load()
fmt.Println(filename)
fmt.Println(err)
codeDialog := dialog.NewInformation("Info", "Your passphrase is: x1", w)
codeDialog.Show()
}),
widget.NewButton("Set directory to save", func() {
filename, err := nativedialog.Directory().Title("Now find a dir").Browse()
fmt.Println(filename)
fmt.Println(err)
}),
widget.NewButton("Receive", func() {
filename, err := nativedialog.Directory().Title("Now find a dir").Browse()
fmt.Println(filename)
fmt.Println(err)
prog := dialog.NewProgress("MyProgress", "Nearly there...", w)
go func() {
num := 0.0
for num < 1.0 {
time.Sleep(50 * time.Millisecond)
prog.SetValue(num)
num += 0.01
}
prog.SetValue(1)
prog.Hide()
}()
prog.Show()
}),
widget.NewButton("Custom", func() {
content := widget.NewEntry()
content.SetPlaceHolder("Enter code phrase:")
content.OnChanged = func(text string) {
fmt.Println("Entered", text)
}
dialog.ShowCustom("Custom dialog", "Done", content, w)
fmt.Println("closed dialog")
}),
widget.NewButton("Error", func() {
err := errors.New("A dummy error message")
dialog.ShowError(err, w)
}),
widget.NewButton("Confirm", func() {
cnf := dialog.NewConfirm("Confirmation", "Are you enjoying this demo?", confirmCallback, w)
cnf.SetDismissText("Nah")
cnf.SetConfirmText("Oh Yes!")
cnf.Show()
}),
)
_ = box1
tabs := widget.NewTabContainer( tabs := widget.NewTabContainer(
widget.NewTabItemWithIcon("Welcome", theme.HomeIcon(), welcomeScreen(a)), widget.NewTabItemWithIcon("Welcome", theme.HomeIcon(), welcomeScreenWrap),
widget.NewTabItemWithIcon("Send", theme.MailSendIcon(), sendScreenWrap), widget.NewTabItemWithIcon("Send", theme.MailSendIcon(), sendScreenWrap),
widget.NewTabItemWithIcon("Receive", theme.MailSendIcon(), receiveScreenWrap), widget.NewTabItemWithIcon("Receive", theme.MailReplyIcon(), receiveScreenWrap),
) )
tabs.SetTabLocation(widget.TabLocationLeading) tabs.SetTabLocation(widget.TabLocationLeading)
w.SetContent(tabs) w.SetContent(tabs)