package component import ( ui "github.com/gizak/termui/v3" "github.com/sqshq/sampler/component/util" "github.com/sqshq/sampler/console" ) type Intro struct { *ui.Block page IntroPage option introOption palette console.Palette } type IntroPage rune const ( IntroPageWelcome IntroPage = 0 IntroPageCommercial IntroPage = 1 IntroPagePersonal IntroPage = 2 ) type introOption rune const ( introOptionCommercial introOption = 0 introOptionPersonal introOption = 1 ) const ( buttonCommercial string = " COMMERCIAL USE " buttonPersonal string = " PERSONAL USE " buttonOk string = " OK " ) func (intro *Intro) Up() { intro.option = introOptionCommercial } func (intro *Intro) Down() { intro.option = introOptionPersonal } func (intro *Intro) NextPage() { if intro.option == introOptionCommercial { intro.page = IntroPageCommercial } else { intro.page = IntroPagePersonal } } func (intro *Intro) GetSelectedPage() IntroPage { return intro.page } func NewIntro(palette console.Palette) *Intro { return &Intro{ Block: NewBlock("", false, palette), palette: palette, } } func (intro *Intro) Draw(buffer *ui.Buffer) { logo := []string{ " __ ", " _________ ____ ___ ____ / /__ _____", " / ___/ __ `/ __ `__ \\/ __ \\/ / _ \\/ ___/", " (__ ) /_/ / / / / / / /_/ / / __/ / ", "/____/\\__,_/_/ /_/ /_/ .___/_/\\___/_/ ", " /_/ ", } introText := append(logo, []string{ "", "", "", "Welcome.", "Sampler is free of charge for personal use, but license must be purchased to use it for business purposes.", "Clicking below indicates you agree to the terms of the license agreement and privacy policy: www.sampler.dev/license", "", "", "", "How do you plan to use Sampler?", }...) commericalText := append(logo, []string{ "", "", "", "", "Please visit www.sampler.dev to purchase a license and then start Sampler with --license flag", }...) personalText := append(logo, []string{ "", "", "", "", "Sampler is always free for non-commercial use, but you can support the project and buy a personal license:", "www.sampler.dev", }...) text := introText switch intro.page { case IntroPageWelcome: text = introText case IntroPageCommercial: text = commericalText case IntroPagePersonal: text = personalText } for i, a := range text { util.PrintString( a, ui.NewStyle(intro.palette.BaseColor), util.GetMiddlePoint(intro.Block.Rectangle, a, i-15), buffer) } highlightedStyle := ui.NewStyle(intro.palette.ReverseColor, intro.palette.BaseColor) regularStyle := ui.NewStyle(intro.palette.BaseColor, intro.palette.ReverseColor) if intro.page == IntroPageWelcome { commercialButtonStyle := highlightedStyle if intro.option == introOptionPersonal { commercialButtonStyle = regularStyle } personalButtonStyle := highlightedStyle if intro.option == introOptionCommercial { personalButtonStyle = regularStyle } buffer.SetString(string(buttonCommercial), commercialButtonStyle, util.GetMiddlePoint(intro.Block.Rectangle, string(buttonCommercial), 6)) buffer.SetString(string(buttonPersonal), personalButtonStyle, util.GetMiddlePoint(intro.Block.Rectangle, string(buttonPersonal), 8)) } else { buffer.SetString(string(buttonOk), highlightedStyle, util.GetMiddlePoint(intro.Block.Rectangle, string(buttonOk), 4)) } intro.Block.Draw(buffer) }