mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 11:25:08 +00:00
Implements Bracket Highlighting
When the cursor is on a an open "(" or closing ")" bracket, the matching pair, to the left or right, will be highlighted (as seen in modern IDEs, like https://blogs.msdn.microsoft.com/zainnab/2010/09/07/automatic-delimiter-highlighting/) Also: - Overall visual adjustments. - Improved IDE Colors dialog (Options menu), which includes an option to disable bracket highlighting. - Adds Ctrl+S as a shortcut for File->Save. - Displays an * on the filename in the title bar below the menu bar when the source has been edited. - Fixes an old bug that would color strings incorrectly when the source view was scrolled to the right. - Enables block indent functionality in the Edit menu even when autoindent is on. - Allows the View SUBs dialog (F2) to be invoked while focus is on the quick search bar.
This commit is contained in:
parent
785521966e
commit
58199f7c22
3 changed files with 224 additions and 53 deletions
|
@ -90,10 +90,10 @@ IF LoadedIDESettings = 0 THEN
|
||||||
|
|
||||||
result = ReadConfigSetting("BackgroundColor2", value$)
|
result = ReadConfigSetting("BackgroundColor2", value$)
|
||||||
IF result THEN
|
IF result THEN
|
||||||
IDEBackGroundColor2 = VRGBS(value$, _RGB32(0, 0, 128))
|
IDEBackGroundColor2 = VRGBS(value$, _RGB32(0, 108, 177))
|
||||||
ELSE
|
ELSE
|
||||||
IDEBackGroundColor2 = _RGB32(0, 0, 128)
|
IDEBackGroundColor2 = _RGB32(0, 108, 177)
|
||||||
WriteConfigSetting "'[IDE COLOR SETTINGS]", "BackgroundColor2", "_RGB32(0,0,128)"
|
WriteConfigSetting "'[IDE COLOR SETTINGS]", "BackgroundColor2", "_RGB32(0,108,177)"
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
result = ReadConfigSetting("SwapMouseButton", value$)
|
result = ReadConfigSetting("SwapMouseButton", value$)
|
||||||
|
@ -131,6 +131,19 @@ IF LoadedIDESettings = 0 THEN
|
||||||
SaveExeWithSource = 0
|
SaveExeWithSource = 0
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
result = ReadConfigSetting("BracketHighlight", value$)
|
||||||
|
IF result THEN
|
||||||
|
IF value$ = "TRUE" OR VAL(value$) = -1 THEN
|
||||||
|
brackethighlight = -1
|
||||||
|
ELSE
|
||||||
|
brackethighlight = 0
|
||||||
|
WriteConfigSetting "'[GENERAL SETTINGS]", "BracketHighlight", "FALSE"
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
WriteConfigSetting "'[GENERAL SETTINGS]", "BracketHighlight", "TRUE"
|
||||||
|
brackethighlight = -1
|
||||||
|
END IF
|
||||||
|
|
||||||
IF INSTR(_OS$, "WIN") THEN
|
IF INSTR(_OS$, "WIN") THEN
|
||||||
result = ReadConfigSetting("IDE_AutoPosition", value$)
|
result = ReadConfigSetting("IDE_AutoPosition", value$)
|
||||||
IF result THEN
|
IF result THEN
|
||||||
|
|
|
@ -195,7 +195,7 @@ DIM SHARED menusize(1 TO 10)
|
||||||
DIM SHARED menus AS INTEGER, idecontextualmenuID AS INTEGER
|
DIM SHARED menus AS INTEGER, idecontextualmenuID AS INTEGER
|
||||||
DIM SHARED ideeditmenuID AS INTEGER
|
DIM SHARED ideeditmenuID AS INTEGER
|
||||||
DIM SHARED OptionsMenuID AS INTEGER, OptionsMenuSwapMouse AS INTEGER, OptionsMenuPasteCursor AS INTEGER
|
DIM SHARED OptionsMenuID AS INTEGER, OptionsMenuSwapMouse AS INTEGER, OptionsMenuPasteCursor AS INTEGER
|
||||||
DIM SHARED RunMenuID AS INTEGER, RunMenuSaveExeWithSource AS INTEGER
|
DIM SHARED RunMenuID AS INTEGER, RunMenuSaveExeWithSource AS INTEGER, brackethighlight AS INTEGER
|
||||||
DIM SHARED menubar$, idecontextualSearch$
|
DIM SHARED menubar$, idecontextualSearch$
|
||||||
DIM SHARED ideundocombo, ideundocombochr, idenoundo, idemergeundo
|
DIM SHARED ideundocombo, ideundocombochr, idenoundo, idemergeundo
|
||||||
DIM SHARED idealthighlight, ideentermenu
|
DIM SHARED idealthighlight, ideentermenu
|
||||||
|
|
|
@ -188,7 +188,9 @@ FUNCTION ide2 (ignore)
|
||||||
LOCATE idewy - 3, 2
|
LOCATE idewy - 3, 2
|
||||||
|
|
||||||
DarkenFGBG -1
|
DarkenFGBG -1
|
||||||
COLOR 5
|
BkpIdeSystem = IdeSystem: IdeSystem = 2: GOSUB UpdateTitleOfMainWindow: IdeSystem = BkpIdeSystem
|
||||||
|
COLOR 1, 7: LOCATE idewy - 4, (idewx - 8) / 2: PRINT " Status "
|
||||||
|
COLOR 5, 1
|
||||||
|
|
||||||
IF os$ = "LNX" THEN
|
IF os$ = "LNX" THEN
|
||||||
PRINT "Creating executable file named " + CHR$(34) + f$ + extension$ + CHR$(34) + "..."
|
PRINT "Creating executable file named " + CHR$(34) + f$ + extension$ + CHR$(34) + "..."
|
||||||
|
@ -403,8 +405,6 @@ FUNCTION ide2 (ignore)
|
||||||
COLOR 7, 0: LOCATE idewy, idewx - 3: PRINT CHR$(180) + "X" + CHR$(195);
|
COLOR 7, 0: LOCATE idewy, idewx - 3: PRINT CHR$(180) + "X" + CHR$(195);
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
'add status title
|
|
||||||
COLOR 7, 1: LOCATE idewy - 4, (idewx - 8) / 2: PRINT " Status "
|
|
||||||
'status bar
|
'status bar
|
||||||
COLOR 0, 3: LOCATE idewy + idesubwindow, 1: PRINT SPACE$(idewx);
|
COLOR 0, 3: LOCATE idewy + idesubwindow, 1: PRINT SPACE$(idewx);
|
||||||
q = idevbar(idewx, idewy - 3, 3, 1, 1)
|
q = idevbar(idewx, idewy - 3, 3, 1, 1)
|
||||||
|
@ -1346,11 +1346,15 @@ FUNCTION ide2 (ignore)
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
DarkenFGBG -1
|
DarkenFGBG -1
|
||||||
COLOR 5
|
BkpIdeSystem = IdeSystem: IdeSystem = 2: GOSUB UpdateTitleOfMainWindow: IdeSystem = BkpIdeSystem
|
||||||
|
COLOR 1, 7: LOCATE idewy - 4, (idewx - 8) / 2: PRINT " Status "
|
||||||
|
COLOR 5, 1
|
||||||
LOCATE idewy - 3, 2: PRINT "Starting program...";
|
LOCATE idewy - 3, 2: PRINT "Starting program...";
|
||||||
ELSE
|
ELSE
|
||||||
DarkenFGBG -1
|
DarkenFGBG -1
|
||||||
COLOR 5
|
BkpIdeSystem = IdeSystem: IdeSystem = 2: GOSUB UpdateTitleOfMainWindow: IdeSystem = BkpIdeSystem
|
||||||
|
COLOR 1, 7: LOCATE idewy - 4, (idewx - 8) / 2: PRINT " Status "
|
||||||
|
COLOR 5, 1
|
||||||
IF os$ = "LNX" THEN
|
IF os$ = "LNX" THEN
|
||||||
LOCATE idewy - 3, 2: PRINT "Creating executable file...";
|
LOCATE idewy - 3, 2: PRINT "Creating executable file...";
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -1794,6 +1798,11 @@ FUNCTION ide2 (ignore)
|
||||||
idefindtext = a$
|
idefindtext = a$
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
IF K$ = CHR$(0) + CHR$(60) THEN 'F2
|
||||||
|
IdeSystem = 1
|
||||||
|
GOTO idesubsjmp
|
||||||
|
END IF
|
||||||
|
|
||||||
IF K$ = CHR$(0) + "S" THEN 'DEL
|
IF K$ = CHR$(0) + "S" THEN 'DEL
|
||||||
IF idesystem2.issel THEN
|
IF idesystem2.issel THEN
|
||||||
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
@ -2710,6 +2719,19 @@ FUNCTION ide2 (ignore)
|
||||||
GOTO specialchar
|
GOTO specialchar
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
IF KCONTROL AND UCASE$(K$) = "S" THEN 'File -> #Save
|
||||||
|
IF ideprogname = "" THEN
|
||||||
|
ProposedTitle$ = FindProposedTitle$
|
||||||
|
IF ProposedTitle$ = "" THEN
|
||||||
|
a$ = idesaveas$("untitled" + tempfolderindexstr$ + ".bas")
|
||||||
|
ELSE
|
||||||
|
a$ = idesaveas$(ProposedTitle$ + ".bas")
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
idesave idepath$ + idepathsep$ + ideprogname$
|
||||||
|
END IF
|
||||||
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt: GOTO ideloop
|
||||||
|
END IF
|
||||||
|
|
||||||
IF K$ = CHR$(0) + CHR$(60) THEN 'F2
|
IF K$ = CHR$(0) + CHR$(60) THEN 'F2
|
||||||
GOTO idesubsjmp
|
GOTO idesubsjmp
|
||||||
|
@ -3198,6 +3220,7 @@ FUNCTION ide2 (ignore)
|
||||||
IF K$ = CHR$(13) THEN
|
IF K$ = CHR$(13) THEN
|
||||||
IF KSHIFT THEN
|
IF KSHIFT THEN
|
||||||
IF EnteringRGB THEN 'The "Hit Shift+ENTER" message is being shown
|
IF EnteringRGB THEN 'The "Hit Shift+ENTER" message is being shown
|
||||||
|
HideBracketHighlight
|
||||||
retval$ = idecolorpicker$(0)
|
retval$ = idecolorpicker$(0)
|
||||||
ELSE
|
ELSE
|
||||||
IF ideselect THEN
|
IF ideselect THEN
|
||||||
|
@ -3210,7 +3233,10 @@ FUNCTION ide2 (ignore)
|
||||||
Found_RGB = Found_RGB + INSTR(UCASE$(a$), "_RGB32(")
|
Found_RGB = Found_RGB + INSTR(UCASE$(a$), "_RGB32(")
|
||||||
Found_RGB = Found_RGB + INSTR(UCASE$(a$), "_RGBA(")
|
Found_RGB = Found_RGB + INSTR(UCASE$(a$), "_RGBA(")
|
||||||
Found_RGB = Found_RGB + INSTR(UCASE$(a$), "_RGBA32(")
|
Found_RGB = Found_RGB + INSTR(UCASE$(a$), "_RGBA32(")
|
||||||
IF Found_RGB THEN retval$ = idecolorpicker$(-1)
|
IF Found_RGB THEN
|
||||||
|
HideBracketHighlight
|
||||||
|
retval$ = idecolorpicker$(-1)
|
||||||
|
END IF
|
||||||
END IF
|
END IF
|
||||||
GOTO specialchar
|
GOTO specialchar
|
||||||
ELSE
|
ELSE
|
||||||
|
@ -3936,22 +3962,20 @@ FUNCTION ide2 (ignore)
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF menu$(m, s) = "Increase indent TAB" THEN
|
IF menu$(m, s) = "Increase indent TAB" THEN
|
||||||
IF ideselect AND ideautoindent = 0 THEN GOTO IdeBlockIncreaseIndent
|
IF ideselect THEN GOTO IdeBlockIncreaseIndent
|
||||||
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||||
|
GOTO ideloop
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF LEFT$(menu$(m, s), 15) = "Decrease indent" THEN
|
IF LEFT$(menu$(m, s), 15) = "Decrease indent" THEN
|
||||||
IF ideselect AND ideautoindent = 0 THEN GOTO IdeBlockDecreaseIndent
|
IF ideselect THEN GOTO IdeBlockDecreaseIndent
|
||||||
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||||
|
GOTO ideloop
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF LEFT$(menu$(m, s), 16) = "~Decrease indent" OR menu$(m, s) = "~Increase indent TAB" THEN
|
IF LEFT$(menu$(m, s), 16) = "~Decrease indent" OR menu$(m, s) = "~Increase indent TAB" THEN
|
||||||
IF ideautoindent <> 0 THEN
|
|
||||||
ideerrormessage "Not available when auto indent is active (Options/Code Layout)."
|
|
||||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||||
GOTO ideloop
|
GOTO ideloop
|
||||||
ELSE
|
|
||||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
|
||||||
GOTO ideloop
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF menu$(m, s) = "#Language..." THEN
|
IF menu$(m, s) = "#Language..." THEN
|
||||||
|
@ -3991,6 +4015,7 @@ FUNCTION ide2 (ignore)
|
||||||
|
|
||||||
IF menu$(m, s) = "IDE C#olors..." THEN
|
IF menu$(m, s) = "IDE C#olors..." THEN
|
||||||
PCOPY 2, 0
|
PCOPY 2, 0
|
||||||
|
HideBracketHighlight
|
||||||
retval = idechoosecolorsbox 'retval is ignored
|
retval = idechoosecolorsbox 'retval is ignored
|
||||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||||
GOTO ideloop
|
GOTO ideloop
|
||||||
|
@ -3998,6 +4023,7 @@ FUNCTION ide2 (ignore)
|
||||||
|
|
||||||
IF menu$(m, s) = "Open _RGB color mi#xer" THEN
|
IF menu$(m, s) = "Open _RGB color mi#xer" THEN
|
||||||
PCOPY 2, 0
|
PCOPY 2, 0
|
||||||
|
HideBracketHighlight
|
||||||
retval$ = idecolorpicker$(-1) 'retval is ignored
|
retval$ = idecolorpicker$(-1) 'retval is ignored
|
||||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||||
GOTO ideloop
|
GOTO ideloop
|
||||||
|
@ -4764,7 +4790,7 @@ FUNCTION ide2 (ignore)
|
||||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt: GOTO ideloop
|
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt: GOTO ideloop
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF menu$(m, s) = "#Save" THEN
|
IF menu$(m, s) = "#Save Ctrl+S" THEN
|
||||||
PCOPY 2, 0
|
PCOPY 2, 0
|
||||||
IF ideprogname = "" THEN
|
IF ideprogname = "" THEN
|
||||||
ProposedTitle$ = FindProposedTitle$
|
ProposedTitle$ = FindProposedTitle$
|
||||||
|
@ -4815,6 +4841,7 @@ FUNCTION ide2 (ignore)
|
||||||
COLOR 7, 1: LOCATE 2, 2: PRINT STRING$(idewx - 2, CHR$(196));
|
COLOR 7, 1: LOCATE 2, 2: PRINT STRING$(idewx - 2, CHR$(196));
|
||||||
IF LEN(ideprogname) THEN a$ = ideprogname ELSE a$ = "Untitled" + tempfolderindexstr$
|
IF LEN(ideprogname) THEN a$ = ideprogname ELSE a$ = "Untitled" + tempfolderindexstr$
|
||||||
a$ = " " + a$
|
a$ = " " + a$
|
||||||
|
IF ideunsaved THEN a$ = a$ + "*"
|
||||||
IF LEN(sfname$) > 0 THEN a$ = a$ + ":" + sfname$
|
IF LEN(sfname$) > 0 THEN a$ = a$ + ":" + sfname$
|
||||||
a$ = a$ + " "
|
a$ = a$ + " "
|
||||||
IF LEN(a$) > idewx - 5 THEN a$ = LEFT$(a$, idewx - 11) + STRING$(3, 250) + " "
|
IF LEN(a$) > idewx - 5 THEN a$ = LEFT$(a$, idewx - 11) + STRING$(3, 250) + " "
|
||||||
|
@ -4837,12 +4864,15 @@ FUNCTION ide2 (ignore)
|
||||||
UpdateSearchBar:
|
UpdateSearchBar:
|
||||||
LOCATE idewy - 4, idewx - (idesystem2.w + 10)
|
LOCATE idewy - 4, idewx - (idesystem2.w + 10)
|
||||||
COLOR 7, 1: PRINT CHR$(180);
|
COLOR 7, 1: PRINT CHR$(180);
|
||||||
IF IdeSystem = 2 THEN COLOR 1, 3 ELSE COLOR 3, 1
|
|
||||||
PRINT "Find";
|
|
||||||
COLOR 3, 1
|
COLOR 3, 1
|
||||||
|
PRINT "Find";
|
||||||
PRINT "[" + SPACE$(idesystem2.w + 1) + CHR$(18) + "]";
|
PRINT "[" + SPACE$(idesystem2.w + 1) + CHR$(18) + "]";
|
||||||
COLOR 7, 1: PRINT CHR$(195);
|
COLOR 7, 1: PRINT CHR$(195);
|
||||||
|
|
||||||
|
'add status title
|
||||||
|
IF IdeSystem = 2 THEN COLOR 1, 7 ELSE COLOR 7, 1
|
||||||
|
LOCATE idewy - 4, (idewx - 8) / 2: PRINT " Status "
|
||||||
|
|
||||||
a$ = idefindtext
|
a$ = idefindtext
|
||||||
tx = 1
|
tx = 1
|
||||||
IF LEN(a$) > idesystem2.w THEN
|
IF LEN(a$) > idesystem2.w THEN
|
||||||
|
@ -7577,6 +7607,14 @@ SUB ideshowtext
|
||||||
_PALETTECOLOR 14, IDEQuoteColor, 0
|
_PALETTECOLOR 14, IDEQuoteColor, 0
|
||||||
_PALETTECOLOR 13, IDETextColor, 0
|
_PALETTECOLOR 13, IDETextColor, 0
|
||||||
|
|
||||||
|
Bracket.r& = _RED32(IDEBackgroundColor2) * 2
|
||||||
|
Bracket.g& = _GREEN32(IDEBackgroundColor2) * 2
|
||||||
|
Bracket.b& = _BLUE32(IDEBackgroundColor2) * 2
|
||||||
|
_PALETTECOLOR 5, _RGB32(Bracket.r&, Bracket.g&, Bracket.b&), 0
|
||||||
|
|
||||||
|
BracketFG% = 10
|
||||||
|
IF (Bracket.r& + Bracket.g& + Bracket.b&) / 3 > 127 THEN BracketFG% = 1
|
||||||
|
|
||||||
cc = -1
|
cc = -1
|
||||||
|
|
||||||
IF idecx < idesx THEN idesx = idecx
|
IF idecx < idesx THEN idesx = idecx
|
||||||
|
@ -7662,6 +7700,77 @@ SUB ideshowtext
|
||||||
END SELECT
|
END SELECT
|
||||||
NEXT k
|
NEXT k
|
||||||
|
|
||||||
|
'Check if we're on a bracket, to highlight it and its match
|
||||||
|
brackets = 0
|
||||||
|
bracket1 = 0
|
||||||
|
bracket2 = 0
|
||||||
|
IF idecx_comment + idecx_quote = 0 AND brackethighlight = -1 THEN
|
||||||
|
inquote = 0
|
||||||
|
comment = 0
|
||||||
|
IF MID$(a$, idecx, 1) = "(" THEN
|
||||||
|
brackets = 1
|
||||||
|
bracket1 = idecx
|
||||||
|
ScanBracket2:
|
||||||
|
FOR k = bracket1 + 1 TO LEN(a$)
|
||||||
|
SELECT CASE MID$(a$, k, 1)
|
||||||
|
CASE CHR$(34)
|
||||||
|
inquote = NOT inquote
|
||||||
|
CASE "'"
|
||||||
|
IF inquote = 0 THEN comment = -1: EXIT FOR
|
||||||
|
END SELECT
|
||||||
|
IF MID$(a$, k, 1) = ")" AND inquote = 0 THEN
|
||||||
|
brackets = brackets - 1
|
||||||
|
IF brackets = 0 THEN bracket2 = k: EXIT FOR
|
||||||
|
ELSEIF MID$(a$, k, 1) = "(" AND inquote = 0 THEN
|
||||||
|
brackets = brackets + 1
|
||||||
|
END IF
|
||||||
|
NEXT
|
||||||
|
ELSEIF MID$(a$, idecx - 1, 1) = "(" AND MID$(a$, idecx, 1) <> CHR$(34) THEN
|
||||||
|
brackets = 1
|
||||||
|
bracket1 = idecx - 1
|
||||||
|
GOTO ScanBracket2
|
||||||
|
ELSEIF MID$(a$, idecx, 1) = ")" THEN
|
||||||
|
brackets = 1
|
||||||
|
bracket2 = idecx
|
||||||
|
ScanBracket1:
|
||||||
|
FOR k = bracket2 - 1 TO 1 STEP -1
|
||||||
|
SELECT CASE MID$(a$, k, 1)
|
||||||
|
CASE CHR$(34)
|
||||||
|
inquote = NOT inquote
|
||||||
|
END SELECT
|
||||||
|
IF MID$(a$, k, 1) = "(" AND inquote = 0 THEN
|
||||||
|
brackets = brackets - 1
|
||||||
|
IF brackets = 0 THEN bracket1 = k: EXIT FOR
|
||||||
|
ELSEIF MID$(a$, k, 1) = ")" AND inquote = 0 THEN
|
||||||
|
brackets = brackets + 1
|
||||||
|
END IF
|
||||||
|
NEXT
|
||||||
|
ELSEIF MID$(a$, idecx - 1, 1) = ")" AND MID$(a$, idecx, 1) <> CHR$(34) THEN
|
||||||
|
brackets = 1
|
||||||
|
bracket2 = idecx - 1
|
||||||
|
GOTO ScanBracket1
|
||||||
|
ELSE
|
||||||
|
'Maybe there isn't an open bracket immediately to our left,
|
||||||
|
'but maybe we're typing a line and there's an orphan open
|
||||||
|
'bracket to our left, somewhere. It'll be highlighted until closed.
|
||||||
|
brackets = 1
|
||||||
|
IF idecx >= LEN(a$) + 1 THEN
|
||||||
|
FOR k = idecx - 1 TO 1 STEP -1
|
||||||
|
SELECT CASE MID$(a$, k, 1)
|
||||||
|
CASE CHR$(34)
|
||||||
|
inquote = NOT inquote
|
||||||
|
END SELECT
|
||||||
|
IF MID$(a$, k, 1) = "(" AND inquote = 0 THEN
|
||||||
|
brackets = brackets - 1
|
||||||
|
IF brackets = 0 THEN bracket1 = k: EXIT FOR
|
||||||
|
ELSEIF MID$(a$, k, 1) = ")" AND inquote = 0 THEN
|
||||||
|
brackets = brackets + 1
|
||||||
|
END IF
|
||||||
|
NEXT
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
|
||||||
'If the user is typing on the current line and has just inserted
|
'If the user is typing on the current line and has just inserted
|
||||||
'an _RGB(, _RGB32(, _RGBA( or _RGBA32(, we'll offer the RGB
|
'an _RGB(, _RGB32(, _RGBA( or _RGBA32(, we'll offer the RGB
|
||||||
'color mixer.
|
'color mixer.
|
||||||
|
@ -7700,7 +7809,7 @@ SUB ideshowtext
|
||||||
inquote = 0
|
inquote = 0
|
||||||
comment = 0
|
comment = 0
|
||||||
metacommand = 0
|
metacommand = 0
|
||||||
FOR k = 1 TO idesx 'First check the part of the line that's off screen to the left
|
FOR k = 1 TO idesx - 1 'First check the part of the line that's off screen to the left
|
||||||
SELECT CASE MID$(a$, k, 1)
|
SELECT CASE MID$(a$, k, 1)
|
||||||
CASE CHR$(34)
|
CASE CHR$(34)
|
||||||
inquote = NOT inquote
|
inquote = NOT inquote
|
||||||
|
@ -7709,10 +7818,12 @@ SUB ideshowtext
|
||||||
END SELECT
|
END SELECT
|
||||||
NEXT k
|
NEXT k
|
||||||
FOR m = 1 TO LEN(a2$) 'continue checking, while printing to the screen
|
FOR m = 1 TO LEN(a2$) 'continue checking, while printing to the screen
|
||||||
|
IF comment = 0 THEN
|
||||||
SELECT CASE MID$(a$, m + idesx - 1, 1)
|
SELECT CASE MID$(a$, m + idesx - 1, 1)
|
||||||
CASE CHR$(34): inquote = NOT inquote
|
CASE CHR$(34): inquote = NOT inquote
|
||||||
CASE "'": IF inquote = 0 THEN comment = -1
|
CASE "'": IF inquote = 0 THEN comment = -1
|
||||||
END SELECT
|
END SELECT
|
||||||
|
END IF
|
||||||
IF LEFT$(LTRIM$(a$), 2) = "'$" OR LEFT$(LTRIM$(a$), 1) = "$" THEN metacommand = -1: comment = 0
|
IF LEFT$(LTRIM$(a$), 2) = "'$" OR LEFT$(LTRIM$(a$), 1) = "$" THEN metacommand = -1: comment = 0
|
||||||
COLOR 13
|
COLOR 13
|
||||||
|
|
||||||
|
@ -7723,6 +7834,11 @@ SUB ideshowtext
|
||||||
ELSEIF inquote OR MID$(a2$, m, 1) = CHR$(34) THEN
|
ELSEIF inquote OR MID$(a2$, m, 1) = CHR$(34) THEN
|
||||||
COLOR 14
|
COLOR 14
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
IF l = idecy AND (m + idesx - 1 = bracket1 OR m + idesx - 1 = bracket2) THEN
|
||||||
|
COLOR BracketFG%, 5
|
||||||
|
END IF
|
||||||
|
|
||||||
DO UNTIL l < UBOUND(InValidLine) 'make certain we have enough InValidLine elements to cover us in case someone scrolls QB64
|
DO UNTIL l < UBOUND(InValidLine) 'make certain we have enough InValidLine elements to cover us in case someone scrolls QB64
|
||||||
REDIM _PRESERVE InValidLine(UBOUND(InValidLine) + 1000) AS _BIT ' to the end of a program before the IDE has finished
|
REDIM _PRESERVE InValidLine(UBOUND(InValidLine) + 1000) AS _BIT ' to the end of a program before the IDE has finished
|
||||||
LOOP ' verifying the code and growing the array during the IDE passes.
|
LOOP ' verifying the code and growing the array during the IDE passes.
|
||||||
|
@ -7730,6 +7846,9 @@ SUB ideshowtext
|
||||||
|
|
||||||
LOCATE y + 3, 2 + m - 1
|
LOCATE y + 3, 2 + m - 1
|
||||||
PRINT MID$(a2$, m, 1);
|
PRINT MID$(a2$, m, 1);
|
||||||
|
|
||||||
|
'Restore BG color in case a matching bracket was printed with different BG
|
||||||
|
IF l = idecy THEN COLOR , 6
|
||||||
NEXT m
|
NEXT m
|
||||||
|
|
||||||
'### END OF STEVE EDIT
|
'### END OF STEVE EDIT
|
||||||
|
@ -10848,7 +10967,7 @@ FUNCTION idechoosecolorsbox
|
||||||
_PALETTECOLOR 5, &HFF00A800, 0 'Original green may have been changed by the Help System, so 5 is now green
|
_PALETTECOLOR 5, &HFF00A800, 0 'Original green may have been changed by the Help System, so 5 is now green
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
idepar p, 70, 13, "IDE Colors"
|
idepar p, 70, 14, "IDE Colors"
|
||||||
|
|
||||||
l$ = CHR$(16) + "Normal Text"
|
l$ = CHR$(16) + "Normal Text"
|
||||||
l$ = l$ + sep + " Strings"
|
l$ = l$ + sep + " Strings"
|
||||||
|
@ -10897,9 +11016,15 @@ FUNCTION idechoosecolorsbox
|
||||||
o(i).issel = -1
|
o(i).issel = -1
|
||||||
o(i).sx1 = 0
|
o(i).sx1 = 0
|
||||||
|
|
||||||
|
i = i + 1
|
||||||
|
o(i).typ = 4 'check box
|
||||||
|
o(i).y = 11
|
||||||
|
o(i).nam = idenewtxt("#Highlight brackets")
|
||||||
|
IF brackethighlight THEN o(i).sel = 1
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
o(i).typ = 3
|
o(i).typ = 3
|
||||||
o(i).y = 13
|
o(i).y = 14
|
||||||
o(i).txt = idenewtxt("#OK" + sep + "Restore #defaults" + sep + "#Cancel")
|
o(i).txt = idenewtxt("#OK" + sep + "Restore #defaults" + sep + "#Cancel")
|
||||||
o(i).dft = 1
|
o(i).dft = 1
|
||||||
'-------- end of init --------
|
'-------- end of init --------
|
||||||
|
@ -10958,16 +11083,25 @@ FUNCTION idechoosecolorsbox
|
||||||
IF T = 255 THEN slider$ = CHR$(180)
|
IF T = 255 THEN slider$ = CHR$(180)
|
||||||
LOCATE p.y + 8, p.x + 35 + r: PRINT slider$;
|
LOCATE p.y + 8, p.x + 35 + r: PRINT slider$;
|
||||||
|
|
||||||
|
COLOR 7, 1
|
||||||
|
LOCATE p.y + 10, p.x + 36: PRINT CHR$(218); STRING$(25, 196);
|
||||||
|
LOCATE p.y + 11, p.x + 36: PRINT CHR$(179); SPACE$(25);
|
||||||
|
LOCATE p.y + 12, p.x + 36: PRINT CHR$(179); SPACE$(25);
|
||||||
|
|
||||||
SELECT CASE SelectedITEM
|
SELECT CASE SelectedITEM
|
||||||
CASE 1: COLOR 13, 1 'Normal text
|
CASE 1: COLOR 13, 1: SampleText$ = "CLS: PRINT a$" 'Normal text
|
||||||
CASE 2: COLOR 14, 1 'Strings
|
CASE 2: COLOR 14, 1: SampleText$ = SPACE$(6) + CHR$(34) + "Hello, world!" + CHR$(34) 'Strings
|
||||||
CASE 3: COLOR 10, 1 'Metacommands
|
CASE 3: COLOR 10, 1: SampleText$ = "'$DYNAMIC" 'Metacommands
|
||||||
CASE 4: COLOR 11, 1 'Comments
|
CASE 4: COLOR 11, 1: SampleText$ = "'TODO: review this block" 'Comments
|
||||||
CASE 5: COLOR 1, 1 'Background
|
CASE 5: COLOR 1, 1: SampleText$ = "" 'Background
|
||||||
CASE 6: COLOR 6, 6 'Current line background
|
CASE 6: COLOR 6, 6: SampleText$ = SPACE$(25) 'Current line background
|
||||||
END SELECT
|
END SELECT
|
||||||
|
|
||||||
LOCATE p.y + 11, p.x + p.w \ 2 - 17: PRINT " Enter new RGB values for the item ";
|
LOCATE p.y + 11, p.x + 37: PRINT SampleText$;
|
||||||
|
IF SelectedITEM = 2 THEN
|
||||||
|
COLOR 13, 1
|
||||||
|
LOCATE p.y + 11, p.x + 37: PRINT "PRINT";
|
||||||
|
END IF
|
||||||
'-------- end of custom display changes --------
|
'-------- end of custom display changes --------
|
||||||
|
|
||||||
'update visual page and cursor position
|
'update visual page and cursor position
|
||||||
|
@ -11168,7 +11302,7 @@ FUNCTION idechoosecolorsbox
|
||||||
CASE 6: IDEBackgroundColor2 = CurrentColor~& 'Current line background
|
CASE 6: IDEBackgroundColor2 = CurrentColor~& 'Current line background
|
||||||
END SELECT
|
END SELECT
|
||||||
|
|
||||||
IF K$ = CHR$(27) OR (focus = 7 AND info <> 0) THEN
|
IF K$ = CHR$(27) OR (focus = 8 AND info <> 0) THEN
|
||||||
IDECommentColor = bkpIDECommentColor
|
IDECommentColor = bkpIDECommentColor
|
||||||
IDEMetaCommandColor = bkpIDEMetaCommandColor
|
IDEMetaCommandColor = bkpIDEMetaCommandColor
|
||||||
IDEQuoteColor = bkpIDEQuoteColor
|
IDEQuoteColor = bkpIDEQuoteColor
|
||||||
|
@ -11178,23 +11312,24 @@ FUNCTION idechoosecolorsbox
|
||||||
EXIT FUNCTION
|
EXIT FUNCTION
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF (focus = 6 AND info <> 0) THEN
|
IF (focus = 7 AND info <> 0) THEN
|
||||||
IDECommentColor = _RGB32(85, 255, 255)
|
IDECommentColor = _RGB32(85, 255, 255)
|
||||||
IDEMetaCommandColor = _RGB32(85, 255, 85)
|
IDEMetaCommandColor = _RGB32(85, 255, 85)
|
||||||
IDEQuoteColor = _RGB32(255, 255, 85)
|
IDEQuoteColor = _RGB32(255, 255, 85)
|
||||||
IDETextColor = _RGB32(255, 255, 255)
|
IDETextColor = _RGB32(255, 255, 255)
|
||||||
IDEBackgroundColor = _RGB32(0, 0, 170)
|
IDEBackgroundColor = _RGB32(0, 0, 170)
|
||||||
IDEBackgroundColor2 = _RGB32(0, 0, 128)
|
IDEBackgroundColor2 = _RGB32(0, 108, 177)
|
||||||
info = 0
|
info = 0
|
||||||
GOTO ChangeTextBoxes
|
GOTO ChangeTextBoxes
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF (focus = 5 AND info <> 0) OR _
|
IF (focus = 6 AND info <> 0) OR _
|
||||||
(focus = 1 AND K$ = CHR$(13)) OR _
|
(focus = 1 AND K$ = CHR$(13)) OR _
|
||||||
(focus = 2 AND K$ = CHR$(13)) OR _
|
(focus = 2 AND K$ = CHR$(13)) OR _
|
||||||
(focus = 3 AND K$ = CHR$(13)) OR _
|
(focus = 3 AND K$ = CHR$(13)) OR _
|
||||||
(focus = 4 AND K$ = CHR$(13)) OR _
|
(focus = 4 AND K$ = CHR$(13)) OR _
|
||||||
(focus = 5 AND K$ = CHR$(13)) THEN
|
(focus = 5 AND K$ = CHR$(13)) OR _
|
||||||
|
(focus = 6 AND K$ = CHR$(13)) THEN
|
||||||
'save changes
|
'save changes
|
||||||
FOR i = 1 TO 6
|
FOR i = 1 TO 6
|
||||||
SELECT CASE i
|
SELECT CASE i
|
||||||
|
@ -11212,6 +11347,17 @@ FUNCTION idechoosecolorsbox
|
||||||
RGBString$ = "_RGB32(" + r$ + "," + g$ + "," + b$ + ")"
|
RGBString$ = "_RGB32(" + r$ + "," + g$ + "," + b$ + ")"
|
||||||
WriteConfigSetting "'[IDE COLOR SETTINGS]", colorid$, RGBString$
|
WriteConfigSetting "'[IDE COLOR SETTINGS]", colorid$, RGBString$
|
||||||
NEXT i
|
NEXT i
|
||||||
|
|
||||||
|
v% = o(5).sel
|
||||||
|
IF v% <> 0 THEN v% = -1
|
||||||
|
brackethighlight = v%
|
||||||
|
|
||||||
|
IF brackethighlight THEN
|
||||||
|
WriteConfigSetting "'[GENERAL SETTINGS]", "BracketHighlight", "TRUE"
|
||||||
|
ELSE
|
||||||
|
WriteConfigSetting "'[GENERAL SETTINGS]", "BracketHighlight", "FALSE"
|
||||||
|
END IF
|
||||||
|
|
||||||
EXIT FUNCTION
|
EXIT FUNCTION
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
@ -12292,7 +12438,7 @@ SUB IdeMakeFileMenu
|
||||||
menu$(m, i) = "File": i = i + 1
|
menu$(m, i) = "File": i = i + 1
|
||||||
menu$(m, i) = "#New": i = i + 1
|
menu$(m, i) = "#New": i = i + 1
|
||||||
menu$(m, i) = "#Open...": i = i + 1
|
menu$(m, i) = "#Open...": i = i + 1
|
||||||
menu$(m, i) = "#Save": i = i + 1
|
menu$(m, i) = "#Save Ctrl+S": i = i + 1
|
||||||
menu$(m, i) = "Save #As...": i = i + 1
|
menu$(m, i) = "Save #As...": i = i + 1
|
||||||
fh = FREEFILE
|
fh = FREEFILE
|
||||||
OPEN ".\internal\temp\recent.bin" FOR BINARY AS #fh: a$ = SPACE$(LOF(fh)): GET #fh, , a$
|
OPEN ".\internal\temp\recent.bin" FOR BINARY AS #fh: a$ = SPACE$(LOF(fh)): GET #fh, , a$
|
||||||
|
@ -12541,7 +12687,7 @@ SUB IdeMakeContextualMenu
|
||||||
menu$(m, i) = "-": i = i + 1
|
menu$(m, i) = "-": i = i + 1
|
||||||
menu$(m, i) = "Comment (add ')": i = i + 1
|
menu$(m, i) = "Comment (add ')": i = i + 1
|
||||||
menu$(m, i) = "Uncomment (remove ')": i = i + 1
|
menu$(m, i) = "Uncomment (remove ')": i = i + 1
|
||||||
IF ideselect AND ideautoindent = 0 THEN
|
IF ideselect THEN
|
||||||
y1 = idecy
|
y1 = idecy
|
||||||
y2 = ideselecty1
|
y2 = ideselecty1
|
||||||
IF y1 = y2 THEN 'single line selected
|
IF y1 = y2 THEN 'single line selected
|
||||||
|
@ -12607,7 +12753,7 @@ SUB IdeMakeEditMenu
|
||||||
menu$(m, i) = "-": i = i + 1
|
menu$(m, i) = "-": i = i + 1
|
||||||
menu$(m, i) = "Comment (add ')": i = i + 1
|
menu$(m, i) = "Comment (add ')": i = i + 1
|
||||||
menu$(m, i) = "Uncomment (remove ')": i = i + 1
|
menu$(m, i) = "Uncomment (remove ')": i = i + 1
|
||||||
IF ideselect AND ideautoindent = 0 THEN
|
IF ideselect THEN
|
||||||
y1 = idecy
|
y1 = idecy
|
||||||
y2 = ideselecty1
|
y2 = ideselecty1
|
||||||
IF y1 = y2 THEN 'single line selected
|
IF y1 = y2 THEN 'single line selected
|
||||||
|
@ -13596,5 +13742,17 @@ SUB DarkenFGBG (Action AS _BYTE)
|
||||||
END IF
|
END IF
|
||||||
END SUB
|
END SUB
|
||||||
|
|
||||||
|
SUB HideBracketHighlight
|
||||||
|
'Restore the screen and hide any bracket highlights
|
||||||
|
'as we're limited to 16 colors and the highlight
|
||||||
|
'color will be used differently in this dialog.
|
||||||
|
IF brackethighlight THEN
|
||||||
|
brackethighlight = 0
|
||||||
|
SCREEN , , 0
|
||||||
|
ideshowtext
|
||||||
|
brackethighlight = -1
|
||||||
|
END IF
|
||||||
|
END SUB
|
||||||
|
|
||||||
'$INCLUDE:'wiki\wiki_methods.bas'
|
'$INCLUDE:'wiki\wiki_methods.bas'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue