Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9072 → Rev 9073

/programs/develop/cedit/SRC/CEdit.ob07
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