mirror of
https://github.com/clearlinux/clr-installer.git
synced 2026-09-02 11:41:44 +00:00
- Modifies the screen flow to first launch the Welcome (Language) page - Adds localization package "gotext" - Enables localization for "en_US", "zh_CN" and "es_MX" - Modifies the strings to use localized version Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
132 lines
3.3 KiB
Go
132 lines
3.3 KiB
Go
// Copyright © 2019 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
package gui
|
|
|
|
import (
|
|
"github.com/gotk3/gotk3/gtk"
|
|
|
|
"github.com/clearlinux/clr-installer/utils"
|
|
)
|
|
|
|
// Switcher is used to switch between main installer sections
|
|
type Switcher struct {
|
|
revealer *gtk.Revealer // root widget
|
|
box *gtk.Box // Main mainLayout
|
|
stack *gtk.Stack // Stack to control
|
|
|
|
buttons struct {
|
|
required *gtk.RadioButton
|
|
advanced *gtk.RadioButton
|
|
}
|
|
}
|
|
|
|
// NewSwitcher constructs the header component
|
|
func NewSwitcher(stack *gtk.Stack) (*Switcher, error) {
|
|
var err error
|
|
var st *gtk.StyleContext
|
|
|
|
// Create switcher
|
|
switcher := &Switcher{
|
|
stack: stack,
|
|
}
|
|
|
|
// root revealer
|
|
switcher.revealer, err = gtk.RevealerNew()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
switcher.revealer.SetTransitionType(gtk.REVEALER_TRANSITION_TYPE_SLIDE_DOWN)
|
|
|
|
// Create main mainLayout
|
|
switcher.box, err = gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
switcher.revealer.Add(switcher.box)
|
|
|
|
// Set styling
|
|
st, err = switcher.box.GetStyleContext()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
st.AddClass("box-switcher")
|
|
|
|
// Required options
|
|
switcher.buttons.required, err = createFancyButton(utils.Locale.Get("REQUIRED OPTIONS"), "label-switcher")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
switcher.buttons.required.SetActive(true)
|
|
if _, err := switcher.buttons.required.Connect("toggled", func() { switcher.switchTo(switcher.buttons.required, "required") }); err != nil {
|
|
return nil, err
|
|
}
|
|
switcher.box.PackStart(switcher.buttons.required, true, true, 0)
|
|
|
|
// Advanced options
|
|
switcher.buttons.advanced, err = createFancyButton(utils.Locale.Get("ADVANCED OPTIONS"), "label-switcher")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
switcher.buttons.advanced.JoinGroup(switcher.buttons.required)
|
|
if _, err := switcher.buttons.advanced.Connect("toggled", func() { switcher.switchTo(switcher.buttons.advanced, "advanced") }); err != nil {
|
|
return nil, err
|
|
}
|
|
switcher.box.PackStart(switcher.buttons.advanced, true, true, 0)
|
|
|
|
return switcher, nil
|
|
}
|
|
|
|
// handle switching to another view
|
|
func (switcher *Switcher) switchTo(button *gtk.RadioButton, id string) {
|
|
if switcher.stack == nil {
|
|
return
|
|
}
|
|
if !button.GetActive() {
|
|
return
|
|
}
|
|
switcher.stack.SetVisibleChildName(id)
|
|
}
|
|
|
|
func createFancyButton(text, style string) (*gtk.RadioButton, error) {
|
|
button, err := gtk.RadioButtonNew(nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
button.SetMode(false)
|
|
label, err := gtk.LabelNew(text)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
sc, err := label.GetStyleContext()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
sc.AddClass(style)
|
|
button.Add(label)
|
|
return button, nil
|
|
}
|
|
|
|
// GetRootWidget returns the embeddable root widget
|
|
func (switcher *Switcher) GetRootWidget() gtk.IWidget {
|
|
return switcher.revealer
|
|
}
|
|
|
|
// SetStack updates the associated stack
|
|
func (switcher *Switcher) SetStack(stack *gtk.Stack) {
|
|
switcher.stack = stack
|
|
}
|
|
|
|
// Show will tween in the switcher
|
|
func (switcher *Switcher) Show() {
|
|
switcher.revealer.SetTransitionType(gtk.REVEALER_TRANSITION_TYPE_SLIDE_DOWN)
|
|
switcher.revealer.SetRevealChild(true)
|
|
}
|
|
|
|
// Hide will tween the switcher out
|
|
func (switcher *Switcher) Hide() {
|
|
switcher.revealer.SetTransitionType(gtk.REVEALER_TRANSITION_TYPE_SLIDE_UP)
|
|
switcher.revealer.SetRevealChild(false)
|
|
}
|