2024-02-03 17:47:32 +06:00
package menu
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
2024-02-03 18:40:44 +06:00
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/localizer"
2024-02-03 17:47:32 +06:00
"github.com/nicksnyder/go-i18n/v2/i18n"
"golang.org/x/image/colornames"
"net/url"
)
type ViewContract interface {
About ( ffmpegVersion string , ffprobeVersion string )
}
type View struct {
w fyne . Window
app fyne . App
appVersion string
localizerService localizer . ServiceContract
}
func NewView ( w fyne . Window , app fyne . App , appVersion string , localizerService localizer . ServiceContract ) * View {
return & View {
w : w ,
app : app ,
appVersion : appVersion ,
localizerService : localizerService ,
}
}
func ( v View ) About ( ffmpegVersion string , ffprobeVersion string ) {
view := v . app . NewWindow ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "about" ,
} ) )
view . Resize ( fyne . Size { Width : 793 , Height : 550 } )
view . SetFixedSize ( true )
programmName := canvas . NewText ( " GUI for FFmpeg" , colornames . Darkgreen )
programmName . TextStyle = fyne . TextStyle { Bold : true }
programmName . TextSize = 20
programmLink := widget . NewHyperlink ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "programmLink" ,
} ) , & url . URL {
Scheme : "https" ,
Host : "git.kor-elf.net" ,
Path : "kor-elf/gui-for-ffmpeg/releases" ,
} )
licenseLink := widget . NewHyperlink ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "licenseLink" ,
} ) , & url . URL {
Scheme : "https" ,
Host : "git.kor-elf.net" ,
Path : "kor-elf/gui-for-ffmpeg/src/branch/main/LICENSE" ,
} )
programmVersion := widget . NewRichTextFromMarkdown ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "programmVersion" ,
TemplateData : map [ string ] string {
"Version" : v . appVersion ,
} ,
} ) )
aboutText := widget . NewRichText (
& widget . TextSegment {
Text : v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "aboutText" ,
} ) ,
} ,
)
image := canvas . NewImageFromFile ( "icon.png" )
image . SetMinSize ( fyne . Size { Width : 100 , Height : 100 } )
image . FillMode = canvas . ImageFillContain
ffmpegTrademark := widget . NewRichTextFromMarkdown ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "ffmpegTrademark" ,
} ) )
ffmpegLGPL := widget . NewRichTextFromMarkdown ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "ffmpegLGPL" ,
} ) )
view . SetContent (
container . NewScroll ( container . NewVBox (
container . NewBorder ( nil , nil , container . NewVBox ( image ) , nil , container . NewVBox (
programmName ,
programmVersion ,
aboutText ,
ffmpegTrademark ,
ffmpegLGPL ,
v . getCopyright ( ) ,
container . NewHBox ( programmLink , licenseLink ) ,
) ) ,
v . getAboutFfmpeg ( ffmpegVersion ) ,
v . getAboutFfprobe ( ffprobeVersion ) ,
) ) ,
)
view . CenterOnScreen ( )
view . Show ( )
}
func ( v View ) getCopyright ( ) * widget . RichText {
return widget . NewRichTextFromMarkdown ( "Copyright (c) 2024 **[Leonid Nikitin (kor-elf)](https://git.kor-elf.net/kor-elf/)**." )
}
func ( v View ) getAboutFfmpeg ( version string ) * fyne . Container {
programmName := canvas . NewText ( " FFmpeg" , colornames . Darkgreen )
programmName . TextStyle = fyne . TextStyle { Bold : true }
programmName . TextSize = 20
programmLink := widget . NewHyperlink ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "programmLink" ,
} ) , & url . URL {
Scheme : "https" ,
Host : "ffmpeg.org" ,
Path : "" ,
} )
licenseLink := widget . NewHyperlink ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "licenseLink" ,
} ) , & url . URL {
Scheme : "https" ,
Host : "ffmpeg.org" ,
Path : "legal.html" ,
} )
return container . NewVBox (
programmName ,
widget . NewLabel ( version ) ,
widget . NewRichTextFromMarkdown ( "**FFmpeg** is a trademark of **[Fabrice Bellard](http://bellard.org/)**, originator of the **[FFmpeg](https://ffmpeg.org/about.html)** project." ) ,
widget . NewRichTextFromMarkdown ( "This software uses libraries from the **FFmpeg** project under the **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)**." ) ,
container . NewHBox ( programmLink , licenseLink ) ,
)
}
func ( v View ) getAboutFfprobe ( version string ) * fyne . Container {
programmName := canvas . NewText ( " FFprobe" , colornames . Darkgreen )
programmName . TextStyle = fyne . TextStyle { Bold : true }
programmName . TextSize = 20
programmLink := widget . NewHyperlink ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "programmLink" ,
} ) , & url . URL {
Scheme : "https" ,
Host : "ffmpeg.org" ,
Path : "ffprobe.html" ,
} )
licenseLink := widget . NewHyperlink ( v . localizerService . GetMessage ( & i18n . LocalizeConfig {
MessageID : "licenseLink" ,
} ) , & url . URL {
Scheme : "https" ,
Host : "ffmpeg.org" ,
Path : "legal.html" ,
} )
return container . NewVBox (
programmName ,
widget . NewLabel ( version ) ,
widget . NewRichTextFromMarkdown ( "**FFmpeg** is a trademark of **[Fabrice Bellard](http://bellard.org/)**, originator of the **[FFmpeg](https://ffmpeg.org/about.html)** project." ) ,
widget . NewRichTextFromMarkdown ( "This software uses libraries from the **FFmpeg** project under the **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)**." ) ,
container . NewHBox ( programmLink , licenseLink ) ,
)
}