summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Burke <rich.g.burke@gmail.com>2019-03-13 22:05:45 +0000
committerRichard Burke <rich.g.burke@gmail.com>2019-03-13 22:05:45 +0000
commit6b7149aa38fdf797b29c4c22671691072d05c420 (patch)
treed5e1c915055da051c75835f401dbd92dddb4fd6f
parentc35b2b3bf0f4acfa4927a3044751aead8bb65389 (diff)
View active state now represented by ViewState enum
-rw-r--r--cmd/grv/abstract_window_view.go18
-rw-r--r--cmd/grv/abstract_window_view_test.go55
-rw-r--r--cmd/grv/command_output_view.go2
-rw-r--r--cmd/grv/commit_view.go4
-rw-r--r--cmd/grv/container_view.go39
-rw-r--r--cmd/grv/context_menu_view.go2
-rw-r--r--cmd/grv/diff_view.go4
-rw-r--r--cmd/grv/error_view.go4
-rw-r--r--cmd/grv/git_status_view.go12
-rw-r--r--cmd/grv/git_summary_view.go2
-rw-r--r--cmd/grv/grv_status_view.go16
-rw-r--r--cmd/grv/grv_variable_view.go2
-rw-r--r--cmd/grv/grv_variables.go6
-rw-r--r--cmd/grv/help_bar_view.go4
-rw-r--r--cmd/grv/help_view.go2
-rw-r--r--cmd/grv/ref_view.go6
-rw-r--r--cmd/grv/remote_view.go2
-rw-r--r--cmd/grv/selectable_row_view_test.go48
-rw-r--r--cmd/grv/status_bar_view.go11
-rw-r--r--cmd/grv/view.go64
-rw-r--r--cmd/grv/window.go5
-rw-r--r--cmd/grv/window_view_container.go6
22 files changed, 177 insertions, 137 deletions
diff --git a/cmd/grv/abstract_window_view.go b/cmd/grv/abstract_window_view.go
index 32aa475..7fa5b90 100644
--- a/cmd/grv/abstract_window_view.go
+++ b/cmd/grv/abstract_window_view.go
@@ -33,7 +33,7 @@ type AbstractWindowView struct {
config Config
variables GRVVariableSetter
viewSearch *ViewSearch
- active bool
+ viewState ViewState
borderWidth uint
rowDescriptor string
handlers map[ActionType]abstractWindowViewHandler
@@ -98,14 +98,14 @@ func (abstractWindowView *AbstractWindowView) RenderHelpBar(lineBuilder *LineBui
return
}
-// OnActiveChange updates the active state of the view
-func (abstractWindowView *AbstractWindowView) OnActiveChange(active bool) {
+// OnStateChange updates the active state of the view
+func (abstractWindowView *AbstractWindowView) OnStateChange(viewState ViewState) {
abstractWindowView.lock.Lock()
defer abstractWindowView.lock.Unlock()
- abstractWindowView.active = active
+ abstractWindowView.viewState = viewState
- if active {
+ if viewState == ViewStateActive {
abstractWindowView.setVariables()
}
}
@@ -207,13 +207,13 @@ func (abstractWindowView *AbstractWindowView) notifyChildRowSelected(rowIndex ui
func (abstractWindowView *AbstractWindowView) setVariables() {
rowIndex := abstractWindowView.child.viewPos().ActiveRowIndex()
rows := abstractWindowView.child.rows()
- active := abstractWindowView.active
+ viewState := abstractWindowView.viewState
- abstractWindowView.variables.SetViewVariable(VarLineNumer, fmt.Sprintf("%v", rowIndex+1), active)
- abstractWindowView.variables.SetViewVariable(VarLineCount, fmt.Sprintf("%v", rows), active)
+ abstractWindowView.variables.SetViewVariable(VarLineNumer, fmt.Sprintf("%v", rowIndex+1), viewState)
+ abstractWindowView.variables.SetViewVariable(VarLineCount, fmt.Sprintf("%v", rows), viewState)
line := abstractWindowView.child.line(rowIndex)
- abstractWindowView.variables.SetViewVariable(VarLineText, line, active)
+ abstractWindowView.variables.SetViewVariable(VarLineText, line, viewState)
}
// HandleAction checks if this action is supported by the AbstractWindowView
diff --git a/cmd/grv/abstract_window_view_test.go b/cmd/grv/abstract_window_view_test.go
index 21b1d3c..abfe2c2 100644
--- a/cmd/grv/abstract_window_view_test.go
+++ b/cmd/grv/abstract_window_view_test.go
@@ -233,8 +233,8 @@ type MockGRVVariableSetter struct {
mock.Mock
}
-func (variables *MockGRVVariableSetter) SetViewVariable(variable GRVVariable, value string, isActiveView bool) {
- variables.Called(variable, value, isActiveView)
+func (variables *MockGRVVariableSetter) SetViewVariable(variable GRVVariable, value string, viewState ViewState) {
+ variables.Called(variable, value, viewState)
}
func (variables *MockGRVVariableSetter) VariableValues() map[GRVVariable]string {
@@ -292,9 +292,9 @@ func setupAbstractWindowView() (*AbstractWindowView, *abstractWindowViewMocks) {
mocks.config.On("GetInt", CfMouseScrollRows).Return(3)
- mocks.variables.On("SetViewVariable", VarLineNumer, "1", false)
- mocks.variables.On("SetViewVariable", VarLineCount, "24", false)
- mocks.variables.On("SetViewVariable", VarLineText, "", false)
+ mocks.variables.On("SetViewVariable", VarLineNumer, "1", ViewStateInvisible)
+ mocks.variables.On("SetViewVariable", VarLineCount, "24", ViewStateInvisible)
+ mocks.variables.On("SetViewVariable", VarLineText, "", ViewStateInvisible)
mocks.lock.On("Lock").Return()
mocks.lock.On("Unlock").Return()
@@ -789,33 +789,48 @@ func TestActionMouseScrollUpIsHandledAndUpdatesResultWhenScrollUpReturnsTrue(t *
assertChildViewAndDisplayUpdated(t, mocks)
}
-func TestOnActiveChangeSetsActiveAndCallsSetVariablesWhenTrue(t *testing.T) {
+func TestOnStateChangeSetsViewStateAndCallsSetVariablesWhenViewStateIsActive(t *testing.T) {
abstractWindowView, mocks := setupAbstractWindowView()
- mocks.variables.On("SetViewVariable", VarLineNumer, "1", true).Return()
- mocks.variables.On("SetViewVariable", VarLineCount, "24", true).Return()
- mocks.variables.On("SetViewVariable", VarLineText, "", true).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "1", ViewStateActive).Return()
+ mocks.variables.On("SetViewVariable", VarLineCount, "24", ViewStateActive).Return()
+ mocks.variables.On("SetViewVariable", VarLineText, "", ViewStateActive).Return()
- abstractWindowView.OnActiveChange(true)
+ abstractWindowView.OnStateChange(ViewStateActive)
mocks.lock.AssertCalled(t, "Lock")
mocks.lock.AssertCalled(t, "Unlock")
- assert.Equal(t, abstractWindowView.active, true, "active should be true")
+ assert.Equal(t, abstractWindowView.viewState, ViewStateActive, "viewState should be ViewStateActive")
}
-func TestOnActiveChangeSetsActiveAndDoesNotCallSetVariablesWhenFalse(t *testing.T) {
+func TestOnStateChangeSetsViewStateAndDoesNotCallSetVariablesWhenViewStateIsInactive(t *testing.T) {
abstractWindowView, mocks := setupAbstractWindowView()
- abstractWindowView.OnActiveChange(false)
+ abstractWindowView.OnStateChange(ViewStateInactiveAndVisible)
mocks.lock.AssertCalled(t, "Lock")
mocks.lock.AssertCalled(t, "Unlock")
- mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineNumer, "1", true)
- mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineCount, "24", true)
- mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineText, "", true)
+ mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineNumer, "1", ViewStateActive)
+ mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineCount, "24", ViewStateActive)
+ mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineText, "", ViewStateActive)
- assert.Equal(t, abstractWindowView.active, false, "active should be true")
+ assert.Equal(t, abstractWindowView.viewState, ViewStateInactiveAndVisible, "viewState should be ViewStateInactiveAndVisible")
+}
+
+func TestOnStateChangeSetsViewStateAndDoesNotCallSetVariablesWhenViewStateIsInvisible(t *testing.T) {
+ abstractWindowView, mocks := setupAbstractWindowView()
+
+ abstractWindowView.OnStateChange(ViewStateInvisible)
+
+ mocks.lock.AssertCalled(t, "Lock")
+ mocks.lock.AssertCalled(t, "Unlock")
+
+ mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineNumer, "1", ViewStateActive)
+ mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineCount, "24", ViewStateActive)
+ mocks.variables.AssertNotCalled(t, "SetViewVariable", VarLineText, "", ViewStateActive)
+
+ assert.Equal(t, abstractWindowView.viewState, ViewStateInvisible, "viewState should be ViewStateInvisible")
}
func TestWhenNotifyChildRowSelectedIsCalledThenSetVariablesIsAsWell(t *testing.T) {
@@ -823,9 +838,9 @@ func TestWhenNotifyChildRowSelectedIsCalledThenSetVariablesIsAsWell(t *testing.T
abstractWindowView.notifyChildRowSelected(0)
- mocks.variables.AssertCalled(t, "SetViewVariable", VarLineNumer, "1", false)
- mocks.variables.AssertCalled(t, "SetViewVariable", VarLineCount, "24", false)
- mocks.variables.AssertCalled(t, "SetViewVariable", VarLineText, "", false)
+ mocks.variables.AssertCalled(t, "SetViewVariable", VarLineNumer, "1", ViewStateInvisible)
+ mocks.variables.AssertCalled(t, "SetViewVariable", VarLineCount, "24", ViewStateInvisible)
+ mocks.variables.AssertCalled(t, "SetViewVariable", VarLineText, "", ViewStateInvisible)
}
func TestLineNumberReturnsTheNumberOfRowsInTheView(t *testing.T) {
diff --git a/cmd/grv/command_output_view.go b/cmd/grv/command_output_view.go
index 254e6e0..ab4a26f 100644
--- a/cmd/grv/command_output_view.go
+++ b/cmd/grv/command_output_view.go
@@ -94,7 +94,7 @@ func (commandOutputView *CommandOutputView) Render(win RenderWindow) (err error)
viewRowIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, true); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, ViewStateActive); err != nil {
return
}
diff --git a/cmd/grv/commit_view.go b/cmd/grv/commit_view.go
index 6a66cc4..06804c2 100644
--- a/cmd/grv/commit_view.go
+++ b/cmd/grv/commit_view.go
@@ -182,7 +182,7 @@ func (commitView *CommitView) Render(win RenderWindow) (err error) {
}
if commitSetState.commitNum > 0 {
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, commitView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, commitView.viewState); err != nil {
return
}
} else {
@@ -491,7 +491,7 @@ func (commitView *CommitView) ViewID() ViewID {
func (commitView *CommitView) setVariables(commit *Commit) {
commitView.AbstractWindowView.setVariables()
- commitView.variables.SetViewVariable(VarCommit, commit.oid.String(), commitView.active)
+ commitView.variables.SetViewVariable(VarCommit, commit.oid.String(), commitView.viewState)
}
// RegisterCommitViewListener accepts a listener to be notified when a commit is selected
diff --git a/cmd/grv/container_view.go b/cmd/grv/container_view.go
index 323bca3..531138d 100644
--- a/cmd/grv/container_view.go
+++ b/cmd/grv/container_view.go
@@ -61,7 +61,7 @@ type ContainerView struct {
fullScreen bool
childPositions []*ChildViewPosition
styleConfig WindowStyleConfig
- active bool
+ viewState ViewState
lock sync.Mutex
}
@@ -112,7 +112,7 @@ func (containerView *ContainerView) addChildView(newView BaseView) {
winID := fmt.Sprintf("%v-%T", viewIndex, windowView)
win := NewWindowWithStyleConfig(winID, containerView.config, containerView.styleConfig)
containerView.viewWins[windowView] = win
- containerView.onActiveChange(containerView.active)
+ containerView.onStateChange(containerView.viewState)
}
}
@@ -175,8 +175,8 @@ func (containerView *ContainerView) Dispose() {
containerView.lock.Lock()
defer containerView.lock.Unlock()
- for _, childView := range containerView.childViews {
- childView.Dispose()
+ for !containerView.isEmpty() {
+ removeView(containerView, Action{ActionType: ActionRemoveView})
}
}
@@ -210,22 +210,29 @@ func (containerView *ContainerView) HandleAction(action Action) (err error) {
return
}
-// OnActiveChange updates the active state of this container and its child views
-func (containerView *ContainerView) OnActiveChange(active bool) {
+// OnStateChange updates the active state of this container and its child views
+func (containerView *ContainerView) OnStateChange(viewState ViewState) {
containerView.lock.Lock()
defer containerView.lock.Unlock()
- containerView.onActiveChange(active)
+ containerView.onStateChange(viewState)
}
-func (containerView *ContainerView) onActiveChange(active bool) {
- containerView.active = active
+func (containerView *ContainerView) onStateChange(viewState ViewState) {
+ containerView.viewState = viewState
+
+ var inactiveChildViewState ViewState
+ if viewState == ViewStateActive {
+ inactiveChildViewState = ViewStateInactiveAndVisible
+ } else {
+ inactiveChildViewState = viewState
+ }
for index, childView := range containerView.childViews {
if uint(index) == containerView.activeViewIndex {
- childView.OnActiveChange(active)
+ childView.OnStateChange(viewState)
} else {
- childView.OnActiveChange(false)
+ childView.OnStateChange(inactiveChildViewState)
}
}
}
@@ -580,7 +587,7 @@ func nextContainerChildView(containerView *ContainerView, action Action) (err er
}
}
- containerView.onActiveChange(true)
+ containerView.onStateChange(containerView.viewState)
containerView.channels.UpdateDisplay()
return
@@ -595,7 +602,7 @@ func prevContainerChildView(containerView *ContainerView, action Action) (err er
}
}
- containerView.onActiveChange(true)
+ containerView.onStateChange(containerView.viewState)
containerView.channels.UpdateDisplay()
return
@@ -694,7 +701,7 @@ func splitView(containerView *ContainerView, action Action) (err error) {
newContainer.SetOrientation(orientation)
newContainer.AddChildViews(childView, newView)
containerView.childViews[containerView.activeViewIndex] = newContainer
- newContainer.OnActiveChange(true)
+ newContainer.OnStateChange(containerView.viewState)
}
containerView.channels.UpdateDisplay()
@@ -726,7 +733,7 @@ func removeView(containerView *ContainerView, action Action) (err error) {
})
}
- containerView.onActiveChange(true)
+ containerView.onStateChange(containerView.viewState)
containerView.channels.UpdateDisplay()
return
@@ -754,7 +761,7 @@ func childMouseClick(containerView *ContainerView, action Action) (err error) {
}
}
- containerView.onActiveChange(true)
+ containerView.onStateChange(containerView.viewState)
containerView.channels.UpdateDisplay()
return
diff --git a/cmd/grv/context_menu_view.go b/cmd/grv/context_menu_view.go
index 7c10aaf..aa3835b 100644
--- a/cmd/grv/context_menu_view.go
+++ b/cmd/grv/context_menu_view.go
@@ -92,7 +92,7 @@ func (contextMenuView *ContextMenuView) Render(win RenderWindow) (err error) {
win.ApplyStyle(CmpContextMenuContent)
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, true); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, ViewStateActive); err != nil {
return
}
diff --git a/cmd/grv/diff_view.go b/cmd/grv/diff_view.go
index 3590a54..590b4b2 100644
--- a/cmd/grv/diff_view.go
+++ b/cmd/grv/diff_view.go
@@ -279,7 +279,7 @@ func (diffView *DiffView) Render(win RenderWindow) (err error) {
lineIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, diffView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, diffView.viewState); err != nil {
return
}
@@ -848,7 +848,7 @@ func (diffView *DiffView) setVariables() {
}
filePart = strings.TrimRight(filePart, " ")
- diffView.variables.SetViewVariable(VarFile, filePart, diffView.active)
+ diffView.variables.SetViewVariable(VarFile, filePart, diffView.viewState)
}
return
diff --git a/cmd/grv/error_view.go b/cmd/grv/error_view.go
index ec03fd7..82b084f 100644
--- a/cmd/grv/error_view.go
+++ b/cmd/grv/error_view.go
@@ -96,8 +96,8 @@ func (errorView *ErrorView) HandleAction(Action) (err error) {
return
}
-// OnActiveChange does nothing
-func (errorView *ErrorView) OnActiveChange(bool) {
+// OnStateChange does nothing
+func (errorView *ErrorView) OnStateChange(ViewState) {
}
diff --git a/cmd/grv/git_status_view.go b/cmd/grv/git_status_view.go
index 945bd03..9745a8f 100644
--- a/cmd/grv/git_status_view.go
+++ b/cmd/grv/git_status_view.go
@@ -186,7 +186,7 @@ func (gitStatusView *GitStatusView) Render(win RenderWindow) (err error) {
}
if !gitStatusView.status.IsEmpty() {
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, gitStatusView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, gitStatusView.viewState); err != nil {
return
}
}
@@ -237,14 +237,14 @@ func (gitStatusView *GitStatusView) removeGitStatusViewListener(gitStatusViewLis
}
}
-// OnActiveChange updates whether this view is currently active
-func (gitStatusView *GitStatusView) OnActiveChange(active bool) {
- gitStatusView.AbstractWindowView.OnActiveChange(active)
+// OnStateChange updates whether this view is currently active
+func (gitStatusView *GitStatusView) OnStateChange(viewState ViewState) {
+ gitStatusView.AbstractWindowView.OnStateChange(viewState)
gitStatusView.lock.Lock()
defer gitStatusView.lock.Unlock()
- if active {
+ if viewState == ViewStateActive {
if err := gitStatusView.selectEntry(gitStatusView.activeViewPos.ActiveRowIndex()); err != nil {
gitStatusView.channels.ReportError(err)
}
@@ -515,7 +515,7 @@ func (gitStatusView *GitStatusView) setVariables() {
}
filePath := gitStatusView.renderedStatus[rowIndex].filePath
- gitStatusView.variables.SetViewVariable(VarFile, filePath, gitStatusView.active)
+ gitStatusView.variables.SetViewVariable(VarFile, filePath, gitStatusView.viewState)
}
func (gitStatusView *GitStatusView) rows() uint {
diff --git a/cmd/grv/git_summary_view.go b/cmd/grv/git_summary_view.go
index 134e494..2f0c0fe 100644
--- a/cmd/grv/git_summary_view.go
+++ b/cmd/grv/git_summary_view.go
@@ -263,7 +263,7 @@ func (summaryView *SummaryView) Render(win RenderWindow) (err error) {
lineIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, summaryView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, summaryView.viewState); err != nil {
return
}
diff --git a/cmd/grv/grv_status_view.go b/cmd/grv/grv_status_view.go
index 1861a73..b878131 100644
--- a/cmd/grv/grv_status_view.go
+++ b/cmd/grv/grv_status_view.go
@@ -2,8 +2,6 @@ package main
import (
"sync"
-
- log "github.com/Sirupsen/logrus"
)
// GRVStatusView manages the status bar view and help view displayed at the bottom of grv
@@ -12,7 +10,7 @@ type GRVStatusView struct {
helpBarView WindowView
statusBarWin *Window
helpBarWin *Window
- active bool
+ viewState ViewState
lock sync.Mutex
}
@@ -58,16 +56,14 @@ func (grvStatusView *GRVStatusView) HandleAction(action Action) (err error) {
return
}
-// OnActiveChange updates the active state of this view and its child views
-func (grvStatusView *GRVStatusView) OnActiveChange(active bool) {
+// OnStateChange updates the active state of this view and its child views
+func (grvStatusView *GRVStatusView) OnStateChange(viewState ViewState) {
grvStatusView.lock.Lock()
defer grvStatusView.lock.Unlock()
- log.Debugf("GRVStatusView active: %v", active)
-
- grvStatusView.active = active
- grvStatusView.statusBarView.OnActiveChange(active)
- grvStatusView.helpBarView.OnActiveChange(active)
+ grvStatusView.viewState = viewState
+ grvStatusView.statusBarView.OnStateChange(viewState)
+ grvStatusView.helpBarView.OnStateChange(viewState)
}
// ViewID returns the view ID of the status view
diff --git a/cmd/grv/grv_variable_view.go b/cmd/grv/grv_variable_view.go
index cf0d2b0..e8c96d4 100644
--- a/cmd/grv/grv_variable_view.go
+++ b/cmd/grv/grv_variable_view.go
@@ -63,7 +63,7 @@ func (grvVariableView *GRVVariableView) Render(win RenderWindow) (err error) {
viewRowIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, grvVariableView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, grvVariableView.viewState); err != nil {
return
}
diff --git a/cmd/grv/grv_variables.go b/cmd/grv/grv_variables.go
index b88ae8e..ec3040f 100644
--- a/cmd/grv/grv_variables.go
+++ b/cmd/grv/grv_variables.go
@@ -122,7 +122,7 @@ type GRVVariableGetter interface {
// GRVVariableSetter sets the value of a GRV variable
type GRVVariableSetter interface {
GRVVariableGetter
- SetViewVariable(variable GRVVariable, value string, isActiveView bool)
+ SetViewVariable(variable GRVVariable, value string, viewState ViewState)
}
// GRVVariables stores the values of all variables
@@ -147,8 +147,8 @@ func (grvVariables *GRVVariables) SetVariable(variable GRVVariable, value string
}
// SetViewVariable sets the value of a GRV variable for a view
-func (grvVariables *GRVVariables) SetViewVariable(variable GRVVariable, value string, isActiveView bool) {
- if !activeViewOnlyVariables[variable] || isActiveView {
+func (grvVariables *GRVVariables) SetViewVariable(variable GRVVariable, value string, viewState ViewState) {
+ if !activeViewOnlyVariables[variable] || viewState == ViewStateActive {
grvVariables.SetVariable(variable, value)
}
}
diff --git a/cmd/grv/help_bar_view.go b/cmd/grv/help_bar_view.go
index 9780c49..52add57 100644
--- a/cmd/grv/help_bar_view.go
+++ b/cmd/grv/help_bar_view.go
@@ -42,8 +42,8 @@ func (helpBarView *HelpBarView) HandleAction(Action) (err error) {
return
}
-// OnActiveChange does nothing
-func (helpBarView *HelpBarView) OnActiveChange(active bool) {
+// OnStateChange does nothing
+func (helpBarView *HelpBarView) OnStateChange(viewState ViewState) {
}
diff --git a/cmd/grv/help_view.go b/cmd/grv/help_view.go
index 19793cf..618b595 100644
--- a/cmd/grv/help_view.go
+++ b/cmd/grv/help_view.go
@@ -358,7 +358,7 @@ func (helpView *HelpView) Render(win RenderWindow) (err error) {
viewRowIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, true); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, helpView.viewState); err != nil {
return
}
diff --git a/cmd/grv/ref_view.go b/cmd/grv/ref_view.go
index 05f17d5..2bc921b 100644
--- a/cmd/grv/ref_view.go
+++ b/cmd/grv/ref_view.go
@@ -401,7 +401,7 @@ func (refView *RefView) Render(win RenderWindow) (err error) {
refIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, refView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, refView.viewState); err != nil {
return
}
@@ -720,8 +720,8 @@ func (refView *RefView) setVariables() {
}
if branch != "" || tag != "" {
- refView.variables.SetViewVariable(VarBranch, branch, refView.active)
- refView.variables.SetViewVariable(VarTag, tag, refView.active)
+ refView.variables.SetViewVariable(VarBranch, branch, refView.viewState)
+ refView.variables.SetViewVariable(VarTag, tag, refView.viewState)
}
}
diff --git a/cmd/grv/remote_view.go b/cmd/grv/remote_view.go
index 721588e..11683af 100644
--- a/cmd/grv/remote_view.go
+++ b/cmd/grv/remote_view.go
@@ -82,7 +82,7 @@ func (remoteView *RemoteView) Render(win RenderWindow) (err error) {
lineIndex++
}
- if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, remoteView.active); err != nil {
+ if err = win.SetSelectedRow(viewPos.SelectedRowIndex()+1, remoteView.viewState); err != nil {
return
}
diff --git a/cmd/grv/selectable_row_view_test.go b/cmd/grv/selectable_row_view_test.go
index 11fe8e0..9b87f99 100644
--- a/cmd/grv/selectable_row_view_test.go
+++ b/cmd/grv/selectable_row_view_test.go
@@ -115,8 +115,8 @@ func setupSelectableRowView() (*SelectableRowView, *selectableRowViewMocks) {
mocks.viewPos.On("ViewStartRowIndex").Return(uint(0))
mocks.viewPos.On("ViewStartColumn").Return(uint(1))
mocks.channels.On("UpdateDisplay").Return()
- mocks.variables.On("SetViewVariable", VarLineCount, "100", false).Return()
- mocks.variables.On("SetViewVariable", VarLineText, "", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineCount, "100", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineText, "", ViewStateInvisible).Return()
mocks.lock.On("Lock").Return()
mocks.lock.On("Unlock").Return()
@@ -162,7 +162,7 @@ func TestWhenActiveRowIndexDoesChangeAndRowIsSelectableThenChildIsNotifiedRowIsS
mocks.child.On("isSelectableRow", uint(1)).Return(true)
mocks.child.On("onRowSelected", uint(1)).Return(nil)
mocks.child.On("line", uint(1)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "2", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "2", ViewStateInvisible).Return()
selectableRowView.HandleAction(Action{ActionType: ActionNextLine})
@@ -182,8 +182,8 @@ func TestWhenActiveRowIndexDoesChangeDownwardsAndRowIsNotSelectableThenNextSelec
mocks.child.On("onRowSelected", uint(2)).Return(nil)
mocks.child.On("line", uint(1)).Return("").Times(1)
mocks.child.On("line", uint(2)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "2", false).Return()
- mocks.variables.On("SetViewVariable", VarLineNumer, "3", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "2", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "3", ViewStateInvisible).Return()
selectableRowView.HandleAction(Action{ActionType: ActionNextLine})
@@ -205,8 +205,8 @@ func TestWhenActiveRowIndexDoesChangeUpwardsAndRowIsNotSelectableThenNextSelecta
mocks.child.On("onRowSelected", uint(1)).Return(nil)
mocks.child.On("line", uint(2)).Return("")
mocks.child.On("line", uint(1)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "3", false).Return()
- mocks.variables.On("SetViewVariable", VarLineNumer, "2", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "3", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "2", ViewStateInvisible).Return()
selectableRowView.HandleAction(Action{ActionType: ActionPrevLine})
@@ -230,8 +230,8 @@ func TestWhenActiveRowIndexDoesChangeUpwardsAndRowIsNotSelectableThenNextSelecta
mocks.child.On("onRowSelected", uint(3)).Return(nil)
mocks.child.On("line", uint(2)).Return("")
mocks.child.On("line", uint(3)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "3", false).Return()
- mocks.variables.On("SetViewVariable", VarLineNumer, "4", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "3", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "4", ViewStateInvisible).Return()
selectableRowView.HandleAction(Action{ActionType: ActionPrevLine})
@@ -256,8 +256,8 @@ func TestWhenActiveRowIndexDoesChangeDownwardsAndRowIsNotSelectableThenNextSelec
mocks.child.On("onRowSelected", uint(97)).Return(nil)
mocks.child.On("line", uint(99)).Return("")
mocks.child.On("line", uint(97)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "100", false).Return()
- mocks.variables.On("SetViewVariable", VarLineNumer, "98", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "100", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "98", ViewStateInvisible).Return()
selectableRowView.HandleAction(Action{ActionType: ActionNextLine})
@@ -296,8 +296,8 @@ func TestWhenCurrentRowIsNotSelectableThenSelectNearestSelectableRowSetsNearestS
mocks.child.On("onRowSelected", uint(1)).Return(nil)
mocks.child.On("line", uint(0)).Return("")
mocks.child.On("line", uint(1)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "1", false).Return()
- mocks.variables.On("SetViewVariable", VarLineNumer, "2", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "1", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "2", ViewStateInvisible).Return()
selectableRowView.selectNearestSelectableRow()
@@ -315,8 +315,8 @@ func TestErrorReturnedByOnRowSelectedIsReturnedBySelectNeartestSelectableRow(t *
mocks.child.On("onRowSelected", uint(1)).Return(errors.New("Test error"))
mocks.child.On("line", uint(0)).Return("")
mocks.child.On("line", uint(1)).Return("")
- mocks.variables.On("SetViewVariable", VarLineNumer, "1", false).Return()
- mocks.variables.On("SetViewVariable", VarLineNumer, "2", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "1", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "2", ViewStateInvisible).Return()
returnedError := selectableRowView.selectNearestSelectableRow()
@@ -329,15 +329,15 @@ func TestNotifyChildRowSelectedCallsSetVariables(t *testing.T) {
mocks.child.On("line", uint(5)).Return("Line Text")
mocks.viewPos.On("ActiveRowIndex").Return(uint(5))
mocks.child.On("onRowSelected", uint(5)).Return(nil)
- mocks.variables.On("SetViewVariable", VarLineNumer, "6", false).Return()
- mocks.variables.On("SetViewVariable", VarLineCount, "100", false).Return()
- mocks.variables.On("SetViewVariable", VarLineText, "Line Text", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "6", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineCount, "100", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineText, "Line Text", ViewStateInvisible).Return()
selectableRowView.notifyChildRowSelected(5)
- mocks.variables.AssertCalled(t, "SetViewVariable", VarLineNumer, "6", false)
- mocks.variables.AssertCalled(t, "SetViewVariable", VarLineCount, "100", false)
- mocks.variables.AssertCalled(t, "SetViewVariable", VarLineText, "Line Text", false)
+ mocks.variables.AssertCalled(t, "SetViewVariable", VarLineNumer, "6", ViewStateInvisible)
+ mocks.variables.AssertCalled(t, "SetViewVariable", VarLineCount, "100", ViewStateInvisible)
+ mocks.variables.AssertCalled(t, "SetViewVariable", VarLineText, "Line Text", ViewStateInvisible)
}
func TestOnSearchMatchUpdatesTheViewPosAndNotifiesTheSelectableChild(t *testing.T) {
@@ -349,9 +349,9 @@ func TestOnSearchMatchUpdatesTheViewPosAndNotifiesTheSelectableChild(t *testing.
mocks.child.On("onRowSelected", uint(10)).Return(nil)
mocks.child.On("line", uint(10)).Return("Line Text")
- mocks.variables.On("SetViewVariable", VarLineNumer, "11", false).Return()
- mocks.variables.On("SetViewVariable", VarLineCount, "100", false).Return()
- mocks.variables.On("SetViewVariable", VarLineText, "Line Text", false).Return()
+ mocks.variables.On("SetViewVariable", VarLineNumer, "11", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineCount, "100", ViewStateInvisible).Return()
+ mocks.variables.On("SetViewVariable", VarLineText, "Line Text", ViewStateInvisible).Return()
selectableRowView.OnSearchMatch(mocks.viewPos, 10)
diff --git a/cmd/grv/status_bar_view.go b/cmd/grv/status_bar_view.go
index a3bfa2d..2d35143 100644
--- a/cmd/grv/status_bar_view.go
+++ b/cmd/grv/status_bar_view.go
@@ -36,7 +36,7 @@ type StatusBarView struct {
repoData RepoData
channels Channels
config ConfigSetter
- active bool
+ viewState ViewState
promptType promptType
pendingStatus string
lock sync.Mutex
@@ -260,13 +260,12 @@ func (statusBarView *StatusBarView) showPrompt(promptArgs *PromptArgs, action Ac
return Prompt(promptArgs)
}
-// OnActiveChange updates the active state of this view
-func (statusBarView *StatusBarView) OnActiveChange(active bool) {
+// OnStateChange updates the active state of this view
+func (statusBarView *StatusBarView) OnStateChange(viewState ViewState) {
statusBarView.lock.Lock()
defer statusBarView.lock.Unlock()
- log.Debugf("StatusBarView active: %v", active)
- statusBarView.active = active
+ statusBarView.viewState = viewState
}
// ViewID returns the view ID of the status bar view
@@ -285,7 +284,7 @@ func (statusBarView *StatusBarView) Render(win RenderWindow) (err error) {
return
}
- if statusBarView.active {
+ if statusBarView.viewState == ViewStateActive {
promptText, promptInput, promptPoint := PromptState()
lineBuilder.Append("%v%v", promptText, promptInput)
bytes := 0
diff --git a/cmd/grv/view.go b/cmd/grv/view.go
index 6bd9aee..62a4b85 100644
--- a/cmd/grv/view.go
+++ b/cmd/grv/view.go
@@ -44,6 +44,16 @@ const (
ViewCount // i.e. Number of views
)
+// ViewState represents the current state of the view
+type ViewState int
+
+// The set of view states
+const (
+ ViewStateInvisible ViewState = iota
+ ViewStateInactiveAndVisible
+ ViewStateActive
+)
+
// HelpRenderer renders help information
type HelpRenderer interface {
RenderHelpBar(*LineBuilder) error
@@ -56,7 +66,7 @@ type BaseView interface {
Initialise() error
Dispose()
HandleAction(Action) error
- OnActiveChange(bool)
+ OnStateChange(ViewState)
ViewID() ViewID
}
@@ -229,7 +239,7 @@ func (view *View) Initialise() (err error) {
}
}
- view.OnActiveChange(true)
+ view.OnStateChange(ViewStateActive)
return
}
@@ -606,18 +616,18 @@ func (view *View) HandleAction(action Action) (err error) {
return view.ActiveView().HandleAction(action)
}
-// OnActiveChange updates the active state of the currently active child view
-func (view *View) OnActiveChange(active bool) {
+// OnStateChange updates the active state of the currently active child view
+func (view *View) OnStateChange(viewState ViewState) {
v