1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-07 19:10:25 +00:00

Improves on Add Watch dialog prototype.

Can select individual variables (double-click to toggle), add all, remove all.
This commit is contained in:
FellippeHeitor 2021-07-25 00:19:55 -03:00
parent 37d1868630
commit 62878630b5
2 changed files with 83 additions and 31 deletions

View file

@ -7023,6 +7023,12 @@ FUNCTION idevariablewatchbox
maxVarLen = LEN("Variable") maxVarLen = LEN("Variable")
maxTypeLen = LEN("Type") maxTypeLen = LEN("Type")
TYPE varDlgList
AS LONG index, colorFlag, indicator
END TYPE
DIM varDlgList(1 TO totalVariablesCreated) AS varDlgList
'calculate longest module name, longest var name, longest type name 'calculate longest module name, longest var name, longest type name
FOR x = 1 TO totalVariablesCreated FOR x = 1 TO totalVariablesCreated
IF LEN(usedVariableList(x).subfunc) > maxModuleNameLen THEN IF LEN(usedVariableList(x).subfunc) > maxModuleNameLen THEN
@ -7038,6 +7044,17 @@ FUNCTION idevariablewatchbox
FOR x = 1 TO totalVariablesCreated FOR x = 1 TO totalVariablesCreated
IF usedVariableList(x).includedLine THEN _CONTINUE 'don't add variables in $INCLUDEs IF usedVariableList(x).includedLine THEN _CONTINUE 'don't add variables in $INCLUDEs
totalVisibleVariables = totalVisibleVariables + 1 totalVisibleVariables = totalVisibleVariables + 1
l$ = l$ + CHR$(16)
varDlgList(totalVisibleVariables).index = x
varDlgList(totalVisibleVariables).colorFlag = LEN(l$) + 1
varDlgList(totalVisibleVariables).indicator = LEN(l$) + 2
IF usedVariableList(x).watch THEN
l$ = l$ + CHR$(12) + "+"
ELSE
l$ = l$ + CHR$(16) + " "
END IF
text$ = usedVariableList(x).name + CHR$(16) + CHR$(2) text$ = usedVariableList(x).name + CHR$(16) + CHR$(2)
IF usedVariableList(x).used = 0 THEN someUnusedVars = -1: text$ = text$ + "*" ELSE text$ = text$ + " " IF usedVariableList(x).used = 0 THEN someUnusedVars = -1: text$ = text$ + "*" ELSE text$ = text$ + " "
text$ = text$ + SPACE$(maxVarLen - LEN(usedVariableList(x).name)) text$ = text$ + SPACE$(maxVarLen - LEN(usedVariableList(x).name))
@ -7060,22 +7077,21 @@ FUNCTION idevariablewatchbox
dialogHeight = idewy + idesubwindow - 6 dialogHeight = idewy + idesubwindow - 6
END IF END IF
idepar p, idewx - 8, dialogHeight, "Add Variable Watch" idepar p, idewx - 8, dialogHeight, "Watch List"
i = i + 1 i = i + 1: varListBox = i
o(i).typ = 2 o(varListBox).typ = 2
o(i).y = 2 o(varListBox).y = 2
o(i).w = idewx - 12: o(i).h = dialogHeight - 4 o(varListBox).w = idewx - 12: o(i).h = dialogHeight - 4
o(i).txt = idenewtxt(l$) o(varListBox).txt = idenewtxt(l$)
o(i).sel = 1: IF idecpindex THEN o(i).sel = idecpindex o(varListBox).sel = 1
o(i).nam = idenewtxt("Variable List (" + LTRIM$(STR$(totalVisibleVariables)) + ")") o(varListBox).nam = idenewtxt("Variable List (" + LTRIM$(STR$(totalVisibleVariables)) + ")")
i = i + 1
o(i).typ = 3
o(i).y = dialogHeight
o(i).txt = idenewtxt("#Go to" + sep + "#Close")
o(i).dft = 1
i = i + 1: buttonSet = i
o(buttonSet).typ = 3
o(i).x = p.x + p.w - 45
o(buttonSet).y = dialogHeight
o(buttonSet).txt = idenewtxt("#Add All" + sep + "#Remove All" + sep + "#Close")
@ -7107,7 +7123,7 @@ FUNCTION idevariablewatchbox
COLOR 0, 7: _PRINTSTRING (p.x + 2, p.y + 1), "Double-click on a variable to add it to the watch list" COLOR 0, 7: _PRINTSTRING (p.x + 2, p.y + 1), "Double-click on a variable to add it to the watch list"
IF someUnusedVars THEN IF someUnusedVars THEN
COLOR 2 COLOR 2
_PRINTSTRING (p.x + p.w - 32, p.y + p.h), "* declared but unused" _PRINTSTRING (p.x + 2, p.y + p.h), "* unused"
END IF END IF
'-------- end of custom display changes -------- '-------- end of custom display changes --------
@ -7158,23 +7174,45 @@ FUNCTION idevariablewatchbox
NEXT NEXT
'-------- end of generic input response -------- '-------- end of generic input response --------
IF K$ = CHR$(27) OR (focus = 3 AND info <> 0) THEN IF (focus = 2 AND info <> 0) THEN 'add all
FOR y = 1 TO totalVisibleVariables
usedVariableList(varDlgList(y).index).watch = -1
ASC(idetxt(o(varListBox).txt), varDlgList(y).colorFlag) = 12
ASC(idetxt(o(varListBox).txt), varDlgList(y).indicator) = 43 '+
NEXT
END IF
IF (focus = 3 AND info <> 0) THEN 'remove all
FOR y = 1 TO totalVisibleVariables
usedVariableList(varDlgList(y).index).watch = 0
ASC(idetxt(o(varListBox).txt), varDlgList(y).colorFlag) = 16
ASC(idetxt(o(varListBox).txt), varDlgList(y).indicator) = 32 'space
NEXT
END IF
IF K$ = CHR$(27) OR (focus = 4 AND info <> 0) THEN
EXIT FUNCTION EXIT FUNCTION
END IF END IF
IF K$ = CHR$(13) OR (focus = 2 AND info <> 0) OR (info = 1 AND focus = 1) THEN
y = ABS(o(1).sel) IF mCLICK AND focus = 1 THEN 'list click
IF y >= 1 AND y <= warningListItems AND warningLines(y) > 0 THEN IF timeElapsedSince(lastClick!) < .3 THEN GOTO toggleWatch
idegotobox_LastLineNum = warningLines(y) lastClick! = TIMER
AddQuickNavHistory END IF
idecy = idegotobox_LastLineNum
idecentercurrentline IF (K$ = CHR$(13) AND focus = 1) THEN
IF warningIncLines(y) > 0 THEN toggleWatch:
warningInInclude = idecy y = ABS(o(varListBox).sel)
warningInIncludeLine = warningIncLines(y)
IF y >= 1 AND y <= totalVisibleVariables THEN
usedVariableList(varDlgList(y).index).watch = NOT usedVariableList(varDlgList(y).index).watch
IF usedVariableList(varDlgList(y).index).watch THEN
ASC(idetxt(o(varListBox).txt), varDlgList(y).colorFlag) = 12
ASC(idetxt(o(varListBox).txt), varDlgList(y).indicator) = 43 '+
ELSE
ASC(idetxt(o(varListBox).txt), varDlgList(y).colorFlag) = 16
ASC(idetxt(o(varListBox).txt), varDlgList(y).indicator) = 32 'space
END IF END IF
ideselect = 0
EXIT FUNCTION
END IF END IF
END IF END IF
@ -10880,7 +10918,7 @@ FUNCTION idewarningbox
o(i).y = 2 o(i).y = 2
o(i).w = idewx - 12: o(i).h = dialogHeight - 4 o(i).w = idewx - 12: o(i).h = dialogHeight - 4
o(i).txt = idenewtxt(l$) o(i).txt = idenewtxt(l$)
o(i).sel = 1: IF idecpindex THEN o(i).sel = idecpindex o(i).sel = 1
o(i).nam = idenewtxt("Warnings (" + LTRIM$(STR$(totalWarnings)) + ")") o(i).nam = idenewtxt("Warnings (" + LTRIM$(STR$(totalWarnings)) + ")")
i = i + 1 i = i + 1
@ -11300,11 +11338,23 @@ SUB ideobjupdate (o AS idedbotype, focus, f, focusoffset, kk$, altletter$, mb, m
IF x2 > 0 THEN IF x2 > 0 THEN
n = n + 1 n = n + 1
REDIM _PRESERVE ListBoxITEMS(1 TO n) AS STRING REDIM _PRESERVE ListBoxITEMS(1 TO n) AS STRING
ListBoxITEMS(n) = MID$(a$, x, x2 - x) ListBoxITEMS(n) = _TRIM$(MID$(a$, x, x2 - x))
IF LEN(ListBoxITEMS(n)) THEN
DO WHILE ASC(UCASE$(ListBoxITEMS(n))) < 65 OR ASC(UCASE$(ListBoxITEMS(n))) > 90
ListBoxITEMS(n) = MID$(ListBoxITEMS(n), 2)
IF LEN(ListBoxITEMS(n)) = 0 THEN EXIT DO
LOOP
END IF
ELSE ELSE
n = n + 1 n = n + 1
REDIM _PRESERVE ListBoxITEMS(1 TO n) AS STRING REDIM _PRESERVE ListBoxITEMS(1 TO n) AS STRING
ListBoxITEMS(n) = RIGHT$(a$, LEN(a$) - x + 1) ListBoxITEMS(n) = _TRIM$(RIGHT$(a$, LEN(a$) - x + 1))
IF LEN(ListBoxITEMS(n)) THEN
DO WHILE ASC(UCASE$(ListBoxITEMS(n))) < 65 OR ASC(UCASE$(ListBoxITEMS(n))) > 90
ListBoxITEMS(n) = MID$(ListBoxITEMS(n), 2)
IF LEN(ListBoxITEMS(n)) = 0 THEN EXIT DO
LOOP
END IF
EXIT DO EXIT DO
END IF END IF
x = x2 + 1 x = x2 + 1

View file

@ -110,6 +110,7 @@ DIM SHARED MonochromeLoggingMode AS _BYTE
TYPE usedVarList TYPE usedVarList
used AS _BYTE used AS _BYTE
watch AS _BYTE
linenumber AS LONG linenumber AS LONG
includeLevel AS LONG includeLevel AS LONG
includedLine AS LONG includedLine AS LONG
@ -25939,6 +25940,7 @@ SUB manageVariableList (__name$, __cname$, localIndex AS LONG, action AS _BYTE)
REDIM _PRESERVE usedVariableList(UBOUND(usedVariableList) + 999) AS usedVarList REDIM _PRESERVE usedVariableList(UBOUND(usedVariableList) + 999) AS usedVarList
END IF END IF
usedVariableList(i).used = 0 usedVariableList(i).used = 0
usedVariableList(i).watch = 0
usedVariableList(i).linenumber = linenumber usedVariableList(i).linenumber = linenumber
usedVariableList(i).includeLevel = inclevel usedVariableList(i).includeLevel = inclevel
IF inclevel > 0 THEN IF inclevel > 0 THEN