mirror of
https://github.com/clearlinux/clr-installer.git
synced 2026-09-02 03:31:38 +00:00
109 lines
2.7 KiB
Go
109 lines
2.7 KiB
Go
// Copyright © 2018 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/VladimirMarkelov/clui"
|
|
"github.com/clearlinux/clr-installer/kernel"
|
|
)
|
|
|
|
// KernelPage is the Page implementation for the proxy configuration page
|
|
type KernelPage struct {
|
|
BasePage
|
|
kernels []*KernelRadio
|
|
group *clui.RadioGroup
|
|
}
|
|
|
|
// KernelRadio maps a map name and description with the actual checkbox
|
|
type KernelRadio struct {
|
|
kernel *kernel.Kernel
|
|
radio *clui.Radio
|
|
}
|
|
|
|
// GetConfiguredValue Returns the string representation of currently value set
|
|
func (kp *KernelPage) GetConfiguredValue() string {
|
|
return kp.getModel().Kernel.Bundle
|
|
}
|
|
|
|
// Activate marks selects the kernel radio based on the data model
|
|
func (kp *KernelPage) Activate() {
|
|
model := kp.getModel()
|
|
|
|
for _, curr := range kp.kernels {
|
|
if !curr.kernel.Equals(model.Kernel) {
|
|
continue
|
|
}
|
|
|
|
kp.group.SelectItem(curr.radio)
|
|
break
|
|
}
|
|
}
|
|
|
|
// GetConfigDefinition returns if the config was interactively defined by the user,
|
|
// was loaded from a config file or if the config is not set.
|
|
func (kp *KernelPage) GetConfigDefinition() int {
|
|
k := kp.getModel().Kernel
|
|
|
|
if k == nil {
|
|
return ConfigNotDefined
|
|
} else if k.IsUserDefined() {
|
|
return ConfigDefinedByUser
|
|
}
|
|
|
|
return ConfigDefinedByConfig
|
|
}
|
|
|
|
func newKernelPage(tui *Tui) (Page, error) {
|
|
page := &KernelPage{kernels: []*KernelRadio{}}
|
|
|
|
kernels, err := kernel.LoadKernelList()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, curr := range kernels {
|
|
page.kernels = append(page.kernels, &KernelRadio{curr, nil})
|
|
}
|
|
|
|
page.setupMenu(tui, TuiPageKernel, "Kernel Selection", NoButtons, TuiPageMenu)
|
|
clui.CreateLabel(page.content, 2, 2, "Select desired kernel", Fixed)
|
|
|
|
frm := clui.CreateFrame(page.content, AutoSize, AutoSize, BorderNone, Fixed)
|
|
frm.SetPack(clui.Vertical)
|
|
|
|
lblFrm := clui.CreateFrame(frm, AutoSize, AutoSize, BorderNone, Fixed)
|
|
lblFrm.SetPack(clui.Vertical)
|
|
lblFrm.SetPaddings(2, 0)
|
|
|
|
page.group = clui.CreateRadioGroup()
|
|
|
|
for _, curr := range page.kernels {
|
|
lbl := fmt.Sprintf("%s: %s", curr.kernel.Name, curr.kernel.Desc)
|
|
curr.radio = clui.CreateRadio(lblFrm, AutoSize, lbl, AutoSize)
|
|
curr.radio.SetPack(clui.Horizontal)
|
|
page.group.AddItem(curr.radio)
|
|
}
|
|
|
|
fldFrm := clui.CreateFrame(frm, 30, AutoSize, BorderNone, Fixed)
|
|
fldFrm.SetPack(clui.Vertical)
|
|
|
|
cancelBtn := CreateSimpleButton(page.cFrame, AutoSize, AutoSize, "Cancel", Fixed)
|
|
cancelBtn.OnClick(func(ev clui.Event) {
|
|
page.GotoPage(TuiPageMenu)
|
|
})
|
|
|
|
confirmBtn := CreateSimpleButton(page.cFrame, AutoSize, AutoSize, "Confirm", Fixed)
|
|
confirmBtn.OnClick(func(ev clui.Event) {
|
|
selected := page.group.Selected()
|
|
page.getModel().Kernel = page.kernels[selected].kernel
|
|
page.SetDone(true)
|
|
page.GotoPage(TuiPageMenu)
|
|
})
|
|
|
|
return page, nil
|
|
}
|