25,10 → 25,10 |
G := Graph, T := Text, E := Encodings, |
CB := Clipboard, Languages, |
ChangeLog, Scroll, CheckBox, |
RW, Ini, box_lib, Icons, Tabs, Timer; |
RW, Ini, EB := EditBox, Icons, Tabs, Timer; |
|
CONST |
header = "CEdit (08-sep-2021)"; |
header = "CEdit (11-sep-2021)"; |
|
ShellFilter = ""; |
EditFilter = "SH|ASM|TXT|INC|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; |
58,21 → 58,11 |
btnCloseFind = 64; |
btnHideFind = 65; |
|
btnFile = 70; |
btnEdit = 71; |
btnMenuSearch = 72; |
btnEncoding = 73; |
btnEOL = 74; |
btnView = 75; |
btnSyntax = 76; |
btnProgram = 77; |
btnTools = 78; |
mainMenuBtn = 70; |
|
MainMenuHeight = fontHeight + 7; |
|
btnHeight = 25; |
btnWidth = 75; |
btnTop = MainMenuHeight + 3; |
btnTop = Menu.MainMenuHeight + 3; |
toolBtnSize = 24; |
toolbarDelim = 7; |
iconPad = (toolBtnSize - Icons.SIZE) DIV 2; |
89,14 → 79,14 |
EDITBOX_MAXCHARS = 500; |
|
menuFileX = searchLeft; |
menuEditX = menuFileX + 4*fontWidth + 2 + 7; |
menuSearchX = menuEditX + 4*fontWidth + 2 + 7; |
menuEncodingX = menuSearchX + 6*fontWidth + 2 + 7; |
menuEOLX = menuEncodingX + 8*fontWidth + 2 + 7; |
menuViewX = menuEOLX + 3*fontWidth + 2 + 7; |
menuSyntaxX = menuViewX + 4*fontWidth + 2 + 7; |
menuProgramX = menuSyntaxX + 6*fontWidth + 2 + 7; |
menuToolsX = menuProgramX + 7*fontWidth + 2 + 7; |
menuEditX = menuFileX + 4*fontWidth + 9; |
menuSearchX = menuEditX + 4*fontWidth + 9; |
menuEncodingX = menuSearchX + 6*fontWidth + 9; |
menuEOLX = menuEncodingX + 8*fontWidth + 9; |
menuViewX = menuEOLX + 3*fontWidth + 9; |
menuSyntaxX = menuViewX + 4*fontWidth + 9; |
menuProgramX = menuSyntaxX + 6*fontWidth + 9; |
menuToolsX = menuProgramX + 7*fontWidth + 9; |
|
menuCut = 1; |
menuCopy = 2; |
176,7 → 166,6 |
menuCR = 142; |
|
maxTexts = 32; |
scrollDelay = 40; |
|
|
VAR |
198,7 → 187,7 |
hScroll, vScroll: Scroll.tScroll; |
LEFT: INTEGER; |
|
FindEdit, ReplaceEdit, GotoEdit: box_lib.edit_box; |
FindEdit, ReplaceEdit, GotoEdit: EB.tEditBox; |
CS, WH, BKW: CheckBox.tCheckBox; |
|
new_searchText, searchText, replaceText, gotoText: T.tString; |
212,6 → 201,8 |
menuEOL, menuView, menuSyntax, menuProgram, menuTools, |
subCurLine, subIndent, subCase, subBookmark: Menu.tMenu; |
|
mainMenu: Menu.tMain; |
|
menuActive: BOOLEAN; |
|
icons: INTEGER; |
234,7 → 225,7 |
END WritePos; |
|
|
PROCEDURE EditBox_Focus (edit: box_lib.edit_box): BOOLEAN; |
PROCEDURE EditBox_Focus (edit: EB.tEditBox): BOOLEAN; |
VAR |
res: BOOLEAN; |
BEGIN |
258,7 → 249,7 |
END resetTimer; |
|
|
PROCEDURE EditBox_SetFocus (edit: box_lib.edit_box; value: BOOLEAN); |
PROCEDURE EditBox_SetFocus (edit: EB.tEditBox; value: BOOLEAN); |
BEGIN |
IF value THEN |
edit.flags := ORD(BITS(edit.flags) + {1}) |
266,12 → 257,12 |
edit.flags := ORD(BITS(edit.flags) - {1}) |
END; |
IF search & searchOpened THEN |
box_lib.edit_box_draw(edit) |
EB.paint(edit) |
END |
END EditBox_SetFocus; |
|
|
PROCEDURE SetFocus (edit: box_lib.edit_box; value: BOOLEAN); |
PROCEDURE SetFocus (edit: EB.tEditBox; value: BOOLEAN); |
BEGIN |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
558,9 → 549,9 |
FindEdit.left := left; |
ReplaceEdit.left := left; |
GotoEdit.left := left; |
box_lib.edit_box_draw(FindEdit); |
box_lib.edit_box_draw(ReplaceEdit); |
box_lib.edit_box_draw(GotoEdit); |
EB.paint(FindEdit); |
EB.paint(ReplaceEdit); |
EB.paint(GotoEdit); |
y := top + 200; |
K.CreateButton(btnFindNext, left, y, btnWidth, btnHeight, K.btnColor, "next"); INC(y, btnHeight + 10); |
K.CreateButton(btnReplace, left, y, btnWidth, btnHeight, K.btnColor, "replace"); INC(y, btnHeight + 10); |
583,25 → 574,7 |
END drawToolbarBtn; |
|
|
PROCEDURE drawMainMenu (menu: Menu.tMenu; x: INTEGER; btn: INTEGER; caption: ARRAY OF WCHAR); |
VAR |
menuColor, textColor, n: INTEGER; |
BEGIN |
IF menu.tid # 0 THEN |
menuColor := K.textColor; |
textColor := K.winColor |
ELSE |
menuColor := K.winColor; |
textColor := K.textColor |
END; |
n := LENGTH(caption); |
K.DrawRect(x, 0, n*fontWidth + 2, MainMenuHeight, menuColor); |
K.CreateButton(btn + ORD({30}), x, 0, n*fontWidth + 2, MainMenuHeight, K.btnColor, ""); |
K.DrawText(x + 1, (MainMenuHeight - fontHeight) DIV 2 + 1, textColor, caption) |
END drawMainMenu; |
|
|
BEGIN |
K.BeginDraw; |
K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, header); |
IF (text # NIL) & ~K.RolledUp() THEN |
614,17 → 587,8 |
K.DrawRect(0, 0, width, TOP, K.winColor); |
K.DrawRect(0, 0, LEFT, height, K.winColor); |
K.DrawRect(LEFT + canvas.width + 1, TOP + canvas.height, scrollWidth - 1, scrollWidth, K.winColor); |
Menu.DrawMain(mainMenu); |
|
drawMainMenu(menuFile, menuFileX, btnFile, "file"); |
drawMainMenu(menuEdit, menuEditX, btnEdit, "edit"); |
drawMainMenu(menuSearch, menuSearchX, btnMenuSearch, "search"); |
drawMainMenu(menuEncoding, menuEncodingX, btnEncoding, "encoding"); |
drawMainMenu(menuEOL, menuEOLX, btnEOL, "eol"); |
drawMainMenu(menuView, menuViewX, btnView, "view"); |
drawMainMenu(menuSyntax, menuSyntaxX, btnSyntax, "syntax"); |
drawMainMenu(menuProgram, menuProgramX, btnProgram, "program"); |
drawMainMenu(menuTools, menuToolsX, btnTools, "tools"); |
|
x := searchLeft; |
|
drawToolbarBtn(btnNew, x); |
687,16 → 651,6 |
END mouse; |
|
|
PROCEDURE getKBState (VAR shift, ctrl: BOOLEAN); |
VAR |
kbState: SET; |
BEGIN |
kbState := K.GetControlKeys(); |
shift := {0, 1} * kbState # {}; |
ctrl := {2, 3} * kbState # {}; |
END getKBState; |
|
|
PROCEDURE stopTimer; |
BEGIN |
T.hideCursor; |
973,14 → 927,14 |
END open; |
|
|
PROCEDURE createEdit (left, top: INTEGER): box_lib.edit_box; |
PROCEDURE createEdit (left, top: INTEGER): EB.tEditBox; |
VAR |
edit, EditBox0: box_lib.edit_box; |
edit, EditBox0: EB.tEditBox; |
BEGIN |
NEW(EditBox0); |
EditBox0.text := K.malloc(EDITBOX_MAXCHARS + 2); |
ASSERT(EditBox0.text # 0); |
edit := box_lib.kolibri_new_edit_box(left, top, EditBox_Width, EDITBOX_MAXCHARS, EditBox0); |
edit := EB.create(left, top, EditBox_Width, EDITBOX_MAXCHARS, EditBox0); |
edit.flags := 4002H; |
edit.text_color := 30000000H; |
EditBox_SetFocus(edit, FALSE) |
994,18 → 948,18 |
ReplaceEdit := createEdit(searchLeft, TOP + 20 + 55); |
GotoEdit := createEdit(searchLeft, TOP + 20 + 330); |
GotoEdit.flags := ORD(BITS(GotoEdit.flags) + BITS(8000H)); |
BKW := CheckBox.create("backward"); |
CS := CheckBox.create("match case"); |
WH := CheckBox.create("whole word"); |
CheckBox.create("backward", BKW); |
CheckBox.create("match case", CS); |
CheckBox.create("whole word", WH); |
END createSearchForm; |
|
|
PROCEDURE EditBox_GetValue (edit: box_lib.edit_box; VAR s: ARRAY OF WCHAR); |
PROCEDURE EditBox_GetValue (edit: EB.tEditBox; VAR s: ARRAY OF WCHAR); |
VAR |
str: ARRAY EDITBOX_MAXCHARS + 1 OF CHAR; |
i: INTEGER; |
BEGIN |
box_lib.edit_box_get_value(edit, str); |
EB.getValue(edit, str); |
i := 0; |
WHILE str[i] # 0X DO |
s[i] := WCHR(E.cp866[ORD(str[i])]); |
1037,19 → 991,11 |
scrollX, scrollY: INTEGER; |
shift, ctrl: BOOLEAN; |
BEGIN |
getKBState(shift, ctrl); |
IF ~hScroll.mouse THEN |
K.getKBState(shift, ctrl); |
Scroll.MouseDown(hScroll, x + LEFT, y + TOP); |
T.getScroll(text, scrollX, scrollY); |
T.scroll(text, hScroll.value - scrollX, 0); |
repaint |
END; |
IF ~vScroll.mouse THEN |
Scroll.MouseDown(vScroll, x + LEFT, y + TOP); |
T.getScroll(text, scrollX, scrollY); |
T.scroll(text, 0, vScroll.value - scrollY); |
repaint |
END; |
T.scroll(text, hScroll.value - scrollX, vScroll.value - scrollY); |
IF search & searchOpened THEN |
CheckBox.MouseDown(BKW, x + LEFT, y + TOP); |
CheckBox.MouseDown(CS, x + LEFT, y + TOP); |
1061,9 → 1007,9 |
IF ~shift THEN |
T.resetSelect(text) |
END; |
T.mouse(text, x, y); |
T.mouse(text, x, y) |
END; |
repaint |
END |
RETURN K.GetTickCount() |
END click; |
|
1112,7 → 1058,7 |
Menu.close(subIndent); |
Menu.close(subCase); |
Menu.close(subBookmark); |
Menu.close(context); |
Menu.close(context) |
END CloseMenu; |
|
|
1178,9 → 1124,8 |
K.WinPos(winX, winY); |
K.ClientPos(cliX, cliY); |
x := winX + cliX; |
y := MainMenuHeight + winY + cliY |
y := Menu.MainMenuHeight + winY + cliY |
END; |
|
selected := T.selected(text); |
|
IF menu = menuFile THEN |
1273,6 → 1218,7 |
PROCEDURE receiveIPC; |
VAR |
scrollIPC: BOOLEAN; |
item: List.tItem; |
BEGIN |
scrollIPC := FALSE; |
IF IPC[0] = Timer.ID THEN |
1284,17 → 1230,8 |
ELSIF IPC[0] = mainTID THEN |
IF IPC[2] = Scroll.ScrollIPC THEN |
Scroll.change(hScroll); |
IF hScroll.Dec THEN |
T.scroll(text, -1, 0) |
ELSIF hScroll.Inc THEN |
T.scroll(text, 1, 0) |
END; |
Scroll.change(vScroll); |
IF vScroll.Dec THEN |
T.scroll(text, 0, -1) |
ELSIF vScroll.Inc THEN |
T.scroll(text, 0, 1) |
END; |
T.scroll(text, ORD(hScroll.Inc) - ORD(hScroll.Dec), ORD(vScroll.Inc) - ORD(vScroll.Dec)); |
|
IF menuActive THEN |
draw_window; |
1303,7 → 1240,7 |
repaint |
END; |
|
IF (0 IN K.MouseState()) THEN |
IF 0 IN K.MouseState() THEN |
WHILE (0 IN K.MouseState()) & (delay > 0) DO |
K.Pause(1); |
DEC(delay) |
1315,16 → 1252,26 |
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 |
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: |
|menuCut: T.key(text, ORD("X"), FALSE, TRUE) |
1465,12 → 1412,13 |
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 |
|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,7 → 1442,17 |
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 |
IF Menu.isEnabled(menu, menuItem) THEN |
1726,8 → 1690,8 |
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 |
ELSE |
Script(runScript) |
END |
ELSIF keyCode = 68 THEN (* F10 *) |
key := -1; |
ShowMenu(menuFile) |
ELSIF keyCode = 1 THEN (* Esc *) |
key := -1; |
IF search THEN |
1783,7 → 1750,7 |
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; |
1790,13 → 1757,13 |
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 |
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,6 → 1844,13 |
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 |
1882,24 → 1857,6 |
|
|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 |
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 |
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 |
resized: BOOLEAN; |
firstClickX, firstClickY, time: INTEGER; |
BEGIN |
delay := scrollDelay; |
delay := Scroll.Delay; |
K.GetSystemColors; |
Icons.get(icons, grayIcons); |
modified := FALSE; |
2163,6 → 2116,17 |
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 |
Timer.create(mainTID); |
WHILE TRUE DO |
CASE K.WaitForEvent() OF |
|1: IF Menu.redraw THEN |
|1: (*IF Menu.redraw THEN*) |
Redraw(resized, width, height, cliWidth, cliHeight) |
ELSE |
(*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) |