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:
parent
db12853bbe
commit
4a33fede7b
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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user