mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-07-01 12:40:36 +00:00
Improves ASCII Box controls.
This commit is contained in:
parent
3b07e0a262
commit
ee18d8ba9d
|
@ -13863,8 +13863,16 @@ FUNCTION ideASCIIbox$
|
||||||
'-------- end of generic dialog box header --------
|
'-------- end of generic dialog box header --------
|
||||||
|
|
||||||
'-------- init --------
|
'-------- init --------
|
||||||
|
i = 0
|
||||||
|
|
||||||
idepar p, 56, 21, "ASCII Chart"
|
idepar p, 56, 21, "ASCII Chart"
|
||||||
|
|
||||||
|
i = i + 1
|
||||||
|
o(i).typ = 1 'hidden text box to give focus to the chart
|
||||||
|
o(i).y = 3
|
||||||
|
o(i).x = 5
|
||||||
|
o(i).w = 5
|
||||||
|
|
||||||
TYPE position
|
TYPE position
|
||||||
x AS INTEGER
|
x AS INTEGER
|
||||||
y AS INTEGER
|
y AS INTEGER
|
||||||
|
@ -13890,13 +13898,12 @@ FUNCTION ideASCIIbox$
|
||||||
NEXT
|
NEXT
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
ButtonsID = i
|
|
||||||
o(i).typ = 3
|
o(i).typ = 3
|
||||||
o(i).y = 21
|
o(i).y = 21
|
||||||
o(i).txt = idenewtxt("#Cancel")
|
o(i).txt = idenewtxt("#Insert character" + sep + "Insert C#HR$" + sep + "#Cancel")
|
||||||
o(i).dft = 1
|
o(i).dft = 1
|
||||||
|
|
||||||
Selected = 0
|
Selected = 1
|
||||||
|
|
||||||
'-------- end of init --------
|
'-------- end of init --------
|
||||||
|
|
||||||
|
@ -13905,12 +13912,6 @@ FUNCTION ideASCIIbox$
|
||||||
'-------- end of generic init --------
|
'-------- end of generic init --------
|
||||||
|
|
||||||
DO 'main loop
|
DO 'main loop
|
||||||
IF Selected THEN
|
|
||||||
idetxt(o(ButtonsID).txt) = "#Insert character" + sep + "Insert C#HR$" + sep + "#Cancel"
|
|
||||||
ELSE
|
|
||||||
idetxt(o(ButtonsID).txt) = "#Cancel"
|
|
||||||
END IF
|
|
||||||
|
|
||||||
'-------- generic display dialog box & objects --------
|
'-------- generic display dialog box & objects --------
|
||||||
idedrawpar p
|
idedrawpar p
|
||||||
f = 1: cx = 0: cy = 0
|
f = 1: cx = 0: cy = 0
|
||||||
|
@ -13927,12 +13928,17 @@ FUNCTION ideASCIIbox$
|
||||||
'-------- end of generic display dialog box & objects --------
|
'-------- end of generic display dialog box & objects --------
|
||||||
|
|
||||||
'-------- custom display changes --------
|
'-------- custom display changes --------
|
||||||
|
IF focus = 1 THEN
|
||||||
|
idebox p.x + 4, p.y + 1, 50, 18
|
||||||
|
END IF
|
||||||
|
|
||||||
Hover = 0
|
Hover = 0
|
||||||
FOR i = 1 TO 255
|
FOR i = 1 TO 255
|
||||||
IF mX >= asciiTable(i).x AND mX <= asciiTable(i).x + 2 AND mY = asciiTable(i).y THEN
|
IF mX >= asciiTable(i).x AND mX <= asciiTable(i).x + 2 AND mY = asciiTable(i).y THEN
|
||||||
Hover = i
|
IF mouseMoved THEN Hover = i: COLOR 7, 0
|
||||||
IF mCLICK THEN
|
IF mCLICK THEN
|
||||||
Selected = i
|
Selected = i
|
||||||
|
focus = 1
|
||||||
IF timeElapsedSince(lastClick!) <= .3 and lastClickOn = i THEN
|
IF timeElapsedSince(lastClick!) <= .3 and lastClickOn = i THEN
|
||||||
'double click on chart
|
'double click on chart
|
||||||
GOTO insertChar
|
GOTO insertChar
|
||||||
|
@ -13940,7 +13946,6 @@ FUNCTION ideASCIIbox$
|
||||||
lastClick! = TIMER
|
lastClick! = TIMER
|
||||||
lastClickOn = i
|
lastClickOn = i
|
||||||
END IF
|
END IF
|
||||||
COLOR 7, 0
|
|
||||||
ELSE
|
ELSE
|
||||||
COLOR 2, 7
|
COLOR 2, 7
|
||||||
END IF
|
END IF
|
||||||
|
@ -13949,20 +13954,34 @@ FUNCTION ideASCIIbox$
|
||||||
NEXT
|
NEXT
|
||||||
|
|
||||||
COLOR 0, 7
|
COLOR 0, 7
|
||||||
IF Selected = 0 AND Hover > 0 THEN
|
IF Selected > 0 THEN
|
||||||
_PRINTSTRING (p.x + 5, p.y + 19), "Hovered (click to select):" + STR$(Hover)
|
_PRINTSTRING (p.x + 5, p.y + 19), "Selected:" + STR$(Selected)
|
||||||
ELSEIF Selected > 0 THEN
|
END IF
|
||||||
_PRINTSTRING (p.x + 5, p.y + 19), "Selected (ESC to clear): " + STR$(Selected)
|
|
||||||
|
COLOR 2, 7
|
||||||
|
IF Hover > 0 AND Hover <> Selected THEN
|
||||||
|
_PRINTSTRING (p.x + 5, p.y + 20), "Hovered: " + STR$(Hover)
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
'-------- end of custom display changes --------
|
'-------- end of custom display changes --------
|
||||||
|
|
||||||
'update visual page and cursor position
|
'update visual page and cursor position
|
||||||
PCOPY 1, 0
|
PCOPY 1, 0
|
||||||
IF cx THEN SCREEN , , 0, 0: LOCATE cy, cx, 1: SCREEN , , 1, 0
|
IF cx THEN
|
||||||
|
SCREEN , , 0, 0
|
||||||
|
IF focus = 1 THEN
|
||||||
|
IF Selected THEN
|
||||||
|
LOCATE asciiTable(Selected).y, asciiTable(Selected).x + 1, 1
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
LOCATE cy, cx, 1
|
||||||
|
END IF
|
||||||
|
SCREEN , , 1, 0
|
||||||
|
END IF
|
||||||
|
|
||||||
'-------- read input --------
|
'-------- read input --------
|
||||||
change = 0
|
change = 0
|
||||||
|
mouseMoved = 0
|
||||||
DO
|
DO
|
||||||
GetInput
|
GetInput
|
||||||
IF mWHEEL THEN change = 1
|
IF mWHEEL THEN change = 1
|
||||||
|
@ -13970,7 +13989,7 @@ FUNCTION ideASCIIbox$
|
||||||
IF mCLICK THEN mousedown = 1: change = 1
|
IF mCLICK THEN mousedown = 1: change = 1
|
||||||
IF mRELEASE THEN mouseup = 1: change = 1
|
IF mRELEASE THEN mouseup = 1: change = 1
|
||||||
IF mB THEN change = 1
|
IF mB THEN change = 1
|
||||||
IF mX <> prev.mX OR mY <> prev.mY THEN change = 1: prev.mX = mX: prev.mY = mY
|
IF mX <> prev.mX OR mY <> prev.mY THEN change = 1: prev.mX = mX: prev.mY = mY: mouseMoved = -1
|
||||||
alt = KALT: IF alt <> oldalt THEN change = 1
|
alt = KALT: IF alt <> oldalt THEN change = 1
|
||||||
oldalt = alt
|
oldalt = alt
|
||||||
_LIMIT 100
|
_LIMIT 100
|
||||||
|
@ -14005,91 +14024,91 @@ FUNCTION ideASCIIbox$
|
||||||
'-------- end of generic input response --------
|
'-------- end of generic input response --------
|
||||||
|
|
||||||
IF mY > p.y AND mY < p.y + p.h AND mX > p.x AND mX < p.x + p.w THEN
|
IF mY > p.y AND mY < p.y + p.h AND mX > p.x AND mX < p.x + p.w THEN
|
||||||
IF Hover = 0 AND mCLICK THEN Selected = 0
|
IF Hover = 0 AND mCLICK THEN Selected = 0: focus = 1
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF K$ = CHR$(13) OR (Selected > 0 AND focus = 1 AND info <> 0) THEN
|
IF (K$ = CHR$(13) AND focus = 1) THEN
|
||||||
IF Selected = 0 AND Hover > 0 THEN
|
ideASCIIbox$ = CHR$(Selected)
|
||||||
Selected = Hover
|
EXIT FUNCTION
|
||||||
ELSEIF Selected THEN
|
|
||||||
insertChar:
|
|
||||||
ideASCIIbox$ = CHR$(Selected)
|
|
||||||
EXIT FUNCTION
|
|
||||||
END IF
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF (Selected > 0 AND focus = 2 AND info <> 0) THEN
|
IF focus = 2 AND (K$ = CHR$(13) OR info <> 0) THEN
|
||||||
|
insertChar:
|
||||||
|
ideASCIIbox$ = CHR$(Selected)
|
||||||
|
EXIT FUNCTION
|
||||||
|
END IF
|
||||||
|
|
||||||
|
IF (focus = 3 AND (info <> 0 OR K$ = CHR$(13))) THEN
|
||||||
ideASCIIbox$ = "CHR$(" + str2$(Selected) + ")"
|
ideASCIIbox$ = "CHR$(" + str2$(Selected) + ")"
|
||||||
EXIT FUNCTION
|
EXIT FUNCTION
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
IF K$ = CHR$(27) THEN
|
'Cancel:
|
||||||
IF Selected THEN Selected = 0 ELSE EXIT FUNCTION
|
IF (info <> 0 OR K$ = CHR$(13)) AND focus = 4 THEN EXIT FUNCTION
|
||||||
END IF
|
|
||||||
|
|
||||||
IF (Selected = 0 AND focus = 1 AND info <> 0) OR _
|
IF K$ = CHR$(27) THEN EXIT FUNCTION
|
||||||
(Selected > 0 AND focus = 3 AND info <> 0) THEN EXIT FUNCTION
|
|
||||||
|
|
||||||
SELECT EVERYCASE KB
|
IF focus = 1 THEN 'chart control (keyboard)
|
||||||
CASE 19712, 19200, 20480, 18432
|
KCTRL = _KEYDOWN(100305) OR _KEYDOWN(100306)
|
||||||
IF Selected = 0 AND Hover > 0 THEN Selected = Hover
|
SELECT CASE KB
|
||||||
CASE 18176: Selected = 1
|
CASE 18176: Selected = 1 'Home
|
||||||
CASE 20224: Selected = 255
|
CASE 20224: Selected = 255 'End
|
||||||
CASE 19712
|
CASE 19712 'Right
|
||||||
IF KCTRL AND Selected > 0 THEN
|
IF KCTRL AND Selected > 0 THEN
|
||||||
DO UNTIL Selected MOD 16 = 0 OR Selected = 255
|
DO UNTIL Selected MOD 16 = 0 OR Selected = 255
|
||||||
Selected = Selected + 1
|
Selected = Selected + 1
|
||||||
LOOP
|
|
||||||
ELSE
|
|
||||||
Selected = Selected + 1
|
|
||||||
END IF
|
|
||||||
IF Selected > 255 THEN Selected = 1
|
|
||||||
CASE 19200
|
|
||||||
IF KCTRL AND Selected > 0 THEN
|
|
||||||
DO UNTIL Selected MOD 16 = 1
|
|
||||||
Selected = Selected - 1
|
|
||||||
LOOP
|
|
||||||
ELSE
|
|
||||||
Selected = Selected - 1
|
|
||||||
END IF
|
|
||||||
IF Selected < 1 THEN Selected = 255
|
|
||||||
CASE 20480
|
|
||||||
IF KCTRL AND Selected > 0 THEN
|
|
||||||
IF Selected = 240 THEN
|
|
||||||
Selected = 255
|
|
||||||
ELSE
|
|
||||||
DO UNTIL Selected >= 240
|
|
||||||
Selected = Selected + 16
|
|
||||||
LOOP
|
LOOP
|
||||||
END IF
|
|
||||||
IF Selected > 255 THEN Selected = 255
|
|
||||||
ELSE
|
|
||||||
IF Selected = 240 THEN
|
|
||||||
'corner case
|
|
||||||
Selected = 255
|
|
||||||
ELSEIF Selected + 16 <= 255 THEN
|
|
||||||
Selected = Selected + 16
|
|
||||||
ELSE
|
ELSE
|
||||||
Selected = Selected + 16 - 256
|
Selected = Selected + 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
IF Selected > 255 THEN Selected = 1
|
||||||
CASE 18432
|
CASE 19200 'Left
|
||||||
IF KCTRL AND Selected > 0 THEN
|
IF KCTRL AND Selected > 0 THEN
|
||||||
DO UNTIL Selected <= 16
|
DO UNTIL Selected MOD 16 = 1
|
||||||
Selected = Selected - 16
|
Selected = Selected - 1
|
||||||
LOOP
|
LOOP
|
||||||
IF Selected < 1 THEN Selected = 0
|
|
||||||
ELSE
|
|
||||||
IF Selected = 16 THEN
|
|
||||||
'corner case
|
|
||||||
Selected = 240
|
|
||||||
ELSEIF Selected - 16 >= 1 THEN
|
|
||||||
Selected = Selected - 16
|
|
||||||
ELSE
|
ELSE
|
||||||
Selected = Selected - 16 + 256
|
Selected = Selected - 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
IF Selected < 1 THEN Selected = 255
|
||||||
END SELECT
|
CASE 20480 'Up
|
||||||
|
IF KCTRL AND Selected > 0 THEN
|
||||||
|
IF Selected = 240 THEN
|
||||||
|
Selected = 255
|
||||||
|
ELSE
|
||||||
|
DO UNTIL Selected >= 240
|
||||||
|
Selected = Selected + 16
|
||||||
|
LOOP
|
||||||
|
END IF
|
||||||
|
IF Selected > 255 THEN Selected = 255
|
||||||
|
ELSE
|
||||||
|
IF Selected = 240 THEN
|
||||||
|
'corner case
|
||||||
|
Selected = 255
|
||||||
|
ELSEIF Selected + 16 <= 255 THEN
|
||||||
|
Selected = Selected + 16
|
||||||
|
ELSE
|
||||||
|
Selected = Selected + 16 - 256
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
CASE 18432 'Down
|
||||||
|
IF KCTRL AND Selected > 0 THEN
|
||||||
|
DO UNTIL Selected <= 16
|
||||||
|
Selected = Selected - 16
|
||||||
|
LOOP
|
||||||
|
IF Selected < 1 THEN Selected = 0
|
||||||
|
ELSE
|
||||||
|
IF Selected = 16 THEN
|
||||||
|
'corner case
|
||||||
|
Selected = 240
|
||||||
|
ELSEIF Selected - 16 >= 1 THEN
|
||||||
|
Selected = Selected - 16
|
||||||
|
ELSE
|
||||||
|
Selected = Selected - 16 + 256
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
END SELECT
|
||||||
|
END IF
|
||||||
|
|
||||||
'end of custom controls
|
'end of custom controls
|
||||||
mousedown = 0
|
mousedown = 0
|
||||||
|
|
Loading…
Reference in a new issue