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:
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,
|
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 },
|
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user