1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-08 20:45:13 +00:00

Improves column flexibility (SUBs dialog)

This commit is contained in:
Fellippe Heitor 2021-02-15 13:46:10 -03:00
parent 5778275cc0
commit 6268140512

View file

@ -8641,40 +8641,37 @@ FUNCTION idesubs$
'-------- init -------- '-------- init --------
l$ = ideprogname$
IF l$ = "" THEN l$ = "Untitled" + tempfolderindexstr$
IF idewx < 100 THEN
moduleNameLenLimit = 20
ELSE
moduleNameLenLimit = 42
END IF
maxModuleNameLen = LEN(l$)
IF maxModuleNameLen > moduleNameLenLimit + 2 THEN
l$ = LEFT$(l$, moduleNameLenLimit - 1) + STRING$(3, 250)
maxModuleNameLen = moduleNameLenLimit
ELSEIF maxModuleNameLen < 20 THEN
maxModuleNameLen = 20
END IF
ly$ = MKL$(1) ly$ = MKL$(1)
lySorted$ = ly$ lySorted$ = ly$
CurrentlyViewingWhichSUBFUNC = 1 CurrentlyViewingWhichSUBFUNC = 1
PreferCurrentCursorSUBFUNC = 0 PreferCurrentCursorSUBFUNC = 0
InsideDECLARE = 0 InsideDECLARE = 0
FoundExternalSUBFUNC = 0 FoundExternalSUBFUNC = 0
l$ = ideprogname$
IF l$ = "" THEN l$ = "Untitled" + tempfolderindexstr$
SELECT CASE idewx
CASE 80: maxModuleNameLen = 20
CASE 81 TO 100: maxModuleNameLen = 30
CASE ELSE: maxModuleNameLen = 42 'longest valid identifier + max 2 type symbols
END SELECT
IF LEN(l$) <= maxModuleNameLen + 2 THEN
l$ = l$ + SPACE$((maxModuleNameLen + 2) - LEN(l$))
ELSE
l$ = LEFT$(l$, maxModuleNameLen - 1) + STRING$(3, 250)
END IF
lSized$ = l$
lSorted$ = l$
lSortedSized$ = l$
'build headers (normal, sorted, normal with line count, sorted with line count)
l$ = l$ + " Type Arguments"
lSorted$ = l$
lSized$ = lSized$ + " Line count Type Arguments" + sep
lSortedSized$ = lSortedSized$ + " Line count Type Arguments"
REDIM SortedSubsList(1 TO 100) AS STRING * 998 REDIM SortedSubsList(1 TO 100) AS STRING * 998
REDIM CaseBkpSubsList(1 TO 100) AS STRING * 998 REDIM CaseBkpSubsList(1 TO 100) AS STRING * 998
REDIM TotalLines(0 TO 100) AS LONG REDIM TotalLines(0 TO 100) AS LONG
REDIM SubNames(0 TO 100) AS STRING
REDIM SubLines(0 TO 100) AS LONG
REDIM Args(0 TO 100) AS STRING
REDIM SF(0 TO 100) AS STRING
TotalSUBs = 0 TotalSUBs = 0
ModuleSize = 0 'in lines ModuleSize = 0 'in lines
@ -8693,9 +8690,24 @@ FUNCTION idesubs$
IF LEFT$(nca$, 4) = "SUB " THEN sf = 1: sf$ = "SUB " IF LEFT$(nca$, 4) = "SUB " THEN sf = 1: sf$ = "SUB "
IF LEFT$(nca$, 9) = "FUNCTION " THEN sf = 2: sf$ = "FUNC " IF LEFT$(nca$, 9) = "FUNCTION " THEN sf = 2: sf$ = "FUNC "
IF sf THEN IF sf THEN
'Resize SortedSubsList() and helper arrays
TotalSUBs = TotalSUBs + 1
IF NOT InsideDECLARE THEN LastOpenSUB = TotalSUBs
IF TotalSUBs > UBOUND(SortedSubsList) THEN
REDIM _PRESERVE SortedSubsList(1 TO TotalSUBs + 99) AS STRING * 998
REDIM _PRESERVE CaseBkpSubsList(1 TO TotalSUBs + 99) AS STRING * 998
REDIM _PRESERVE TotalLines(0 TO TotalSUBs + 99) AS LONG
REDIM _PRESERVE SubNames(0 TO TotalSUBs + 99) AS STRING
REDIM _PRESERVE SubLines(0 TO TotalSUBs + 99) AS LONG
REDIM _PRESERVE Args(0 TO TotalSUBs + 99) AS STRING
REDIM _PRESERVE SF(0 TO TotalSUBs + 99) AS STRING
END IF
IF RIGHT$(nca$, 7) = " STATIC" THEN IF RIGHT$(nca$, 7) = " STATIC" THEN
a$ = RTRIM$(LEFT$(a$, LEN(a$) - 7)) a$ = RTRIM$(LEFT$(a$, LEN(a$) - 7))
END IF END IF
'Store line number
ly$ = ly$ + MKL$(y) ly$ = ly$ + MKL$(y)
'Check if the cursor is currently inside this SUB/FUNCTION to position the 'Check if the cursor is currently inside this SUB/FUNCTION to position the
@ -8726,6 +8738,8 @@ FUNCTION idesubs$
args$ = "()" args$ = "()"
END IF END IF
cleanSubName n$ cleanSubName n$
IF LEN(n$) > maxModuleNameLen THEN maxModuleNameLen = LEN(n$)
IF maxModuleNameLen > moduleNameLenLimit THEN maxModuleNameLen = moduleNameLenLimit
'If the user currently has the cursor over a SUB/FUNC name, let's highlight it 'If the user currently has the cursor over a SUB/FUNC name, let's highlight it
'instead of the currently in edition, for a quick link functionality: 'instead of the currently in edition, for a quick link functionality:
@ -8746,39 +8760,11 @@ FUNCTION idesubs$
ModuleSize = 0 ModuleSize = 0
END IF END IF
IF LEN(n$) <= maxModuleNameLen THEN 'Populate arrays
n$ = n$ + SPACE$(maxModuleNameLen - LEN(n$)) SubNames(TotalSUBs) = n$
ELSE SubLines(TotalSUBs) = y
n$ = LEFT$(n$, (maxModuleNameLen - 3)) + STRING$(3, 250) Args(TotalSUBs) = args$
END IF SF(TotalSUBs) = sf$
IF LEN(args$) <= (idewx - 41) THEN
args$ = args$ + SPACE$((idewx - 41) - LEN(args$))
ELSE
args$ = LEFT$(args$, (idewx - 44)) + STRING$(3, 250)
END IF
l$ = l$ + sep + CHR$(195) + CHR$(196) + n$ + " " + CHR$(16) + CHR$(2) + _
sf$ + CHR$(16) + CHR$(16) + args$
num$ = CHR$(254) 'placeholder - will be replaced when End Sub/Function is found
IF InsideDECLARE THEN num$ = "external"
lSized$ = lSized$ + CHR$(195) + CHR$(196) + n$ + " " + _
CHR$(16) + CHR$(2) + SPACE$(9 - LEN(num$)) + num$ + " " _
+ sf$ + CHR$(16) + CHR$(16) + args$ + sep
'Populate SortedSubsList() and helper arrays
TotalSUBs = TotalSUBs + 1
IF NOT InsideDECLARE THEN LastOpenSUB = TotalSUBs
listItem$ = n$ + " " + CHR$(1) + CHR$(16) + CHR$(2) + sf$ + CHR$(16) + CHR$(16) + args$
ListItemLength = LEN(listItem$)
IF TotalSUBs > UBOUND(SortedSubsList) THEN
REDIM _PRESERVE SortedSubsList(1 TO TotalSUBs + 99) AS STRING * 998
REDIM _PRESERVE CaseBkpSubsList(1 TO TotalSUBs + 99) AS STRING * 998
REDIM _PRESERVE TotalLines(0 TO TotalSUBs + 99) AS LONG
END IF
SortedSubsList(TotalSUBs) = UCASE$(listItem$)
CaseBkpSubsList(TotalSUBs) = listItem$
MID$(CaseBkpSubsList(TotalSUBs), 992, 6) = MKL$(y) + MKI$(ListItemLength)
MID$(SortedSubsList(TotalSUBs), 992, 6) = MKL$(y) + MKI$(ListItemLength)
ELSE 'no sf ELSE 'no sf
'remove double spaces 'remove double spaces
i = INSTR(nca$, " ") i = INSTR(nca$, " ")
@ -8802,13 +8788,68 @@ FUNCTION idesubs$
NEXT NEXT
IF SubClosed = 0 THEN GOSUB AddLineCount IF SubClosed = 0 THEN GOSUB AddLineCount
MID$(l$, _INSTRREV(l$, CHR$(195)), 1) = CHR$(192)
MID$(lSized$, _INSTRREV(lSized$, CHR$(195)), 1) = CHR$(192)
'fix arrays to remove empty items 'fix arrays to remove empty items
REDIM _PRESERVE SortedSubsList(1 TO TotalSUBs) AS STRING * 998 REDIM _PRESERVE SortedSubsList(1 TO TotalSUBs) AS STRING * 998
REDIM _PRESERVE CaseBkpSubsList(1 TO TotalSUBs) AS STRING * 998 REDIM _PRESERVE CaseBkpSubsList(1 TO TotalSUBs) AS STRING * 998
REDIM _PRESERVE TotalLines(0 TO TotalSUBs) AS LONG REDIM _PRESERVE TotalLines(0 TO TotalSUBs) AS LONG
REDIM _PRESERVE SubNames(0 TO TotalSUBs) AS STRING
REDIM _PRESERVE SubLines(0 TO TotalSUBs) AS LONG
REDIM _PRESERVE Args(0 TO TotalSUBs) AS STRING
REDIM _PRESERVE SF(0 TO TotalSUBs) AS STRING
'build headers (normal, sorted, normal with line count, sorted with line count)
IF TotalSUBs > 0 THEN
l$ = l$ + SPACE$((maxModuleNameLen + 2) - LEN(l$))
lSized$ = l$
lSortedSized$ = l$
l$ = l$ + " Type Arguments"
lSorted$ = l$
lSorted$ = l$
lSized$ = lSized$ + " Line count Type Arguments" + sep
lSortedSized$ = lSortedSized$ + " Line count Type Arguments"
ELSE
l$ = ideprogname$
IF l$ = "" THEN l$ = "Untitled" + tempfolderindexstr$
lSized$ = l$
END IF
'build lists
FOR x = 1 TO TotalSUBs
n$ = SubNames(x)
IF LEN(n$) > maxModuleNameLen THEN
n$ = LEFT$(n$, maxModuleNameLen - 3) + STRING$(3, 250)
ELSE
n$ = n$ + SPACE$(maxModuleNameLen - LEN(n$))
END IF
args$ = Args(x)
IF LEN(args$) <= (idewx - 41) THEN
args$ = args$ + SPACE$((idewx - 41) - LEN(args$))
ELSE
args$ = LEFT$(args$, (idewx - 44)) + STRING$(3, 250)
END IF
sf$ = SF(x)
l$ = l$ + sep + CHR$(195) + CHR$(196) + n$ + " " + CHR$(16) + CHR$(2) + _
sf$ + CHR$(16) + CHR$(16) + args$
IF TotalLines(x) = 0 THEN num$ = "external" ELSE num$ = LTRIM$(STR$(TotalLines(x)))
lSized$ = lSized$ + CHR$(195) + CHR$(196) + n$ + " " + _
CHR$(16) + CHR$(2) + SPACE$(10 - LEN(num$)) + num$ + " " _
+ sf$ + CHR$(16) + CHR$(16) + args$ + sep
listItem$ = n$ + " " + CHR$(1) + CHR$(16) + CHR$(2) + sf$ + CHR$(16) + CHR$(16) + args$
ListItemLength = LEN(listItem$)
SortedSubsList(x) = UCASE$(listItem$)
CaseBkpSubsList(x) = listItem$
MID$(CaseBkpSubsList(x), 992, 6) = MKL$(SubLines(x)) + MKI$(ListItemLength)
MID$(SortedSubsList(x), 992, 6) = MKL$(SubLines(x)) + MKI$(ListItemLength)
NEXT
MID$(l$, _INSTRREV(l$, CHR$(195)), 1) = CHR$(192)
MID$(lSized$, _INSTRREV(lSized$, CHR$(195)), 1) = CHR$(192)
IF TotalSUBs > 1 THEN IF TotalSUBs > 1 THEN
sort SortedSubsList() sort SortedSubsList()
@ -8827,7 +8868,7 @@ FUNCTION idesubs$
IF LEFT$(temp$, 1) = "*" THEN num$ = "external" IF LEFT$(temp$, 1) = "*" THEN num$ = "external"
lSortedSized$ = lSortedSized$ + sep + CHR$(195) + CHR$(196) lSortedSized$ = lSortedSized$ + sep + CHR$(195) + CHR$(196)
lSortedSized$ = lSortedSized$ + LEFT$(temp$, INSTR(temp$, CHR$(1)) - 1) + _ lSortedSized$ = lSortedSized$ + LEFT$(temp$, INSTR(temp$, CHR$(1)) - 1) + _
SPACE$(9 - LEN(num$)) + CHR$(16) + CHR$(2) + num$ + " " + _ SPACE$(10 - LEN(num$)) + CHR$(16) + CHR$(2) + num$ + " " + _
MID$(temp$, INSTR(temp$, CHR$(1)) + 1) MID$(temp$, INSTR(temp$, CHR$(1)) + 1)
EXIT FOR EXIT FOR
END IF END IF
@ -9095,11 +9136,6 @@ FUNCTION idesubs$
AddLineCount: AddLineCount:
ModuleSize = ModuleSize + 1 ModuleSize = ModuleSize + 1
TotalLines(LastOpenSUB) = ModuleSize TotalLines(LastOpenSUB) = ModuleSize
i = INSTR(lSized$, CHR$(254))
IF i THEN 'check if it's there, but it *has* to be there.
num$ = LTRIM$(STR$(ModuleSize))
lSized$ = LEFT$(lSized$, i - LEN(num$)) + num$ + MID$(lSized$, i + 1)
END IF
SubClosed = -1 SubClosed = -1
RETURN RETURN
END FUNCTION END FUNCTION