diff --git a/src/app/debugger/debuggerUI/ButtonNavigator.js b/src/app/debugger/debuggerUI/ButtonNavigator.js
index 12c9e4fa54..5710dc1f53 100644
--- a/src/app/debugger/debuggerUI/ButtonNavigator.js
+++ b/src/app/debugger/debuggerUI/ButtonNavigator.js
@@ -88,8 +88,6 @@ function ButtonNavigator (_parent, _traceManager) {
this.view
}
-module.exports = ButtonNavigator
-
ButtonNavigator.prototype.render = function () {
var self = this
var view = yo`
@@ -130,29 +128,43 @@ ButtonNavigator.prototype.reset = function () {
resetWarning(this)
}
-ButtonNavigator.prototype.stepChanged = function (step) {
+ButtonNavigator.prototype.stepChanged = function (stepState, jumpOutDisabled) {
+ if (stepState === 'invalid') {
+ // TODO: probably not necessary, already implicit done in the next steps
+ this.reset()
+ this.updateAll()
+ return
+ }
+
+ this.intoBackDisabled = (stepState === 'initial')
+ this.overBackDisabled = (stepState === 'initial')
+ this.jumpPreviousBreakpointDisabled = (stepState === 'initial')
+ this.jumpNextBreakpointDisabled = (stepState === 'end')
+ this.intoForwardDisabled = (stepState === 'end')
+ this.overForwardDisabled = (stepState === 'end')
+ this.jumpNextBreakpointDisabled = jumpOutDisabled
+
+ this.updateAll()
+}
+
+ButtonNavigator.prototype.old_stepChanged = function (step) {
+ var self = this
this.intoBackDisabled = step <= 0
this.overBackDisabled = step <= 0
- if (!this.traceManager) {
- this.intoForwardDisabled = true
- this.overForwardDisabled = true
- } else {
- var self = this
- this.traceManager.getLength(function (error, length) {
- if (error) {
- self.reset()
- console.log(error)
- } else {
- self.jumpNextBreakpointDisabled = step >= length - 1
- self.jumpPreviousBreakpointDisabled = step <= 0
- self.intoForwardDisabled = step >= length - 1
- self.overForwardDisabled = step >= length - 1
- var stepOut = self.traceManager.findStepOut(step)
- self.jumpOutDisabled = stepOut === step
- }
- self.updateAll()
- })
- }
+ this.traceManager.getLength(function (error, length) {
+ if (error) {
+ console.log(error)
+ self.reset()
+ } else {
+ self.jumpNextBreakpointDisabled = step >= length - 1
+ self.jumpPreviousBreakpointDisabled = step <= 0
+ self.intoForwardDisabled = step >= length - 1
+ self.overForwardDisabled = step >= length - 1
+ var stepOut = self.traceManager.findStepOut(step)
+ self.jumpOutDisabled = stepOut === step
+ }
+ self.updateAll()
+ })
this.updateAll()
}
diff --git a/src/app/debugger/debuggerUI/Slider.js b/src/app/debugger/debuggerUI/Slider.js
index b3f84c7fce..3ca7eb8ffc 100644
--- a/src/app/debugger/debuggerUI/Slider.js
+++ b/src/app/debugger/debuggerUI/Slider.js
@@ -63,7 +63,7 @@ class Slider {
if (value === this.previousValue) return
this.previousValue = value
- this.event.trigger('moved', [value])
+ this.event.trigger('sliderMoved', [value])
}
setValue (value) {
diff --git a/src/app/debugger/debuggerUI/StepManager.js b/src/app/debugger/debuggerUI/StepManager.js
index 7e223e1e7a..ed8edafb68 100644
--- a/src/app/debugger/debuggerUI/StepManager.js
+++ b/src/app/debugger/debuggerUI/StepManager.js
@@ -29,7 +29,7 @@ function StepManager (_parent, _traceManager) {
this.slider = new Slider((step) => {
return this.solidityMode ? this.resolveToReducedTrace(step, 0) : step
})
- this.slider.event.register('moved', this, function (step) {
+ this.slider.event.register('sliderMoved', this, function (step) {
self.sliderMoved(step)
})
@@ -197,8 +197,25 @@ StepManager.prototype.jumpOut = function () {
}
StepManager.prototype.changeState = function (step) {
+ const self = this
this.currentStepIndex = step
- this.buttonNavigator.stepChanged(step)
+
+ this.traceManager.getLength(function (error, length) {
+ let stepState = 'valid'
+
+ if (error) {
+ stepState = 'invalid'
+ } else if (step <= 0) {
+ stepState = 'initial'
+ } else if (step >= length - 1) {
+ stepState = 'end'
+ }
+
+ let jumpOutDisabled = (step === self.traceManager.findStepOut(step))
+
+ self.buttonNavigator.stepChanged(stepState, jumpOutDisabled)
+ })
+
this.event.trigger('stepChanged', [step])
}