diff --git a/ui_forms.go b/ui_forms.go index a6d0773..9af73bb 100644 --- a/ui_forms.go +++ b/ui_forms.go @@ -21,6 +21,7 @@ import ( func (u *ui) lifecycleControls(gtx layout.Context) layout.Dimensions { busy := u.lifecycleBusy() showLocalChooser := u.showLocalVaultChooser() + selectedLocalPath := strings.TrimSpace(u.vaultPath.Text()) return layout.Flex{Axis: layout.Vertical}.Layout(gtx, layout.Rigid(func(gtx layout.Context) layout.Dimensions { lbl := material.Label(u.theme, unit.Sp(12), "OPEN A VAULT") @@ -202,52 +203,13 @@ func (u *ui) lifecycleControls(gtx layout.Context) layout.Dimensions { return layout.Spacer{Height: unit.Dp(4)}.Layout(gtx) }), layout.Rigid(func(gtx layout.Context) layout.Dimensions { - selectedPath := strings.TrimSpace(u.vaultPath.Text()) switch { case busy: return labeledEditorHelp(u.theme, "Vault Path", localVaultPathHelp(), &u.vaultPath, false)(gtx) - case selectedPath == "": + case selectedLocalPath == "": return localPathSelector(u.theme, &u.vaultPath, &u.pickVaultPath)(gtx) default: - lastGroup := u.recentVaultGroup(selectedPath) - return compactCard(gtx, func(gtx layout.Context) layout.Dimensions { - return layout.UniformInset(unit.Dp(10)).Layout(gtx, func(gtx layout.Context) layout.Dimensions { - return layout.Flex{Axis: layout.Vertical}.Layout(gtx, - layout.Rigid(func(gtx layout.Context) layout.Dimensions { - lbl := material.Label(u.theme, unit.Sp(12), "SELECTED VAULT") - lbl.Color = mutedColor - return lbl.Layout(gtx) - }), - layout.Rigid(layout.Spacer{Height: unit.Dp(2)}.Layout), - layout.Rigid(func(gtx layout.Context) layout.Dimensions { - lbl := material.Label(u.theme, unit.Sp(16), friendlyRecentVaultLabel(selectedPath)) - lbl.Color = accentColor - return lbl.Layout(gtx) - }), - layout.Rigid(func(gtx layout.Context) layout.Dimensions { - dir := compactPathDirectorySummary(selectedPath) - if dir == "" { - return layout.Dimensions{} - } - lbl := material.Label(u.theme, unit.Sp(11), dir) - lbl.Color = mutedColor - return lbl.Layout(gtx) - }), - layout.Rigid(func(gtx layout.Context) layout.Dimensions { - if len(lastGroup) == 0 { - return layout.Dimensions{} - } - lbl := material.Label(u.theme, unit.Sp(11), "Last group: "+strings.Join(u.displayEntryPath(lastGroup), " / ")) - lbl.Color = mutedColor - return lbl.Layout(gtx) - }), - layout.Rigid(layout.Spacer{Height: unit.Dp(6)}.Layout), - layout.Rigid(func(gtx layout.Context) layout.Dimensions { - return tonedButton(gtx, u.theme, &u.clearVaultSelection, "Open Different Vault") - }), - ) - }) - }) + return layout.Dimensions{} } }), ) @@ -347,11 +309,65 @@ func (u *ui) lifecycleControls(gtx layout.Context) layout.Dimensions { } return sectionTabButton(gtx, u.theme, &u.createVault, "Create New Vault", false) }), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + if busy || selectedLocalPath == "" { + return layout.Dimensions{} + } + return layout.Spacer{Height: unit.Dp(8)}.Layout(gtx) + }), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + if busy || selectedLocalPath == "" { + return layout.Dimensions{} + } + return u.selectedLocalVaultCard(gtx, selectedLocalPath) + }), ) }), ) } +func (u *ui) selectedLocalVaultCard(gtx layout.Context, path string) layout.Dimensions { + lastGroup := u.recentVaultGroup(path) + return compactCard(gtx, func(gtx layout.Context) layout.Dimensions { + return layout.UniformInset(unit.Dp(10)).Layout(gtx, func(gtx layout.Context) layout.Dimensions { + return layout.Flex{Axis: layout.Vertical}.Layout(gtx, + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + lbl := material.Label(u.theme, unit.Sp(12), "SELECTED VAULT") + lbl.Color = mutedColor + return lbl.Layout(gtx) + }), + layout.Rigid(layout.Spacer{Height: unit.Dp(2)}.Layout), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + lbl := material.Label(u.theme, unit.Sp(16), friendlyRecentVaultLabel(path)) + lbl.Color = accentColor + return lbl.Layout(gtx) + }), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + dir := compactPathDirectorySummary(path) + if dir == "" { + return layout.Dimensions{} + } + lbl := material.Label(u.theme, unit.Sp(11), dir) + lbl.Color = mutedColor + return lbl.Layout(gtx) + }), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + if len(lastGroup) == 0 { + return layout.Dimensions{} + } + lbl := material.Label(u.theme, unit.Sp(11), "Last group: "+strings.Join(u.displayEntryPath(lastGroup), " / ")) + lbl.Color = mutedColor + return lbl.Layout(gtx) + }), + layout.Rigid(layout.Spacer{Height: unit.Dp(6)}.Layout), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + return tonedButton(gtx, u.theme, &u.clearVaultSelection, "Open Different Vault") + }), + ) + }) + }) +} + func (u *ui) lifecycleSecuritySettingsSummary() string { return "Cipher and KDF now live in Vault Settings so opening and creating a vault stays focused on the file, key material, and sync choices." }