1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-04-13 11:50:28 +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,
)
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,
),
}

View File

@ -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{},
}
}

View File

@ -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()

View File

@ -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 {

View File

@ -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 {

View File

@ -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