From 9c0be1dd39c59ba31050e9ccf50ca8aebb3e14a6 Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Sat, 11 Sep 2021 20:57:43 +0000 Subject: [PATCH] CEDIT: Keyboard navigation in menu; internal changes git-svn-id: svn://kolibrios.org@9187 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/CEDIT | Bin 34696 -> 34913 bytes programs/develop/cedit/SHORTCUT.TXT | 3 +- programs/develop/cedit/SRC/CEdit.ob07 | 260 +++++++++------------ programs/develop/cedit/SRC/CheckBox.ob07 | 80 +++---- programs/develop/cedit/SRC/EditBox.ob07 | 144 ++++++++++++ programs/develop/cedit/SRC/KolibriOS.ob07 | 10 + programs/develop/cedit/SRC/Menu.ob07 | 266 +++++++++++++++++----- programs/develop/cedit/SRC/Utils.ob07 | 5 + programs/develop/cedit/SRC/scroll.ob07 | 89 ++++---- 9 files changed, 564 insertions(+), 293 deletions(-) create mode 100644 programs/develop/cedit/SRC/EditBox.ob07 diff --git a/programs/develop/cedit/CEDIT b/programs/develop/cedit/CEDIT index bc0ef97e18ccdc096d1736188e2f3389fb9618aa..df7899c5698bd9e309db57940f738b8d7d1b0d5b 100644 GIT binary patch literal 34913 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 0) DO K.Pause(1); DEC(delay) @@ -1315,15 +1252,25 @@ BEGIN Scroll.SendIPC; delay := 2 ELSE - delay := scrollDelay + delay := Scroll.Delay END ELSE - delay := scrollDelay + delay := Scroll.Delay END END; IPC[2] := 0 - ELSIF ~Menu.isSender(IPC[0]) THEN - IPC[2] := 0 + ELSE + IF ~Menu.isSender(IPC[0]) THEN + IPC[2] := 0 + ELSE + IF IPC[2] < 0 THEN + item := List.getItem(mainMenu, (-IPC[2] - mainMenuBtn) MOD mainMenu.count); + IF item # NIL THEN + ShowMenu(item(Menu.tMainItem).menu) + END; + IPC[2] := 0 + END + END END; CASE IPC[2] OF |0: @@ -1465,12 +1412,13 @@ VAR shift, ctrl: BOOLEAN; BEGIN menuItem := -1; - getKBState(shift, ctrl); + K.getKBState(shift, ctrl); IF ctrl THEN CASE key DIV 65536 OF |17: menuItem := menuClose |21: menuItem := menuRedo |30: menuItem := menuSelectAll + |32: menuItem := menuDuplicate |33: menuItem := menuFind |34: menuItem := menuGoto |44: menuItem := menuUndo @@ -1481,6 +1429,12 @@ BEGIN |31: menuItem := menuSave |49: menuItem := menuNew |67: menuItem := menuBuild + |83: menuItem := menuRemove + |22: menuItem := menuUpper + |38: menuItem := menuLower + |60: menuItem := menuToggleBookmark + |72: menuItem := menuMoveUp + |80: menuItem := menuMoveDown ELSE END ELSE @@ -1488,6 +1442,16 @@ BEGIN menuItem := menuDelete ELSIF key DIV 65536 = 67 THEN menuItem := menuRun + ELSIF key DIV 65536 = 15 THEN + menuItem := menuIncInd + ELSIF (key DIV 65536 = 14) & shift THEN + menuItem := menuDecInd + ELSIF key DIV 65536 = 60 THEN + IF shift THEN + menuItem := menuPrevBookmark + ELSE + menuItem := menuNextBookmark + END END END; IF menuItem # -1 THEN @@ -1726,8 +1690,8 @@ VAR keyCode: INTEGER; shift, ctrl: BOOLEAN; BEGIN + K.getKBState(shift, ctrl); keyCode := key DIV 65536; - getKBState(shift, ctrl); IF confirm THEN IF keyCode = 28 THEN (* Enter *) save(text); @@ -1760,6 +1724,9 @@ BEGIN ELSE Script(runScript) END + ELSIF keyCode = 68 THEN (* F10 *) + key := -1; + ShowMenu(menuFile) ELSIF keyCode = 1 THEN (* Esc *) key := -1; IF search THEN @@ -1783,20 +1750,20 @@ BEGIN SetFocus(GotoEdit, TRUE) ELSE IF EditBox_Focus(FindEdit) THEN - box_lib.edit_box_key(FindEdit, key); + EB.key(FindEdit, key); EditBox_GetValue(FindEdit, new_searchText); IF new_searchText # searchText THEN searchText := new_searchText; notFound := ~T.search(text, searchText, cs, whole) END ELSIF EditBox_Focus(ReplaceEdit) THEN - box_lib.edit_box_key(ReplaceEdit, key); + EB.key(ReplaceEdit, key); EditBox_GetValue(ReplaceEdit, replaceText) ELSIF EditBox_Focus(GotoEdit) THEN IF (key DIV 256) MOD 256 = 13 THEN goto ELSE - box_lib.edit_box_key(GotoEdit, key) + EB.key(GotoEdit, key) END ELSE CASE keyCode OF @@ -1858,9 +1825,10 @@ PROCEDURE BtnClick; VAR btn: INTEGER; middle, exit: BOOLEAN; + menu: Menu.tMenu; BEGIN btn := K.ButtonCode(middle); - IF (Tabs.btnID <= btn) & (btn <= Tabs.btnID + maxTexts - 1) THEN + IF U.between(Tabs.btnID, btn, Tabs.btnID + maxTexts - 1) THEN DEC(btn, Tabs.btnID); IF middle THEN IF texts[btn].modified THEN @@ -1876,30 +1844,19 @@ BEGIN btn := 0 END END; + IF btn # 0 THEN + menu := Menu.ClickMain(mainMenu, btn); + IF menu # NIL THEN + ShowMenu(menu); + btn := 0 + END + END; CASE btn OF |Tabs.btnID - 1: Tabs.scroll(tabs, -1); switch := TRUE; repaint |Tabs.btnID - 2: Tabs.scroll(tabs, +1); switch := TRUE; repaint |0: - |btnFile: - ShowMenu(menuFile) - |btnEdit: - ShowMenu(menuEdit) - |btnMenuSearch: - ShowMenu(menuSearch) - |btnEncoding: - ShowMenu(menuEncoding) - |btnEOL: - ShowMenu(menuEOL) - |btnView: - ShowMenu(menuView) - |btnSyntax: - ShowMenu(menuSyntax) - |btnProgram: - ShowMenu(menuProgram) - |btnTools: - ShowMenu(menuTools) |btnNo: exit := closing; closeFile(FALSE, curText); @@ -1982,12 +1939,12 @@ VAR scroll, x, y, scrollX, scrollY: INTEGER; - PROCEDURE EditBox (eb: box_lib.edit_box); + PROCEDURE EditBox (eb: EB.tEditBox); VAR focus: BOOLEAN; BEGIN focus := EditBox_Focus(eb); - box_lib.edit_box_mouse(eb); + EB.mouse(eb); IF focus # EditBox_Focus(eb) THEN SetFocus(eb, TRUE); repaint @@ -2037,12 +1994,8 @@ BEGIN END; IF 24 IN msState THEN mouse(x, y); - IF ~hScroll.mouse THEN - Scroll.MouseDown(hScroll, x + LEFT, y + TOP) - END; - IF ~vScroll.mouse THEN - Scroll.MouseDown(vScroll, x + LEFT, y + TOP) - END; + Scroll.MouseDown(hScroll, x + LEFT, y + TOP); + Scroll.MouseDown(vScroll, x + LEFT, y + TOP); IF search & searchOpened THEN CheckBox.MouseDown(BKW, x + LEFT, y + TOP); CheckBox.MouseDown(CS, x + LEFT, y + TOP); @@ -2111,7 +2064,7 @@ VAR resized: BOOLEAN; firstClickX, firstClickY, time: INTEGER; BEGIN - delay := scrollDelay; + delay := Scroll.Delay; K.GetSystemColors; Icons.get(icons, grayIcons); modified := FALSE; @@ -2163,6 +2116,17 @@ BEGIN menuProgram := CreateMenuProgram(); menuTools := CreateMenuTools(); + mainMenu := Menu.CreateMain(mainMenuBtn); + Menu.AddMainItem(mainMenu, "file", menuFile); + Menu.AddMainItem(mainMenu, "edit", menuEdit); + Menu.AddMainItem(mainMenu, "search", menuSearch); + Menu.AddMainItem(mainMenu, "encoding", menuEncoding); + Menu.AddMainItem(mainMenu, "eol", menuEOL); + Menu.AddMainItem(mainMenu, "view", menuView); + Menu.AddMainItem(mainMenu, "syntax", menuSyntax); + Menu.AddMainItem(mainMenu, "program", menuProgram); + Menu.AddMainItem(mainMenu, "tools", menuTools); + Ini.getSettings(buildScript, runScript, debugScript); IF fileName = "" THEN text := T.New(); @@ -2200,13 +2164,13 @@ BEGIN Timer.create(mainTID); WHILE TRUE DO CASE K.WaitForEvent() OF - |1: IF Menu.redraw THEN - Redraw(resized, width, height, cliWidth, cliHeight) - ELSE + |1: (*IF Menu.redraw THEN*) + Redraw(resized, width, height, cliWidth, cliHeight) + (*ELSE Menu.Redraw; K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, header); repaint - END + END*) |2: KeyDown(K.GetKey()) |3: BtnClick |6: MouseEvent(resized, firstClickX, firstClickY, time) diff --git a/programs/develop/cedit/SRC/CheckBox.ob07 b/programs/develop/cedit/SRC/CheckBox.ob07 index 2c2f130c1a..268e52dfda 100644 --- a/programs/develop/cedit/SRC/CheckBox.ob07 +++ b/programs/develop/cedit/SRC/CheckBox.ob07 @@ -19,88 +19,78 @@ MODULE CheckBox; -IMPORT G := Graph, K := KolibriOS; +IMPORT G := Graph, K := KolibriOS, U := Utils; + CONST padding = 4; + fontWidth = K.fontWidth; + fontHeight = K.fontHeight; + TYPE - tCheckBox* = POINTER TO RECORD + tCheckBox* = RECORD left*, top*: INTEGER; width, height: INTEGER; - value*, mouse*: BOOLEAN; + value*, mouse: BOOLEAN; text: ARRAY 32 OF WCHAR; canvas: G.tCanvas END; -PROCEDURE mark (canvas: G.tCanvas); -BEGIN - G.DLine(canvas, 2, 6, 6, -1); - G.DLine(canvas, 2, 6, 7, -1); - G.DLine(canvas, 7, 13, 9, 1); - G.DLine(canvas, 7, 13, 10, 1); -END mark; - - PROCEDURE paint* (chkbox: tCheckBox); VAR canvas: G.tCanvas; - fontHeight: INTEGER; BEGIN canvas := chkbox.canvas; - fontHeight := canvas.font.height - 1; - G.SetColor(canvas, K.winColor); - G.clear(canvas); - G.SetColor(canvas, 0FFFFFFH); - G.FillRect(canvas, 0, 0, fontHeight, fontHeight); - G.SetColor(canvas, K.borderColor); - G.Rect(canvas, 0, 0, fontHeight, fontHeight); - IF chkbox.value THEN - G.SetColor(canvas, 0008000H); - mark(canvas) - END; - G.SetTextColor(canvas, K.textColor); - G.SetBkColor(canvas, K.winColor); - G.TextOut2(canvas, canvas.font.height + padding, 0, chkbox.text, LENGTH(chkbox.text)); - G.DrawCanvas(canvas, chkbox.left, chkbox.top) + IF canvas # NIL THEN + G.SetColor(canvas, K.winColor); + G.clear(canvas); + G.SetColor(canvas, 0FFFFFFH); + G.FillRect(canvas, 0, 0, fontHeight - 1, fontHeight - 1); + G.SetColor(canvas, K.borderColor); + G.Rect(canvas, 0, 0, fontHeight - 1, fontHeight - 1); + IF chkbox.value THEN + G.SetColor(canvas, 0008000H); + G.DLine(canvas, 2, 6, 6, -1); + G.DLine(canvas, 2, 6, 7, -1); + G.DLine(canvas, 7, 13, 9, 1); + G.DLine(canvas, 7, 13, 10, 1) + END; + G.SetTextColor(canvas, K.textColor); + G.SetBkColor(canvas, K.winColor); + G.TextOut2(canvas, fontHeight + padding, 0, chkbox.text, LENGTH(chkbox.text)); + G.DrawCanvas(canvas, chkbox.left, chkbox.top) + END END paint; -PROCEDURE create* (text: ARRAY OF WCHAR): tCheckBox; +PROCEDURE create* (text: ARRAY OF WCHAR; VAR chkbox: tCheckBox); VAR res: tCheckBox; - font: G.tFont; BEGIN - font := G.CreateFont(1, "", {}); - NEW(res); res.left := 0; res.top := 0; res.value := FALSE; res.mouse := FALSE; COPY(text, res.text); - res.canvas := G.CreateCanvas(font.height + padding + LENGTH(res.text)*font.width, font.height + 1); - G.SetFont(res.canvas, font); + res.canvas := G.CreateCanvas(fontHeight + padding + LENGTH(res.text)*fontWidth, fontHeight + 1); + G.SetFont(res.canvas, G.CreateFont(1, "", {})); res.width := res.canvas.width; res.height := res.canvas.height; - RETURN res + chkbox := res END create; -PROCEDURE between (a, b, c: INTEGER): BOOLEAN; - RETURN (a <= b) & (b <= c) -END between; - - -PROCEDURE MouseDown* (chkbox: tCheckBox; x, y: INTEGER); +PROCEDURE MouseDown* (VAR chkbox: tCheckBox; x, y: INTEGER); BEGIN - IF (chkbox # NIL) & ~chkbox.mouse THEN + IF (chkbox.canvas # NIL) & ~chkbox.mouse THEN DEC(x, chkbox.left); DEC(y, chkbox.top); chkbox.mouse := TRUE; - IF between(0, x, chkbox.width) & between(0, y, chkbox.height) THEN + IF U.between(0, x, chkbox.width) & U.between(0, y, chkbox.height) THEN chkbox.value := ~chkbox.value; END; paint(chkbox) @@ -108,9 +98,9 @@ BEGIN END MouseDown; -PROCEDURE MouseUp* (chkbox: tCheckBox); +PROCEDURE MouseUp* (VAR chkbox: tCheckBox); BEGIN - IF chkbox # NIL THEN + IF chkbox.canvas # NIL THEN chkbox.mouse := FALSE END END MouseUp; diff --git a/programs/develop/cedit/SRC/EditBox.ob07 b/programs/develop/cedit/SRC/EditBox.ob07 new file mode 100644 index 0000000000..1d639d25ce --- /dev/null +++ b/programs/develop/cedit/SRC/EditBox.ob07 @@ -0,0 +1,144 @@ +(* + Copyright 2016, 2017, 2020, 2021 Anton Krotov + + This file is part of CEdit. + + CEdit is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CEdit is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CEdit. If not, see . +*) + +MODULE EditBox; + +IMPORT sys := SYSTEM, KOSAPI; + + +TYPE + + tEditBox* = POINTER TO RECORD + width*, + left*, + top*, + color*, + shift_color, + focus_border_color, + blur_border_color, + text_color*, + max: INTEGER; + text*: INTEGER; + mouse_variable: tEditBox; + flags*, + + size, + pos: INTEGER; + (* The following struct members are not used by the users of API *) + offset, cl_curs_x, cl_curs_y, shift, shift_old, height, char_width: INTEGER + END; + + EditBoxKey = PROCEDURE (eb: tEditBox); + + +VAR + + key_proc: EditBoxKey; + paint *: PROCEDURE (eb: tEditBox); + mouse *: PROCEDURE (eb: tEditBox); + setValue *: PROCEDURE (eb: tEditBox; text: INTEGER); + + +PROCEDURE _key (key: INTEGER; key_proc: EditBoxKey; text: tEditBox); +BEGIN + sys.CODE( + 08BH, 045H, 008H, (* mov eax, dword [ebp + 8] *) + 08BH, 055H, 00CH, (* mov edx, dword [ebp + 12] *) + 08BH, 04DH, 010H, (* mov ecx, dword [ebp + 16] *) + 051H, (* push ecx *) + 0FFH, 0D2H (* call edx *) + ) +END _key; + + +PROCEDURE key* (text: tEditBox; key: INTEGER); +BEGIN + _key(key, key_proc, text) +END key; + + +PROCEDURE getValue* (text: tEditBox; VAR str: ARRAY OF CHAR); +VAR + ptr, max, i: INTEGER; + +BEGIN + ptr := text.text; + max := text.max; + ASSERT(max < LEN(str)); + i := 0; + REPEAT + sys.GET(ptr, str[i]); + INC(i); + INC(ptr) + UNTIL (str[i - 1] = 0X) OR (i = max); + str[i] := 0X +END getValue; + + +PROCEDURE create* (tlx, tly, width, max_chars: INTEGER; editbox_interlock: tEditBox): tEditBox; +VAR + new_textbox: tEditBox; + +BEGIN + NEW(new_textbox); + + new_textbox.width := width; + new_textbox.left := tlx; + new_textbox.top := tly; + new_textbox.color := 0FFFFFFH; + new_textbox.shift_color := 06A9480H; + new_textbox.focus_border_color := 0; + new_textbox.blur_border_color := 06A9480H; + new_textbox.text_color := 0; + new_textbox.max := max_chars; + new_textbox.text := KOSAPI.malloc(max_chars + 2); + ASSERT(new_textbox.text # 0); + new_textbox.mouse_variable := editbox_interlock; + new_textbox.flags := 0 + + RETURN new_textbox +END create; + + +PROCEDURE GetProc (Lib, v: INTEGER; name: ARRAY OF CHAR); +VAR + a: INTEGER; +BEGIN + a := KOSAPI.GetProcAdr(name, Lib); + ASSERT(a # 0); + sys.PUT(v, a) +END GetProc; + + +PROCEDURE main; +VAR + Lib: INTEGER; +BEGIN + Lib := KOSAPI.LoadLib("/rd/1/lib/box_lib.obj"); + ASSERT(Lib # 0); + GetProc(Lib, sys.ADR(paint), "edit_box"); + GetProc(Lib, sys.ADR(key_proc), "edit_box_key"); + GetProc(Lib, sys.ADR(mouse), "edit_box_mouse"); + GetProc(Lib, sys.ADR(setValue), "edit_box_set_text"); +END main; + + +BEGIN + main +END EditBox. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/KolibriOS.ob07 b/programs/develop/cedit/SRC/KolibriOS.ob07 index cbb6f010c8..84d9da97e7 100644 --- a/programs/develop/cedit/SRC/KolibriOS.ob07 +++ b/programs/develop/cedit/SRC/KolibriOS.ob07 @@ -359,4 +359,14 @@ BEGIN END GetSystemColors; +PROCEDURE getKBState* (VAR shift, ctrl: BOOLEAN); +VAR + kbState: SET; +BEGIN + kbState := GetControlKeys(); + shift := {0, 1} * kbState # {}; + ctrl := {2, 3} * kbState # {}; +END getKBState; + + END KolibriOS. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Menu.ob07 b/programs/develop/cedit/SRC/Menu.ob07 index 685a9c48af..4de43f73cf 100644 --- a/programs/develop/cedit/SRC/Menu.ob07 +++ b/programs/develop/cedit/SRC/Menu.ob07 @@ -20,12 +20,14 @@ MODULE Menu; IMPORT - SYSTEM, G := Graph, List, K := KolibriOS; + SYSTEM, G := Graph, List, K := KolibriOS, U := Utils, KOSAPI; CONST fontHeight = 22; fontWidth = 8; + MainMenuHeight* = K.fontHeight + 7; + RIGHT = 16; LEFT = 16; TOP = 1; @@ -44,10 +46,17 @@ CONST TYPE + tMainItem* = POINTER TO descMainItem; + + tMain* = POINTER TO RECORD (List.tList) + id: INTEGER + END; + tMenu* = POINTER TO RECORD tid*: INTEGER; - active*: BOOLEAN; + active*, keyboard: BOOLEAN; parent*, child: tMenu; + mainID: INTEGER; winX, winY, width*, height*: INTEGER; selItem, cliItem: INTEGER; @@ -66,6 +75,13 @@ TYPE child: tMenu END; + descMainItem = RECORD (List.tItem) + id*, x: INTEGER; + text: ARRAY 32 OF WCHAR; + menu*: tMenu; + main: tMain + END; + tClick = PROCEDURE (menu: tMenu; id: INTEGER); tKey = PROCEDURE (menu: tMenu; key: INTEGER): BOOLEAN; tProc = PROCEDURE; @@ -75,12 +91,98 @@ VAR TIDs: ARRAY maxLEVEL + 1 OF INTEGER; resetTimer: tProc; _open: PROCEDURE (m: tMenu; x, y: INTEGER); - redraw*: BOOLEAN; + (*redraw*: BOOLEAN;*) (* backColor, foreColor, selBackColor, selForeColor, disBackColor, disForeColor, disSelBackColor, disSelForeColor: INTEGER; *) +PROCEDURE AddMainItem* (main: tMain; text: ARRAY OF WCHAR; menu: tMenu); +VAR + item, prev: tMainItem; +BEGIN + NEW(item); + item.id := main.id + main.count; + COPY(text, item.text); + item.menu := menu; + item.main := main; + menu.mainID := item.id; + List.append(main, item); + prev := item.prev(tMainItem); + IF prev # NIL THEN + item.x := prev.x + LENGTH(prev.text)*fontWidth + 9 + ELSE + item.x := 0 + END +END AddMainItem; + + +PROCEDURE CreateMain* (id: INTEGER): tMain; +VAR + res: tMain; + list: List.tList; +BEGIN + NEW(res); + res.id := id; + list := List.create(res) + RETURN res +END CreateMain; + + +PROCEDURE drawMainItem (item: tMainItem); +VAR + menuColor, textColor, n: INTEGER; +BEGIN + IF item.menu.tid # 0 THEN + menuColor := K.textColor; + textColor := K.winColor + ELSE + menuColor := K.winColor; + textColor := K.textColor + END; + n := LENGTH(item.text); + K.DrawRect(item.x, 0, n*fontWidth + 2, MainMenuHeight, menuColor); + K.CreateButton(item.id + ORD({30}), item.x, 0, n*fontWidth + 2, MainMenuHeight, K.btnColor, ""); + K.DrawText(item.x + 1, (MainMenuHeight - K.fontHeight) DIV 2 + 1, textColor, item.text) +END drawMainItem; + + +PROCEDURE DrawMain* (main: tMain); +VAR + item: List.tItem; +BEGIN + item := main.first; + WHILE item # NIL DO + drawMainItem(item(tMainItem)); + item := item.next + END +END DrawMain; + + +PROCEDURE getMainID (m: tMenu): INTEGER; +BEGIN + WHILE m.parent # NIL DO + m := m.parent + END + RETURN m.mainID +END getMainID; + + +PROCEDURE ClickMain* (main: tMain; btn: INTEGER): tMenu; +VAR + item: List.tItem; + res: tMenu; +BEGIN + item := List.getItem(main, btn - main.id); + IF item # NIL THEN + res := item(tMainItem).menu + ELSE + res := NIL + END + RETURN res +END ClickMain; + + PROCEDURE isSender* (tid: INTEGER): BOOLEAN; VAR i: INTEGER; @@ -95,13 +197,24 @@ END isSender; PROCEDURE exit (m: tMenu); BEGIN - m.tid := 0; m.active := FALSE; - resetTimer; + resetTimer; + m.tid := 0; K.Exit END exit; +PROCEDURE escape (m: tMenu); +BEGIN + m.active := FALSE; + IF m.parent = NIL THEN + resetTimer + END; + m.tid := 0; + K.Exit +END escape; + + PROCEDURE repaint (m: tMenu); VAR y, i, X, Y1, Y2: INTEGER; @@ -202,14 +315,17 @@ END mouse; PROCEDURE close* (m: tMenu); +VAR + temp: INTEGER; BEGIN IF (m # NIL) & (m.tid # 0) THEN IF m.child # NIL THEN close(m.child); m.child := NIL END; - K.ExitID(m.tid); - m.tid := 0; + temp := m.tid; + m.tid := 0; + K.ExitID(temp); m.active := FALSE END END close; @@ -219,19 +335,28 @@ PROCEDURE click (m: tMenu; i: INTEGER); VAR item: List.tItem; p: tMenu; + id: INTEGER; BEGIN - item := List.getItem(m.items, i); - IF (item # NIL) & item(tItem).enabled & (item(tItem).child = NIL) THEN - m.click(m, item(tItem).id); - p := m.parent; - WHILE p # NIL DO - p.child := NIL; - close(p); - p := p.parent - END; - redraw := TRUE; - exit(m) - END + id := -1; + IF i < 0 THEN + id := i + ELSE + item := List.getItem(m.items, i); + IF (item # NIL) & item(tItem).enabled & (item(tItem).child = NIL) THEN + id := item(tItem).id + END + END; + IF id # -1 THEN + m.click(m, id); + p := m.parent; + WHILE p # NIL DO + p.child := NIL; + close(p); + p := p.parent + END; + (*redraw := TRUE;*) + exit(m) + END END click; @@ -248,68 +373,100 @@ END isActive; PROCEDURE closeChild (m: tMenu); BEGIN IF m.child # NIL THEN - redraw := FALSE; + (*redraw := FALSE;*) close(m.child); m.child := NIL END END closeChild; -PROCEDURE submenu (m: tMenu); +PROCEDURE submenu (m: tMenu; keyboard: BOOLEAN): BOOLEAN; VAR item: List.tItem; + res: BOOLEAN; BEGIN + res := FALSE; item := List.getItem(m.items, m.selItem); IF (item # NIL) & item(tItem).enabled & (item(tItem).child # NIL) THEN + res := TRUE; IF ~opened(item(tItem).child) THEN closeChild(m); + item(tItem).child.keyboard := keyboard; _open(item(tItem).child, m.winX + m.width - 2, m.winY + m.selItem*fontHeight); - m.child := item(tItem).child + m.child := item(tItem).child; END ELSE closeChild(m) END + RETURN res END submenu; PROCEDURE [stdcall] window (m: tMenu); VAR x, y: INTEGER; - key: INTEGER; + key, temp: INTEGER; msState: SET; + shift, ctrl: BOOLEAN; BEGIN - m.selItem := -1; + m.selItem := ORD(m.keyboard) - 1; m.cliItem := -1; + m.keyboard := FALSE; K.SetEventsMask({0, 1, 5}); WHILE TRUE DO CASE K.WaitForEvent() OF |1: draw_window(m) |2: + K.getKBState(shift, ctrl); key := K.GetKey(); - IF key DIV 65536 = 72 THEN - DEC(m.selItem); - IF m.selItem < 0 THEN - m.selItem := 0 - END - ELSIF key DIV 65536 = 80 THEN - INC(m.selItem); - IF m.selItem >= m.items.count THEN - m.selItem := m.items.count - 1 - END - ELSIF key DIV 65536 = 28 THEN - IF m.selItem >= 0 THEN - click(m, m.selItem) - END; - m.cliItem := -1 - ELSIF key DIV 65536 = 77 THEN - submenu(m) - ELSIF key DIV 65536 = 75 THEN - IF m.parent # NIL THEN - exit(m) + IF ~shift & ~ ctrl THEN + IF key DIV 65536 = 72 THEN + DEC(m.selItem); + IF m.selItem < 0 THEN + m.selItem := m.items.count - 1 + END + ELSIF key DIV 65536 = 80 THEN + INC(m.selItem); + IF m.selItem >= m.items.count THEN + m.selItem := 0 + END + ELSIF key DIV 65536 = 28 THEN + IF m.selItem >= 0 THEN + click(m, m.selItem) + END; + m.cliItem := -1 + ELSIF key DIV 65536 = 77 THEN + IF ~submenu(m, TRUE) THEN + click(m, -(getMainID(m) + 1)) + END; + m.cliItem := -1 + ELSIF key DIV 65536 = 75 THEN + IF m.parent # NIL THEN + escape(m) + ELSE + click(m, -(getMainID(m) - 1)) + END; + m.cliItem := -1 + ELSIF key DIV 65536 = 1 THEN + escape(m) + ELSE + IF m.key(m, key) THEN + IF m.parent # NIL THEN + temp := m.parent.tid; + m.parent.tid := 0; + K.ExitID(temp) + END; + exit(m) + END END ELSE IF m.key(m, key) THEN + IF m.parent # NIL THEN + temp := m.parent.tid; + m.parent.tid := 0; + K.ExitID(temp) + END; exit(m) END END; @@ -337,7 +494,7 @@ BEGIN END END; repaint(m); - submenu(m) + IF submenu(m, FALSE) THEN END END END END window; @@ -361,12 +518,14 @@ VAR L: INTEGER; BEGIN IF m.tid = 0 THEN - m.winX := x; - m.winY := y; L := level(m); - SYSTEM.PUT(SYSTEM.ADR(stack[L][LEN(stack[0]) - 1]), m); - m.tid := K.CreateThread(SYSTEM.ADR(window), stack[L]); - TIDs[L] := m.tid + IF KOSAPI.sysfunc3(18, 21, TIDs[L]) = 0 THEN + m.winX := x; + m.winY := y; + SYSTEM.PUT(SYSTEM.ADR(stack[L][LEN(stack[0]) - 1]), m); + m.tid := K.CreateThread(SYSTEM.ADR(window), stack[L]); + TIDs[L] := m.tid + END END END open; @@ -462,6 +621,7 @@ BEGIN m.active := FALSE; m.parent := NIL; m.child := NIL; + m.mainID := 0; m.items := items; m.click := click; m.key := key; @@ -479,18 +639,18 @@ BEGIN RETURN m END create; - +(* PROCEDURE Redraw*; BEGIN redraw := TRUE END Redraw; - +*) PROCEDURE init* (_resetTimer: tProc); VAR i: INTEGER; BEGIN - Redraw; + (*Redraw;*) resetTimer := _resetTimer; _open := open; FOR i := 0 TO maxLEVEL DO diff --git a/programs/develop/cedit/SRC/Utils.ob07 b/programs/develop/cedit/SRC/Utils.ob07 index 33bf4115ab..e4580d494b 100644 --- a/programs/develop/cedit/SRC/Utils.ob07 +++ b/programs/develop/cedit/SRC/Utils.ob07 @@ -349,4 +349,9 @@ BEGIN END ptr2str; +PROCEDURE between* (a, b, c: INTEGER): BOOLEAN; + RETURN (a <= b) & (b <= c) +END between; + + END Utils. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/scroll.ob07 b/programs/develop/cedit/SRC/scroll.ob07 index b724844e8c..05ca315197 100644 --- a/programs/develop/cedit/SRC/scroll.ob07 +++ b/programs/develop/cedit/SRC/scroll.ob07 @@ -19,16 +19,17 @@ MODULE Scroll; -IMPORT G := Graph, K := KolibriOS; +IMPORT G := Graph, K := KolibriOS, U := Utils; CONST ScrollIPC* = 0; + Delay* = 40; TYPE tScroll* = RECORD - vertical, Inc*, Dec*, mouse*: BOOLEAN; + vertical, Inc*, Dec*, mouse: BOOLEAN; top*, left*, width*, height*: INTEGER; (* read only *) btnSize, sliderSize: INTEGER; @@ -38,21 +39,24 @@ TYPE PROCEDURE create* (vertical: BOOLEAN; width, height: INTEGER; btnSize, sliderSize: INTEGER; VAR scroll: tScroll); +VAR + res: tScroll; BEGIN - scroll.vertical := vertical; - scroll.Inc := FALSE; - scroll.Dec := FALSE; - scroll.Slider := -1; - scroll.mouse := FALSE; - scroll.left := 0; - scroll.top := 0; - scroll.width := width; - scroll.height := height; - scroll.btnSize := btnSize; - scroll.sliderSize := sliderSize; - scroll.pos := 0; - scroll.maxVal := 0; - scroll.canvas := G.CreateCanvas(width, height) + res.vertical := vertical; + res.Inc := FALSE; + res.Dec := FALSE; + res.Slider := -1; + res.mouse := FALSE; + res.left := 0; + res.top := 0; + res.width := width; + res.height := height; + res.btnSize := btnSize; + res.sliderSize := sliderSize; + res.pos := 0; + res.maxVal := 0; + res.canvas := G.CreateCanvas(width, height); + scroll := res END create; @@ -296,11 +300,6 @@ BEGIN END MouseMove; -PROCEDURE between (a, b, c: INTEGER): BOOLEAN; - RETURN (a <= b) & (b <= c) -END between; - - PROCEDURE SendIPC*; BEGIN K.SendIPC(K.ThreadID(), ScrollIPC) @@ -311,34 +310,32 @@ PROCEDURE MouseDown* (VAR scroll: tScroll; x, y: INTEGER); VAR c, size: INTEGER; BEGIN - DEC(x, scroll.left); - DEC(y, scroll.top); - scroll.mouse := TRUE; - IF between(1, x, scroll.width - 2) & between(1, y, scroll.height - 2) THEN - IF scroll.vertical THEN - c := y; - size := scroll.height - ELSE - c := x; - size := scroll.width - END; - IF between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN - scroll.pos0 := scroll.pos; - scroll.Slider := c - ELSE - IF between(0, c, scroll.btnSize - 1) THEN + IF ~scroll.mouse THEN + DEC(x, scroll.left); + DEC(y, scroll.top); + scroll.mouse := TRUE; + IF U.between(1, x, scroll.width - 2) & U.between(1, y, scroll.height - 2) THEN + IF scroll.vertical THEN + c := y; + size := scroll.height + ELSE + c := x; + size := scroll.width + END; + IF U.between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN + scroll.pos0 := scroll.pos; + scroll.Slider := c + ELSIF U.between(0, c, scroll.btnSize - 1) THEN scroll.Dec := TRUE; SendIPC + ELSIF U.between(size - scroll.btnSize, c, size - 1) THEN + scroll.Inc := TRUE; + SendIPC ELSE - IF between(size - scroll.btnSize, c, size - 1) THEN - scroll.Inc := TRUE; - SendIPC - ELSE - setPos(scroll, c - scroll.btnSize - scroll.sliderSize DIV 2); - scroll.pos0 := scroll.pos; - scroll.Slider := c; - paint(scroll) - END + setPos(scroll, c - scroll.btnSize - scroll.sliderSize DIV 2); + scroll.pos0 := scroll.pos; + scroll.Slider := c; + paint(scroll) END END END