1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-05 00:40:26 +00:00

Add Line Number options to submenu in View menu. Also:

- Adds submenus.
- Renamed "Save EXE in the source folder" to "Output EXE to source folder" in Run menu.
- Changed behavior of disabled menu items; instead of closing the menu, do nothing.
This commit is contained in:
FellippeHeitor 2018-01-02 03:11:08 -02:00
parent 99352ea125
commit fc607aa613
3 changed files with 152 additions and 45 deletions

View file

@ -4,5 +4,5 @@ DIM SHARED AutoBuildMsg AS STRING
Version$ = "1.2"
'BuildNum format is YYYYMMDD/id, where id is a ever-increasing
'integer. If you make a change, update the date and increase the id!
BuildNum$ = "20171230/83"
BuildNum$ = "20180102/84"

View file

@ -207,7 +207,8 @@ DIM SHARED menus AS INTEGER, idecontextualmenuID AS INTEGER
DIM SHARED ideeditmenuID AS INTEGER
DIM SHARED OptionsMenuID AS INTEGER, OptionsMenuSwapMouse AS INTEGER, OptionsMenuPasteCursor AS INTEGER
DIM SHARED OptionsMenuShowErrorsImmediately AS INTEGER
DIM SHARED ViewMenuID AS INTEGER, ViewMenuShowLineNumbers AS INTEGER
DIM SHARED ViewMenuID AS INTEGER, ViewMenuShowLineNumbersSubMenuID AS INTEGER
DIM SHARED ViewMenuShowSeparatorID AS INTEGER, ViewMenuShowBGID AS INTEGER
DIM SHARED RunMenuID AS INTEGER, RunMenuSaveExeWithSource AS INTEGER, brackethighlight AS INTEGER
DIM SHARED multihighlight AS INTEGER, keywordHighlight AS INTEGER
DIM SHARED PresetColorSchemes AS INTEGER, TotalColorSchemes AS INTEGER, ColorSchemes$(0)

View file

@ -252,13 +252,7 @@ FUNCTION ide2 (ignore)
m = m + 1: i = 0: ViewMenuID = m
menu$(m, i) = "View": i = i + 1
menu$(m, i) = "#SUBs... F2": i = i + 1
ViewMenuShowLineNumbers = i
menu$(m, i) = "#Line numbers": i = i + 1
IF ShowLineNumbers THEN
menu$(ViewMenuID, ViewMenuShowLineNumbers) = CHR$(7) + menu$(ViewMenuID, ViewMenuShowLineNumbers)
END IF
menu$(m, i) = "#Line numbers " + CHR$(16): i = i + 1
menusize(m) = i - 1
m = m + 1: i = 0
@ -284,7 +278,7 @@ FUNCTION ide2 (ignore)
menu$(m, i) = "-": i = i + 1
RunMenuSaveExeWithSource = i
menu$(m, i) = "Save EXE in the source #folder": i = i + 1
menu$(m, i) = "Output EXE to source #folder": i = i + 1
IF SaveExeWithSource THEN
menu$(RunMenuID, RunMenuSaveExeWithSource) = CHR$(7) + menu$(RunMenuID, RunMenuSaveExeWithSource)
END IF
@ -350,6 +344,22 @@ FUNCTION ide2 (ignore)
m = m + 1
idecontextualmenuID = m
'View Menu sub menu for Line Numbers options
m = m + 1: i = 0
menu$(m, i) = "ViewMenuShowLineNumbersSubMenu": i = i + 1
ViewMenuShowLineNumbersSubMenuID = m
IF ShowLineNumbers THEN menu$(m, i) = "#Hide line numbers" ELSE menu$(m, i) = "#Show line numbers"
i = i + 1
menu$(m, i) = "#Background color": IF ShowLineNumbersUseBG THEN menu$(m, i) = CHR$(7) + menu$(m, i)
ViewMenuShowBGID = i
IF ShowLineNumbers = 0 THEN menu$(m, i) = "~" + menu$(m, i)
i = i + 1
menu$(m, i) = "Sho#w separator": IF ShowLineNumbersSeparator THEN menu$(m, i) = CHR$(7) + menu$(m, i)
ViewMenuShowSeparatorID = i
IF ShowLineNumbers = 0 THEN menu$(m, i) = "~" + menu$(m, i)
i = i + 1
menusize(m) = i - 1
IF os$ = "WIN" THEN
idepathsep$ = "\"
END IF
@ -1410,7 +1420,7 @@ FUNCTION ide2 (ignore)
GOTO specialchar
END IF
'3- Link to the output folder when "Save EXE in the source folder" is checked:
'3- Link to the output folder when "Output EXE to source #folder" is checked:
IF INSTR(_OS$, "WIN") THEN
SHELL _DONTWAIT "explorer /select," + QuotedFilename$(path.exe$ + file$ + extension$)
ELSEIF INSTR(_OS$, "MAC") THEN
@ -3969,7 +3979,7 @@ FUNCTION ide2 (ignore)
GetInput
IF oldmx <> mX OR oldmy <> mY THEN
IF mY = 1 AND idecontextualmenu = 0 THEN 'Check if we're hovering on menu bar
IF mY = 1 AND idecontextualmenu <> 1 THEN 'Check if we're hovering on menu bar
lastm = m
FOR i = 1 TO menus
x = CVI(MID$(MenuLocations, i * 2 - 1, 2))
@ -4082,8 +4092,13 @@ FUNCTION ide2 (ignore)
IF IdeSystem = 2 THEN IdeSystem = 1: GOSUB UpdateSearchBar
PCOPY 0, 2
SCREEN , , 1, 0
updateMenuPanel%% = 0
parentMenuR = r
r = 1
parentMenu = 0
parentMenuSetup%% = 0
IF idecontextualmenu = 1 THEN idectxmenuX = mX: idectxmenuY = mY: m = idecontextualmenuID
IF idecontextualmenu = 2 THEN idectxmenuX = xx + w + 3: idectxmenuY = yy + r: parentMenu = m: m = ViewMenuShowLineNumbersSubMenuID
IdeMakeEditMenu
oldmy = mY: oldmx = mX
DO
@ -4095,6 +4110,14 @@ FUNCTION ide2 (ignore)
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) + " "
ELSE
IF parentMenu > 0 AND parentMenuSetup%% = 0 THEN
parentMenuSetup%% = -1
backToParent.x1 = xx - 1
backToParent.x2 = xx + w
backToParent.y1 = 3
backToParent.y2 = backToParent.y1 + menusize(parentMenu)
END IF
END IF
COLOR 0, 7
'calculate menu width
@ -4109,7 +4132,7 @@ FUNCTION ide2 (ignore)
IF l > w THEN w = l
NEXT
yy = 2
IF idecontextualmenu = 1 THEN
IF idecontextualmenu > 0 THEN
actual.idewy = idewy
IF idesubwindow <> 0 THEN
actual.idewy = idewy + idesubwindow
@ -4131,7 +4154,7 @@ FUNCTION ide2 (ignore)
ELSEIF LEFT$(m$, 1) = "~" THEN
m$ = RIGHT$(m$, LEN(m$) - 1) 'Remove the tilde before printing
IF r = i THEN LOCATE i + yy, xx - 1: COLOR 7, 0: PRINT SPACE$(w + 2);
LOCATE i + yy, xx
IF LEFT$(m$, 1) = CHR$(7) THEN LOCATE i + yy, xx - 1 ELSE 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$)
@ -4151,15 +4174,13 @@ FUNCTION ide2 (ignore)
END IF
PRINT MID$(m$, x, 1);
NEXT
END IF
NEXT
PCOPY 1, 0
IF updateMenuPanel%% THEN GOTO menuChoiceMade
change = 0
DO
mousedown = 0: mouseup = 0
@ -4212,7 +4233,7 @@ FUNCTION ide2 (ignore)
GOTO ideloop
END IF
IF mCLICK2 AND idecontextualmenu THEN 'A new right click in the text area repositions the contextual menu
IF mCLICK2 AND idecontextualmenu = 1 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
@ -4233,12 +4254,33 @@ FUNCTION ide2 (ignore)
END IF
END IF
IF mX < xx - 2 OR mX >= xx - 2 + w + 4 OR mY > yy + menusize(m) + 1 OR (mY < yy AND idecontextualmenu) THEN
IF parentMenu > 0 AND _
mX >= backToParent.x1 AND mX =< backToParent.x2 AND _
mY >= backToParent.y1 AND mY =< backToParent.y2 THEN
m = parentMenu
r = parentMenuR
parentMenu = 0
idecontextualmenu = 0
PCOPY 3, 2
_CONTINUE
END IF
IF mX < xx - 2 OR mX >= xx - 2 + w + 4 OR mY > yy + menusize(m) + 1 OR (mY < yy AND idecontextualmenu = 1) 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 parentMenu > 0 AND oldmy <> mY AND oldmx <> mX AND _
mX >= backToParent.x1 AND mX =< backToParent.x2 AND _
mY >= backToParent.y1 AND mY =< backToParent.y2 THEN
m = parentMenu
r = parentMenuR
parentMenu = 0
idecontextualmenu = 0
PCOPY 3, 2
_CONTINUE
END IF
IF oldmy <> mY THEN
IF mX >= xx - 2 AND mX < xx - 2 + w + 4 THEN
IF mY > yy AND mY <= menusize(m) + yy THEN
@ -4254,7 +4296,7 @@ FUNCTION ide2 (ignore)
END IF
IF oldmx <> mX THEN
checkmenubarhover:
IF mY = 1 AND idecontextualmenu = 0 THEN 'Check if we're hovering on menu bar
IF mY = 1 AND idecontextualmenu <> 1 THEN 'Check if we're hovering on menu bar
lastm = m
FOR i = 1 TO menus
x = CVI(MID$(MenuLocations, i * 2 - 1, 2))
@ -4262,6 +4304,7 @@ FUNCTION ide2 (ignore)
IF mX >= x AND mX < x2 THEN
m = i
r = 1
IF idecontextualmenu > 1 THEN idecontextualmenu = 0: PCOPY 3, 2
EXIT FOR
END IF
NEXT
@ -4274,7 +4317,6 @@ FUNCTION ide2 (ignore)
'top row
IF mY = 1 THEN
idecontextualmenu = 0
lastm = m
x = 3
FOR i = 1 TO menus
@ -4283,6 +4325,7 @@ FUNCTION ide2 (ignore)
m = i
r = 1
IF lastm = m AND mousedown = 1 THEN PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: GOTO ideloop
idecontextualmenu = 0
EXIT FOR
END IF
x = x + x2
@ -4300,8 +4343,31 @@ FUNCTION ide2 (ignore)
END IF 'mb
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 KB = KEY_LEFT AND idecontextualmenu = 0 THEN
m = m - 1: r = 1
ELSEIF KB = KEY_LEFT AND idecontextualmenu > 1 THEN
idecontextualmenu = 0
PCOPY 3, 2
m = parentMenu
r = parentMenuR
parentMenu = 0
END IF
IF KB = KEY_RIGHT AND idecontextualmenu = 0 THEN
IF RIGHT$(menu$(m, r), 1) = CHR$(16) THEN
SELECT CASE LEFT$(menu$(m, r), LEN(menu$(m, r)) - 3)
CASE "#Line numbers"
idecontextualmenu = 2
GOTO showmenu
END SELECT
ELSE
m = m + 1: r = 1
END IF
ELSEIF KB = KEY_RIGHT AND idecontextualmenu > 1 THEN
idecontextualmenu = 0
PCOPY 3, 2
m = parentMenu + 1
r = 1
END IF
IF m < 1 THEN m = menus
IF m > menus AND idecontextualmenu = 0 THEN m = 1
IF KB = KEY_ESC THEN
@ -4334,13 +4400,14 @@ FUNCTION ide2 (ignore)
x = INSTR(menu$(m, r2), "#")
IF x THEN
a$ = UCASE$(MID$(menu$(m, r2), x + 1, 1))
IF K$ = a$ THEN s = r2: EXIT FOR
IF K$ = a$ THEN s = r2: updateMenuPanel%% = -1: EXIT FOR
END IF
NEXT
IF updateMenuPanel%% THEN r = r2: _CONTINUE
END IF
IF s THEN
menuChoiceMade:
IF KALT THEN idehl = 1 ELSE idehl = 0 'set idehl, a shared variable used by various dialogue boxes
IF menu$(m, s) = "Comment (add ') Ctrl+R" THEN
@ -4413,11 +4480,6 @@ FUNCTION ide2 (ignore)
GOTO ideloop
END IF
IF LEFT$(menu$(m, s), 16) = "~Decrease indent" OR menu$(m, s) = "~Increase indent TAB" THEN
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
GOTO ideloop
END IF
IF menu$(m, s) = "#Language..." THEN
PCOPY 2, 0
retval = idelanguagebox
@ -4524,15 +4586,15 @@ FUNCTION ide2 (ignore)
GOTO ideloop
END IF
IF RIGHT$(menu$(m, s), 30) = "Save EXE in the source #folder" THEN
IF RIGHT$(menu$(m, s), 28) = "Output EXE to source #folder" THEN
PCOPY 2, 0
SaveExeWithSource = NOT SaveExeWithSource
IF SaveExeWithSource THEN
WriteConfigSetting "'[GENERAL SETTINGS]", "SaveExeWithSource", "TRUE"
menu$(RunMenuID, RunMenuSaveExeWithSource) = CHR$(7) + "Save EXE in the source #folder"
menu$(RunMenuID, RunMenuSaveExeWithSource) = CHR$(7) + "Output EXE to source #folder"
ELSE
WriteConfigSetting "'[GENERAL SETTINGS]", "SaveExeWithSource", "FALSE"
menu$(RunMenuID, RunMenuSaveExeWithSource) = "Save EXE in the source #folder"
menu$(RunMenuID, RunMenuSaveExeWithSource) = "Output EXE to source #folder"
END IF
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
GOTO ideloop
@ -4841,20 +4903,65 @@ FUNCTION ide2 (ignore)
GOTO ideloop
END IF
IF RIGHT$(menu$(m, s), 13) = "#Line numbers" THEN
IF menu$(m, s) = "#Line numbers " + CHR$(16) THEN
idecontextualmenu = 2
GOTO showmenu
END IF
IF menu$(m, s) = "#Show line numbers" THEN
PCOPY 2, 0
ShowLineNumbers = NOT ShowLineNumbers
IF ShowLineNumbers THEN
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbers", "TRUE"
menu$(ViewMenuID, ViewMenuShowLineNumbers) = CHR$(7) + "#Line numbers"
ELSE
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbers", "FALSE"
menu$(ViewMenuID, ViewMenuShowLineNumbers) = "#Line numbers"
END IF
ShowLineNumbers = -1
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbers", "TRUE"
menu$(m, s) = "#Hide line numbers"
menu$(m, ViewMenuShowBGID) = MID$(menu$(m, ViewMenuShowBGID), 2)
menu$(m, ViewMenuShowSeparatorID) = MID$(menu$(m, ViewMenuShowSeparatorID), 2)
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
GOTO ideloop
END IF
IF menu$(m, s) = "#Hide line numbers" THEN
PCOPY 2, 0
ShowLineNumbers = 0
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbers", "FALSE"
menu$(m, s) = "#Show line numbers"
menu$(m, ViewMenuShowBGID) = "~" + menu$(m, ViewMenuShowBGID)
menu$(m, ViewMenuShowSeparatorID) = "~" + menu$(m, ViewMenuShowSeparatorID)
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
GOTO ideloop
END IF
IF RIGHT$(menu$(m, s), 17) = "#Background color" THEN
IF LEFT$(menu$(m, s), 1) <> "~" THEN
PCOPY 2, 0
ShowLineNumbersUseBG = NOT ShowLineNumbersUseBG
IF ShowLineNumbersUseBG THEN
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbersUseBG", "TRUE"
menu$(m, s) = CHR$(7) + "#Background color"
ELSE
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbersUseBG", "FALSE"
menu$(m, s) = "#Background color"
END IF
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
GOTO ideloop
END IF
END IF
IF RIGHT$(menu$(m, s), 15) = "Sho#w separator" THEN
IF LEFT$(menu$(m, s), 1) <> "~" THEN
PCOPY 2, 0
ShowLineNumbersSeparator = NOT ShowLineNumbersSeparator
IF ShowLineNumbersSeparator THEN
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbersSeparator", "TRUE"
menu$(m, s) = CHR$(7) + "Sho#w separator"
ELSE
WriteConfigSetting "'[GENERAL SETTINGS]", "ShowLineNumbersSeparator", "FALSE"
menu$(m, s) = "Sho#w separator"
END IF
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt
GOTO ideloop
END IF
END IF
IF menu$(m, s) = "#Find... Ctrl+F3" THEN
PCOPY 2, 0
idefindjmp:
@ -5298,10 +5405,9 @@ FUNCTION ide2 (ignore)
END IF
IF LEFT$(menu$(m, s), 1) = "~" THEN 'Ignore disabled items (starting with "~")
PCOPY 3, 0: SCREEN , , 3, 0: idewait4mous: idewait4alt: GOTO ideloop
_CONTINUE
END IF
SCREEN , , 0, 0
CLS: PRINT "MENU ITEM [" + menu$(m, s) + "] NOT IMPLEMENTED!": END
END IF