From fc607aa6134994a050f9b00cd6f11134ad9f5196 Mon Sep 17 00:00:00 2001 From: FellippeHeitor Date: Tue, 2 Jan 2018 03:11:08 -0200 Subject: [PATCH] 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. --- source/global/version.bas | 2 +- source/ide/ide_global.bas | 3 +- source/ide/ide_methods.bas | 192 ++++++++++++++++++++++++++++--------- 3 files changed, 152 insertions(+), 45 deletions(-) diff --git a/source/global/version.bas b/source/global/version.bas index 625f989cd..e178f9269 100644 --- a/source/global/version.bas +++ b/source/global/version.bas @@ -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" diff --git a/source/ide/ide_global.bas b/source/ide/ide_global.bas index 5444c92e0..8dc4183be 100644 --- a/source/ide/ide_global.bas +++ b/source/ide/ide_global.bas @@ -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) diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index 59a1cef80..ba5ae4664 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -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