mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-06-29 11:40:38 +00:00
Add contextual menu and overall improvements to menu system.
- Show a contextual menu upon right-clicking on the text area. Includes the Edit menu options as well as contextual search and help. - Add hovering to menus items. - Adjust case of menu items (CTRL and Ctrl were being used interchangeably without a pattern).
This commit is contained in:
parent
deb80bdec6
commit
2abab5a916
|
@ -185,8 +185,8 @@ DIM SHARED idefocusline 'simply stores the location of the line to highlight in
|
|||
DIM SHARED ideautorun
|
||||
DIM SHARED menu$(1 TO 10, 0 TO 20)
|
||||
DIM SHARED menusize(1 TO 10)
|
||||
DIM SHARED menus AS INTEGER
|
||||
DIM SHARED menubar$
|
||||
DIM SHARED menus AS INTEGER, idecontextualmenuID AS INTEGER
|
||||
DIM SHARED menubar$, idecontextualSearch$
|
||||
DIM SHARED ideundocombo, ideundocombochr, idenoundo, idemergeundo
|
||||
DIM SHARED idealthighlight, ideentermenu
|
||||
DIM SHARED ideautolayout, ideautoindent, ideautoindentsize, ideindentsubs, idebackupsize, idesortsubs
|
||||
|
|
|
@ -103,6 +103,7 @@ ide = ide2(0)
|
|||
END FUNCTION
|
||||
|
||||
FUNCTION ide2 (ignore)
|
||||
STATIC MenuLocations as STRING
|
||||
|
||||
c$ = idecommand$
|
||||
|
||||
|
@ -178,14 +179,14 @@ IF idelaunched = 0 THEN
|
|||
|
||||
m = m + 1: i = 0
|
||||
menu$(m, i) = "Edit": i = i + 1
|
||||
menu$(m, i) = "Cu#t Shift+Del or CTRL+X": i = i + 1
|
||||
menu$(m, i) = "#Copy Ctrl+Ins or CTRL+C": i = i + 1
|
||||
menu$(m, i) = "#Paste Shift+Ins or CTRL+V": i = i + 1
|
||||
menu$(m, i) = "Cu#t Shift+Del or Ctrl+X": i = i + 1
|
||||
menu$(m, i) = "#Copy Ctrl+Ins or Ctrl+C": i = i + 1
|
||||
menu$(m, i) = "#Paste Shift+Ins or Ctrl+V": i = i + 1
|
||||
menu$(m, i) = "Cl#ear Del": i = i + 1
|
||||
menu$(m, i) = "Select #All CTRL+A": i = i + 1
|
||||
menu$(m, i) = "Select #All Ctrl+A": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "#Undo CTRL+Z": i = i + 1
|
||||
menu$(m, i) = "#Redo CTRL+Y": i = i + 1
|
||||
menu$(m, i) = "#Undo Ctrl+Z": i = i + 1
|
||||
menu$(m, i) = "#Redo Ctrl+Y": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "Comment (add ')": i = i + 1
|
||||
menu$(m, i) = "Uncomment (remove ')": i = i + 1
|
||||
|
@ -201,13 +202,13 @@ IF idelaunched = 0 THEN
|
|||
|
||||
m = m + 1: i = 0
|
||||
menu$(m, i) = "Search": i = i + 1
|
||||
menu$(m, i) = "#Find...": i = i + 1
|
||||
menu$(m, i) = "#Find... Ctrl+F3": i = i + 1
|
||||
menu$(m, i) = "#Repeat Last Find (Shift+) F3": i = i + 1
|
||||
menu$(m, i) = "#Change...": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "Add/Remove #Bookmark ALT+Left": i = i + 1
|
||||
menu$(m, i) = "#Next Bookmark ALT+Down": i = i + 1
|
||||
menu$(m, i) = "#Previous Bookmark ALT+Up": i = i + 1
|
||||
menu$(m, i) = "Add/Remove #Bookmark Alt+Left": i = i + 1
|
||||
menu$(m, i) = "#Next Bookmark Alt+Down": i = i + 1
|
||||
menu$(m, i) = "#Previous Bookmark Alt+Up": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "#Go to line...": i = i + 1
|
||||
|
||||
|
@ -261,10 +262,12 @@ IF idelaunched = 0 THEN
|
|||
menu$(m, i) = "#About...": i = i + 1
|
||||
menusize(m) = i - 1
|
||||
|
||||
|
||||
|
||||
menus = m
|
||||
|
||||
'Hidden contextual menu (ID is retrieved for later use; allows expansion of the original menu system above):
|
||||
m = m + 1
|
||||
idecontextualmenuID = m
|
||||
|
||||
IF os$ = "WIN" THEN
|
||||
idepathsep$ = "\"
|
||||
END IF
|
||||
|
@ -294,10 +297,13 @@ IF idelaunched = 0 THEN
|
|||
|
||||
|
||||
menubar$ = " "
|
||||
MenuLocations = ""
|
||||
FOR i = 1 TO menus - 1
|
||||
MenuLocations = MenuLocations + MKI$(LEN(menubar$))
|
||||
menubar$ = menubar$ + menu$(i, 0) + " "
|
||||
NEXT
|
||||
menubar$ = menubar$ + SPACE$(idewx - LEN(menubar$) - LEN(menu$(i, 0)) - 2)
|
||||
MenuLocations = MenuLocations + MKI$(LEN(menubar$))
|
||||
menubar$ = menubar$ + menu$(i, 0) + " "
|
||||
|
||||
|
||||
|
@ -623,7 +629,7 @@ idefocusline = 0
|
|||
'main loop
|
||||
DO
|
||||
ideloop:
|
||||
|
||||
idecontextualmenu = 0
|
||||
idedeltxt 'removes temporary strings (typically created by guibox commands) by setting an index to 0
|
||||
STATIC ForceResize
|
||||
if IDE_AutoPosition then
|
||||
|
@ -1462,7 +1468,7 @@ DO
|
|||
END IF
|
||||
|
||||
IF idehelp = 1 THEN 'switch windows?
|
||||
IF mCLICK THEN
|
||||
IF mCLICK OR mCLICK2 THEN
|
||||
IF IdeSystem = 3 THEN
|
||||
IF mY >= 2 AND mY < idewy THEN
|
||||
IdeSystem = 1
|
||||
|
@ -1523,9 +1529,10 @@ DO
|
|||
GOTO specialchar
|
||||
END IF
|
||||
|
||||
IF mCLICK THEN
|
||||
IF mCLICK or mCLICK2 THEN
|
||||
IF mX > 1 AND mX < idewx AND mY > 2 AND mY < (idewy - 5) THEN 'inside text box
|
||||
IdeSystem = 1
|
||||
if mCLICK2 THEN goto invokecontextualmenu ELSE goto ideloop
|
||||
END IF
|
||||
END IF
|
||||
|
||||
|
@ -1938,6 +1945,7 @@ DO
|
|||
|
||||
|
||||
IF KB = KEY_F1 THEN
|
||||
contextualhelp:
|
||||
'identify word or character at current cursor position
|
||||
a$ = idegetline(idecy)
|
||||
x = idecx
|
||||
|
@ -2079,7 +2087,7 @@ DO
|
|||
|
||||
IF KALT AND (KB = KEY_DOWN OR KB = KEY_UP) THEN
|
||||
IF IdeBmkN = 0 THEN
|
||||
idemessagebox "Bookmarks", "No bookmarks exist (Use ALT+Left to create a bookmark)"
|
||||
idemessagebox "Bookmarks", "No bookmarks exist (Use Alt+Left to create a bookmark)"
|
||||
SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
idealthighlight = 0
|
||||
LOCATE , , 0: COLOR 0, 7: LOCATE 1, 1: PRINT menubar$;
|
||||
|
@ -2128,6 +2136,68 @@ DO
|
|||
END IF
|
||||
END IF
|
||||
|
||||
IF mCLICK2 THEN 'Second mouse button pressed.
|
||||
invokecontextualmenu:
|
||||
IF mX > 1 AND mX < idewx AND mY > 2 AND mY < (idewy - 5) THEN 'inside text box
|
||||
if ideselect = 0 then 'Right click only positions the cursor if no selection is active
|
||||
idecx = mX - 1 + idesx - 1
|
||||
idecy = mY - 2 + idesy - 1
|
||||
IF idecy > iden THEN idecy = iden
|
||||
else 'A selection is reported but it may be that the user only clicked the screen. Let's check:
|
||||
IF ideselecty1 = idecy THEN 'single line selected
|
||||
a$ = idegetline(idecy)
|
||||
a2$ = ""
|
||||
sx1 = ideselectx1: sx2 = idecx
|
||||
IF sx2 < sx1 THEN SWAP sx1, sx2
|
||||
FOR x = sx1 TO sx2 - 1
|
||||
IF x <= LEN(a$) THEN a2$ = a2$ + MID$(a$, x, 1) ELSE a2$ = a2$ + " "
|
||||
NEXT
|
||||
IF a2$ = "" THEN
|
||||
'Told ya.
|
||||
ideselect = 0
|
||||
idecx = mX - 1 + idesx - 1
|
||||
idecy = mY - 2 + idesy - 1
|
||||
IF idecy > iden THEN idecy = iden
|
||||
ELSE
|
||||
'Ok, there is a selection. But we'll override it if the click was outside it
|
||||
IF mX - 1 + idesx - 1 < sx1 OR mX - 1 + idesx - 1 > sx2 THEN
|
||||
ideselect = 0
|
||||
idecx = mX - 1 + idesx - 1
|
||||
idecy = mY - 2 + idesy - 1
|
||||
IF idecy > iden THEN idecy = iden
|
||||
ideshowtext
|
||||
PCOPY 3, 0
|
||||
END IF
|
||||
IF mY - 2 + idesy - 1 < idecy OR mY - 2 + idesy - 1 > idecy THEN
|
||||
ideselect = 0
|
||||
idecx = mX - 1 + idesx - 1
|
||||
idecy = mY - 2 + idesy - 1
|
||||
IF idecy > iden THEN idecy = iden
|
||||
ideshowtext
|
||||
PCOPY 3, 0
|
||||
END IF
|
||||
END IF
|
||||
ELSE 'Multiple lines selected
|
||||
'We'll override the selection if the click was outside it
|
||||
sy1 = ideselecty1
|
||||
sy2 = idecy
|
||||
IF sy1 > sy2 THEN SWAP sy1, sy2
|
||||
IF mY - 2 + idesy - 1 < sy1 OR mY - 2 + idesy - 1 > sy2 THEN
|
||||
ideselect = 0
|
||||
idecx = mX - 1 + idesx - 1
|
||||
idecy = mY - 2 + idesy - 1
|
||||
IF idecy > iden THEN idecy = iden
|
||||
ideshowtext
|
||||
PCOPY 3, 0
|
||||
END IF
|
||||
END IF
|
||||
end if
|
||||
idecontextualmenu = 1
|
||||
IdeMakeContextualMenu
|
||||
GOTO showmenu
|
||||
END IF
|
||||
END IF
|
||||
|
||||
IF mCLICK THEN
|
||||
IF mX = idewx THEN
|
||||
IF iden > 1 THEN 'take no action if not slider available
|
||||
|
@ -2880,6 +2950,20 @@ DO
|
|||
lastaltheld = altheld
|
||||
|
||||
GetInput
|
||||
if oldmx <> mX or oldmy <> mY then
|
||||
IF mY = 1 and idecontextualmenu = 0 THEN 'Check if we're hovering on menu bar
|
||||
lastm = m
|
||||
FOR i = 1 to menus
|
||||
x = CVI(MID$(MenuLocations, i * 2 - 1, 2))
|
||||
x2 = CVI(MID$(MenuLocations, i * 2 - 1, 2)) + len(menu$(i, 0))
|
||||
IF mX >= x and mX < x2 THEN
|
||||
m = i
|
||||
if m <> lastm then EXIT DO 'Update the menu bar to reflect the current mouse hover
|
||||
END IF
|
||||
NEXT
|
||||
END IF
|
||||
oldmx = mX: oldmy = mY
|
||||
end if
|
||||
IF iCHANGED = 0 THEN _LIMIT 100
|
||||
|
||||
IF KALT THEN altheld = 1 ELSE altheld = 0
|
||||
|
@ -2891,20 +2975,20 @@ DO
|
|||
|
||||
IF mCLICK THEN
|
||||
IF mY = 1 THEN
|
||||
x = 3
|
||||
FOR i = 1 TO menus
|
||||
x2 = LEN(menu$(i, 0)) + 2
|
||||
IF mX >= x AND mX < x + x2 THEN
|
||||
FOR i = 1 to menus
|
||||
x = CVI(MID$(MenuLocations, i * 2 - 1, 2))
|
||||
x2 = CVI(MID$(MenuLocations, i * 2 - 1, 2)) + len(menu$(i, 0))
|
||||
IF mX >= x and mX < x2 THEN
|
||||
m = i
|
||||
LOCATE 1, 1: COLOR 0, 7: PRINT menubar$;
|
||||
PCOPY 3, 0
|
||||
GOTO showmenu
|
||||
END IF
|
||||
x = x + x2
|
||||
NEXT
|
||||
END IF 'my=1
|
||||
KB = KEY_ESC 'exit menu selection
|
||||
END IF
|
||||
|
||||
LOOP UNTIL KB
|
||||
|
||||
K$ = UCASE$(K$)
|
||||
|
@ -2925,7 +3009,7 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
IF m < 1 THEN m = menus
|
||||
IF m > menus THEN m = 1
|
||||
IF m > menus and idecontextualmenu = 0 THEN m = 1
|
||||
IF KB = KEY_UP OR KB = KEY_DOWN OR KB = KEY_ENTER THEN
|
||||
LOCATE 1, 1: COLOR 0, 7: PRINT menubar$;
|
||||
PCOPY 3, 0
|
||||
|
@ -2950,14 +3034,18 @@ altheld = 1
|
|||
PCOPY 0, 2
|
||||
SCREEN , , 1, 0
|
||||
r = 1
|
||||
IF idecontextualmenu = 1 THEN idectxmenuX = mX: idectxmenuY = mY: m = idecontextualmenuID
|
||||
oldmy = mY: oldmx = mX
|
||||
DO
|
||||
PCOPY 2, 1
|
||||
|
||||
if idecontextualmenu = 0 then
|
||||
'find pos of menu m
|
||||
x = 4: FOR i = 1 TO m - 1: x = x + LEN(menu$(i, 0)) + 2
|
||||
IF i = menus - 1 THEN x = idewx - LEN(menu$(menus, 0)) - 1
|
||||
NEXT: xx = x
|
||||
LOCATE 1, xx - 1: COLOR 7, 0: PRINT " " + menu$(m, 0) + " "
|
||||
END IF
|
||||
COLOR 0, 7
|
||||
'calculate menu width
|
||||
w = 0
|
||||
|
@ -2968,18 +3056,25 @@ DO
|
|||
IF INSTR(m$, " ") THEN l = l + 2 'min 4 spacing
|
||||
IF l > w THEN w = l
|
||||
NEXT
|
||||
yy = 2
|
||||
IF idecontextualmenu = 1 THEN
|
||||
xx = idectxmenuX
|
||||
if xx < 3 then xx = 3
|
||||
yy = idectxmenuY
|
||||
if yy + menusize(m) + 2 > idewy then yy = idewy - 2 - menusize(m)
|
||||
END IF
|
||||
IF xx > idewx - w - 3 THEN xx = idewx - w - 3
|
||||
ideboxshadow xx - 2, 2, w + 4, menusize(m) + 2
|
||||
|
||||
ideboxshadow xx - 2, yy, w + 4, menusize(m) + 2
|
||||
|
||||
'draw menu items
|
||||
FOR i = 1 TO menusize(m)
|
||||
m$ = menu$(m, i)
|
||||
IF m$ = "-" THEN
|
||||
COLOR 0, 7: LOCATE i + 2, xx - 2: PRINT chr$(195) + STRING$(w + 2, chr$(196)) + chr$(180);
|
||||
COLOR 0, 7: LOCATE i + yy, xx - 2: PRINT chr$(195) + STRING$(w + 2, chr$(196)) + chr$(180);
|
||||
ELSE
|
||||
IF r = i THEN LOCATE i + 2, xx - 1: COLOR 7, 0: PRINT SPACE$(w + 2);
|
||||
LOCATE i + 2, xx
|
||||
IF r = i THEN LOCATE i + yy, xx - 1: COLOR 7, 0: PRINT SPACE$(w + 2);
|
||||
LOCATE i + yy, xx
|
||||
h = -1: x = INSTR(m$, "#"): IF x THEN h = x: m$ = LEFT$(m$, x - 1) + RIGHT$(m$, LEN(m$) - x)
|
||||
x = INSTR(m$, " "): IF x THEN m1$ = LEFT$(m$, x - 1): m2$ = RIGHT$(m$, LEN(m$) - x - 1): m$ = m1$ + SPACE$(w - LEN(m1$) - LEN(m2$)) + m2$
|
||||
FOR x = 1 TO LEN(m$)
|
||||
|
@ -3008,7 +3103,11 @@ DO
|
|||
IF iCHANGED THEN
|
||||
IF KB THEN change = 1
|
||||
IF mCLICK THEN change = 1: mousedown = 1
|
||||
IF mCLICK2 THEN change = 1
|
||||
IF mRELEASE THEN change = 1: mouseup = 1
|
||||
IF mWHEEL THEN change = 1
|
||||
IF mX THEN change = 1
|
||||
IF mY THEN change = 1
|
||||
END IF
|
||||
IF mB THEN change = 1
|
||||
'revert to previous menuwhen alt pressed again
|
||||
|
@ -3022,29 +3121,74 @@ DO
|
|||
|
||||
s = 0
|
||||
|
||||
IF mWHEEL THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF mCLICK2 AND idecontextualmenu THEN 'A new right click in the text area repositions the contextual menu
|
||||
IF mX > 1 AND mX < idewx AND mY > 2 AND mY < (idewy - 5) THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
GOTO invokecontextualmenu
|
||||
ELSE
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
GOTO ideloop
|
||||
END IF
|
||||
END IF
|
||||
|
||||
'mouse selection
|
||||
IF mouseup THEN
|
||||
'uses pre-calc xx & w
|
||||
IF mX >= xx - 2 AND mX < xx - 2 + w + 4 THEN
|
||||
IF mY > 2 AND mY <= menusize(m) + 2 THEN
|
||||
y = mY - 2
|
||||
IF mY > yy AND mY <= menusize(m) + yy THEN
|
||||
y = mY - yy
|
||||
IF menu$(m, y) <> "-" THEN
|
||||
s = r
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
|
||||
IF mX < xx - 2 OR mX >= xx - 2 + w + 4 OR mY > menusize(m) + 3 THEN
|
||||
IF mX < xx - 2 OR mX >= xx - 2 + w + 4 OR mY > yy + menusize(m) + 1 or (mY < yy and idecontextualmenu) THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
END IF
|
||||
IF not mouseup and not mousedown THEN 'Check if we're hovering on menu options
|
||||
if oldmy <> mY then
|
||||
IF mX >= xx - 2 AND mX < xx - 2 + w + 4 THEN
|
||||
IF mY > yy AND mY <= menusize(m) + yy THEN
|
||||
y = mY - yy
|
||||
IF menu$(m, y) <> "-" THEN
|
||||
r = y
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
IF mY = 1 THEN GOTO checkmenubarhover
|
||||
END IF
|
||||
oldmy = mY
|
||||
end if
|
||||
if oldmx <> mX then
|
||||
checkmenubarhover:
|
||||
IF mY = 1 and idecontextualmenu = 0 THEN 'Check if we're hovering on menu bar
|
||||
lastm = m
|
||||
FOR i = 1 to menus
|
||||
x = CVI(MID$(MenuLocations, i * 2 - 1, 2))
|
||||
x2 = CVI(MID$(MenuLocations, i * 2 - 1, 2)) + len(menu$(i, 0))
|
||||
IF mX >= x and mX < x2 THEN
|
||||
m = i
|
||||
r = 1
|
||||
EXIT FOR
|
||||
END IF
|
||||
NEXT
|
||||
END IF
|
||||
oldmx = mX
|
||||
end if
|
||||
END IF
|
||||
|
||||
IF mB THEN
|
||||
|
||||
'top row
|
||||
IF mY = 1 THEN
|
||||
idecontextualmenu = 0
|
||||
lastm = m
|
||||
x = 3
|
||||
FOR i = 1 TO menus
|
||||
|
@ -3062,18 +3206,18 @@ DO
|
|||
|
||||
'uses pre-calc xx & w
|
||||
IF mX >= xx - 2 AND mX < xx - 2 + w + 4 THEN
|
||||
IF mY > 2 AND mY <= menusize(m) + 2 THEN
|
||||
y = mY - 2
|
||||
IF mY > yy AND mY <= menusize(m) + yy THEN
|
||||
y = mY - yy
|
||||
IF menu$(m, y) <> "-" THEN r = y
|
||||
END IF
|
||||
END IF
|
||||
|
||||
END IF 'mb
|
||||
|
||||
IF KB = KEY_LEFT THEN m = m - 1: r = 1
|
||||
IF KB = KEY_RIGHT THEN m = m + 1: r = 1
|
||||
IF KB = KEY_LEFT AND idecontextualmenu = 0 THEN m = m - 1: r = 1
|
||||
IF KB = KEY_RIGHT AND idecontextualmenu = 0 THEN m = m + 1: r = 1
|
||||
IF m < 1 THEN m = menus
|
||||
IF m > menus THEN m = 1
|
||||
IF m > menus AND idecontextualmenu = 0 THEN m = 1
|
||||
IF KB = KEY_ESC THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
GOTO ideloop
|
||||
|
@ -3232,7 +3376,7 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "Add/Remove #Bookmark ALT+Left" THEN
|
||||
IF menu$(m, s) = "Add/Remove #Bookmark Alt+Left" THEN
|
||||
PCOPY 2, 0
|
||||
bmkremoved = 0
|
||||
bmkremoveb:
|
||||
|
@ -3258,10 +3402,10 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Next Bookmark ALT+Down" OR menu$(m, s) = "#Previous Bookmark ALT+Up" THEN
|
||||
IF menu$(m, s) = "#Next Bookmark Alt+Down" OR menu$(m, s) = "#Previous Bookmark Alt+Up" THEN
|
||||
PCOPY 2, 0
|
||||
IF IdeBmkN = 0 THEN
|
||||
idemessagebox "Bookmarks", "No bookmarks exist (Use ALT+Left to create a bookmark)"
|
||||
idemessagebox "Bookmarks", "No bookmarks exist (Use Alt+Left to create a bookmark)"
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO ideloop
|
||||
END IF
|
||||
|
@ -3273,7 +3417,7 @@ DO
|
|||
END IF
|
||||
END IF
|
||||
l = idecy
|
||||
z = 0: IF menu$(m, s) = "#Next Bookmark ALT+Down" THEN z = 1
|
||||
z = 0: IF menu$(m, s) = "#Next Bookmark Alt+Down" THEN z = 1
|
||||
DO
|
||||
IF z = 1 THEN l = l + 1 ELSE l = l - 1
|
||||
IF l < 1 THEN l = iden
|
||||
|
@ -3327,6 +3471,11 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF left$(menu$(m, s), 10) = "#Help on '" THEN 'Contextual menu Help
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO contextualhelp
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Contents page" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
lnk$ = "QB64 Help Menu"
|
||||
|
@ -3475,14 +3624,14 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "New #SUB..." THEN
|
||||
IF LEFT$(menu$(m, s), 8) = "New #SUB" THEN
|
||||
PCOPY 2, 0
|
||||
idenewsf "SUB"
|
||||
ideselect = 0
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO ideloop
|
||||
END IF
|
||||
IF menu$(m, s) = "New #FUNCTION..." THEN
|
||||
IF LEFT$(menu$(m, s), 13) = "New #FUNCTION" THEN
|
||||
PCOPY 2, 0
|
||||
idenewsf "FUNCTION"
|
||||
ideselect = 0
|
||||
|
@ -3499,9 +3648,7 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
|
||||
|
||||
IF menu$(m, s) = "#Find..." THEN
|
||||
IF menu$(m, s) = "#Find... Ctrl+F3" THEN
|
||||
PCOPY 2, 0
|
||||
idefindjmp:
|
||||
r$ = idefind
|
||||
|
@ -3510,6 +3657,13 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF left$(menu$(m, s), 6) = "Find '" THEN 'Contextual menu Find
|
||||
idefindtext = idecontextualSearch$
|
||||
IdeAddSearched idefindtext
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO idemf3
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Change..." THEN
|
||||
PCOPY 2, 0
|
||||
r$ = idechange
|
||||
|
@ -3670,18 +3824,18 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Paste Shift+Ins or CTRL+V" THEN
|
||||
IF menu$(m, s) = "#Paste Shift+Ins or Ctrl+V" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO idempaste
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Copy Ctrl+Ins or CTRL+C" THEN
|
||||
IF menu$(m, s) = "#Copy Ctrl+Ins or Ctrl+C" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
IF ideselect = 1 THEN GOTO copy2clip
|
||||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "Cu#t Shift+Del or CTRL+X" THEN
|
||||
IF menu$(m, s) = "Cu#t Shift+Del or Ctrl+X" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
IF ideselect = 1 THEN
|
||||
K$ = CHR$(0) + "S" 'tricks handler into del after copy
|
||||
|
@ -3690,23 +3844,23 @@ DO
|
|||
GOTO ideloop
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Undo CTRL+Z" THEN
|
||||
IF menu$(m, s) = "#Undo Ctrl+Z" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO idemundo
|
||||
END IF
|
||||
|
||||
IF menu$(m, s) = "#Redo CTRL+Y" THEN
|
||||
IF menu$(m, s) = "#Redo Ctrl+Y" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO idemredo
|
||||
END IF
|
||||
|
||||
|
||||
IF menu$(m, s) = "Select #All CTRL+A" THEN
|
||||
IF menu$(m, s) = "Select #All Ctrl+A" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
GOTO idemselectall
|
||||
END IF
|
||||
|
||||
menu$(m, i) = "Select #All CTRL+A": i = i + 1
|
||||
menu$(m, i) = "Select #All Ctrl+A": i = i + 1
|
||||
|
||||
IF menu$(m, s) = "#Start F5" THEN
|
||||
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
|
||||
|
@ -9715,6 +9869,96 @@ menu$(m, i) = "E#xit": i = i + 1
|
|||
menusize(m) = i - 1
|
||||
END SUB
|
||||
|
||||
SUB IdeMakeContextualMenu
|
||||
m = idecontextualmenuID: i = 0
|
||||
menu$(m, i) = "Contextual": i = i + 1
|
||||
|
||||
'Figure out if the user wants to search for a selected term -- copied from idefind$
|
||||
IF ideselect THEN
|
||||
IF ideselecty1 = idecy THEN 'single line selected
|
||||
a$ = idegetline(idecy)
|
||||
a2$ = ""
|
||||
sx1 = ideselectx1: sx2 = idecx
|
||||
IF sx2 < sx1 THEN SWAP sx1, sx2
|
||||
FOR x = sx1 TO sx2 - 1
|
||||
IF x <= LEN(a$) THEN a2$ = a2$ + MID$(a$, x, 1) ELSE a2$ = a2$ + " "
|
||||
NEXT
|
||||
END IF
|
||||
IF len(a2$) > 0 THEN
|
||||
sela2$ = ucase$(a2$)
|
||||
idecontextualSearch$ = a2$
|
||||
IF LEN(a2$) > 22 THEN
|
||||
a2$ = LEFT$(a2$, 19) + string$(3, 250)
|
||||
END IF
|
||||
menu$(m, i) = "Find '" + a2$ + "'": i = i + 1
|
||||
END IF
|
||||
END IF
|
||||
'identify if word or character at current cursor position is in the help system -- copied from ide2
|
||||
a$ = idegetline(idecy)
|
||||
x = idecx
|
||||
HelpOnSelection = 0
|
||||
IF x <= LEN(a$) THEN
|
||||
IF alphanumeric(ASC(a$, x)) THEN
|
||||
x1 = x
|
||||
DO WHILE x1 > 1
|
||||
IF alphanumeric(ASC(a$, x1 - 1)) OR ASC(a$, x1 - 1) = 36 THEN x1 = x1 - 1 ELSE EXIT DO
|
||||
LOOP
|
||||
x2 = x
|
||||
DO WHILE x2 < LEN(a$)
|
||||
IF alphanumeric(ASC(a$, x2 + 1)) OR ASC(a$, x2 + 1) = 36 THEN x2 = x2 + 1 ELSE EXIT DO
|
||||
LOOP
|
||||
a2$ = MID$(a$, x1, x2 - x1 + 1)
|
||||
ELSE
|
||||
a2$ = CHR$(ASC(a$, x))
|
||||
END IF
|
||||
a2$ = UCASE$(a2$)
|
||||
'check if F1 is in help links
|
||||
fh = FREEFILE
|
||||
OPEN "internal\help\links.bin" FOR INPUT AS #fh
|
||||
lnks = 0: lnks$ = CHR$(0)
|
||||
DO UNTIL EOF(fh)
|
||||
LINE INPUT #fh, l$
|
||||
c = INSTR(l$, ","): l1$ = LEFT$(l$, c - 1): l2$ = RIGHT$(l$, LEN(l$) - c)
|
||||
IF a2$ = UCASE$(l1$) THEN
|
||||
IF INSTR(lnks$, CHR$(0) + l2$ + CHR$(0)) = 0 THEN
|
||||
lnks = lnks + 1
|
||||
EXIT DO
|
||||
END IF
|
||||
END IF
|
||||
LOOP
|
||||
CLOSE #fh
|
||||
|
||||
IF lnks THEN
|
||||
IF LEN(l2$) > 15 THEN
|
||||
l2$ = LEFT$(l2$, 12) + string$(3, 250)
|
||||
END IF
|
||||
if instr(l2$, "Parenthesis") = 0 then
|
||||
menu$(m, i) = "#Help on '" + l2$ + "'": i = i + 1
|
||||
end if
|
||||
END IF
|
||||
END IF
|
||||
|
||||
IF i > 1 THEN
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
END IF
|
||||
|
||||
menu$(m, i) = "Cu#t Shift+Del or Ctrl+X": i = i + 1
|
||||
menu$(m, i) = "#Copy Ctrl+Ins or Ctrl+C": i = i + 1
|
||||
menu$(m, i) = "#Paste Shift+Ins or Ctrl+V": i = i + 1
|
||||
menu$(m, i) = "Cl#ear Del": i = i + 1
|
||||
menu$(m, i) = "Select #All Ctrl+A": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "#Undo Ctrl+Z": i = i + 1
|
||||
menu$(m, i) = "#Redo Ctrl+Y": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "Comment (add ')": i = i + 1
|
||||
menu$(m, i) = "Uncomment (remove ')": i = i + 1
|
||||
menu$(m, i) = "-": i = i + 1
|
||||
menu$(m, i) = "New #SUB...": i = i + 1
|
||||
menu$(m, i) = "New #FUNCTION...": i = i + 1
|
||||
menusize(m) = i - 1
|
||||
END SUB
|
||||
|
||||
SUB IdeAddRecent (f2$)
|
||||
f$ = CRLF + f2$ + CRLF
|
||||
fh = FREEFILE
|
||||
|
|
Loading…
Reference in a new issue