diff options
author | Richard Burke <rich.g.burke@gmail.com> | 2019-03-13 22:05:45 +0000 |
---|---|---|
committer | Richard Burke <rich.g.burke@gmail.com> | 2019-03-13 22:05:45 +0000 |
commit | 6b7149aa38fdf797b29c4c22671691072d05c420 (patch) | |
tree | d5e1c915055da051c75835f401dbd92dddb4fd6f | |
parent | c35b2b3bf0f4acfa4927a3044751aead8bb65389 (diff) |
View active state now represented by ViewState enum
-rw-r--r-- | cmd/grv/abstract_window_view.go | 18 | ||||
-rw-r--r-- | cmd/grv/abstract_window_view_test.go | 55 | ||||
-rw-r--r-- | cmd/grv/command_output_view.go | 2 | ||||
-rw-r--r-- | cmd/grv/commit_view.go | 4 | ||||
-rw-r--r-- | cmd/grv/container_view.go | 39 | ||||
-rw-r--r-- | cmd/grv/context_menu_view.go | 2 | ||||
-rw-r--r-- | cmd/grv/diff_view.go | 4 | ||||
-rw-r--r-- | cmd/grv/error_view.go | 4 | ||||
-rw-r--r-- | cmd/grv/git_status_view.go | 12 | ||||
-rw-r--r-- | cmd/grv/git_summary_view.go | 2 | ||||
-rw-r--r-- | cmd/grv/grv_status_view.go | 16 | ||||
-rw-r--r-- | cmd/grv/grv_variable_view.go | 2 | ||||
-rw-r--r-- | cmd/grv/grv_variables.go | 6 | ||||
-rw-r--r-- | cmd/grv/help_bar_view.go | 4 | ||||
-rw-r--r-- | cmd/grv/help_view.go | 2 | ||||
-rw-r--r-- | cmd/grv/ref_view.go | 6 | ||||
-rw-r--r-- | cmd/grv/remote_view.go | 2 | ||||
-rw-r--r-- | cmd/grv/selectable_row_view_test.go | 48 | ||||
-rw-r--r-- | cmd/grv/status_bar_view.go | 11 | ||||
-rw-r--r-- | cmd/grv/view.go | 64 | ||||
-rw-r--r-- | cmd/grv/window.go | 5 | ||||
-rw-r--r-- | cmd/grv/window_view_container.go | 6 |
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 |