From 653161d4985e158c85ea80110740a8cd693456ac Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Sun, 7 May 2023 17:19:42 +0000 Subject: [PATCH] CEdit: added [shift+mouse wheel] for horizontal scrolling; search improved. git-svn-id: svn://kolibrios.org@9915 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/CEDIT | Bin 33960 -> 34094 bytes programs/develop/cedit/SHORTCUT.TXT | 2 + programs/develop/cedit/SRC/CEdit.ob07 | 456 +++++++++++----------- programs/develop/cedit/SRC/StatusBar.ob07 | 14 +- programs/develop/cedit/SRC/Text.ob07 | 185 +++++---- 5 files changed, 353 insertions(+), 304 deletions(-) diff --git a/programs/develop/cedit/CEDIT b/programs/develop/cedit/CEDIT index ea0626be1fc1ab8ebf6a3dc811db399701235216..e3258b8c74325915da8b6b00da0989ac4afefa71 100644 GIT binary patch literal 34094 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 Cs4ues literal 33960 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

@~QOdOI$Og}=gW_W`FJhj=8rvIZg z%L!TNUHx~Fi&9(@DE?V^;Zb9HrH%R=Jh1S!U_C#xk8^?9&GxfX2RL46Egcj;0Zd091<#sNi@5J3 z_&=Z`^nf#b3~++^8=QQ2s6}o+$PQ&Zsp3u*uKB_ieko?1VqIG-r`li|84f0tK#IljB+0ihT zn*YG_>u#5bNj*kkfT7n2O4SnGs}8#zvAcl$ZUGz7gAIkU3@gFIw5g_7(sLdY(3~MI z3?~-U3eC#akD$>_{^A5f<>`gtsk598%2IX&#qR0>Um?Xck9=}p?1#St-7SvClq28E zL9YbnBktDY{;p!QauBsl^-h<2(7yi%sJSufPn^vtceI{GAB)}5S+?G&pn&jpvTs3< zJotCVdbx@2v77i%fCxgjcEd2MtH3DldOWVk&L1cHiT|GD!*A!@rh1+JV;zuCp}hij zBJ!cU^%iAdQx`qOn^xW-WS(1x`4Z^EbV1e@U z?Z*Kg)I|f>$HG{TeocjlFadQvQX*=7YnS}T<0SF6WL%|Nzp94WgHi6W&6~;XPQi6e znt_`Dzf(vU4nrY*(d+|sat{q!U|kqA*B+#BZWY3Btc(=B^MEmC$6apIudw%N2A#&^ z&m_1f$r9kX%pCo)GS@_o$c7#ge#s@Dga^ZTU@3!%rHWOKebA3=3}%%j=a%r%hJcMq`H<5d6B3edc7J-+8^ z;TM4h8gnZ4)eQ7(Pi#Ue`LnOWhg~n-?OWad76D2;3kdCiO!=yJ#6Cbn{U`!0n6Wh& zO*q|gJd4nh6HyO08WLjN$wN9g#e36r8NU%=b5ILEGtqb{B<>8(o$^%Fdw96EEm_PU zY?FemZ7uSS*m-sC=dr|>lGnX2GV7)q+}1$N(c(3d!LBqwSLydVOqD>KT>1kyDnk)| z7HRUw59yA3cZHx;NTFT1!S`qIgDnbDo8xv}qtxGXIdRge@O%cJlIliYA!WIec?AJ7 z|K0b&-RTu_5UNE+1^-wW_D7<~D+y-{V00LF`BsDjVJMC#GcuLx1(_-y643HS9Qv41 z0vk+fdxs9;=^NrmW)*(I<>31#XPZ>=^{8}|_P-OZY)@PTV{)*NZfBRAmC9WggUiGr z3^@x|YA39)I){IjBNqO8$+Y(2f>!Wj&2B1www;a#3CPbUDzGFgW#hfWB|r3eo2x|a zD(@QiM2Y|_1%A8#QTuE!lVi!G0$)9A8PiAb`8Tt2MD;WXtT~zjzA0`~*UzBtU7ceT7T5NT z6ZI0&HjqaHO*o_3`Zn$f#XVW-{7?TfTtFy-9D903r42KmW!~oLXiQ_O;u498vcr zY3KkVpXfJYWvcawXNB{U*Fi`Rv%?-Nqi%Zzv^iAK-}#IymZcvJim4Db4(xmXc}avU z4Q93uwZ;;rXWq*3&Ck>ROE%BI3?rchhQ4)GD5lgo3B-x58uIc94>!_ss0Tu5>zxKe zxl@#D@+*fo^7LjTbl-2Xc@vY1}G38Ks>B%ofa-iwXtKIh$X0;J=CPo z_9aK;?{&73G?3?15+;W1EehgFk@1716;Jqi79b>#eIRuFxHFQ9UzW$9!0)^ChaP2S zA{3UQDK=G4YY+iAl%s_~Ug>(Any2iOVJ!+I%bb_K0ATov(V@qmL&4C~ymoV~$rVY{ zo2gkp^s`nkGX_}W{%!=!v+9Xf^Mns%Wvhla$SZ!?A@8M`j+bjV63wpQ|*D$2UcfX9ZRT0(a_Agjt0wdd~suYQ_uFD z{53vh^^o8ab+@Pd6x!mIB-gUEn4RX5WE(ptGoR$w^Dr3V#*Y3_@XdAj6 zmo5PEVRqHu&Tm=q3(#Ll)J|!{QDTdu=;QqwEFmKnS`X#`q}UH6Yh8!ic3-s6xPbCd zw#5m%_A!kl5)YcVmaS^aJpI?%T7*ElkE3HW$DyQHOCtw- zrtVK&ZnNOlSohN9ke#?N*@h2GQ%IXK=r2lqA@IY#ELcruwR|LCRVWJCS}wVMa%`ru zPo!vHO>G~#`MTIr{V_vab<)9ZT?5tjXpFxFOV$`&*vLmjv*Py_uE^O77p_^^8?WL3 zzKYI3+P0|I_>T&WG+u%uY&WIu8dU?hX(5cP{P_do!VU9&>+MoLl4<2aOB>j4lg*v? z(tK}egVQ#d*qOV=LjJAXkoh#`)hszn%cSMpTz9~udv%k`G>0O`1(dPZE+EB&q2p#x za&ZNOpl7Uj`EU>z^fy!V{OzD1zeS7ZN%zt_$g{M+*&^cwY!ac&*Kz+}0%CA)Ht3x& zal)bKY0;V;U;8HK;^ej6zE;z&2t`F*3&Hmdx>do`?V0YP(XQZ|`R2$Dhl>S~G@2=| zxz?pza%}POC-^QJ_z$=+l#r?c0CYpyTB{+*+9)YOIM${#T^p?DE{DHAmth7o(nrhq zNCE%`h(YFE0ewvAN?t)a{21j+gsl@Wf#!QfJg7TBJv2!FBs3=(^D8-WL4#uCN{QaF zV!+D^(D%zVzz8=SpU0p={&QPo4SwfOFwQS9d8#6mDet}+6z7VZV~;xWaiQIfSbrTs zlY~dI&N>j>csyEoD<&Zcn+pDb$mew{jq#fbhPDfsi1CDGIMORMS|w-6TdWQ4JgN(? z;2`urTEm#oUG_+crju2C0eA$5`zD8_uIg%6OL7$N>9P@I$Q$l0O-H6K`tSAMJOpdo znc(EWI30g1L=x<*951OMV&g*7Q1G zq`E+*#+L|}#VvTWg)YU({R<1g5tUwxh^|zla(J7A9P0?5=nOM|@fCg}mhn6sgIQA* zsZ?x7i~HiME>f^&ksjvb`tdAk#hoaZY6XsL5YTHTYMCK0gEqMzD2noGPBrhwoC3RI zqcWA~;aTS))?8NZQEN3WHCCZeQc~&zr`|0@I*cG#9pw_I8*|BPTtpQqQ`{t}9*OIj zDvLl&yUY|hHXC511%2f?bFPdoEI*oR|BQKr1+O3-A0qQ;leBjXSDA>cilT&B5fhBeCZn zdTYqF?0(DpZ6)9Z!X!KPN;X7A8M_lUW7}Q$o4~ZRoFb_qR)H>Z<1hxi`b!P*y&J8G z*K4e$JuuNq&0#|s5>SFFM}~yD0u`jhyyC{e3!97m7kGBM(l55z06_A*V(&S{xQK?R znXmz>tQxlM%I}fWFe?1oaJ?#EJn_8tTaO>kS!9tTg2S3^d<$ERW; zwhBsi7)0|uCEO4SDV@C~AHa`eBhBj{7`AfYU8Z2`DC(>ziX)@J*!d|<{rTStf}fVm zL`T7^ErZjGg5m5*t7^UB(lwO?rgeMZoK+&Q7JgOGs0D%? z*uA`1?ktd#kL~3~DEV|j@$|L4*CMS`=7tu2M-@b_+L+C4w>yO_Ek%qn0>nPhT#%D; zWd(=CD+tAS3?%i;rl;SL$+tj8mB`9nnZJLH)h7@J=m3Y*xwD4rYwhn5JQW;7dl z&%6QMf10J*U3tL-Rj>2q9a3~g#iu!fU~H+w*dXPsn^Q_sJ&xG*ZwB^ZbEV1hb YHMA@>;u!(oKSlA8kw%UH*bD#w2e1a&iU0rr diff --git a/programs/develop/cedit/SHORTCUT.TXT b/programs/develop/cedit/SHORTCUT.TXT index 9784cacdca..0bff533600 100644 --- a/programs/develop/cedit/SHORTCUT.TXT +++ b/programs/develop/cedit/SHORTCUT.TXT @@ -42,6 +42,8 @@ F9 выполнить ctrl+F8 отладка + shift+wheel горизонтальная прокрутка + перемещение по тексту: (ctrl+)Home, (ctrl+)End, (ctrl+)PageUp, (ctrl+)PageDown ctrl+Left, ctrl+Right diff --git a/programs/develop/cedit/SRC/CEdit.ob07 b/programs/develop/cedit/SRC/CEdit.ob07 index 5b3fad9f65..32f4ab3f0d 100644 --- a/programs/develop/cedit/SRC/CEdit.ob07 +++ b/programs/develop/cedit/SRC/CEdit.ob07 @@ -28,7 +28,7 @@ IMPORT RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; CONST - HEADER = "CEdit (13-apr-2023)"; + HEADER = "CEdit (07-may-2023)"; ShellFilter = ""; EditFilter = "sh|inc|txt|asm|ob07|c|cpp|h|pas|pp|lua|ini|json"; @@ -169,7 +169,7 @@ CONST SHIFT = Menu.SHIFT; CTRL = Menu.CTRL; - ClippingArea = 50; + ClippingArea = 32 + T.LineSpacing; VAR @@ -354,7 +354,11 @@ BEGIN T.getSelCnt(text, chars, lines); SB.setWidth(canvas.width + scrollWidth); SB.setPos(line, col); - SB.setSel(chars, lines); + IF text.foundSel # 0 THEN + SB.setSel("", text.foundCur, text.foundCnt, " / ") + ELSE + SB.setSel("sel: ", chars, lines, " | ") + END; SB.setEnc(E.eolNames[T.getEol(text)], E.names[T.getEnc(text)]); SB.draw(LEFT, height - BOTTOM + scrollWidth - 1); Tabs.modify(tabs, getIdx(text), text.modified) @@ -1591,75 +1595,75 @@ END CreateMenuBookmark; PROCEDURE Shortcuts; BEGIN - Menu.AddShortcut(17 + CTRL, menuClose); - Menu.AddShortcut(21 + CTRL, menuRedo); - Menu.AddShortcut(30 + CTRL, menuSelectAll); - Menu.AddShortcut(32 + CTRL, menuDuplicate); - Menu.AddShortcut(33 + CTRL, menuFind); - Menu.AddShortcut(35 + CTRL, menuFind); - Menu.AddShortcut(34 + CTRL, menuGoto); - Menu.AddShortcut(44 + CTRL, menuUndo); - Menu.AddShortcut(45 + CTRL, menuCut); - Menu.AddShortcut(46 + CTRL, menuCopy); - Menu.AddShortcut(47 + CTRL, menuPaste); - Menu.AddShortcut(24 + CTRL, menuOpen); - Menu.AddShortcut(31 + CTRL, menuSave); - Menu.AddShortcut(49 + CTRL, menuNew); - Menu.AddShortcut(67 + CTRL, menuBuild); - Menu.AddShortcut(66 + CTRL, menuDebug); - Menu.AddShortcut(83 + CTRL, menuRemove); - Menu.AddShortcut(22 + CTRL, menuUpper); - Menu.AddShortcut(38 + CTRL, menuLower); - Menu.AddShortcut(60 + CTRL, menuToggleBookmark); - Menu.AddShortcut(72 + CTRL, menuMoveUp); - Menu.AddShortcut(80 + CTRL, menuMoveDown); - Menu.AddShortcut(83, menuDelete); - Menu.AddShortcut(67, menuRun); - Menu.AddShortcut(15, menuIncInd); - Menu.AddShortcut(14 + SHIFT, menuDecInd); - Menu.AddShortcut(60 + SHIFT, menuPrevBookmark); - Menu.AddShortcut(60, menuNextBookmark); - Menu.AddShortcut(61 + SHIFT, menuFindPrev); - Menu.AddShortcut(61, menuFindNext); + Menu.AddShortcut(17 + CTRL, menuClose); + Menu.AddShortcut(21 + CTRL, menuRedo); + Menu.AddShortcut(30 + CTRL, menuSelectAll); + Menu.AddShortcut(32 + CTRL, menuDuplicate); + Menu.AddShortcut(33 + CTRL, menuFind); + Menu.AddShortcut(35 + CTRL, menuFind); + Menu.AddShortcut(34 + CTRL, menuGoto); + Menu.AddShortcut(44 + CTRL, menuUndo); + Menu.AddShortcut(45 + CTRL, menuCut); + Menu.AddShortcut(46 + CTRL, menuCopy); + Menu.AddShortcut(47 + CTRL, menuPaste); + Menu.AddShortcut(24 + CTRL, menuOpen); + Menu.AddShortcut(31 + CTRL, menuSave); + Menu.AddShortcut(49 + CTRL, menuNew); + Menu.AddShortcut(67 + CTRL, menuBuild); + Menu.AddShortcut(66 + CTRL, menuDebug); + Menu.AddShortcut(83 + CTRL, menuRemove); + Menu.AddShortcut(22 + CTRL, menuUpper); + Menu.AddShortcut(38 + CTRL, menuLower); + Menu.AddShortcut(60 + CTRL, menuToggleBookmark); + Menu.AddShortcut(72 + CTRL, menuMoveUp); + Menu.AddShortcut(80 + CTRL, menuMoveDown); + Menu.AddShortcut(83, menuDelete); + Menu.AddShortcut(67, menuRun); + Menu.AddShortcut(15, menuIncInd); + Menu.AddShortcut(14 + SHIFT, menuDecInd); + Menu.AddShortcut(60 + SHIFT, menuPrevBookmark); + Menu.AddShortcut(60, menuNextBookmark); + Menu.AddShortcut(61 + SHIFT, menuFindPrev); + Menu.AddShortcut(61, menuFindNext); END Shortcuts; PROCEDURE HideSearch; BEGIN - SetFocus(FindEdit, FALSE); - searchOpened := FALSE; - LEFT := LEFT_PADDING; - resize; - draw_window + SetFocus(FindEdit, FALSE); + searchOpened := FALSE; + LEFT := LEFT_PADDING; + resize; + draw_window END HideSearch; PROCEDURE KeyDown (key: INTEGER); VAR - keyCode, ah: INTEGER; - shift, ctrl, rep: BOOLEAN; + keyCode, ah: INTEGER; + shift, ctrl, rep: BOOLEAN; BEGIN K.getKBState(shift, ctrl); rep := FALSE; - keyCode := key DIV 65536; + keyCode := key DIV 65536; - (* Numpad *) - ah := (key DIV 256) MOD 256; - CASE keyCode OF - |83: IF ah = 46 THEN keyCode := 52 END (* . / Del *) - |82: IF ah = 48 THEN keyCode := 11 END (* 0 / Ins *) - |79: IF ah = 49 THEN keyCode := 2 END (* 1 / End *) - |80: IF ah = 50 THEN keyCode := 3 END (* 2 / Down *) - |81: IF ah = 51 THEN keyCode := 4 END (* 3 / PgDn *) - |75: IF ah = 52 THEN keyCode := 5 END (* 4 / <- *) - |76: IF ah = 55 THEN keyCode := -1 END (* 5 / --- *) - |77: IF ah = 54 THEN keyCode := 7 END (* 6 / -> *) - |71: IF ah = 55 THEN keyCode := 8 END (* 7 / Home *) - |72: IF ah = 56 THEN keyCode := 9 END (* 8 / Up *) - |73: IF ah = 57 THEN keyCode := 10 END (* 9 / PgUp *) - ELSE - (* nothing to do *) - END; + (* Numpad *) + ah := (key DIV 256) MOD 256; + CASE keyCode OF + |83: IF ah = 46 THEN keyCode := 52 END (* . / Del *) + |82: IF ah = 48 THEN keyCode := 11 END (* 0 / Ins *) + |79: IF ah = 49 THEN keyCode := 2 END (* 1 / End *) + |80: IF ah = 50 THEN keyCode := 3 END (* 2 / Down *) + |81: IF ah = 51 THEN keyCode := 4 END (* 3 / PgDn *) + |75: IF ah = 52 THEN keyCode := 5 END (* 4 / <- *) + |76: IF ah = 55 THEN keyCode := -1 END (* 5 / --- *) + |77: IF ah = 54 THEN keyCode := 7 END (* 6 / -> *) + |71: IF ah = 55 THEN keyCode := 8 END (* 7 / Home *) + |72: IF ah = 56 THEN keyCode := 9 END (* 8 / Up *) + |73: IF ah = 57 THEN keyCode := 10 END (* 9 / PgUp *) + ELSE + (* nothing to do *) + END; IF confirm THEN IF keyCode = 28 THEN (* Enter *) @@ -1928,7 +1932,7 @@ BEGIN goto END; - IF ~middle THEN + IF ~middle THEN IF exit THEN Close ELSE @@ -1940,24 +1944,25 @@ END BtnClick; PROCEDURE MouseEvent (VAR resized: BOOLEAN; VAR firstClickX, firstClickY, time: INTEGER); CONST - DELAY = 10; + DELAY = 10; VAR - msState: SET; - scroll, x, y, scrollX, scrollY: INTEGER; - pos1, pos2: T.tPoint; + msState: SET; + scroll, x, y, scrollX, scrollY: INTEGER; + pos1, pos2: T.tPoint; + shift, ctrl: BOOLEAN; - PROCEDURE EditBox (VAR eb: EB.tEditBox); - VAR - focus: BOOLEAN; - BEGIN - focus := EditBox_Focus(eb); - EB.mouse(eb); - IF focus # EditBox_Focus(eb) THEN - SetFocus(eb, TRUE); - repaint - END - END EditBox; + PROCEDURE EditBox (VAR eb: EB.tEditBox); + VAR + focus: BOOLEAN; + BEGIN + focus := EditBox_Focus(eb); + EB.mouse(eb); + IF focus # EditBox_Focus(eb) THEN + SetFocus(eb, TRUE); + repaint + END + END EditBox; BEGIN @@ -1969,7 +1974,12 @@ BEGIN END; scroll := K.Scroll(); IF scroll # 0 THEN - T.scroll(text, 0, scroll*3); + K.getKBState(shift, ctrl); + IF shift THEN + T.scroll(text, scroll*3, 0) + ELSE + T.scroll(text, 0, scroll*3) + END; repaint END; IF leftButton THEN @@ -1987,11 +1997,11 @@ BEGIN Scroll.mouse(hScroll); Scroll.mouse(vScroll); msState := K.MouseState(); - T.getScroll(text, scrollX, scrollY); - IF (hScroll.value # scrollX) OR (vScroll.value # scrollY) THEN + T.getScroll(text, scrollX, scrollY); + IF (hScroll.value # scrollX) OR (vScroll.value # scrollY) THEN T.scroll(text, hScroll.value - scrollX, vScroll.value - scrollY); - repaint - END; + repaint + END; IF (8 IN msState) & ~(24 IN msState) THEN mouse(firstClickX, firstClickY); @@ -2100,110 +2110,110 @@ END receiveIPC; PROCEDURE main; VAR - fileName, filePath: RW.tFileName; - width, height, cliWidth, cliHeight: INTEGER; - resized: BOOLEAN; - firstClickX, firstClickY, time, blink, i: INTEGER; - key, scr: INTEGER; - text_ptr, text_size, errno: INTEGER; + fileName, filePath: RW.tFileName; + width, height, cliWidth, cliHeight: INTEGER; + resized: BOOLEAN; + firstClickX, firstClickY, time, blink, i: INTEGER; + key, scr: INTEGER; + text_ptr, text_size, errno: INTEGER; BEGIN mainTID := K.ThreadID(); header := ""; - K.GetSystemColors; - switch := FALSE; - closing := FALSE; - textsCount := 0; - curText := 0; - Args.GetArg(0, AppPath); - Ini.load(AppPath); - Ini.getSettings; - runScript := Ini.runScript; - buildScript := Ini.buildScript; - debugScript := Ini.debugScript; - leftButton := FALSE; - resized := FALSE; - newtab := FALSE; - K.ScreenSize(winWidth, winHeight); - scrollWidth := winHeight DIV 35; - winWidth := (winWidth*80) DIV 100 - (128 + 30); - winHeight := winHeight - (128 + 30); - winWidth := MAX(winWidth, minWinWidth); - winHeight := MAX(winHeight, minWinHeight); - cliWidth := winWidth; - cliHeight := winHeight; + K.GetSystemColors; + switch := FALSE; + closing := FALSE; + textsCount := 0; + curText := 0; + Args.GetArg(0, AppPath); + Ini.load(AppPath); + Ini.getSettings; + runScript := Ini.runScript; + buildScript := Ini.buildScript; + debugScript := Ini.debugScript; + leftButton := FALSE; + resized := FALSE; + newtab := FALSE; + K.ScreenSize(winWidth, winHeight); + scrollWidth := winHeight DIV 35; + winWidth := (winWidth*80) DIV 100 - (128 + 30); + winHeight := winHeight - (128 + 30); + winWidth := MAX(winWidth, minWinWidth); + winHeight := MAX(winHeight, minWinHeight); + cliWidth := winWidth; + cliHeight := winHeight; - LEFT := LEFT_PADDING; - RIGHT := scrollWidth - 2; - BOTTOM := SB.height() + scrollWidth - 1; - SkinHeight := K.SkinHeight(); - canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 11 + RIGHT_PADDING), winHeight - (TOP + BOTTOM + 5 - ClippingArea) - SkinHeight); - DEC(canvas.height, ClippingArea); - tabs := Tabs.create(); - Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight); - font := G.fonts[Ini.font]; - G.SetFont(canvas, font); - T.init(resetTimer, Ini.lineNumbers, Ini.autoIndents, Ini.autoBrackets, Ini.trimSpace); - Ini.selectSection(Ini.theme); - T.setCanvas(canvas); + LEFT := LEFT_PADDING; + RIGHT := scrollWidth - 2; + BOTTOM := SB.height() + scrollWidth - 1; + SkinHeight := K.SkinHeight(); + canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 11 + RIGHT_PADDING), winHeight - (TOP + BOTTOM + 5 - ClippingArea) - SkinHeight); + DEC(canvas.height, ClippingArea); + tabs := Tabs.create(); + Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight); + font := G.fonts[Ini.font]; + G.SetFont(canvas, font); + T.init(resetTimer, Ini.lineNumbers, Ini.autoIndents, Ini.autoBrackets, Ini.trimSpace); + Ini.selectSection(Ini.theme); + T.setCanvas(canvas); - mainMenu := Menu.CreateMain(mainMenuBtn); + mainMenu := Menu.CreateMain(mainMenuBtn); - Menu.init(resetTimer); - context := CreateContextMenu(); - menuFile := CreateMenuFile(); - subCurLine := CreateMenuCurLine(); - subIndent := CreateMenuIndent(); - subCase := CreateMenuCase(); - menuEdit := CreateMenuEdit(); - subCurLine.parent := menuEdit; - subIndent.parent := menuEdit; - subCase.parent := menuEdit; - subBookmark := CreateMenuBookmark(); - menuSearch := CreateMenuSearch(); - subBookmark.parent := menuSearch; - subEOL := CreateMenuEOL(); - menuEncoding := CreateMenuEncoding(); - subEOL.parent := menuEncoding; - menuView := CreateMenuView(); - menuLanguage := CreateMenuLanguage(); - menuProgram := CreateMenuProgram(); - menuTools := CreateMenuTools(); - menuOptions := CreateMenuOptions(); + Menu.init(resetTimer); + context := CreateContextMenu(); + menuFile := CreateMenuFile(); + subCurLine := CreateMenuCurLine(); + subIndent := CreateMenuIndent(); + subCase := CreateMenuCase(); + menuEdit := CreateMenuEdit(); + subCurLine.parent := menuEdit; + subIndent.parent := menuEdit; + subCase.parent := menuEdit; + subBookmark := CreateMenuBookmark(); + menuSearch := CreateMenuSearch(); + subBookmark.parent := menuSearch; + subEOL := CreateMenuEOL(); + menuEncoding := CreateMenuEncoding(); + subEOL.parent := menuEncoding; + menuView := CreateMenuView(); + menuLanguage := CreateMenuLanguage(); + menuProgram := CreateMenuProgram(); + menuTools := CreateMenuTools(); + menuOptions := CreateMenuOptions(); - Menu.AddMainItem(mainMenu, "file", menuFile); - Menu.AddMainItem(mainMenu, "edit", menuEdit); - Menu.AddMainItem(mainMenu, "search", menuSearch); - Menu.AddMainItem(mainMenu, "encoding", menuEncoding); - Menu.AddMainItem(mainMenu, "view", menuView); - Menu.AddMainItem(mainMenu, "language", menuLanguage); - Menu.AddMainItem(mainMenu, "program", menuProgram); - Menu.AddMainItem(mainMenu, "tools", menuTools); - Menu.AddMainItem(mainMenu, "options", menuOptions); - Shortcuts; + Menu.AddMainItem(mainMenu, "file", menuFile); + Menu.AddMainItem(mainMenu, "edit", menuEdit); + Menu.AddMainItem(mainMenu, "search", menuSearch); + Menu.AddMainItem(mainMenu, "encoding", menuEncoding); + Menu.AddMainItem(mainMenu, "view", menuView); + Menu.AddMainItem(mainMenu, "language", menuLanguage); + Menu.AddMainItem(mainMenu, "program", menuProgram); + Menu.AddMainItem(mainMenu, "tools", menuTools); + Menu.AddMainItem(mainMenu, "options", menuOptions); + Shortcuts; - Toolbar.create(toolbar, LEFT_PADDING + 5, toolbarTop); - Toolbar.add(toolbar, btnNew, Icons.icoNew, ""); - Toolbar.add(toolbar, btnOpen, Icons.icoOpen, ""); - Toolbar.add(toolbar, btnSave, Icons.icoSave, ""); - Toolbar.delimiter(toolbar); - Toolbar.add(toolbar, btnSearch, Icons.icoSearch, ""); - Toolbar.delimiter(toolbar); - Toolbar.add(toolbar, btnUndo, Icons.icoUndo, ""); - Toolbar.add(toolbar, btnRedo, Icons.icoRedo, ""); - Toolbar.delimiter(toolbar); - Toolbar.add(toolbar, btnUpper, -1, "AB"); - Toolbar.add(toolbar, btnLower, -1, "ab"); - Toolbar.delimiter(toolbar); - Toolbar.add(toolbar, btnBuild, Icons.icoBuild, ""); - Toolbar.add(toolbar, btnRun, Icons.icoRun, ""); + Toolbar.create(toolbar, LEFT_PADDING + 5, toolbarTop); + Toolbar.add(toolbar, btnNew, Icons.icoNew, ""); + Toolbar.add(toolbar, btnOpen, Icons.icoOpen, ""); + Toolbar.add(toolbar, btnSave, Icons.icoSave, ""); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnSearch, Icons.icoSearch, ""); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnUndo, Icons.icoUndo, ""); + Toolbar.add(toolbar, btnRedo, Icons.icoRedo, ""); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnUpper, -1, "AB"); + Toolbar.add(toolbar, btnLower, -1, "ab"); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnBuild, Icons.icoBuild, ""); + Toolbar.add(toolbar, btnRun, Icons.icoRun, ""); - filePath := "/sys"; - IF Args.argc = 1 THEN - text := T.New(); - insert(0, text); - T.SetPos(text, 0, 0) - END; + filePath := "/sys"; + IF Args.argc = 1 THEN + text := T.New(); + insert(0, text); + T.SetPos(text, 0, 0) + END; FOR i := 1 TO Args.argc - 1 DO Args.GetArg(i, fileName); IF fileName[0] # "*" THEN @@ -2226,71 +2236,71 @@ BEGIN END; SwitchTab(textsCount - 1); - Scroll.create(FALSE, canvas.width + 1, scrollWidth, scrollWidth, scrollWidth*3 DIV 2, ScrollChange, hScroll); - Scroll.create(TRUE, scrollWidth, canvas.height + 2, scrollWidth, scrollWidth*3 DIV 2, ScrollChange, vScroll); - T.resize(canvas.width, canvas.height); - confirm := FALSE; - notFound := FALSE; - menuFindClicked := FALSE; - menuActive := FALSE; - search := FALSE; - searchOpened := FALSE; - createSearchForm; - new_searchText := ""; - searchText := ""; - cs := FALSE; - whole := FALSE; - replaced := 0; + Scroll.create(FALSE, canvas.width + 1, scrollWidth, scrollWidth, scrollWidth*3 DIV 2, ScrollChange, hScroll); + Scroll.create(TRUE, scrollWidth, canvas.height + 2, scrollWidth, scrollWidth*3 DIV 2, ScrollChange, vScroll); + T.resize(canvas.width, canvas.height); + confirm := FALSE; + notFound := FALSE; + menuFindClicked := FALSE; + menuActive := FALSE; + search := FALSE; + searchOpened := FALSE; + createSearchForm; + new_searchText := ""; + searchText := ""; + cs := FALSE; + whole := FALSE; + replaced := 0; OD := OpenDlg.Create(draw_window, OpenDlg.topen, filePath, ""); IPC[1] := 0; IPC[0] := 0; K.SetIPC(IPC); - K.SetEventsMask({0, 1, 2, 5, 6, 31}); - draw_window; - blink := Ini.blink; + K.SetEventsMask({0, 1, 2, 5, 6, 31}); + draw_window; + blink := Ini.blink; IF blink <= 0 THEN blink := 0 ELSIF blink < 30 THEN blink := 30 END; - timerEnabled := TRUE; - CursorTime := K.GetTickCount(); - WHILE TRUE DO + timerEnabled := TRUE; + CursorTime := K.GetTickCount(); + WHILE TRUE DO - CurrentTime := K.GetTickCount(); - IF (CurrentTime - CursorTime > blink) & (blink > 0) & timerEnabled & ~K.RolledUp() THEN - CursorTime := CurrentTime; - T.cursor(text); - drawText - END; + CurrentTime := K.GetTickCount(); + IF (CurrentTime - CursorTime > blink) & (blink > 0) & timerEnabled & ~K.RolledUp() THEN + CursorTime := CurrentTime; + T.cursor(text); + drawText + END; - CASE K.EventTimeout(10) OF - |0: - |1: Redraw(resized, width, height, cliWidth, cliHeight) - |2: - key := K.GetKey(); - IF ~K.RolledUp() THEN - KeyDown(key) - END - |3: BtnClick - |6: - IF ~K.RolledUp() THEN - MouseEvent(resized, firstClickX, firstClickY, time) - ELSE - scr := K.Scroll() - END - |7: receiveIPC - END; - IF newtab THEN - Redraw(resized, width, height, cliWidth, cliHeight); - newtab := FALSE - END - END + CASE K.EventTimeout(10) OF + |0: + |1: Redraw(resized, width, height, cliWidth, cliHeight) + |2: + key := K.GetKey(); + IF ~K.RolledUp() THEN + KeyDown(key) + END + |3: BtnClick + |6: + IF ~K.RolledUp() THEN + MouseEvent(resized, firstClickX, firstClickY, time) + ELSE + scr := K.Scroll() + END + |7: receiveIPC + END; + IF newtab THEN + Redraw(resized, width, height, cliWidth, cliHeight); + newtab := FALSE + END + END END main; BEGIN - main + main END CEdit. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/StatusBar.ob07 b/programs/develop/cedit/SRC/StatusBar.ob07 index ad1cbd69e6..bc47b80981 100644 --- a/programs/develop/cedit/SRC/StatusBar.ob07 +++ b/programs/develop/cedit/SRC/StatusBar.ob07 @@ -1,5 +1,5 @@ (* - Copyright 2021, 2022 Anton Krotov + Copyright 2021-2023 Anton Krotov This file is part of CEdit. @@ -50,16 +50,16 @@ BEGIN END setPos; -PROCEDURE setSel* (chars, lines: INTEGER); +PROCEDURE setSel* (text: ARRAY OF WCHAR; first, second: INTEGER; delimiter: ARRAY OF WCHAR); VAR s1, s2: tString; BEGIN - IF chars # 0 THEN - s1 := "sel: "; - U.int2str(chars, s2); + IF first # 0 THEN + s1 := text; + U.int2str(first, s2); U.append(s1, s2); - U.append(s1, " | "); - U.int2str(lines, s2); + U.append(s1, delimiter); + U.int2str(second, s2); U.append(s1, s2); SB.sel := s1 ELSE diff --git a/programs/develop/cedit/SRC/Text.ob07 b/programs/develop/cedit/SRC/Text.ob07 index 576634d3ae..fb7e89e5bb 100644 --- a/programs/develop/cedit/SRC/Text.ob07 +++ b/programs/develop/cedit/SRC/Text.ob07 @@ -40,7 +40,7 @@ CONST mark_width = 2; pad_left = mark_width + 3; pad_top = 1; - inter = 2; + LineSpacing* = 2; TYPE @@ -74,7 +74,7 @@ TYPE lang*: INTEGER; enc, eol: INTEGER; foundList: List.tList; - foundSel: INTEGER; + foundSel*, foundCur*, foundCnt*: INTEGER; searchText: tString; LinesVector: Lines.tVector; chLog*: ChangeLog.tLog; @@ -2389,8 +2389,8 @@ BEGIN IF ~((scrollY > cursor.Y) OR (scrollY + textsize.Y + 1 <= cursor.Y) OR (scrollX > cursor.X) OR (scrollX + textsize.X <= cursor.X)) THEN x := (cursor.X - scrollX)*charWidth + padding.left; - y1 := (cursor.Y - scrollY)*charHeight + padding.top + (inter DIV 2 + 1); - y2 := y1 + charHeight - (inter + 2); + y1 := (cursor.Y - scrollY)*charHeight + padding.top + (LineSpacing DIV 2 + 1); + y2 := y1 + charHeight - (LineSpacing + 2); G.notVLine(canvas, x, y1, y2); G.notVLine(canvas, x - 1, y1, y2) END @@ -2400,17 +2400,18 @@ END cursor; PROCEDURE drawSelect (text: tText; line: tLine; selBeg, selEnd, y: INTEGER); VAR - Len, pos, x, firstCharIdx: INTEGER; + Len, pos, x, firstCharIdx: INTEGER; BEGIN - firstCharIdx := MAX(text.scroll.X, selBeg); - Len := MAX(MIN(line.length - firstCharIdx, selEnd - firstCharIdx), 0); - Len := MIN(Len, textsize.X - pos + 1); - SetColor(colors.seltext, colors.selback); - pos := MAX((selBeg - text.scroll.X), 0); - x := pos*charWidth + padding.left; - G.SetColor(canvas, colors.selback); - G.FillRect(canvas, x - 1, y - inter DIV 2, x + Len*charWidth, y - inter DIV 2 + charHeight); - G.TextOut(canvas, pos*charWidth + padding.left, y, Lines.getPChar(line, firstCharIdx), Len, colors.seltext) + firstCharIdx := MAX(text.scroll.X, selBeg); + Len := MAX(MIN(line.length - firstCharIdx, selEnd - firstCharIdx), 0); + Len := MIN(Len, textsize.X - pos + 1); + SetColor(colors.seltext, colors.selback); + pos := MAX((selBeg - text.scroll.X), 0); + x := pos*charWidth + padding.left; + G.SetColor(canvas, colors.selback); + G.FillRect(canvas, x - 1, y - LineSpacing DIV 2, + x + Len*charWidth, y - LineSpacing DIV 2 + charHeight); + G.TextOut(canvas, pos*charWidth + padding.left, y, Lines.getPChar(line, firstCharIdx), Len, colors.seltext) END drawSelect; @@ -2485,7 +2486,7 @@ BEGIN setPadding(pad_left + wNum*2, padding.top) END; getSelect(text, selBeg, selEnd); - y := padding.top + inter DIV 2; + y := padding.top + LineSpacing DIV 2; n := text.scroll.Y; firstLine := getLine2(text, n); @@ -2494,7 +2495,8 @@ BEGIN cnt := textsize.Y; y := y + charHeight*(text.cursor.Y - text.scroll.Y); G.SetColor(canvas, colors.back); - G.FillRect(canvas, padding.left - 2, y - inter DIV 2, size.X - 1, y - inter DIV 2 + charHeight); + G.FillRect(canvas, padding.left - 2, y - LineSpacing DIV 2, + size.X - 1, y - LineSpacing DIV 2 + charHeight); n := text.cursor.Y ELSE line := firstLine; @@ -2505,7 +2507,8 @@ BEGIN backColor := colors.back; IF (line = text.curLine) & ~selected(text) THEN G.SetColor(canvas, colors.curline); - G.FillRect(canvas, padding.left - 2, y - inter DIV 2, size.X - 1, y - inter DIV 2 + charHeight); + G.FillRect(canvas, padding.left - 2, y - LineSpacing DIV 2, + size.X - 1, y - LineSpacing DIV 2 + charHeight); backColor := colors.curline END; SetColor(colors.text, backColor); @@ -2524,7 +2527,7 @@ BEGIN ELSIF (selBeg.Y # n) & (selEnd.Y = n) THEN drawSelect(text, line, 0, selEnd.X, y) END; - mark(line, y - inter DIV 2); + mark(line, y - LineSpacing DIV 2); NextLine(line); INC(y, charHeight); INC(n); @@ -2535,7 +2538,7 @@ BEGIN G.FillRect(canvas, 0, 0, padding.left - pad_left (*+ 1*), size.Y - 1); line := firstLine; SetColor(colors.numtext, colors.numback); - y := padding.top + inter DIV 2; + y := padding.top + LineSpacing DIV 2; n := MIN(text.scroll.Y + textsize.Y + 1, text.count); FOR i := text.scroll.Y + 1 TO n DO IF lineNumbers THEN @@ -2544,13 +2547,14 @@ BEGIN G.TextOut2(canvas, (numWidth - U.lg10(i) - 1)*wNum - wNum DIV 2, y, s, LENGTH(s)) ELSE G.SetColor(canvas, colors.numtext); - G.HLine(canvas, y - inter DIV 2 + charHeight DIV 2, xNum - wNum DIV (1 + ORD(i MOD 5 # 0)), xNum) + G.HLine(canvas, y - LineSpacing DIV 2 + charHeight DIV 2, + xNum - wNum DIV (1 + ORD(i MOD 5 # 0)), xNum) END END; IF line.label THEN FOR x := wNum DIV 2 TO (padding.left - pad_left) - wNum DIV 2 DO - G.notVLine(canvas, x, y, y + charHeight - (inter + 1)); - G.xorVLine(canvas, x, y, y + charHeight - (inter + 1)) + G.notVLine(canvas, x, y, y + charHeight - (LineSpacing + 1)); + G.xorVLine(canvas, x, y, y + charHeight - (LineSpacing + 1)) END END; NextLine(line); @@ -2569,7 +2573,7 @@ BEGIN p := text.foundList.first(Search.tPos); pos := Search.next(p, i); WHILE pos # -1 DO - y := padding.top + inter DIV 2; + y := padding.top + LineSpacing DIV 2; IF text.smallMove THEN y := y + charHeight*(text.cursor.Y - text.scroll.Y) END; @@ -2587,7 +2591,7 @@ BEGIN n := LENGTH(text.searchText)*charWidth; WHILE n > 0 DO IF x >= padding.left THEN - G.notVLine(canvas, x, y, y + charHeight - inter) + G.notVLine(canvas, x, y, y + charHeight - LineSpacing) END; INC(x); DEC(n) @@ -2601,11 +2605,11 @@ BEGIN IF text.foundSel > 0 THEN x := (text.cursor.X - text.scroll.X)*charWidth + padding.left; - y := (text.cursor.Y - text.scroll.Y)*charHeight + padding.top + inter DIV 2; + y := (text.cursor.Y - text.scroll.Y)*charHeight + padding.top + LineSpacing DIV 2; n := text.foundSel*charWidth; WHILE n > 0 DO IF x >= padding.left THEN - G.xorVLine(canvas, x, y, y + charHeight - inter) + G.xorVLine(canvas, x, y, y + charHeight - LineSpacing) END; INC(x); DEC(n) @@ -2689,7 +2693,7 @@ PROCEDURE setCanvas* (_canvas: G.tCanvas); BEGIN canvas := _canvas; charWidth := _canvas.font.width; - charHeight := _canvas.font.height + inter + charHeight := _canvas.font.height + LineSpacing END setCanvas; @@ -2763,54 +2767,87 @@ END open; PROCEDURE findNext* (text: tText; prev: BOOLEAN): BOOLEAN; VAR - cursorPos, x, y, X, Y, Len: INTEGER; - line: tLine; - res: BOOLEAN; - pos, i, pos0: INTEGER; - p: Search.tPos; + cursorPos, x, y, X, Y, Len: INTEGER; + line: tLine; + res: BOOLEAN; + pos, i, pos0, first, last, num, cnt: INTEGER; + p: Search.tPos; BEGIN - X := text.cursor.X; - Y := text.cursor.Y; - text.cursor.X := MIN(text.cursor.X, text.curLine.length); - cursorPos := text.curLine.pos + text.cursor.X - ORD(prev) - ORD(~prev & (text.foundSel = 0)); - pos0 := -1; - i := 0; - p := text.foundList.first(Search.tPos); - pos := Search.next(p, i); - WHILE (pos # -1) & (pos <= cursorPos) DO - pos0 := pos; - pos := Search.next(p, i) - END; - IF prev THEN - pos := pos0 - END; - res := pos # -1; - IF res THEN - y := 0; - line := text.first(tLine); - WHILE (line.pos <= pos) & (line.next # NIL) DO - NextLine(line); - INC(y) - END; - IF (line.next # NIL) OR (line.pos > pos) THEN - PrevLine(line); - DEC(y) - END; - resetSelect(text); - searchScroll(text, y); - x := pos - line.pos; - Len := LENGTH(text.searchText); - IF x + Len > text.scroll.X + textsize.X THEN - text.scroll.X := MAX(x + Len - textsize.X + 3, 0) - ELSIF x < text.scroll.X THEN - text.scroll.X := MAX(x - 3, 0) - END; - SetPos(text, x, y); - text.foundSel := Len - ELSE - SetPos(text, X, Y) - END - RETURN res + X := text.cursor.X; + Y := text.cursor.Y; + text.cursor.X := MIN(text.cursor.X, text.curLine.length); + cursorPos := text.curLine.pos + text.cursor.X - ORD(prev) - ORD(~prev & (text.foundSel = 0)); + pos0 := -1; + + cnt := 0; + IF text.foundList.count # 0 THEN + p := text.foundList.first(Search.tPos); + first := p.pos[0]; + WHILE p # NIL DO + INC(cnt, p.cnt); + p := p.next(Search.tPos) + END; + p := text.foundList.last(Search.tPos); + last := p.pos[p.cnt - 1] + ELSE + first := -1; + last := -1 + END; + text.foundCnt := cnt; + + num := 1; + i := 0; + p := text.foundList.first(Search.tPos); + pos := Search.next(p, i); + WHILE (pos # -1) & (pos <= cursorPos) DO + pos0 := pos; + pos := Search.next(p, i); + INC(num) + END; + IF prev THEN + pos := pos0; + DEC(num) + END; + + IF pos = -1 THEN + IF prev THEN + pos := last; + num := cnt + ELSE + pos := first; + num := 1 + END + END; + + res := pos # -1; + IF res THEN + y := 0; + line := text.first(tLine); + WHILE (line.pos <= pos) & (line.next # NIL) DO + NextLine(line); + INC(y) + END; + IF (line.next # NIL) OR (line.pos > pos) THEN + PrevLine(line); + DEC(y) + END; + resetSelect(text); + searchScroll(text, y); + x := pos - line.pos; + Len := LENGTH(text.searchText); + IF x + Len > text.scroll.X + textsize.X THEN + text.scroll.X := MAX(x + Len - textsize.X + 3, 0) + ELSIF x < text.scroll.X THEN + text.scroll.X := MAX(x - 3, 0) + END; + SetPos(text, x, y); + text.foundSel := Len; + text.foundCur := num + ELSE + SetPos(text, X, Y); + text.foundCur := 0 + END + RETURN res END findNext;