mirror of
https://github.com/clearlinux/clr-installer.git
synced 2026-09-02 03:31:38 +00:00
Remove any bundles the installer will always install from the list of optional bundles selectable by the user. Signed-off-by: Mark D Horn <mark.d.horn@intel.com>
111 lines
2.6 KiB
Go
111 lines
2.6 KiB
Go
// Copyright © 2018 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/VladimirMarkelov/clui"
|
|
"github.com/clearlinux/clr-installer/swupd"
|
|
)
|
|
|
|
// BundlePage is the Page implementation for the proxy configuration page
|
|
type BundlePage struct {
|
|
BasePage
|
|
}
|
|
|
|
// BundleCheck maps a map name and description with the actual checkbox
|
|
type BundleCheck struct {
|
|
bundle *swupd.Bundle
|
|
check *clui.CheckBox
|
|
}
|
|
|
|
var (
|
|
bundles = []*BundleCheck{}
|
|
)
|
|
|
|
// GetConfiguredValue Returns the string representation of currently value set
|
|
func (bp *BundlePage) GetConfiguredValue() string {
|
|
bundles := bp.getModel().UserBundles
|
|
|
|
if len(bundles) == 0 {
|
|
return "No bundles selected"
|
|
}
|
|
|
|
return strings.Join(bundles, ", ")
|
|
}
|
|
|
|
// Activate marks the checkbox selections based on the data model
|
|
func (bp *BundlePage) Activate() {
|
|
model := bp.getModel()
|
|
|
|
for _, curr := range bundles {
|
|
state := 0
|
|
|
|
if model.ContainsUserBundle(curr.bundle.Name) {
|
|
state = 1
|
|
}
|
|
|
|
curr.check.SetState(state)
|
|
}
|
|
}
|
|
|
|
func newBundlePage(tui *Tui) (Page, error) {
|
|
page := &BundlePage{}
|
|
page.setupMenu(tui, TuiPageBundle, "Select additional bundles", NoButtons, TuiPageMenu)
|
|
|
|
bdls, err := swupd.LoadBundleList(page.getModel())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, curr := range bdls {
|
|
bundles = append(bundles, &BundleCheck{curr, nil})
|
|
}
|
|
|
|
clui.CreateLabel(page.content, 2, 2, "Select additional bundles", Fixed)
|
|
|
|
frm := clui.CreateFrame(page.content, AutoSize, 14, BorderNone, Fixed)
|
|
frm.SetPack(clui.Vertical)
|
|
frm.SetScrollable(true)
|
|
|
|
lblFrm := clui.CreateFrame(frm, AutoSize, AutoSize, BorderNone, Fixed)
|
|
lblFrm.SetPack(clui.Vertical)
|
|
lblFrm.SetPaddings(2, 0)
|
|
|
|
for _, curr := range bundles {
|
|
lbl := fmt.Sprintf("%s: %s", curr.bundle.Name, curr.bundle.Desc)
|
|
curr.check = clui.CreateCheckBox(lblFrm, AutoSize, lbl, AutoSize)
|
|
curr.check.SetPack(clui.Horizontal)
|
|
}
|
|
|
|
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) {
|
|
anySelected := false
|
|
for _, curr := range bundles {
|
|
if curr.check.State() == 1 {
|
|
page.getModel().AddUserBundle(curr.bundle.Name)
|
|
anySelected = true
|
|
} else {
|
|
page.getModel().RemoveUserBundle(curr.bundle.Name)
|
|
}
|
|
}
|
|
|
|
page.SetDone(anySelected)
|
|
page.GotoPage(TuiPageMenu)
|
|
})
|
|
|
|
return page, nil
|
|
}
|