28,7 → 28,7 |
RW, Ini, box_lib, Icons, Tabs; |
|
CONST |
header = "CEdit (12-jul-2021)"; |
header = "CEdit (17-jul-2021)"; |
|
ShellFilter = ""; |
EditFilter = "SH|ASM|TXT|INC|OB07|C|CPP|H|PAS|PP|LUA|INI"; |
54,14 → 54,12 |
btnRight = 33; |
btnYes = 40; |
btnNo = 41; |
btnFindEdit = 50; |
btnReplaceEdit = 51; |
btnGotoEdit = 52; |
btnFindNext = 60; |
btnReplace = 61; |
btnReplaceAll = 62; |
btnGoto = 63; |
btnCloseFind = 64; |
btnHideFind = 65; |
|
btnFile = 70; |
btnEdit = 71; |
84,7 → 82,7 |
RIGHT = scrollWidth - 2; |
BOTTOM = scrollWidth + 18; |
|
minWinWidth = 635; minWinHeight = 542; |
minWinWidth = 635; minWinHeight = 538; |
|
SEARCH_PADDING = 10; |
searchLeft = 0; |
146,7 → 144,8 |
menuWin1251 = 63; |
|
menuPipet = 70; |
menuSysFunc = 71; |
menuBoard = 71; |
menuSysFunc = 72; |
|
maxTexts = 32; |
|
161,12 → 160,11 |
textsCount, curText: INTEGER; |
|
winWidth, winHeight: INTEGER; |
shift: SET; |
AppPath, runScript, buildScript, debugScript: RW.tFileName; |
OD: OpenDlg.Dialog; |
confirm, notFound, search, modified: BOOLEAN; |
confirm, notFound, search, searchOpened, modified: BOOLEAN; |
|
switch: BOOLEAN; |
switch, closing: BOOLEAN; |
leftButton, VScroll, HScroll: BOOLEAN; |
vScroll, hScroll: Scroll.tScroll; |
LEFT: INTEGER; |
215,12 → 213,21 |
ELSE |
edit.flags := ORD(BITS(edit.flags) - {1}) |
END; |
IF search THEN |
IF search & searchOpened THEN |
box_lib.edit_box_draw(edit) |
END |
END EditBox_SetFocus; |
|
|
PROCEDURE SetFocus (edit: box_lib.edit_box; value: BOOLEAN); |
BEGIN |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE); |
EditBox_SetFocus(edit, value) |
END SetFocus; |
|
|
PROCEDURE Rect (left, top, right, bottom, color: INTEGER); |
BEGIN |
K.DrawLine(left, top, right, top, color); |
256,9 → 263,7 |
IF notFound THEN |
Message("not found"); |
notFound := FALSE; |
EditBox_SetFocus(FindEdit, TRUE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE) |
SetFocus(FindEdit, TRUE) |
END |
END NotFound; |
|
273,9 → 278,7 |
U.append(s, s1); |
Message(s); |
replaced := 0; |
EditBox_SetFocus(FindEdit, TRUE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE) |
SetFocus(FindEdit, TRUE) |
END |
END Replaced; |
|
350,14 → 353,8 |
y: INTEGER; |
BEGIN |
y := (btnHeight - fontHeight) DIV 2 + btnTop; |
K.DrawRect(width - 12*fontWidth, y, 12*fontWidth, fontHeight, K.winColor); |
CASE text.enc OF |
|E.UTF8: K.DrawText866(width - 5*fontWidth, y, K.textColor, "UTF-8") |
|E.UTF8BOM: K.DrawText866(width - 9*fontWidth, y, K.textColor, "UTF-8-BOM") |
|E.CP866: K.DrawText866(width - 5*fontWidth, y, K.textColor, "CP866") |
|E.W1251: K.DrawText866(width - 12*fontWidth, y, K.textColor, "Windows-1251") |
END; |
|
K.DrawRect(width - 16*fontWidth, y, 16*fontWidth, fontHeight, K.winColor); |
K.DrawText(width - LENGTH(E.names[text.enc])*fontWidth, y, K.textColor, E.names[text.enc]); |
y := height - (BOTTOM - scrollWidth) + (BOTTOM - scrollWidth - 16) DIV 2; |
K.DrawRect(LEFT + 16*fontWidth, TOP + canvas.height + scrollWidth - 1, width - LEFT - 24*fontWidth, BOTTOM - scrollWidth + 1, K.winColor); |
K.DrawText866(LEFT + 16*fontWidth, y, K.textColor, text.fileName); |
373,9 → 370,10 |
IF confirm THEN |
K.DeleteButton(btnYes); |
K.DeleteButton(btnNo); |
confirm := FALSE |
confirm := FALSE; |
closing := FALSE |
END; |
IF ~search THEN |
IF ~search OR (searchText = "") THEN |
T.wordSel(text) |
END; |
K.ClientSize(width, height); |
450,14 → 448,15 |
K.DrawLine(right - 15, top + 15, right - 5, top + 5, 0FFFFFFH); |
K.DrawLine(right - 14, top + 15, right - 5, top + 6, 0FFFFFFH); |
|
K.CreateButton(btnHideFind, right - 40, top, 20, 20, K.btnColor, ""); |
K.DrawLine(right - 34, top + 14, right - 26, top + 14, K.btnTextColor); |
K.DrawLine(right - 34, top + 15, right - 26, top + 15, K.btnTextColor); |
|
INC(top, 15); |
INC(left, SEARCH_PADDING); |
K.DrawText866(left, top, K.textColor, "find"); |
K.DrawText866(left, top + 55, K.textColor, "replace with"); |
K.CreateButton(btnFindEdit + ORD({30}), left, top + 20, EditBox_Width, fontHeight + 5, 0, ""); |
K.CreateButton(btnReplaceEdit + ORD({30}), left, top + 75, EditBox_Width, fontHeight + 5, 0, ""); |
K.DrawText866(left, top + 330, K.textColor, "go to line"); |
K.CreateButton(btnGotoEdit + ORD({30}), left, top + 350, EditBox_Width, fontHeight + 5, 0, ""); |
BKW.top_s := BKW.top_s MOD 65536 + (top + 110) * 65536; |
CS.top_s := CS.top_s MOD 65536 + (top + 140) * 65536; |
WH.top_s := WH.top_s MOD 65536 + (top + 170) * 65536; |
586,7 → 585,7 |
K.PutPixel(LEFT, TOP + canvas.height + scrollWidth - 2, K.winColor); |
|
DrawState(text, width, height); |
IF search THEN |
IF search & searchOpened THEN |
SearchPanel(searchLeft, TOP) |
END; |
Tabs.draw(tabs); |
610,22 → 609,13 |
END mouse; |
|
|
PROCEDURE getKBState; |
PROCEDURE getKBState (VAR shift, ctrl: BOOLEAN); |
VAR |
kbState: SET; |
BEGIN |
kbState := K.GetControlKeys(); |
IF {0, 1} * kbState # {} THEN |
INCL(shift, T.SHIFT) |
ELSE |
EXCL(shift, T.SHIFT) |
END; |
|
IF {2, 3} * kbState # {} THEN |
INCL(shift, T.CTRL) |
ELSE |
EXCL(shift, T.CTRL) |
END |
shift := {0, 1} * kbState # {}; |
ctrl := {2, 3} * kbState # {}; |
END getKBState; |
|
|
792,7 → 782,7 |
VAR |
i: INTEGER; |
BEGIN |
IF text.modified & conf THEN |
IF texts[n].modified & conf THEN |
Confirm |
ELSE |
Tabs.delete(tabs, n); |
854,6 → 844,15 |
END getFileNum; |
|
|
PROCEDURE SwitchTab (n: INTEGER); |
BEGIN |
curText := n; |
Tabs.switch(tabs, n); |
Switch(texts[n]); |
draw_window |
END SwitchTab; |
|
|
PROCEDURE open; |
VAR |
fileName: RW.tFileName; |
874,10 → 873,7 |
T.SetPos(nov, 0, 0) |
END |
ELSE |
curText := n; |
Tabs.switch(tabs, n); |
Switch(texts[n]); |
draw_window |
SwitchTab(n) |
END |
END |
ELSE |
931,16 → 927,15 |
PROCEDURE Search; |
BEGIN |
search := ~search; |
LEFT := searchLeft; |
IF search THEN |
LEFT := searchLeft + EditBox_Width + SEARCH_PADDING*2 + 5; |
searchOpened := TRUE; |
INC(LEFT, EditBox_Width + SEARCH_PADDING*2 + 5); |
IF T.search(text, searchText, cs, whole) THEN END |
ELSE |
LEFT := searchLeft; |
IF T.search(text, "", FALSE, FALSE) THEN END |
END; |
EditBox_SetFocus(FindEdit, search); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE); |
SetFocus(FindEdit, search); |
resize; |
draw_window |
END Search; |
949,13 → 944,13 |
PROCEDURE click (x, y: INTEGER): INTEGER; |
VAR |
scrollX, scrollY: INTEGER; |
shift, ctrl: BOOLEAN; |
BEGIN |
getKBState(shift, ctrl); |
IF (0 <= x) & (x < canvas.width) & (0 <= y) & (y < canvas.height) THEN |
leftButton := TRUE; |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE); |
IF ~(T.SHIFT IN shift) THEN |
SetFocus(FindEdit, FALSE); |
IF ~shift THEN |
T.resetSelect(text) |
END; |
T.mouse(text, x, y); |
962,17 → 957,13 |
repaint |
ELSIF (canvas.width < x) & (x < canvas.width + scrollWidth) & (scrollWidth < y) & (y < canvas.height - scrollWidth) THEN |
VScroll := TRUE; |
DEC(x, canvas.width); |
DEC(y, scrollWidth); |
Scroll.mouse(vScroll, x, y); |
Scroll.mouse(vScroll, x - canvas.width, y - scrollWidth); |
T.getScroll(text, scrollX, scrollY); |
T.scroll(text, 0, vScroll.value - scrollY); |
repaint |
ELSIF (scrollWidth < x) & (x < canvas.width - scrollWidth) & (canvas.height < y) & (y < canvas.height + scrollWidth) THEN |
HScroll := TRUE; |
DEC(x, scrollWidth); |
DEC(y, canvas.height); |
Scroll.mouse(hScroll, x, y); |
Scroll.mouse(hScroll, x - scrollWidth, y - canvas.height); |
T.getScroll(text, scrollX, scrollY); |
T.scroll(text, hScroll.value - scrollX, 0); |
repaint |
991,10 → 982,11 |
END LeftButtonUp; |
|
|
PROCEDURE close; |
PROCEDURE Close; |
VAR |
cont: BOOLEAN; |
BEGIN |
closing := TRUE; |
cont := TRUE; |
WHILE (textsCount > 0) & cont DO |
IF text.modified THEN |
1005,7 → 997,7 |
repaint |
END |
END |
END close; |
END Close; |
|
|
PROCEDURE MenuItemClick (menu: Menu.tMenu; id: INTEGER); |
1031,6 → 1023,17 |
END Script; |
|
|
PROCEDURE ShowSearchPanel; |
BEGIN |
IF ~search THEN |
Search |
ELSIF ~searchOpened THEN |
search := FALSE; |
Search |
END |
END ShowSearchPanel; |
|
|
PROCEDURE receiveIPC; |
BEGIN |
IF IPC[0] # Menu.lastTID THEN |
1038,11 → 1041,11 |
END; |
CASE IPC[2] OF |
|0: |
|menuCut: T.key(text, ORD("X"), {T.CTRL}) |
|menuCopy: T.key(text, ORD("C"), {T.CTRL}) |
|menuPaste: T.key(text, ORD("V"), {T.CTRL}) |
|menuDelete: T.key(text, 46, {}) |
|menuSelectAll: T.key(text, ORD("A"), {T.CTRL}) |
|menuCut: T.key(text, ORD("X"), FALSE, TRUE) |
|menuCopy: T.key(text, ORD("C"), FALSE, TRUE) |
|menuPaste: T.key(text, ORD("V"), FALSE, TRUE) |
|menuDelete: T.key(text, 46, FALSE, FALSE) |
|menuSelectAll: T.key(text, ORD("A"), FALSE, TRUE) |
|
|menuNew: |
NewFile |
1062,7 → 1065,7 |
|menuFolder: |
K.Run("/rd/1/File Managers/Eolite", text.fileName) |
|menuExit: |
close |
Close |
|menuUndo: |
T.undo(text); |
repaint |
1070,19 → 1073,11 |
T.redo(text); |
repaint |
|menuSearch: |
IF ~search THEN |
Search |
END; |
EditBox_SetFocus(FindEdit, TRUE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE) |
ShowSearchPanel; |
SetFocus(FindEdit, TRUE) |
|menuGoto: |
IF ~search THEN |
Search |
END; |
EditBox_SetFocus(GotoEdit, TRUE); |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(ReplaceEdit, FALSE) |
ShowSearchPanel; |
SetFocus(GotoEdit, TRUE) |
|menuNumbers: |
T.toggleNumbers(text) |
|menuFontSize: |
1128,6 → 1123,8 |
text.enc := E.W1251 |
|menuPipet: |
K.Run("/rd/1/develop/pipet", "") |
|menuBoard: |
K.Run("/rd/1/develop/board", "") |
|menuSysFunc: |
K.Run("/rd/1/docpack", "f") |
|menuColors..menuMaxColors: |
1141,10 → 1138,11 |
PROCEDURE MenuKeyDown (menu: Menu.tMenu; key: INTEGER): BOOLEAN; |
VAR |
menuItem: INTEGER; |
shift, ctrl: BOOLEAN; |
BEGIN |
menuItem := -1; |
getKBState; |
IF (T.CTRL IN shift) THEN |
getKBState(shift, ctrl); |
IF ctrl THEN |
CASE key DIV 65536 OF |
|17: menuItem := menuClose |
|21: menuItem := menuRedo |
1242,10 → 1240,10 |
menu: List.tList; |
BEGIN |
menu := List.create(NIL); |
Menu.AddMenuItem(menu, menuUTF8BOM, "UTF-8-BOM"); |
Menu.AddMenuItem(menu, menuUTF8, "UTF-8"); |
Menu.AddMenuItem(menu, menuCP866, "CP866"); |
Menu.AddMenuItem(menu, menuWin1251, "Windows-1251"); |
Menu.AddMenuItem(menu, menuUTF8BOM, E.names[E.UTF8BOM]); |
Menu.AddMenuItem(menu, menuUTF8, E.names[E.UTF8]); |
Menu.AddMenuItem(menu, menuCP866, E.names[E.CP866]); |
Menu.AddMenuItem(menu, menuWin1251, E.names[E.W1251]); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
END CreateMenuEncoding; |
|
1313,6 → 1311,7 |
BEGIN |
menu := List.create(NIL); |
Menu.AddMenuItem(menu, menuPipet, "pipet"); |
Menu.AddMenuItem(menu, menuBoard, "board"); |
Menu.AddMenuItem(menu, menuSysFunc, "system functions"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
END CreateMenuTools; |
1415,179 → 1414,65 |
END ShowMenu; |
|
|
PROCEDURE main; |
PROCEDURE KeyDown (key: INTEGER); |
VAR |
width, height, x, y, scrollX, scrollY, i: INTEGER; |
key, btn: INTEGER; |
msState: SET; |
scroll: INTEGER; |
err: INTEGER; |
fileName, filePath: RW.tFileName; |
cliWidth, cliHeight: INTEGER; |
resized, middle: BOOLEAN; |
firstClickX, firstClickY, time: INTEGER; |
keyCode: INTEGER; |
shift, ctrl: BOOLEAN; |
BEGIN |
K.GetSystemColors; |
Icons.get(icons, grayIcons); |
modified := FALSE; |
switch := FALSE; |
textsCount := 0; |
curText := 0; |
mainTID := K.ThreadID(); |
K.SetIPC(IPC); |
U.ptr2str(K.GetName(), AppPath); |
Ini.load(AppPath); |
K.SetEventsMask({0, 1, 2, 5, 6, 31}); |
LeftButtonUp; |
resized := FALSE; |
shift := {}; |
K.ScreenSize(winWidth, winHeight); |
winWidth := (winWidth*80) DIV 100 - (128 + 30); |
winHeight := winHeight - (128 + 30); |
winWidth := MAX(winWidth, minWinWidth); |
winHeight := MAX(winHeight, minWinHeight); |
cliWidth := winWidth; |
cliHeight := winHeight; |
LEFT := searchLeft; |
canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 10), winHeight - (TOP + BOTTOM + 4) - K.SkinHeight()); |
tabs := Tabs.create(); |
Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight); |
font1 := G.CreateFont(1, "", {}); |
font2 := G.CreateFont(2, "", {}); |
font := font1; |
G.SetFont(canvas, font); |
T.init(NIL); |
T.setCanvas(canvas); |
U.ptr2str(K.GetCommandLine(), fileName); |
context := CreateContextMenu(); |
menuFile := CreateMenuFile(); |
menuEdit := CreateMenuEdit(); |
menuEncoding := CreateMenuEncoding(); |
menuView := CreateMenuView(); |
menuSyntax := CreateMenuSyntax(); |
menuProgram := CreateMenuProgram(); |
menuTools := CreateMenuTools(); |
IF fileName = "" THEN |
text := T.New(); |
filePath := "/rd/1" |
ELSE |
text := T.open(fileName, err); |
IF text = NIL THEN |
error("'cedit: error opening file' -E"); |
K.Exit |
ELSE |
U.getPath(fileName, filePath) |
END |
END; |
OD := OpenDlg.Create(draw_window, OpenDlg.topen, filePath, ""); |
insert(0, text); |
|
vScroll := Scroll.create(scrollWidth, canvas.height - scrollWidth*2 + 2); |
hScroll := Scroll.create(canvas.width - scrollWidth*2, scrollWidth); |
T.resize(canvas.width, canvas.height); |
T.SetPos(text, 0, 0); |
confirm := FALSE; |
notFound := FALSE; |
search := FALSE; |
createSearchForm; |
new_searchText := ""; |
searchText := ""; |
cs := FALSE; |
whole := FALSE; |
replaced := 0; |
Ini.getStr("paths", "build", buildScript); |
Ini.getStr("paths", "run", runScript); |
Ini.getStr("paths", "debug", debugScript); |
draw_window; |
repaint; |
WHILE TRUE DO |
CASE K.WaitForEvent() OF |
|1: |
FOR i := 0 TO 1 DO |
K.GetSystemColors; |
Icons.get(icons, grayIcons); |
IF ~K.RolledUp() THEN |
K.ClientSize(width, height); |
IF (width # cliWidth) OR (height # cliHeight) THEN |
cliWidth := width; |
cliHeight := height; |
resize; |
resized := TRUE; |
END; |
K.SetEventsMask({0, 1, 2, 5, 6, 31}) |
ELSE |
K.SetEventsMask({0, 30, 31}) |
END; |
draw_window |
END |
|
|2: |
key := K.GetKey(); |
getKBState; |
keyCode := key DIV 65536; |
getKBState(shift, ctrl); |
IF confirm THEN |
IF key DIV 65536 = 28 THEN (* Enter *) |
IF keyCode = 28 THEN (* Enter *) |
save(text); |
IF ~text.modified THEN |
closeFile(FALSE, curText) |
END |
END; |
repaint |
END; |
key := -1 |
END; |
IF key DIV 65536 = 61 THEN (* F3 *) |
ELSE |
IF keyCode = 61 THEN (* F3 *) |
key := -1; |
IF search & (searchText # "") THEN |
IF T.SHIFT IN shift THEN |
IF shift THEN |
notFound := ~T.findNext(text, ~box_lib.check_box_get_value(BKW)) |
ELSE |
notFound := ~T.findNext(text, box_lib.check_box_get_value(BKW)) |
END |
END |
ELSIF key DIV 65536 = 60 THEN (* F2 *) |
ELSIF keyCode = 60 THEN (* F2 *) |
key := -1; |
IF T.CTRL IN shift THEN |
IF ctrl THEN |
T.toggleLabel(text) |
ELSE |
T.gotoLabel(text, ~(T.SHIFT IN shift)) |
T.gotoLabel(text, ~shift) |
END |
ELSIF key DIV 65536 = 67 THEN (* F9 *) |
ELSIF keyCode = 67 THEN (* F9 *) |
key := -1; |
IF T.CTRL IN shift THEN |
IF ctrl THEN |
Script(buildScript) |
ELSE |
Script(runScript) |
END |
ELSIF key DIV 65536 = 1 THEN (* Esc *) |
ELSIF keyCode = 1 THEN (* Esc *) |
key := -1; |
IF search THEN |
Search |
END |
ELSIF (key DIV 65536 = 55) & (key DIV 256 MOD 256 = 52) THEN |
key := -1 (* PrtScn *) |
ELSIF (T.CTRL IN shift) & (key DIV 65536 = 15) THEN (* ctrl+Tab *) |
ELSIF (keyCode = 55) & (key DIV 256 MOD 256 = 52) THEN (* PrtScn *) |
key := -1 |
ELSIF (keyCode = 15) & ctrl THEN (* ctrl+Tab *) |
key := -1; |
curText := (curText + 1) MOD textsCount; |
Tabs.switch(tabs, curText); |
Switch(texts[curText]); |
draw_window |
ELSIF (T.CTRL IN shift) & (key DIV 65536 = 33) THEN |
SwitchTab((curText + 1) MOD textsCount) |
ELSIF (keyCode = 33) & ctrl THEN |
key := -1; |
IF ~search THEN |
Search |
END; |
EditBox_SetFocus(FindEdit, TRUE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE) |
ELSIF (T.CTRL IN shift) & (key DIV 65536 = 34) THEN |
ShowSearchPanel; |
SetFocus(FindEdit, TRUE) |
ELSIF (keyCode = 34) & ctrl THEN |
key := -1; |
IF ~search THEN |
Search |
END; |
EditBox_SetFocus(GotoEdit, TRUE); |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(ReplaceEdit, FALSE) |
END; |
IF (key # -1) & EditBox_Focus(FindEdit) THEN |
ShowSearchPanel; |
SetFocus(GotoEdit, TRUE) |
ELSE |
IF EditBox_Focus(FindEdit) THEN |
box_lib.edit_box_key(FindEdit, key); |
EditBox_GetValue(FindEdit, new_searchText); |
IF new_searchText # searchText THEN |
1594,17 → 1479,17 |
searchText := new_searchText; |
notFound := ~T.search(text, searchText, cs, whole) |
END |
ELSIF (key # -1) & EditBox_Focus(ReplaceEdit) THEN |
ELSIF EditBox_Focus(ReplaceEdit) THEN |
box_lib.edit_box_key(ReplaceEdit, key); |
EditBox_GetValue(ReplaceEdit, replaceText) |
ELSIF (key # -1) & EditBox_Focus(GotoEdit) THEN |
ELSIF EditBox_Focus(GotoEdit) THEN |
IF (key DIV 256) MOD 256 = 13 THEN |
goto |
ELSE |
box_lib.edit_box_key(GotoEdit, key) |
END |
ELSIF key # -1 THEN |
CASE key DIV 65536 OF |
ELSE |
CASE keyCode OF |
|73: key := 33 |
|81: key := 34 |
|71: key := 36 |
1615,10 → 1500,10 |
|77: key := 39 |
|82: key := -1 (* insert *) |
|83: key := 46 |
|59, 60, 62..66, 68, 87, 88: key := -1 (* F1, F2, F4..F8, F10, F11, F12 *) |
|59, 62..66, 68, 87, 88: key := -1 (* F1, F4..F8, F10, F11, F12 *) |
ELSE |
IF (T.CTRL IN shift) THEN |
CASE key DIV 65536 OF |
IF ctrl THEN |
CASE keyCode OF |
|17: closeFile(TRUE, curText); |
key := -2 |
|21: T.redo(text); |
1647,29 → 1532,32 |
END |
END; |
IF key >= 0 THEN |
T.key(text, key, shift) |
T.key(text, key, shift, ctrl) |
END |
END |
END |
END; |
IF key # -2 THEN |
repaint |
END |
|3: |
END KeyDown; |
|
|
PROCEDURE BtnClick; |
VAR |
btn: INTEGER; |
middle, exit: BOOLEAN; |
BEGIN |
btn := K.ButtonCode(middle); |
IF (Tabs.btnID <= btn) & (btn <= Tabs.btnID + maxTexts - 1) THEN |
DEC(btn, Tabs.btnID); |
IF middle THEN |
IF texts[btn].modified THEN |
curText := btn; |
Tabs.switch(tabs, btn); |
Switch(texts[btn]); |
draw_window; |
SwitchTab(btn) |
END; |
closeFile(TRUE, btn) |
ELSE |
curText := btn; |
Tabs.switch(tabs, btn); |
Switch(texts[btn]); |
draw_window |
SwitchTab(btn) |
END; |
btn := 0 |
ELSE |
1698,16 → 1586,24 |
|btnTools: |
ShowMenu(menuTools) |
|btnNo: |
exit := closing; |
closeFile(FALSE, curText); |
repaint |
repaint; |
IF exit THEN |
Close |
END |
|btnYes: |
exit := closing; |
save(text); |
IF ~text.modified THEN |
closeFile(FALSE, curText) |
END; |
repaint |
repaint; |
IF exit THEN |
Close |
END |
|btnClose: |
close |
Close |
|btnNew: |
NewFile; |
repaint |
1717,11 → 1613,15 |
save(text); |
repaint |
|btnSearch: |
IF ~search THEN |
Search |
END |
ShowSearchPanel |
|btnCloseFind: |
Search |
|btnHideFind: |
SetFocus(FindEdit, FALSE); |
searchOpened := FALSE; |
LEFT := searchLeft; |
resize; |
draw_window |
|btnUndo: |
T.undo(text); |
repaint |
1750,18 → 1650,6 |
|btnRight: |
T.scroll(text, 1, 0); |
repaint |
|btnFindEdit: |
EditBox_SetFocus(FindEdit, TRUE); |
EditBox_SetFocus(ReplaceEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE) |
|btnReplaceEdit: |
EditBox_SetFocus(ReplaceEdit, TRUE); |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(GotoEdit, FALSE) |
|btnGotoEdit: |
EditBox_SetFocus(GotoEdit, TRUE); |
EditBox_SetFocus(FindEdit, FALSE); |
EditBox_SetFocus(ReplaceEdit, FALSE) |
|btnFindNext: |
IF searchText # "" THEN |
notFound := ~T.findNext(text, box_lib.check_box_get_value(BKW)); |
1780,7 → 1668,30 |
goto; |
repaint |
END |
|6: |
END BtnClick; |
|
|
PROCEDURE MouseEvent (VAR resized: BOOLEAN; VAR firstClickX, firstClickY, time: INTEGER); |
CONST |
DELAY = 10; |
VAR |
msState: SET; |
scroll, x, y, scrollX, scrollY: INTEGER; |
|
|
PROCEDURE EditBox (eb: box_lib.edit_box); |
VAR |
focus: BOOLEAN; |
BEGIN |
focus := EditBox_Focus(eb); |
box_lib.edit_box_mouse(eb); |
IF focus # EditBox_Focus(eb) THEN |
SetFocus(eb, TRUE) |
END |
END EditBox; |
|
|
BEGIN |
Menu.close(menuFile); |
Menu.close(menuEdit); |
Menu.close(menuEncoding); |
1790,7 → 1701,6 |
Menu.close(menuTools); |
Menu.close(context); |
IF ~resized THEN |
getKBState; |
msState := K.MouseState(); |
IF ~(0 IN msState) OR (16 IN msState) THEN |
LeftButtonUp |
1801,7 → 1711,7 |
repaint |
END; |
IF leftButton THEN |
IF K.GetTickCount() - time > 9 THEN |
IF K.GetTickCount() - time >= DELAY THEN |
mouse(x, y); |
T.mouse(text, x, y); |
repaint |
1845,16 → 1755,10 |
END |
END |
END; |
IF search THEN |
IF EditBox_Focus(FindEdit) THEN |
box_lib.edit_box_mouse(FindEdit) |
END; |
IF EditBox_Focus(ReplaceEdit) THEN |
box_lib.edit_box_mouse(ReplaceEdit) |
END; |
IF EditBox_Focus(GotoEdit) THEN |
box_lib.edit_box_mouse(GotoEdit) |
END; |
IF search & searchOpened THEN |
EditBox(FindEdit); |
EditBox(ReplaceEdit); |
EditBox(GotoEdit); |
box_lib.check_box_mouse2(CS); |
box_lib.check_box_mouse2(WH); |
box_lib.check_box_mouse2(BKW); |
1870,6 → 1774,119 |
END |
END; |
resized := FALSE |
END MouseEvent; |
|
|
PROCEDURE Redraw (VAR resized: BOOLEAN; VAR width, height, cliWidth, cliHeight: INTEGER); |
VAR |
i: INTEGER; |
BEGIN |
K.GetSystemColors; |
FOR i := 0 TO 1 DO |
IF ~K.RolledUp() THEN |
K.ClientSize(width, height); |
IF (width # cliWidth) OR (height # cliHeight) THEN |
cliWidth := width; |
cliHeight := height; |
resize; |
resized := TRUE |
END; |
K.SetEventsMask({0, 1, 2, 5, 6, 31}) |
ELSE |
K.SetEventsMask({0, 30, 31}) |
END; |
draw_window |
END |
END Redraw; |
|
|
PROCEDURE main; |
VAR |
err: INTEGER; |
fileName, filePath: RW.tFileName; |
width, height, cliWidth, cliHeight: INTEGER; |
resized: BOOLEAN; |
firstClickX, firstClickY, time: INTEGER; |
BEGIN |
K.GetSystemColors; |
Icons.get(icons, grayIcons); |
modified := FALSE; |
switch := FALSE; |
closing := FALSE; |
textsCount := 0; |
curText := 0; |
mainTID := K.ThreadID(); |
K.SetIPC(IPC); |
U.ptr2str(K.GetName(), AppPath); |
Ini.load(AppPath); |
LeftButtonUp; |
resized := FALSE; |
K.ScreenSize(winWidth, winHeight); |
winWidth := (winWidth*80) DIV 100 - (128 + 30); |
winHeight := winHeight - (128 + 30); |
winWidth := MAX(winWidth, minWinWidth); |
winHeight := MAX(winHeight, minWinHeight); |
cliWidth := winWidth; |
cliHeight := winHeight; |
LEFT := searchLeft; |
canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 10), winHeight - (TOP + BOTTOM + 4) - K.SkinHeight()); |
tabs := Tabs.create(); |
Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight); |
font1 := G.CreateFont(1, "", {}); |
font2 := G.CreateFont(2, "", {}); |
font := font1; |
G.SetFont(canvas, font); |
T.init(NIL); |
T.setCanvas(canvas); |
U.ptr2str(K.GetCommandLine(), fileName); |
context := CreateContextMenu(); |
menuFile := CreateMenuFile(); |
menuEdit := CreateMenuEdit(); |
menuEncoding := CreateMenuEncoding(); |
menuView := CreateMenuView(); |
menuSyntax := CreateMenuSyntax(); |
menuProgram := CreateMenuProgram(); |
menuTools := CreateMenuTools(); |
IF fileName = "" THEN |
text := T.New(); |
filePath := "/rd/1" |
ELSE |
text := T.open(fileName, err); |
IF text = NIL THEN |
error("'cedit: error opening file' -E"); |
K.Exit |
ELSE |
U.getPath(fileName, filePath) |
END |
END; |
OD := OpenDlg.Create(draw_window, OpenDlg.topen, filePath, ""); |
insert(0, text); |
|
vScroll := Scroll.create(scrollWidth, canvas.height - scrollWidth*2 + 2); |
hScroll := Scroll.create(canvas.width - scrollWidth*2, scrollWidth); |
T.resize(canvas.width, canvas.height); |
T.SetPos(text, 0, 0); |
confirm := FALSE; |
notFound := FALSE; |
search := FALSE; |
searchOpened := FALSE; |
createSearchForm; |
new_searchText := ""; |
searchText := ""; |
cs := FALSE; |
whole := FALSE; |
replaced := 0; |
Ini.getStr("paths", "build", buildScript); |
Ini.getStr("paths", "run", runScript); |
Ini.getStr("paths", "debug", debugScript); |
K.SetEventsMask({0, 1, 2, 5, 6, 31}); |
draw_window; |
WHILE TRUE DO |
CASE K.WaitForEvent() OF |
|1: Redraw(resized, width, height, cliWidth, cliHeight) |
|2: KeyDown(K.GetKey()) |
|3: BtnClick |
|6: MouseEvent(resized, firstClickX, firstClickY, time) |
|7: receiveIPC |
ELSE |
END |