VideoTools/qr_about_demo.go
2026-01-04 04:32:56 -05:00

103 lines
2.6 KiB
Go

//go:build demo
// +build demo
package main
import (
"bytes"
"fmt"
"log"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
"github.com/skip2/go-qrcode"
)
func generatePixelatedQRCode() (fyne.CanvasObject, error) {
docURL := "https://docs.leaktechnologies.dev/VideoTools"
// Generate QR code with large pixels for blocky look (160x160 with 8x8 pixel blocks)
qrBytes, err := qrcode.Encode(docURL, qrcode.Medium, 160)
if err != nil {
return nil, err
}
// Convert to Fyne image with pixelated look
img := canvas.NewImageFromBytes(qrBytes)
img.FillMode = canvas.ImageFillOriginal // Keep pixelated look
img.SetMinSize(fyne.NewSize(160, 160))
return img, nil
}
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("QR Code Test - About Dialog Demo")
// Test QR generation
qrCode, err := generatePixelatedQRCode()
if err != nil {
log.Printf("Failed to generate QR code: %v", err)
fallback := widget.NewLabel("QR generation failed - using fallback")
myWindow.SetContent(container.NewVBox(fallback))
} else {
// Recreate about dialog layout with QR code
title := canvas.NewText("About & Support", color.Color{} /*textColor*/)
title.TextSize = 20
versionText := widget.NewLabel("VideoTools QR Code Demo")
devText := widget.NewLabel("Developer: Leak Technologies")
// QR code with label
qrLabel := widget.NewLabel("Scan for docs")
qrLabel.Alignment = fyne.TextAlignCenter
// Logs button
logsLink := widget.NewButton("Logs Folder", func() {
fmt.Println("Logs folder clicked")
})
logsLink.Importance = widget.LowImportance
feedbackLabel := widget.NewLabel("Feedback: use Logs button on main menu to view logs; send issues with attached logs.")
feedbackLabel.Wrapping = fyne.TextWrapWord
mainContent := container.NewVBox(
versionText,
devText,
widget.NewLabel(""),
widget.NewLabel("Support Development"),
widget.NewLabel("QR code demo for docs"),
feedbackLabel,
)
logoColumn := container.NewVBox()
logoColumn.Add(qrCode)
logoColumn.Add(qrLabel)
logoColumn.Add(layout.NewSpacer())
logoColumn.Add(logsLink)
body := container.NewBorder(
container.NewHBox(title),
nil,
nil,
logoColumn,
mainContent,
)
body = container.NewPadded(body)
sizeShim := canvas.NewRectangle(color.Transparent{})
sizeShim.SetMinSize(fyne.NewSize(560, 280))
content := container.NewMax(sizeShim, body)
myWindow.SetContent(content)
}
myWindow.Resize(fyne.NewSize(600, 400))
myWindow.CenterOnScreen()
myWindow.ShowAndRun()
}