diff --git a/main.go b/main.go index 5516f31..e46a976 100644 --- a/main.go +++ b/main.go @@ -1074,6 +1074,10 @@ func (u *ui) shouldUseLockedSinglePane() bool { return u.isVaultLocked() && !u.shouldShowLifecycleSetup() } +func (u *ui) shouldShowDesktopWorkingHeader() bool { + return u.mode == "desktop" && !u.shouldShowLifecycleSetup() && !u.isVaultLocked() +} + func (u *ui) chooseExistingFileAction(target *widget.Editor) error { path, err := pickExistingFile() if err != nil { @@ -1421,6 +1425,9 @@ func (u *ui) header(gtx layout.Context) layout.Dimensions { ) }) } + if u.shouldShowDesktopWorkingHeader() { + return layout.Dimensions{} + } return card(gtx, func(gtx layout.Context) layout.Dimensions { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, layout.Rigid(func(gtx layout.Context) layout.Dimensions { @@ -1454,6 +1461,9 @@ func (u *ui) headerActions(gtx layout.Context) layout.Dimensions { if u.isVaultLocked() { return layout.Dimensions{} } + if u.shouldShowDesktopWorkingHeader() { + return layout.Dimensions{} + } return layout.Flex{Spacing: layout.SpaceStart}.Layout(gtx, layout.Rigid(func(gtx layout.Context) layout.Dimensions { btn := material.Button(u.theme, &u.synchronizeVault, "Synchronize") @@ -1708,8 +1718,40 @@ func (u *ui) detailPanel(gtx layout.Context) layout.Dimensions { panel = compactCard } return panel(gtx, func(gtx layout.Context) layout.Dimensions { - if u.isVaultLocked() { + if u.shouldShowDesktopWorkingHeader() { return layout.Flex{Axis: layout.Vertical}.Layout(gtx, + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + return layout.Flex{Alignment: layout.Middle, Spacing: layout.SpaceStart}.Layout(gtx, + layout.Flexed(1, func(gtx layout.Context) layout.Dimensions { + return layout.Dimensions{} + }), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + btn := material.Button(u.theme, &u.synchronizeVault, "Synchronize") + return btn.Layout(gtx) + }), + layout.Rigid(layout.Spacer{Width: unit.Dp(8)}.Layout), + layout.Rigid(func(gtx layout.Context) layout.Dimensions { + btn := material.Button(u.theme, &u.lockVault, "Lock") + return btn.Layout(gtx) + }), + ) + }), + layout.Rigid(layout.Spacer{Height: unit.Dp(12)}.Layout), + layout.Flexed(1, func(gtx layout.Context) layout.Dimensions { + return u.detailPanelContent(gtx) + }), + ) + } + return u.detailPanelContent(gtx) + }) +} + +func (u *ui) detailPanelContent(gtx layout.Context) layout.Dimensions { + panel := layout.Flex{Axis: layout.Vertical} + _ = panel + return layout.Flex{Axis: layout.Vertical}.Layout(gtx, func() []layout.FlexChild { + if u.isVaultLocked() { + return []layout.FlexChild{ layout.Rigid(func(gtx layout.Context) layout.Dimensions { lbl := material.Label(u.theme, unit.Sp(18), "Unlock Vault") lbl.Color = accentColor @@ -1723,11 +1765,11 @@ func (u *ui) detailPanel(gtx layout.Context) layout.Dimensions { }), layout.Rigid(layout.Spacer{Height: unit.Dp(12)}.Layout), layout.Rigid(u.unlockPanel), - ) + } } item, ok := u.selectedEntry() if !ok && !u.editingEntry { - return layout.Flex{Axis: layout.Vertical}.Layout(gtx, + return []layout.FlexChild{ layout.Rigid(func(gtx layout.Context) layout.Dimensions { lbl := material.Label(u.theme, unit.Sp(18), "Entry details") lbl.Color = accentColor @@ -1739,7 +1781,7 @@ func (u *ui) detailPanel(gtx layout.Context) layout.Dimensions { lbl.Color = mutedColor return lbl.Layout(gtx) }), - ) + } } if u.editingEntry { rows := []layout.Widget{ @@ -1755,9 +1797,13 @@ func (u *ui) detailPanel(gtx layout.Context) layout.Dimensions { layout.Spacer{Height: unit.Dp(8)}.Layout, u.entryEditorPanel, } - return material.List(u.theme, &u.detailList).Layout(gtx, len(rows), func(gtx layout.Context, i int) layout.Dimensions { - return rows[i](gtx) - }) + return []layout.FlexChild{ + layout.Flexed(1, func(gtx layout.Context) layout.Dimensions { + return material.List(u.theme, &u.detailList).Layout(gtx, len(rows), func(gtx layout.Context, i int) layout.Dimensions { + return rows[i](gtx) + }) + }), + } } password := u.detailPasswordValue() titleSize := unit.Sp(26) @@ -1862,10 +1908,14 @@ func (u *ui) detailPanel(gtx layout.Context) layout.Dimensions { } }, } - return material.List(u.theme, &u.detailList).Layout(gtx, len(rows), func(gtx layout.Context, i int) layout.Dimensions { - return rows[i](gtx) - }) - }) + return []layout.FlexChild{ + layout.Flexed(1, func(gtx layout.Context) layout.Dimensions { + return material.List(u.theme, &u.detailList).Layout(gtx, len(rows), func(gtx layout.Context, i int) layout.Dimensions { + return rows[i](gtx) + }) + }), + } + }()...) } func (u *ui) banner(gtx layout.Context) layout.Dimensions {