28,7 → 28,7 |
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; |
|
CONST |
HEADER = "CEdit (16-jan-2022)"; |
HEADER = "CEdit (18-jan-2022)"; |
|
ShellFilter = ""; |
EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; |
169,7 → 169,10 |
|
maxTexts = 32; |
|
SHIFT = Menu.SHIFT; |
CTRL = Menu.CTRL; |
|
|
VAR |
header: RW.tFileName; |
canvas: G.tCanvas; |
199,8 → 202,6 |
|
replaced: INTEGER; |
|
mainTID: INTEGER; |
|
context, menuFile, menuEdit, menuSearch, menuEncoding, |
menuView, menuLanguage, menuProgram, menuTools, |
subCurLine, subIndent, subCase, subBookmark, subEOL: Menu.tMenu; |
211,8 → 212,6 |
|
toolbar: Toolbar.tToolbar; |
|
IPC: ARRAY 64 OF INTEGER; |
|
CursorTime, CurrentTime: INTEGER; |
timerEnabled: BOOLEAN; |
|
924,16 → 923,6 |
END CloseMenu; |
|
|
PROCEDURE MenuItemClick (menu: Menu.tMenu; id: INTEGER); |
VAR |
msg: ARRAY 2 OF INTEGER; |
BEGIN |
msg[0] := id; |
msg[1] := 8; |
K.SendIPC(mainTID, msg) |
END MenuItemClick; |
|
|
PROCEDURE goto; |
VAR |
gotoVal: INTEGER; |
1114,34 → 1103,18 |
END setScript; |
|
|
PROCEDURE receiveIPC; |
PROCEDURE ClickMenu; |
VAR |
scrollIPC: BOOLEAN; |
item: List.tItem; |
BEGIN |
scrollIPC := FALSE; |
IF IPC[0] = mainTID THEN |
IF IPC[2] = Scroll.ScrollIPC THEN |
Scroll.receiveIPC(IPC, scrollIPC) |
END; |
IF ~scrollIPC THEN |
IPC[2] := 0 |
END |
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 Menu.MenuItem < 0 THEN |
item := List.getItem(mainMenu, (-Menu.MenuItem - mainMenuBtn) MOD mainMenu.count); |
IF item # NIL THEN |
ShowMenu(item(Menu.tMainItem).menu) |
END; |
IPC[2] := 0 |
END |
END |
Menu.SetItem(0) |
END; |
IF ~scrollIPC THEN |
CASE IPC[2] OF |
CASE Menu.MenuItem OF |
|0: |
|menuCut: T.key(text, ORD("X"), FALSE, TRUE) |
|menuCopy: T.key(text, ORD("C"), FALSE, TRUE) |
1250,7 → 1223,7 |
|menuSysFunc: |
K.Run("/sys/docpack", "f") |
|menuColors..menuMaxColors: |
Ini.selectSection(IPC[2] - menuColors) |
Ini.selectSection(Menu.MenuItem - menuColors) |
|menuMoveUp: |
T.MoveLines(text, FALSE) |
|menuMoveDown: |
1268,72 → 1241,10 |
|menuLower: |
T.chCase(text, FALSE) |
END; |
IPC[0] := 0; |
IPC[1] := 0 |
END |
END receiveIPC; |
Menu.SetItem(0) |
END ClickMenu; |
|
|
PROCEDURE MenuKeyDown (menu: Menu.tMenu; key: INTEGER): BOOLEAN; |
VAR |
menuItem: INTEGER; |
shift, ctrl: BOOLEAN; |
BEGIN |
menuItem := -1; |
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, |
35: menuItem := menuFind |
|34: menuItem := menuGoto |
|44: menuItem := menuUndo |
|45: menuItem := menuCut |
|46: menuItem := menuCopy |
|47: menuItem := menuPaste |
|24: menuItem := menuOpen |
|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 |
IF key DIV 65536 = 83 THEN |
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 |
MenuItemClick(menu, menuItem) |
ELSE |
menuItem := -1 |
END |
END |
RETURN menuItem # -1 |
END MenuKeyDown; |
|
|
PROCEDURE CreateContextMenu (): Menu.tMenu; |
VAR |
menu: List.tList; |
1348,7 → 1259,7 |
Menu.AddMenuItem(menu, menuDelete, "delete"); |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuSelectAll, "select all ctrl-A"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateContextMenu; |
|
|
1367,7 → 1278,7 |
Menu.AddMenuItem(menu, menuClose, "close ctrl-W"); |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuExit, "exit"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuFile; |
|
|
1392,7 → 1303,7 |
Menu.child(menu, subIndent); |
Menu.AddMenuItem(menu, menuCase, "case"); |
Menu.child(menu, subCase); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuEdit; |
|
|
1408,7 → 1319,7 |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuBookmark, "bookmark"); |
Menu.child(menu, subBookmark); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuSearch; |
|
|
1424,7 → 1335,7 |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuEOL, "EOL"); |
Menu.child(menu, subEOL); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuEncoding; |
|
|
1436,7 → 1347,7 |
Menu.AddMenuItem(menu, menuCRLF, RW.eolNames[RW.EOL_CRLF]); |
Menu.AddMenuItem(menu, menuLF, RW.eolNames[RW.EOL_LF]); |
Menu.AddMenuItem(menu, menuCR, RW.eolNames[RW.EOL_CR]); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuEOL; |
|
|
1459,7 → 1370,7 |
colors := colors.next(Ini.tSection) |
END; |
|
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuView; |
|
|
1477,7 → 1388,7 |
Menu.AddMenuItem(menu, menuPascal, "Pascal"); |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuText, "Text"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuLanguage; |
|
|
1494,7 → 1405,7 |
Menu.delimiter(menu); |
Menu.AddMenuItem(menu, menuDebug, "debug"); |
Menu.AddMenuItem(menu, menuDebugScript, "script"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuProgram; |
|
|
1507,7 → 1418,7 |
Menu.AddMenuItem(menu, menuMagnify, "magnify"); |
Menu.AddMenuItem(menu, menuBoard, "board"); |
Menu.AddMenuItem(menu, menuSysFunc, "system functions"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuTools; |
|
|
1520,7 → 1431,7 |
Menu.AddMenuItem(menu, menuMoveDown, "move down ctrl-Down"); |
Menu.AddMenuItem(menu, menuDuplicate, "duplicate ctrl-D"); |
Menu.AddMenuItem(menu, menuRemove, "remove ctrl-Del"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuCurLine; |
|
|
1531,7 → 1442,7 |
menu := List.create(NIL); |
Menu.AddMenuItem(menu, menuIncInd, "increase Tab"); |
Menu.AddMenuItem(menu, menuDecInd, "decrease shift-Bksp"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuIndent; |
|
|
1542,7 → 1453,7 |
menu := List.create(NIL); |
Menu.AddMenuItem(menu, menuUpper, "UPPER ctrl-U"); |
Menu.AddMenuItem(menu, menuLower, "lower ctrl-L"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
END CreateMenuCase; |
|
|
1554,10 → 1465,44 |
Menu.AddMenuItem(menu, menuToggleBookmark, "toggle ctrl-F2"); |
Menu.AddMenuItem(menu, menuNextBookmark, "next F2"); |
Menu.AddMenuItem(menu, menuPrevBookmark, "previous shift-F2"); |
RETURN Menu.create(menu, MenuItemClick, MenuKeyDown) |
RETURN Menu.create(menu) |
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(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); |
1732,6 → 1677,7 |
middle, exit: BOOLEAN; |
menu: Menu.tMenu; |
BEGIN |
exit := FALSE; |
btn := K.ButtonCode(middle); |
IF U.between(Tabs.btnID, btn, Tabs.btnID + maxTexts - 1) THEN |
DEC(btn, Tabs.btnID); |
1756,19 → 1702,16 |
btn := 0 |
END |
END; |
|
CASE btn OF |
|Tabs.btnLeft: Tabs.scroll(tabs, -1); switch := TRUE; repaint |
|Tabs.btnRight: Tabs.scroll(tabs, +1); switch := TRUE; repaint |
|
|0: |
|
|Tabs.btnLeft, Tabs.btnRight: |
Tabs.scroll(tabs, btn); |
switch := TRUE |
|btnNo: |
exit := closing; |
closeFile(FALSE, curText); |
repaint; |
IF exit THEN |
Close |
END |
repaint |
|btnYes: |
exit := closing; |
save(text); |
1775,39 → 1718,29 |
IF ~text.modified THEN |
closeFile(FALSE, curText) |
END; |
repaint; |
IF exit THEN |
Close |
END |
repaint |
|btnClose: |
Close |
exit := TRUE |
|btnNew: |
NewFile; |
repaint |
NewFile |
|btnOpen: |
OpenDial |
|btnSave: |
save(text); |
repaint |
save(text) |
|btnSearch: |
ShowSearchPanel(FALSE); |
repaint |
ShowSearchPanel(FALSE) |
|btnCloseSearch: |
Search |
|btnHideSearch: |
HideSearch |
|btnUndo: |
T.undo(text); |
repaint |
T.undo(text) |
|btnRedo: |
T.redo(text); |
repaint |
T.redo(text) |
|btnUpper: |
T.chCase(text, TRUE); |
repaint |
T.chCase(text, TRUE) |
|btnLower: |
T.chCase(text, FALSE); |
repaint |
T.chCase(text, FALSE) |
|btnBuild: |
Script(buildScript) |
|btnRun: |
1815,22 → 1748,24 |
|btnFindNext: |
IF searchText # "" THEN |
notFound := ~T.findNext(text, BKW.value); |
SetFocus(FindEdit, FALSE); |
repaint |
SetFocus(FindEdit, FALSE) |
END |
|btnReplace: |
T.replace(text, replaceText, LENGTH(searchText)); |
SetFocus(FindEdit, FALSE); |
repaint |
SetFocus(FindEdit, FALSE) |
|btnReplaceAll: |
notFound := ~T.search(text, searchText, cs, whole); |
IF ~notFound THEN |
replaced := T.replaceAll(text, replaceText, LENGTH(searchText)); |
END; |
SetFocus(FindEdit, FALSE); |
repaint |
SetFocus(FindEdit, FALSE) |
|btnGoto: |
goto; |
goto |
END; |
|
IF exit THEN |
Close |
ELSE |
repaint |
END |
END BtnClick; |
1884,6 → 1819,7 |
|
Scroll.mouse(hScroll); |
Scroll.mouse(vScroll); |
msState := K.MouseState(); |
T.getScroll(text, scrollX, scrollY); |
IF (hScroll.value # scrollX) OR (vScroll.value # scrollY) THEN |
T.scroll(text, hScroll.value - scrollX, vScroll.value - scrollY); |
1935,7 → 1871,13 |
|
|
PROCEDURE Redraw (VAR resized: BOOLEAN; VAR width, height, cliWidth, cliHeight: INTEGER); |
VAR |
onClose: BOOLEAN; |
BEGIN |
onClose := (Menu.MenuItem = menuClose) OR (Menu.MenuItem = menuExit); |
IF ~onClose THEN |
ClickMenu |
END; |
K.GetSystemColors; |
IF ~K.RolledUp() THEN |
K.ClientSize(width, height); |
1945,7 → 1887,7 |
resize; |
resized := TRUE |
END; |
K.SetEventsMask({0, 1, 2, 5, 6, 31}) |
K.SetEventsMask({0, 1, 2, 5, 31}) |
ELSE |
SetCaption(text.fileName); |
K.SetEventsMask({0, 30, 31}) |
1954,6 → 1896,9 |
IF SkinHeight # K.SkinHeight() THEN |
SkinHeight := K.SkinHeight(); |
Redraw(resized, width, height, cliWidth, cliHeight) |
END; |
IF onClose THEN |
ClickMenu |
END |
END Redraw; |
|
1960,9 → 1905,7 |
|
PROCEDURE ScrollChange; |
BEGIN |
Scroll.change(hScroll); |
Scroll.change(vScroll); |
T.scroll(text, ORD(hScroll.Inc) - ORD(hScroll.Dec), ORD(vScroll.Inc) - ORD(vScroll.Dec)); |
T.scroll(text, hScroll.btn, vScroll.btn); |
IF menuActive THEN |
draw_window; |
menuActive := FALSE |
1985,8 → 1928,6 |
closing := FALSE; |
textsCount := 0; |
curText := 0; |
mainTID := K.ThreadID(); |
K.SetIPC(IPC); |
Args.GetArg(0, AppPath); |
Ini.load(AppPath); |
leftButton := FALSE; |
2010,6 → 1951,7 |
T.init(resetTimer); |
T.setCanvas(canvas); |
|
Menu.init(resetTimer); |
context := CreateContextMenu(); |
menuFile := CreateMenuFile(); |
subCurLine := CreateMenuCurLine(); |
2039,6 → 1981,7 |
Menu.AddMainItem(mainMenu, "language", menuLanguage); |
Menu.AddMainItem(mainMenu, "program", menuProgram); |
Menu.AddMainItem(mainMenu, "tools", menuTools); |
Shortcuts; |
|
Toolbar.create(toolbar, LEFT_PADDING + 5, toolbarTop); |
Toolbar.add(toolbar, btnNew, 2, ""); |
2075,9 → 2018,8 |
END; |
SwitchTab(textsCount - 1); |
|
Scroll.init(ScrollChange); |
Scroll.create(FALSE, canvas.width + 1, scrollWidth, scrollWidth, scrollWidth*3 DIV 2, hScroll); |
Scroll.create(TRUE, scrollWidth, canvas.height + 2, scrollWidth, scrollWidth*3 DIV 2, vScroll); |
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; |
2094,8 → 2036,7 |
|
OD := OpenDlg.Create(draw_window, OpenDlg.topen, filePath, ""); |
|
K.SetEventsMask({0, 1, 2, 5, 6, 31}); |
Menu.init(resetTimer); |
K.SetEventsMask({0, 1, 2, 5, 31}); |
draw_window; |
blink := Ini.blink; |
IF blink <= 0 THEN |
2112,6 → 2053,7 |
T.toggleCursor; |
repaint |
END; |
|
CASE K.EventTimeout(10) OF |
|0: |
|1: Redraw(resized, width, height, cliWidth, cliHeight) |
2118,7 → 2060,6 |
|2: KeyDown(K.GetKey()) |
|3: BtnClick |
|6: MouseEvent(resized, firstClickX, firstClickY, time) |
|7: receiveIPC |
END |
END |
END main; |