From 8de0ca17f6507af1b0702b0d5f462a30d1edb9d8 Mon Sep 17 00:00:00 2001 From: Fellippe Heitor Date: Wed, 28 Jul 2021 12:07:02 -0300 Subject: [PATCH] Improves on scroll bar behavior (watch panel) --- source/ide/ide_methods.bas | 70 ++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index 76fafd0af..6bbb92224 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -6577,27 +6577,27 @@ SUB DebugMode (mX >= vWatchPanel.x + vWatchPanel.w - 3) AND (mX <= vWatchPanel.x + vWatchPanel.w - 1) AND _ (mY = vWatchPanel.y) THEN vWatchPanel.closingPanel = -1 - ELSEIF LEN(variableWatchList$) > 0 AND _ + ELSEIF LEN(variableWatchList$) > 0 AND vWatchPanel.vBarThumb > 0 AND _ (mX = vWatchPanel.x + vWatchPanel.w - 1) AND _ (mY = vWatchPanel.vBarThumb) THEN vWatchPanel.draggingVBar = 1 'thumb - ELSEIF LEN(variableWatchList$) > 0 AND _ + ELSEIF LEN(variableWatchList$) > 0 AND vWatchPanel.vBarThumb > 0 AND _ (mX = vWatchPanel.x + vWatchPanel.w - 1) AND _ (mY = vWatchPanel.y + 1) THEN vWatchPanel.draggingVBar = 2 'up arrow - ELSEIF LEN(variableWatchList$) > 0 AND _ + ELSEIF LEN(variableWatchList$) > 0 AND vWatchPanel.vBarThumb > 0 AND _ (mX = vWatchPanel.x + vWatchPanel.w - 1) AND _ (mY = vWatchPanel.y + vWatchPanel.h - 2) THEN vWatchPanel.draggingVBar = 3 'down arrow - ELSEIF LEN(variableWatchList$) > 0 AND _ + ELSEIF LEN(variableWatchList$) > 0 AND vWatchPanel.hBarThumb > 0 AND _ (mX = vWatchPanel.hBarThumb) AND _ (mY = vWatchPanel.y + vWatchPanel.h - 1) THEN vWatchPanel.draggingHBar = 1 'thumb - ELSEIF LEN(variableWatchList$) > 0 AND _ + ELSEIF LEN(variableWatchList$) > 0 AND vWatchPanel.hBarThumb > 0 AND _ (mX = vWatchPanel.x) AND _ (mY = vWatchPanel.y + vWatchPanel.h - 1) THEN vWatchPanel.draggingHBar = 2 'left arrow - ELSEIF LEN(variableWatchList$) > 0 AND _ + ELSEIF LEN(variableWatchList$) > 0 AND vWatchPanel.hBarThumb > 0 AND _ (mX = vWatchPanel.x + vWatchPanel.w - 2) AND _ (mY = vWatchPanel.y + vWatchPanel.h - 1) THEN vWatchPanel.draggingHBar = 3 'right arrow @@ -6706,21 +6706,29 @@ SUB DebugMode END IF IF vWatchPanel.h < 5 THEN vWatchPanel.h = 5 IF vWatchPanel.h > idewy - 10 THEN vWatchPanel.h = idewy - 10 + + IF vWatchPanel.vBarThumb > 0 AND vWatchPanel.firstVisible > totalVisibleVariables - (vWatchPanel.h - 2) + 1 THEN + vWatchPanel.firstVisible = totalVisibleVariables - (vWatchPanel.h - 2) + 1 + END IF + IF vWatchPanel.hBarThumb > 0 AND vWatchPanel.hPos > vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1 THEN + vWatchPanel.hPos = vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1 + END IF + mouseDownOnX = mX mouseDownOnY = mY GOSUB UpdateDisplay ELSEIF vWatchPanel.draggingVBar = 1 THEN - vWatchPanel.firstVisible = INT(map(mY, vWatchPanel.y + 2, vWatchPanel.y + vWatchPanel.h - 2, 1, totalVisibleVariables)) + vWatchPanel.firstVisible = INT(map(mY, vWatchPanel.y + 2, vWatchPanel.y + vWatchPanel.h - 2, 1, totalVisibleVariables - (vWatchPanel.h - 2) + 1)) IF vWatchPanel.firstVisible < 1 THEN vWatchPanel.firstVisible = 1 - IF vWatchPanel.firstVisible > totalVisibleVariables THEN - vWatchPanel.firstVisible = totalVisibleVariables + IF vWatchPanel.firstVisible > totalVisibleVariables - (vWatchPanel.h - 2) + 1 THEN + vWatchPanel.firstVisible = totalVisibleVariables - (vWatchPanel.h - 2) + 1 END IF GOSUB UpdateDisplay ELSEIF vWatchPanel.draggingHBar = 1 THEN - vWatchPanel.hPos = INT(map(mX, vWatchPanel.x, vWatchPanel.x + vWatchPanel.w - 2, 1, vWatchPanel.contentWidth)) + vWatchPanel.hPos = INT(map(mX, vWatchPanel.x, vWatchPanel.x + vWatchPanel.w - 2, 1, vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1)) IF vWatchPanel.hPos < 1 THEN vWatchPanel.hPos = 1 - IF vWatchPanel.hPos > vWatchPanel.contentWidth THEN - vWatchPanel.hPos = vWatchPanel.contentWidth + IF vWatchPanel.hPos > vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1 THEN + vWatchPanel.hPos = vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1 END IF GOSUB UpdateDisplay END IF @@ -6744,8 +6752,8 @@ SUB DebugMode GOSUB UpdateDisplay ELSEIF vWatchPanel.draggingVBar = 3 THEN vWatchPanel.firstVisible = vWatchPanel.firstVisible + 1 - IF vWatchPanel.firstVisible > totalVisibleVariables THEN - vWatchPanel.firstVisible = totalVisibleVariables + IF vWatchPanel.firstVisible > totalVisibleVariables - (vWatchPanel.h - 2) + 1 THEN + vWatchPanel.firstVisible = totalVisibleVariables - (vWatchPanel.h - 2) + 1 END IF GOSUB UpdateDisplay END IF @@ -6758,8 +6766,8 @@ SUB DebugMode GOSUB UpdateDisplay ELSEIF vWatchPanel.draggingHBar = 3 THEN vWatchPanel.hPos = vWatchPanel.hPos + 1 - IF vWatchPanel.hPos > vWatchPanel.contentWidth THEN - vWatchPanel.hPos = vWatchPanel.contentWidth + IF vWatchPanel.hPos > vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1 THEN + vWatchPanel.hPos = vWatchPanel.contentWidth - (vWatchPanel.w - 4) + 1 END IF GOSUB UpdateDisplay END IF @@ -7340,6 +7348,7 @@ SUB showvWatchPanel (this AS vWatchPanelType, currentScope$) y = 0 this.contentWidth = 0 + IF this.hPos = 0 THEN this.hPos = 1 IF LEN(variableWatchList$) THEN longestVarName = CVL(LEFT$(variableWatchList$, 4)) temp$ = MID$(variableWatchList$, 5) @@ -7347,9 +7356,6 @@ SUB showvWatchPanel (this AS vWatchPanelType, currentScope$) tempIndex& = CVL(LEFT$(temp$, 4)) temp$ = MID$(temp$, 5) i = i + 1 - IF this.firstVisible > i THEN _CONTINUE - y = y + 1 - IF y > this.h - 2 THEN EXIT DO item$ = usedVariableList(tempIndex&).name + SPACE$(longestVarName - LEN(usedVariableList(tempIndex&).name)) + " = " IF usedVariableList(tempIndex&).watch THEN IF usedVariableList(tempIndex&).subfunc = currentScope$ OR usedVariableList(tempIndex&).subfunc = "" THEN @@ -7361,19 +7367,31 @@ SUB showvWatchPanel (this AS vWatchPanelType, currentScope$) END IF END IF IF LEN(item$) > this.contentWidth THEN this.contentWidth = LEN(item$) + IF this.firstVisible > i THEN _CONTINUE + y = y + 1 + IF y > this.h - 2 THEN _CONTINUE _PRINTSTRING (this.x + 2, this.y + y), MID$(item$, this.hPos, this.w - 4) LOOP END IF - y = idevbar(this.x + this.w - 1, this.y + 1, this.h - 2, this.firstVisible, totalVisibleVariables) - IF this.draggingVBar = 0 THEN - this.vBarThumb = y + IF totalVisibleVariables > this.h - 2 THEN + y = idevbar(this.x + this.w - 1, this.y + 1, this.h - 2, this.firstVisible, totalVisibleVariables - (this.h - 2) + 1) + IF this.draggingVBar = 0 THEN + this.vBarThumb = y + END IF + ELSE + this.vBarThumb = 0 + this.firstVisible = 1 END IF - IF this.hPos = 0 THEN this.hPos = 1 - x = idehbar(this.x, this.y + this.h - 1, this.w - 1, this.hPos, this.contentWidth) - IF this.draggingHBar = 0 THEN - this.hBarThumb = x + IF this.contentWidth > this.w - 4 THEN + x = idehbar(this.x, this.y + this.h - 1, this.w - 1, this.hPos, this.contentWidth - (this.w - 4) + 1) + IF this.draggingHBar = 0 THEN + this.hBarThumb = x + END IF + ELSE + this.hBarThumb = 0 + this.hPos = 1 END IF END SUB