mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	move window arrangement helper
This commit is contained in:
		
							
								
								
									
										3
									
								
								pkg/gui/constants/constants.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pkg/gui/constants/constants.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| package constants | ||||
|  | ||||
| const SEARCH_PREFIX = "search: " | ||||
| @@ -39,6 +39,19 @@ func (gui *Gui) resetControllers() { | ||||
| 		rebaseHelper, | ||||
| 	) | ||||
| 	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{ | ||||
| 		Refs:            refsHelper, | ||||
| 		Host:            helpers.NewHostHelper(helperCommon), | ||||
| @@ -60,21 +73,17 @@ func (gui *Gui) resetControllers() { | ||||
| 		Repos:           helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo), | ||||
| 		RecordDirectory: recordDirectoryHelper, | ||||
| 		Update:          helpers.NewUpdateHelper(helperCommon, gui.Updater), | ||||
| 		Window:          helpers.NewWindowHelper(helperCommon, viewHelper), | ||||
| 		Window:          windowHelper, | ||||
| 		View:            viewHelper, | ||||
| 		Refresh:         refreshHelper, | ||||
| 		Confirmation:    helpers.NewConfirmationHelper(helperCommon), | ||||
| 		Mode: helpers.NewModeHelper( | ||||
| 			helperCommon, | ||||
| 			diffHelper, | ||||
| 			patchBuildingHelper, | ||||
| 			cherryPickHelper, | ||||
| 			rebaseHelper, | ||||
| 			bisectHelper, | ||||
| 		), | ||||
| 		AppStatus: helpers.NewAppStatusHelper( | ||||
| 			helperCommon, | ||||
| 			func() *status.StatusManager { return gui.statusManager }, | ||||
| 		Mode:            modeHelper, | ||||
| 		AppStatus:       appStatusHelper, | ||||
| 		WindowArrangement: helpers.NewWindowArrangementHelper( | ||||
| 			gui.c, | ||||
| 			windowHelper, | ||||
| 			modeHelper, | ||||
| 			appStatusHelper, | ||||
| 		), | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -34,45 +34,47 @@ type Helpers struct { | ||||
| 	AmendHelper    *AmendHelper | ||||
| 	Snake          *SnakeHelper | ||||
| 	// lives in context package because our contexts need it to render to main | ||||
| 	Diff            *DiffHelper | ||||
| 	Repos           *ReposHelper | ||||
| 	RecordDirectory *RecordDirectoryHelper | ||||
| 	Update          *UpdateHelper | ||||
| 	Window          *WindowHelper | ||||
| 	View            *ViewHelper | ||||
| 	Refresh         *RefreshHelper | ||||
| 	Confirmation    *ConfirmationHelper | ||||
| 	Mode            *ModeHelper | ||||
| 	AppStatus       *AppStatusHelper | ||||
| 	Diff              *DiffHelper | ||||
| 	Repos             *ReposHelper | ||||
| 	RecordDirectory   *RecordDirectoryHelper | ||||
| 	Update            *UpdateHelper | ||||
| 	Window            *WindowHelper | ||||
| 	View              *ViewHelper | ||||
| 	Refresh           *RefreshHelper | ||||
| 	Confirmation      *ConfirmationHelper | ||||
| 	Mode              *ModeHelper | ||||
| 	AppStatus         *AppStatusHelper | ||||
| 	WindowArrangement *WindowArrangementHelper | ||||
| } | ||||
|  | ||||
| func NewStubHelpers() *Helpers { | ||||
| 	return &Helpers{ | ||||
| 		Refs:            &RefsHelper{}, | ||||
| 		Bisect:          &BisectHelper{}, | ||||
| 		Suggestions:     &SuggestionsHelper{}, | ||||
| 		Files:           &FilesHelper{}, | ||||
| 		WorkingTree:     &WorkingTreeHelper{}, | ||||
| 		Tags:            &TagsHelper{}, | ||||
| 		MergeAndRebase:  &MergeAndRebaseHelper{}, | ||||
| 		MergeConflicts:  &MergeConflictsHelper{}, | ||||
| 		CherryPick:      &CherryPickHelper{}, | ||||
| 		Host:            &HostHelper{}, | ||||
| 		PatchBuilding:   &PatchBuildingHelper{}, | ||||
| 		Staging:         &StagingHelper{}, | ||||
| 		GPG:             &GpgHelper{}, | ||||
| 		Upstream:        &UpstreamHelper{}, | ||||
| 		AmendHelper:     &AmendHelper{}, | ||||
| 		Snake:           &SnakeHelper{}, | ||||
| 		Diff:            &DiffHelper{}, | ||||
| 		Repos:           &ReposHelper{}, | ||||
| 		RecordDirectory: &RecordDirectoryHelper{}, | ||||
| 		Update:          &UpdateHelper{}, | ||||
| 		Window:          &WindowHelper{}, | ||||
| 		View:            &ViewHelper{}, | ||||
| 		Refresh:         &RefreshHelper{}, | ||||
| 		Confirmation:    &ConfirmationHelper{}, | ||||
| 		Mode:            &ModeHelper{}, | ||||
| 		AppStatus:       &AppStatusHelper{}, | ||||
| 		Refs:              &RefsHelper{}, | ||||
| 		Bisect:            &BisectHelper{}, | ||||
| 		Suggestions:       &SuggestionsHelper{}, | ||||
| 		Files:             &FilesHelper{}, | ||||
| 		WorkingTree:       &WorkingTreeHelper{}, | ||||
| 		Tags:              &TagsHelper{}, | ||||
| 		MergeAndRebase:    &MergeAndRebaseHelper{}, | ||||
| 		MergeConflicts:    &MergeConflictsHelper{}, | ||||
| 		CherryPick:        &CherryPickHelper{}, | ||||
| 		Host:              &HostHelper{}, | ||||
| 		PatchBuilding:     &PatchBuildingHelper{}, | ||||
| 		Staging:           &StagingHelper{}, | ||||
| 		GPG:               &GpgHelper{}, | ||||
| 		Upstream:          &UpstreamHelper{}, | ||||
| 		AmendHelper:       &AmendHelper{}, | ||||
| 		Snake:             &SnakeHelper{}, | ||||
| 		Diff:              &DiffHelper{}, | ||||
| 		Repos:             &ReposHelper{}, | ||||
| 		RecordDirectory:   &RecordDirectoryHelper{}, | ||||
| 		Update:            &UpdateHelper{}, | ||||
| 		Window:            &WindowHelper{}, | ||||
| 		View:              &ViewHelper{}, | ||||
| 		Refresh:           &RefreshHelper{}, | ||||
| 		Confirmation:      &ConfirmationHelper{}, | ||||
| 		Mode:              &ModeHelper{}, | ||||
| 		AppStatus:         &AppStatusHelper{}, | ||||
| 		WindowArrangement: &WindowArrangementHelper{}, | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| package gui | ||||
| package helpers | ||||
| 
 | ||||
| import ( | ||||
| 	"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/controllers/helpers" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/types" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/utils" | ||||
| 	"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, | ||||
| // to arrange the windows (i.e. panels) on the screen. | ||||
| 
 | ||||
| const INFO_SECTION_PADDING = " " | ||||
| 
 | ||||
| type WindowArranger struct { | ||||
| 	c               *helpers.HelperCommon | ||||
| 	windowHelper    *helpers.WindowHelper | ||||
| 	modeHelper      *helpers.ModeHelper | ||||
| 	appStatusHelper *helpers.AppStatusHelper | ||||
| type WindowArrangementHelper struct { | ||||
| 	c               *HelperCommon | ||||
| 	windowHelper    *WindowHelper | ||||
| 	modeHelper      *ModeHelper | ||||
| 	appStatusHelper *AppStatusHelper | ||||
| } | ||||
| 
 | ||||
| func NewWindowArranger( | ||||
| 	c *helpers.HelperCommon, | ||||
| 	windowHelper *helpers.WindowHelper, | ||||
| 	modeHelper *helpers.ModeHelper, | ||||
| 	appStatusHelper *helpers.AppStatusHelper, | ||||
| ) *WindowArranger { | ||||
| 	return &WindowArranger{ | ||||
| func NewWindowArrangementHelper( | ||||
| 	c *HelperCommon, | ||||
| 	windowHelper *WindowHelper, | ||||
| 	modeHelper *ModeHelper, | ||||
| 	appStatusHelper *AppStatusHelper, | ||||
| ) *WindowArrangementHelper { | ||||
| 	return &WindowArrangementHelper{ | ||||
| 		c:               c, | ||||
| 		windowHelper:    windowHelper, | ||||
| 		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() | ||||
| 
 | ||||
| 	sideSectionWeight, mainSectionWeight := self.getMidSectionWeights() | ||||
| @@ -118,7 +118,7 @@ func MergeMaps[K comparable, V any](maps ...map[K]V) map[K]V { | ||||
| 	return result | ||||
| } | ||||
| 
 | ||||
| func (self *WindowArranger) mainSectionChildren() []*boxlayout.Box { | ||||
| func (self *WindowArrangementHelper) mainSectionChildren() []*boxlayout.Box { | ||||
| 	currentWindow := self.windowHelper.CurrentWindow() | ||||
| 
 | ||||
| 	// 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() | ||||
| 
 | ||||
| 	// 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 | ||||
| } | ||||
| 
 | ||||
| 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() { | ||||
| 		return []*boxlayout.Box{ | ||||
| 			{ | ||||
| 				Window: "searchPrefix", | ||||
| 				Size:   runewidth.StringWidth(SEARCH_PREFIX), | ||||
| 				Size:   runewidth.StringWidth(constants.SEARCH_PREFIX), | ||||
| 			}, | ||||
| 			{ | ||||
| 				Window: "search", | ||||
| @@ -212,7 +212,7 @@ func (self *WindowArranger) infoSectionChildren(informationStr string, appStatus | ||||
| 	return result | ||||
| } | ||||
| 
 | ||||
| func (self *WindowArranger) splitMainPanelSideBySide() bool { | ||||
| func (self *WindowArrangementHelper) splitMainPanelSideBySide() bool { | ||||
| 	if !self.c.State().GetRepoState().GetSplitMainPanel() { | ||||
| 		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() { | ||||
| 		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 | ||||
| // 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. | ||||
| func (self *WindowArranger) getDefaultStashWindowBox() *boxlayout.Box { | ||||
| func (self *WindowArrangementHelper) getDefaultStashWindowBox() *boxlayout.Box { | ||||
| 	stashWindowAccessed := false | ||||
| 	self.c.Context().ForEach(func(context types.Context) { | ||||
| 		if context.GetWindowName() == "stash" { | ||||
| @@ -275,7 +275,7 @@ func (self *WindowArranger) getDefaultStashWindowBox() *boxlayout.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() | ||||
| 
 | ||||
| 	screenMode := self.c.State().GetRepoState().GetScreenMode() | ||||
| @@ -825,13 +825,7 @@ func (gui *Gui) startBackgroundRoutines() { | ||||
| } | ||||
|  | ||||
| func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions { | ||||
| 	windowArranger := NewWindowArranger( | ||||
| 		gui.c, | ||||
| 		gui.helpers.Window, | ||||
| 		gui.helpers.Mode, | ||||
| 		gui.helpers.AppStatus, | ||||
| 	) | ||||
| 	return windowArranger.getWindowDimensions(informationStr, appStatus) | ||||
| 	return gui.helpers.WindowArrangement.GetWindowDimensions(informationStr, appStatus) | ||||
| } | ||||
|  | ||||
| func (gui *Gui) popContext() error { | ||||
|   | ||||
| @@ -7,8 +7,6 @@ import ( | ||||
| 	"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 | ||||
| func (gui *Gui) layout(g *gocui.Gui) error { | ||||
| 	if !gui.ViewsSetup { | ||||
|   | ||||
| @@ -3,6 +3,7 @@ package gui | ||||
| import ( | ||||
| 	"github.com/jesseduffield/generics/slices" | ||||
| 	"github.com/jesseduffield/gocui" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/constants" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/theme" | ||||
| ) | ||||
|  | ||||
| @@ -92,7 +93,7 @@ func (gui *Gui) createAllViews() error { | ||||
| 	gui.Views.SearchPrefix.BgColor = gocui.ColorDefault | ||||
| 	gui.Views.SearchPrefix.FgColor = gocui.ColorGreen | ||||
| 	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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user