1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-04-25 12:24:47 +02:00

move window arrangement helper

This commit is contained in:
Jesse Duffield 2023-03-23 18:55:41 +11:00
parent db12853bbe
commit 4a33fede7b
7 changed files with 90 additions and 83 deletions

View File

@ -0,0 +1,3 @@
package constants
const SEARCH_PREFIX = "search: "

View File

@ -39,6 +39,19 @@ func (gui *Gui) resetControllers() {
rebaseHelper, rebaseHelper,
) )
bisectHelper := helpers.NewBisectHelper(helperCommon) bisectHelper := helpers.NewBisectHelper(helperCommon)
windowHelper := helpers.NewWindowHelper(helperCommon, viewHelper)
modeHelper := helpers.NewModeHelper(
helperCommon,
diffHelper,
patchBuildingHelper,
cherryPickHelper,
rebaseHelper,
bisectHelper,
)
appStatusHelper := helpers.NewAppStatusHelper(
helperCommon,
func() *status.StatusManager { return gui.statusManager },
)
gui.helpers = &helpers.Helpers{ gui.helpers = &helpers.Helpers{
Refs: refsHelper, Refs: refsHelper,
Host: helpers.NewHostHelper(helperCommon), Host: helpers.NewHostHelper(helperCommon),
@ -60,21 +73,17 @@ func (gui *Gui) resetControllers() {
Repos: helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo), Repos: helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo),
RecordDirectory: recordDirectoryHelper, RecordDirectory: recordDirectoryHelper,
Update: helpers.NewUpdateHelper(helperCommon, gui.Updater), Update: helpers.NewUpdateHelper(helperCommon, gui.Updater),
Window: helpers.NewWindowHelper(helperCommon, viewHelper), Window: windowHelper,
View: viewHelper, View: viewHelper,
Refresh: refreshHelper, Refresh: refreshHelper,
Confirmation: helpers.NewConfirmationHelper(helperCommon), Confirmation: helpers.NewConfirmationHelper(helperCommon),
Mode: helpers.NewModeHelper( Mode: modeHelper,
helperCommon, AppStatus: appStatusHelper,
diffHelper, WindowArrangement: helpers.NewWindowArrangementHelper(
patchBuildingHelper, gui.c,
cherryPickHelper, windowHelper,
rebaseHelper, modeHelper,
bisectHelper, appStatusHelper,
),
AppStatus: helpers.NewAppStatusHelper(
helperCommon,
func() *status.StatusManager { return gui.statusManager },
), ),
} }

View File

@ -34,45 +34,47 @@ type Helpers struct {
AmendHelper *AmendHelper AmendHelper *AmendHelper
Snake *SnakeHelper Snake *SnakeHelper
// lives in context package because our contexts need it to render to main // lives in context package because our contexts need it to render to main
Diff *DiffHelper Diff *DiffHelper
Repos *ReposHelper Repos *ReposHelper
RecordDirectory *RecordDirectoryHelper RecordDirectory *RecordDirectoryHelper
Update *UpdateHelper Update *UpdateHelper
Window *WindowHelper Window *WindowHelper
View *ViewHelper View *ViewHelper
Refresh *RefreshHelper Refresh *RefreshHelper
Confirmation *ConfirmationHelper Confirmation *ConfirmationHelper
Mode *ModeHelper Mode *ModeHelper
AppStatus *AppStatusHelper AppStatus *AppStatusHelper
WindowArrangement *WindowArrangementHelper
} }
func NewStubHelpers() *Helpers { func NewStubHelpers() *Helpers {
return &Helpers{ return &Helpers{
Refs: &RefsHelper{}, Refs: &RefsHelper{},
Bisect: &BisectHelper{}, Bisect: &BisectHelper{},
Suggestions: &SuggestionsHelper{}, Suggestions: &SuggestionsHelper{},
Files: &FilesHelper{}, Files: &FilesHelper{},
WorkingTree: &WorkingTreeHelper{}, WorkingTree: &WorkingTreeHelper{},
Tags: &TagsHelper{}, Tags: &TagsHelper{},
MergeAndRebase: &MergeAndRebaseHelper{}, MergeAndRebase: &MergeAndRebaseHelper{},
MergeConflicts: &MergeConflictsHelper{}, MergeConflicts: &MergeConflictsHelper{},
CherryPick: &CherryPickHelper{}, CherryPick: &CherryPickHelper{},
Host: &HostHelper{}, Host: &HostHelper{},
PatchBuilding: &PatchBuildingHelper{}, PatchBuilding: &PatchBuildingHelper{},
Staging: &StagingHelper{}, Staging: &StagingHelper{},
GPG: &GpgHelper{}, GPG: &GpgHelper{},
Upstream: &UpstreamHelper{}, Upstream: &UpstreamHelper{},
AmendHelper: &AmendHelper{}, AmendHelper: &AmendHelper{},
Snake: &SnakeHelper{}, Snake: &SnakeHelper{},
Diff: &DiffHelper{}, Diff: &DiffHelper{},
Repos: &ReposHelper{}, Repos: &ReposHelper{},
RecordDirectory: &RecordDirectoryHelper{}, RecordDirectory: &RecordDirectoryHelper{},
Update: &UpdateHelper{}, Update: &UpdateHelper{},
Window: &WindowHelper{}, Window: &WindowHelper{},
View: &ViewHelper{}, View: &ViewHelper{},
Refresh: &RefreshHelper{}, Refresh: &RefreshHelper{},
Confirmation: &ConfirmationHelper{}, Confirmation: &ConfirmationHelper{},
Mode: &ModeHelper{}, Mode: &ModeHelper{},
AppStatus: &AppStatusHelper{}, AppStatus: &AppStatusHelper{},
WindowArrangement: &WindowArrangementHelper{},
} }
} }

View File

@ -1,9 +1,9 @@
package gui package helpers
import ( import (
"github.com/jesseduffield/lazycore/pkg/boxlayout" "github.com/jesseduffield/lazycore/pkg/boxlayout"
"github.com/jesseduffield/lazygit/pkg/gui/constants"
"github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/context"
"github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers"
"github.com/jesseduffield/lazygit/pkg/gui/types" "github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/jesseduffield/lazygit/pkg/utils" "github.com/jesseduffield/lazygit/pkg/utils"
"github.com/mattn/go-runewidth" "github.com/mattn/go-runewidth"
@ -12,22 +12,20 @@ import (
// In this file we use the boxlayout package, along with knowledge about the app's state, // In this file we use the boxlayout package, along with knowledge about the app's state,
// to arrange the windows (i.e. panels) on the screen. // to arrange the windows (i.e. panels) on the screen.
const INFO_SECTION_PADDING = " " type WindowArrangementHelper struct {
c *HelperCommon
type WindowArranger struct { windowHelper *WindowHelper
c *helpers.HelperCommon modeHelper *ModeHelper
windowHelper *helpers.WindowHelper appStatusHelper *AppStatusHelper
modeHelper *helpers.ModeHelper
appStatusHelper *helpers.AppStatusHelper
} }
func NewWindowArranger( func NewWindowArrangementHelper(
c *helpers.HelperCommon, c *HelperCommon,
windowHelper *helpers.WindowHelper, windowHelper *WindowHelper,
modeHelper *helpers.ModeHelper, modeHelper *ModeHelper,
appStatusHelper *helpers.AppStatusHelper, appStatusHelper *AppStatusHelper,
) *WindowArranger { ) *WindowArrangementHelper {
return &WindowArranger{ return &WindowArrangementHelper{
c: c, c: c,
windowHelper: windowHelper, windowHelper: windowHelper,
modeHelper: modeHelper, modeHelper: modeHelper,
@ -35,7 +33,9 @@ func NewWindowArranger(
} }
} }
func (self *WindowArranger) getWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions { const INFO_SECTION_PADDING = " "
func (self *WindowArrangementHelper) GetWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions {
width, height := self.c.GocuiGui().Size() width, height := self.c.GocuiGui().Size()
sideSectionWeight, mainSectionWeight := self.getMidSectionWeights() sideSectionWeight, mainSectionWeight := self.getMidSectionWeights()
@ -118,7 +118,7 @@ func MergeMaps[K comparable, V any](maps ...map[K]V) map[K]V {
return result return result
} }
func (self *WindowArranger) mainSectionChildren() []*boxlayout.Box { func (self *WindowArrangementHelper) mainSectionChildren() []*boxlayout.Box {
currentWindow := self.windowHelper.CurrentWindow() currentWindow := self.windowHelper.CurrentWindow()
// if we're not in split mode we can just show the one main panel. Likewise if // if we're not in split mode we can just show the one main panel. Likewise if
@ -144,7 +144,7 @@ func (self *WindowArranger) mainSectionChildren() []*boxlayout.Box {
} }
} }
func (self *WindowArranger) getMidSectionWeights() (int, int) { func (self *WindowArrangementHelper) getMidSectionWeights() (int, int) {
currentWindow := self.windowHelper.CurrentWindow() currentWindow := self.windowHelper.CurrentWindow()
// we originally specified this as a ratio i.e. .20 would correspond to a weight of 1 against 4 // we originally specified this as a ratio i.e. .20 would correspond to a weight of 1 against 4
@ -174,12 +174,12 @@ func (self *WindowArranger) getMidSectionWeights() (int, int) {
return sideSectionWeight, mainSectionWeight return sideSectionWeight, mainSectionWeight
} }
func (self *WindowArranger) infoSectionChildren(informationStr string, appStatus string) []*boxlayout.Box { func (self *WindowArrangementHelper) infoSectionChildren(informationStr string, appStatus string) []*boxlayout.Box {
if self.c.State().GetRepoState().IsSearching() { if self.c.State().GetRepoState().IsSearching() {
return []*boxlayout.Box{ return []*boxlayout.Box{
{ {
Window: "searchPrefix", Window: "searchPrefix",
Size: runewidth.StringWidth(SEARCH_PREFIX), Size: runewidth.StringWidth(constants.SEARCH_PREFIX),
}, },
{ {
Window: "search", Window: "search",
@ -212,7 +212,7 @@ func (self *WindowArranger) infoSectionChildren(informationStr string, appStatus
return result return result
} }
func (self *WindowArranger) splitMainPanelSideBySide() bool { func (self *WindowArrangementHelper) splitMainPanelSideBySide() bool {
if !self.c.State().GetRepoState().GetSplitMainPanel() { if !self.c.State().GetRepoState().GetSplitMainPanel() {
return false return false
} }
@ -234,7 +234,7 @@ func (self *WindowArranger) splitMainPanelSideBySide() bool {
} }
} }
func (self *WindowArranger) getExtrasWindowSize(screenHeight int) int { func (self *WindowArrangementHelper) getExtrasWindowSize(screenHeight int) int {
if !self.c.State().GetShowExtrasWindow() { if !self.c.State().GetShowExtrasWindow() {
return 0 return 0
} }
@ -256,7 +256,7 @@ func (self *WindowArranger) getExtrasWindowSize(screenHeight int) int {
// too much space, but if you access it it should take up some space. This is // too much space, but if you access it it should take up some space. This is
// the default behaviour when accordion mode is NOT in effect. If it is in effect // the default behaviour when accordion mode is NOT in effect. If it is in effect
// then when it's accessed it will have weight 2, not 1. // then when it's accessed it will have weight 2, not 1.
func (self *WindowArranger) getDefaultStashWindowBox() *boxlayout.Box { func (self *WindowArrangementHelper) getDefaultStashWindowBox() *boxlayout.Box {
stashWindowAccessed := false stashWindowAccessed := false
self.c.Context().ForEach(func(context types.Context) { self.c.Context().ForEach(func(context types.Context) {
if context.GetWindowName() == "stash" { if context.GetWindowName() == "stash" {
@ -275,7 +275,7 @@ func (self *WindowArranger) getDefaultStashWindowBox() *boxlayout.Box {
return box return box
} }
func (self *WindowArranger) sidePanelChildren(width int, height int) []*boxlayout.Box { func (self *WindowArrangementHelper) sidePanelChildren(width int, height int) []*boxlayout.Box {
currentWindow := self.c.CurrentSideContext().GetWindowName() currentWindow := self.c.CurrentSideContext().GetWindowName()
screenMode := self.c.State().GetRepoState().GetScreenMode() screenMode := self.c.State().GetRepoState().GetScreenMode()

View File

@ -825,13 +825,7 @@ func (gui *Gui) startBackgroundRoutines() {
} }
func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions { func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions {
windowArranger := NewWindowArranger( return gui.helpers.WindowArrangement.GetWindowDimensions(informationStr, appStatus)
gui.c,
gui.helpers.Window,
gui.helpers.Mode,
gui.helpers.AppStatus,
)
return windowArranger.getWindowDimensions(informationStr, appStatus)
} }
func (gui *Gui) popContext() error { func (gui *Gui) popContext() error {

View File

@ -7,8 +7,6 @@ import (
"github.com/jesseduffield/lazygit/pkg/theme" "github.com/jesseduffield/lazygit/pkg/theme"
) )
const SEARCH_PREFIX = "search: "
// layout is called for every screen re-render e.g. when the screen is resized // layout is called for every screen re-render e.g. when the screen is resized
func (gui *Gui) layout(g *gocui.Gui) error { func (gui *Gui) layout(g *gocui.Gui) error {
if !gui.ViewsSetup { if !gui.ViewsSetup {

View File

@ -3,6 +3,7 @@ package gui
import ( import (
"github.com/jesseduffield/generics/slices" "github.com/jesseduffield/generics/slices"
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/gui/constants"
"github.com/jesseduffield/lazygit/pkg/theme" "github.com/jesseduffield/lazygit/pkg/theme"
) )
@ -92,7 +93,7 @@ func (gui *Gui) createAllViews() error {
gui.Views.SearchPrefix.BgColor = gocui.ColorDefault gui.Views.SearchPrefix.BgColor = gocui.ColorDefault
gui.Views.SearchPrefix.FgColor = gocui.ColorGreen gui.Views.SearchPrefix.FgColor = gocui.ColorGreen
gui.Views.SearchPrefix.Frame = false gui.Views.SearchPrefix.Frame = false
gui.c.SetViewContent(gui.Views.SearchPrefix, SEARCH_PREFIX) gui.c.SetViewContent(gui.Views.SearchPrefix, constants.SEARCH_PREFIX)
gui.Views.Stash.Title = gui.c.Tr.StashTitle gui.Views.Stash.Title = gui.c.Tr.StashTitle