mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-07-01 12:40:36 +00:00
Add extended textbox functionality to the quick search field.
This commit is contained in:
parent
d4e17cede8
commit
26a66813bc
|
@ -104,6 +104,11 @@ END FUNCTION
|
||||||
|
|
||||||
FUNCTION ide2 (ignore)
|
FUNCTION ide2 (ignore)
|
||||||
STATIC MenuLocations as STRING
|
STATIC MenuLocations as STRING
|
||||||
|
STATIC idesystem2.issel AS _BYTE
|
||||||
|
STATIC idesystem2.sx1 AS LONG
|
||||||
|
STATIC idesystem2.v1 AS LONG
|
||||||
|
|
||||||
|
CONST idesystem2.w = 20
|
||||||
|
|
||||||
c$ = idecommand$
|
c$ = idecommand$
|
||||||
|
|
||||||
|
@ -118,8 +123,6 @@ IF ideerror THEN
|
||||||
END IF
|
END IF
|
||||||
ideerror = 1 'unknown IDE error
|
ideerror = 1 'unknown IDE error
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IF LEFT$(c$, 1) = CHR$(12) THEN
|
IF LEFT$(c$, 1) = CHR$(12) THEN
|
||||||
f$ = RIGHT$(c$, LEN(c$) - 1)
|
f$ = RIGHT$(c$, LEN(c$) - 1)
|
||||||
LOCATE , , 0
|
LOCATE , , 0
|
||||||
|
@ -756,16 +759,38 @@ DO
|
||||||
COLOR 1, 7: LOCATE 2, ((idewx / 2) - 1) - (LEN(a$) - 1) \ 2: PRINT a$;
|
COLOR 1, 7: LOCATE 2, ((idewx / 2) - 1) - (LEN(a$) - 1) \ 2: PRINT a$;
|
||||||
|
|
||||||
'update search bar
|
'update search bar
|
||||||
LOCATE idewy - 4, idewx - 30
|
LOCATE idewy - 4, idewx - (idesystem2.w + 10)
|
||||||
COLOR 7, 1: PRINT chr$(180);
|
COLOR 7, 1: PRINT chr$(180);
|
||||||
COLOR 3, 1: PRINT "Find[ " + chr$(18) + "]";
|
COLOR 3, 1: PRINT "Find[" + SPACE$(idesystem2.w + 1) + chr$(18) + "]";
|
||||||
COLOR 7, 1: PRINT chr$(195);
|
COLOR 7, 1: PRINT chr$(195);
|
||||||
f$ = idefindtext
|
|
||||||
IF LEN(f$) > 20 THEN
|
a$ = idefindtext
|
||||||
f$ = string$(3, 250) + RIGHT$(f$, 17)
|
tx = 1
|
||||||
|
IF LEN(a$) > idesystem2.w THEN
|
||||||
|
IF IdeSystem = 2 THEN
|
||||||
|
tx = idesystem2.v1 - idesystem2.w + 1
|
||||||
|
IF tx < 1 THEN tx = 1
|
||||||
|
a$ = MID$(a$, tx, idesystem2.w)
|
||||||
|
ELSE
|
||||||
|
a$ = LEFT$(a$, idesystem2.w)
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
|
||||||
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
if sx1 > sx2 then SWAP sx1, sx2
|
||||||
|
|
||||||
|
x = x + 2
|
||||||
|
'apply selection color change if necessary
|
||||||
|
IF idesystem2.issel = 0 or IdeSystem <> 2 THEN
|
||||||
|
COLOR 3, 1
|
||||||
|
LOCATE idewy - 4, idewx - (idesystem2.w + 8) + 4: PRINT a$;
|
||||||
|
ELSE
|
||||||
|
FOR ColorCHAR = 1 to len(a$)
|
||||||
|
if ColorCHAR + tx - 2 >= sx1 AND ColorCHAR + tx - 2 < sx2 THEN COLOR 1, 3 ELSE COLOR 3, 1
|
||||||
|
LOCATE idewy - 4, idewx - (idesystem2.w + 8) + 4 - 1 + ColorCHAR
|
||||||
|
PRINT mid$(a$, ColorCHAR, 1);
|
||||||
|
NEXT
|
||||||
END IF
|
END IF
|
||||||
LOCATE idewy - 4, idewx - 28 + 4: COLOR 3, 1: PRINT f$
|
|
||||||
findtext$ = f$
|
|
||||||
|
|
||||||
'alter cursor style to match insert mode
|
'alter cursor style to match insert mode
|
||||||
IF ideinsert THEN LOCATE , , , 0, 31 ELSE LOCATE , , , 8, 8
|
IF ideinsert THEN LOCATE , , , 0, 31 ELSE LOCATE , , , 8, 8
|
||||||
|
@ -877,7 +902,15 @@ DO
|
||||||
|
|
||||||
IF IdeSystem = 2 THEN 'override cursor position
|
IF IdeSystem = 2 THEN 'override cursor position
|
||||||
SCREEN , , 0, 0
|
SCREEN , , 0, 0
|
||||||
LOCATE idewy - 4, idewx - 28 + 4 + LEN(findtext$)
|
tx = idesystem2.v1
|
||||||
|
IF LEN(idefindtext) > idesystem2.w THEN
|
||||||
|
IF idesystem2.v1 > idesystem2.w THEN
|
||||||
|
tx = idesystem2.w
|
||||||
|
ELSE
|
||||||
|
tx = idesystem2.v1
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
LOCATE idewy - 4, idewx - (idesystem2.w + 8) + 4 + tx
|
||||||
SCREEN , , 3, 0
|
SCREEN , , 3, 0
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
@ -1294,6 +1327,7 @@ DO
|
||||||
IF KCTRL AND UCASE$(K$) = "F" THEN
|
IF KCTRL AND UCASE$(K$) = "F" THEN
|
||||||
K$ = ""
|
K$ = ""
|
||||||
IdeSystem = 2
|
IdeSystem = 2
|
||||||
|
if len(idefindtext) then idesystem2.issel = -1: idesystem2.sx1 = 0: idesystem2.v1 = len(idefindtext)
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF KCTRL AND KB = KEY_F3 THEN
|
IF KCTRL AND KB = KEY_F3 THEN
|
||||||
|
@ -1305,6 +1339,7 @@ DO
|
||||||
IF IdeSystem = 3 THEN IdeSystem = 1
|
IF IdeSystem = 3 THEN IdeSystem = 1
|
||||||
idemf3:
|
idemf3:
|
||||||
IF idefindtext$ <> "" THEN
|
IF idefindtext$ <> "" THEN
|
||||||
|
if IdeSystem = 2 then idesystem2.sx1 = 0: idesystem2.v1 = len(idefindtext): idesystem2.issel = -1
|
||||||
IF KSHIFT THEN idefindinvert = 1
|
IF KSHIFT THEN idefindinvert = 1
|
||||||
IdeAddSearched idefindtext
|
IdeAddSearched idefindtext
|
||||||
idefindagain
|
idefindagain
|
||||||
|
@ -1462,11 +1497,12 @@ DO
|
||||||
|
|
||||||
'IdeSystem specific code goes here
|
'IdeSystem specific code goes here
|
||||||
|
|
||||||
IF mCLICK THEN 'Find [...] search field
|
IF mCLICK THEN 'Find [...] search field (IdeSystem = 2)
|
||||||
IF mY = idewy - 4 AND mX > idewx - 30 AND mX < idewx - 1 THEN 'inside text box
|
IF mY = idewy - 4 AND mX > idewx - (idesystem2.w + 10) AND mX < idewx - 1 THEN 'inside text box
|
||||||
IF mX <= idewx - 28 + 2 THEN
|
IF mX <= idewx - (idesystem2.w + 8) + 2 THEN
|
||||||
IF LEN(idefindtext) = 0 THEN
|
IF LEN(idefindtext) = 0 THEN
|
||||||
IdeSystem = 2 'no search string, so begin editing
|
IdeSystem = 2 'no search string, so begin editing
|
||||||
|
idesystem2.issel = 0: idesystem2.v1 = 0
|
||||||
ELSE
|
ELSE
|
||||||
IdeAddSearched idefindtext
|
IdeAddSearched idefindtext
|
||||||
IdeSystem = 1: GOTO idemf3 'F3 functionality
|
IdeSystem = 1: GOTO idemf3 'F3 functionality
|
||||||
|
@ -1486,6 +1522,7 @@ DO
|
||||||
ELSE
|
ELSE
|
||||||
IF IdeSystem = 2 THEN idefindtext = "" 'clicking on the text field again clears text
|
IF IdeSystem = 2 THEN idefindtext = "" 'clicking on the text field again clears text
|
||||||
IdeSystem = 2
|
IdeSystem = 2
|
||||||
|
if len(idefindtext) then idesystem2.issel = -1: idesystem2.sx1 = 0: idesystem2.v1 = len(idefindtext)
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
@ -1529,7 +1566,9 @@ DO
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF IdeSystem = 2 THEN
|
IF IdeSystem = 2 THEN
|
||||||
|
a$ = idefindtext
|
||||||
|
IF LEN(K$) = 1 THEN
|
||||||
|
k = ASC(K$)
|
||||||
IF (KSHIFT AND KB = KEY_INSERT) OR (KCONTROL AND UCASE$(K$) = "V") THEN 'paste from clipboard
|
IF (KSHIFT AND KB = KEY_INSERT) OR (KCONTROL AND UCASE$(K$) = "V") THEN 'paste from clipboard
|
||||||
clip$ = _CLIPBOARD$ 'read clipboard
|
clip$ = _CLIPBOARD$ 'read clipboard
|
||||||
x = INSTR(clip$, CHR$(13))
|
x = INSTR(clip$, CHR$(13))
|
||||||
|
@ -1537,35 +1576,131 @@ DO
|
||||||
x = INSTR(clip$, CHR$(10))
|
x = INSTR(clip$, CHR$(10))
|
||||||
IF x THEN clip$ = LEFT$(clip$, x - 1)
|
IF x THEN clip$ = LEFT$(clip$, x - 1)
|
||||||
IF LEN(clip$) THEN
|
IF LEN(clip$) THEN
|
||||||
idefindtext = clip$
|
IF idesystem2.issel THEN
|
||||||
GOTO specialchar
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
IF sx1 > sx2 THEN SWAP sx1, sx2
|
||||||
|
IF sx2 - sx1 > 0 THEN
|
||||||
|
a$ = LEFT$(a$, sx1) + clip$ + RIGHT$(a$, LEN(a$) - sx2)
|
||||||
|
idesystem2.v1 = sx1
|
||||||
|
idesystem2.issel = 0
|
||||||
END IF
|
END IF
|
||||||
|
ELSE
|
||||||
|
a$ = LEFT$(a$, idesystem2.v1) + clip$ + RIGHT$(a$, LEN(a$) - idesystem2.v1)
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
k = 255
|
||||||
|
END IF
|
||||||
|
|
||||||
|
IF (KCONTROL AND UCASE$(K$) = "A") THEN 'select all
|
||||||
|
IF LEN(a$) > 0 THEN
|
||||||
|
idesystem2.issel = -1
|
||||||
|
idesystem2.sx1 = 0
|
||||||
|
idesystem2.v1 = LEN(a$)
|
||||||
|
END IF
|
||||||
|
k = 255
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF ((KCTRL AND KB = KEY_INSERT) OR (KCONTROL AND UCASE$(K$) = "C")) THEN 'copy to clipboard
|
IF ((KCTRL AND KB = KEY_INSERT) OR (KCONTROL AND UCASE$(K$) = "C")) THEN 'copy to clipboard
|
||||||
IF LEN(idefindtext) THEN _CLIPBOARD$ = idefindtext
|
IF idesystem2.issel THEN
|
||||||
GOTO specialchar
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
IF sx1 > sx2 THEN SWAP sx1, sx2
|
||||||
|
IF sx2 - sx1 > 0 THEN _CLIPBOARD$ = MID$(a$, sx1 + 1, sx2 - sx1)
|
||||||
|
END IF
|
||||||
|
k = 255
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF LEN(K$) = 1 THEN
|
IF ((KSHIFT AND KB = KEY_DELETE) OR (KCONTROL AND UCASE$(K$) = "X")) THEN 'cut to clipboard
|
||||||
IF K$ = CHR$(27) THEN
|
IF idesystem2.issel THEN
|
||||||
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
IF sx1 > sx2 THEN SWAP sx1, sx2
|
||||||
|
IF sx2 - sx1 > 0 THEN
|
||||||
|
_CLIPBOARD$ = MID$(a$, sx1 + 1, sx2 - sx1)
|
||||||
|
'delete selection
|
||||||
|
a$ = LEFT$(a$, sx1) + RIGHT$(a$, LEN(a$) - sx2)
|
||||||
|
idesystem2.v1 = sx1
|
||||||
|
idesystem2.issel = 0
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
k = 255
|
||||||
|
END IF
|
||||||
|
|
||||||
|
IF k = 8 THEN
|
||||||
|
IF idesystem2.issel THEN
|
||||||
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
IF sx1 > sx2 THEN SWAP sx1, sx2
|
||||||
|
IF sx2 - sx1 > 0 THEN
|
||||||
|
'delete selection
|
||||||
|
a$ = LEFT$(a$, sx1) + RIGHT$(a$, LEN(a$) - sx2)
|
||||||
|
idefindtext = a$
|
||||||
|
idesystem2.v1 = sx1
|
||||||
|
idesystem2.issel = 0
|
||||||
|
END IF
|
||||||
|
ELSEIF idesystem2.v1 > 0 THEN
|
||||||
|
a1$ = LEFT$(a$, idesystem2.v1 - 1)
|
||||||
|
IF idesystem2.v1 <= LEN(a$) THEN a2$ = RIGHT$(a$, LEN(a$) - idesystem2.v1) ELSE a2$ = ""
|
||||||
|
a$ = a1$ + a2$: idesystem2.v1 = idesystem2.v1 - 1
|
||||||
|
idefindtext = a$
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
IF k = 27 THEN
|
||||||
IdeSystem = 1
|
IdeSystem = 1
|
||||||
GOTO specialchar
|
GOTO specialchar
|
||||||
END IF
|
END IF
|
||||||
IF ASC(K$) = 13 THEN
|
IF k = 9 THEN
|
||||||
|
IdeSystem = 1
|
||||||
|
GOTO specialchar
|
||||||
|
END IF
|
||||||
|
IF k = 13 THEN
|
||||||
IF LEN(idefindtext) THEN IdeAddSearched idefindtext: GOTO idemf3 'F3 functionality
|
IF LEN(idefindtext) THEN IdeAddSearched idefindtext: GOTO idemf3 'F3 functionality
|
||||||
GOTO specialchar
|
GOTO specialchar
|
||||||
END IF
|
END IF
|
||||||
IF ASC(K$) = 8 THEN
|
IF k <> 8 AND k <> 9 AND k <> 0 AND k <> 10 AND k <> 13 AND k <> 26 AND k <> 255 THEN
|
||||||
IF LEN(idefindtext) THEN idefindtext = LEFT$(idefindtext, LEN(idefindtext) - 1)
|
IF idesystem2.issel THEN
|
||||||
GOTO specialchar
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
IF sx1 > sx2 THEN SWAP sx1, sx2
|
||||||
|
IF sx2 - sx1 > 0 THEN
|
||||||
|
'replace selection
|
||||||
|
a$ = LEFT$(a$, sx1) + RIGHT$(a$, LEN(a$) - sx2)
|
||||||
|
idefindtext = a$
|
||||||
|
idesystem2.issel = 0
|
||||||
|
idesystem2.v1 = sx1
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
IF idesystem2.v1 > 0 THEN a1$ = LEFT$(a$, idesystem2.v1) ELSE a1$ = ""
|
||||||
|
IF idesystem2.v1 <= LEN(a$) THEN a2$ = RIGHT$(a$, LEN(a$) - idesystem2.v1) ELSE a2$ = ""
|
||||||
|
a$ = a1$ + K$ + a2$: idesystem2.v1 = idesystem2.v1 + 1
|
||||||
|
END IF
|
||||||
|
idefindtext = a$
|
||||||
END IF
|
END IF
|
||||||
IF ASC(K$) < 32 THEN GOTO specialchar 'block control characters
|
|
||||||
|
|
||||||
idefindtext = idefindtext + K$
|
IF K$ = CHR$(0) + "S" THEN 'DEL
|
||||||
GOTO specialchar
|
if idesystem2.issel THEN
|
||||||
|
sx1 = idesystem2.sx1: sx2 = idesystem2.v1
|
||||||
|
if sx1 > sx2 then SWAP sx1, sx2
|
||||||
|
if sx2 - sx1 > 0 then
|
||||||
|
'delete selection
|
||||||
|
a$ = left$(a$, sx1) + right$(a$, len(a$) - sx2)
|
||||||
|
idefindtext = a$
|
||||||
|
idesystem2.v1 = sx1
|
||||||
|
idesystem2.issel = 0
|
||||||
|
end if
|
||||||
|
else
|
||||||
|
IF idesystem2.v1 > 0 THEN a1$ = LEFT$(a$, idesystem2.v1) ELSE a1$ = ""
|
||||||
|
IF idesystem2.v1 < LEN(a$) THEN a2$ = RIGHT$(a$, LEN(a$) - idesystem2.v1 - 1) ELSE a2$ = ""
|
||||||
|
a$ = a1$ + a2$
|
||||||
|
idefindtext = a$
|
||||||
|
end if
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
'cursor control
|
||||||
|
if K$ = CHR$(0) + "K" THEN GOSUB selectcheck: idesystem2.v1 = idesystem2.v1 - 1
|
||||||
|
IF K$ = CHR$(0) + "M" THEN GOSUB selectcheck: idesystem2.v1 = idesystem2.v1 + 1
|
||||||
|
IF K$ = CHR$(0) + "G" THEN GOSUB selectcheck: idesystem2.v1 = 0
|
||||||
|
IF K$ = CHR$(0) + "O" THEN GOSUB selectcheck: idesystem2.v1 = LEN(a$)
|
||||||
|
IF idesystem2.v1 < 0 THEN idesystem2.v1 = 0
|
||||||
|
IF idesystem2.v1 > LEN(a$) THEN idesystem2.v1 = LEN(a$)
|
||||||
|
IF idesystem2.v1 = idesystem2.sx1 then idesystem2.issel = 0
|
||||||
|
|
||||||
IF mCLICK or mCLICK2 THEN
|
IF mCLICK or mCLICK2 THEN
|
||||||
IF mX > 1 AND mX < idewx AND mY > 2 AND mY < (idewy - 5) THEN 'inside text box
|
IF mX > 1 AND mX < idewx AND mY > 2 AND mY < (idewy - 5) THEN 'inside text box
|
||||||
IdeSystem = 1
|
IdeSystem = 1
|
||||||
|
@ -2795,8 +2930,13 @@ DO
|
||||||
GOTO skipgosubs
|
GOTO skipgosubs
|
||||||
|
|
||||||
selectcheck:
|
selectcheck:
|
||||||
|
IF IdeSystem = 1 THEN
|
||||||
IF KSHIFT AND ideselect = 0 THEN ideselect = 1: ideselectx1 = idecx: ideselecty1 = idecy
|
IF KSHIFT AND ideselect = 0 THEN ideselect = 1: ideselectx1 = idecx: ideselecty1 = idecy
|
||||||
IF KSHIFT = 0 THEN ideselect = 0
|
IF KSHIFT = 0 THEN ideselect = 0
|
||||||
|
ELSEIF IdeSystem = 2 THEN
|
||||||
|
IF KSHIFT AND idesystem2.issel = 0 THEN idesystem2.issel = -1: idesystem2.sx1 = idesystem2.v1
|
||||||
|
IF KSHIFT = 0 THEN idesystem2.issel = 0
|
||||||
|
END IF
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
delselect:
|
delselect:
|
||||||
|
|
Loading…
Reference in a new issue