Subversion Repositories Kolibri OS

Rev

Rev 9182 | Rev 9190 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9182 Rev 9187
Line 23... Line 23...
23
    OpenDlg, K := KolibriOS,
23
    OpenDlg, K := KolibriOS,
24
    U := Utils, Lines, Menu, List,
24
    U := Utils, Lines, Menu, List,
25
    G := Graph, T := Text, E := Encodings,
25
    G := Graph, T := Text, E := Encodings,
26
    CB := Clipboard, Languages,
26
    CB := Clipboard, Languages,
27
    ChangeLog, Scroll, CheckBox,
27
    ChangeLog, Scroll, CheckBox,
28
    RW, Ini, box_lib, Icons, Tabs, Timer;
28
    RW, Ini, EB := EditBox, Icons, Tabs, Timer;
Line 29... Line 29...
29
 
29
 
30
CONST
30
CONST
Line 31... Line 31...
31
    header = "CEdit (08-sep-2021)";
31
    header = "CEdit (11-sep-2021)";
32
 
32
 
Line 33... Line 33...
33
    ShellFilter = "";
33
    ShellFilter = "";
Line 56... Line 56...
56
    btnReplaceAll = 62;
56
    btnReplaceAll = 62;
57
    btnGoto = 63;
57
    btnGoto = 63;
58
    btnCloseFind = 64;
58
    btnCloseFind = 64;
59
    btnHideFind = 65;
59
    btnHideFind = 65;
Line 60... Line -...
60
 
-
 
61
    btnFile = 70;
-
 
62
    btnEdit = 71;
60
 
63
    btnMenuSearch = 72;
-
 
64
    btnEncoding = 73;
-
 
65
    btnEOL = 74;
-
 
66
    btnView = 75;
-
 
67
    btnSyntax = 76;
-
 
68
    btnProgram = 77;
-
 
69
    btnTools = 78;
-
 
70
 
-
 
Line 71... Line 61...
71
    MainMenuHeight = fontHeight + 7;
61
    mainMenuBtn = 70;
72
 
62
 
73
    btnHeight = 25;
63
    btnHeight = 25;
74
    btnWidth = 75;
64
    btnWidth = 75;
75
    btnTop = MainMenuHeight + 3;
65
    btnTop = Menu.MainMenuHeight + 3;
76
    toolBtnSize = 24;
66
    toolBtnSize = 24;
Line 77... Line 67...
77
    toolbarDelim = 7;
67
    toolbarDelim = 7;
Line 87... Line 77...
87
    searchLeft = 0;
77
    searchLeft = 0;
88
    EditBox_Width = 180;
78
    EditBox_Width = 180;
89
    EDITBOX_MAXCHARS = 500;
79
    EDITBOX_MAXCHARS = 500;
Line 90... Line 80...
90
 
80
 
91
    menuFileX = searchLeft;
81
    menuFileX = searchLeft;
92
    menuEditX = menuFileX + 4*fontWidth + 2 + 7;
82
    menuEditX = menuFileX + 4*fontWidth + 9;
93
    menuSearchX = menuEditX + 4*fontWidth + 2 + 7;
83
    menuSearchX = menuEditX + 4*fontWidth + 9;
94
    menuEncodingX = menuSearchX + 6*fontWidth + 2 + 7;
84
    menuEncodingX = menuSearchX + 6*fontWidth + 9;
95
    menuEOLX = menuEncodingX + 8*fontWidth + 2 + 7;
85
    menuEOLX = menuEncodingX + 8*fontWidth + 9;
96
    menuViewX = menuEOLX + 3*fontWidth + 2 + 7;
86
    menuViewX = menuEOLX + 3*fontWidth + 9;
97
    menuSyntaxX = menuViewX + 4*fontWidth + 2 + 7;
87
    menuSyntaxX = menuViewX + 4*fontWidth + 9;
98
    menuProgramX = menuSyntaxX + 6*fontWidth + 2 + 7;
88
    menuProgramX = menuSyntaxX + 6*fontWidth + 9;
Line 99... Line 89...
99
    menuToolsX = menuProgramX + 7*fontWidth + 2 + 7;
89
    menuToolsX = menuProgramX + 7*fontWidth + 9;
100
 
90
 
101
    menuCut = 1;
91
    menuCut = 1;
102
    menuCopy = 2;
92
    menuCopy = 2;
Line 174... Line 164...
174
    menuLF = 140;
164
    menuLF = 140;
175
    menuCRLF = 141;
165
    menuCRLF = 141;
176
    menuCR = 142;
166
    menuCR = 142;
Line 177... Line 167...
177
 
167
 
178
    maxTexts = 32;
-
 
Line 179... Line 168...
179
    scrollDelay = 40;
168
    maxTexts = 32;
180
 
169
 
181
 
170
 
Line 196... Line 185...
196
    switch, closing: BOOLEAN;
185
    switch, closing: BOOLEAN;
197
    leftButton: BOOLEAN;
186
    leftButton: BOOLEAN;
198
    hScroll, vScroll: Scroll.tScroll;
187
    hScroll, vScroll: Scroll.tScroll;
199
    LEFT: INTEGER;
188
    LEFT: INTEGER;
Line 200... Line 189...
200
 
189
 
201
    FindEdit, ReplaceEdit, GotoEdit: box_lib.edit_box;
190
    FindEdit, ReplaceEdit, GotoEdit: EB.tEditBox;
Line 202... Line 191...
202
    CS, WH, BKW: CheckBox.tCheckBox;
191
    CS, WH, BKW: CheckBox.tCheckBox;
203
 
192
 
Line 210... Line 199...
210
 
199
 
211
    context, menuFile, menuEdit, menuSearch, menuEncoding,
200
    context, menuFile, menuEdit, menuSearch, menuEncoding,
212
    menuEOL, menuView, menuSyntax, menuProgram, menuTools,
201
    menuEOL, menuView, menuSyntax, menuProgram, menuTools,
Line -... Line 202...
-
 
202
    subCurLine, subIndent, subCase, subBookmark: Menu.tMenu;
-
 
203
 
213
    subCurLine, subIndent, subCase, subBookmark: Menu.tMenu;
204
    mainMenu: Menu.tMain;
Line 214... Line 205...
214
 
205
 
215
    menuActive: BOOLEAN;
206
    menuActive: BOOLEAN;
Line 232... Line 223...
232
    U.append(s1, s2);
223
    U.append(s1, s2);
233
    K.DrawText(LEFT, y, K.textColor, s1)
224
    K.DrawText(LEFT, y, K.textColor, s1)
234
END WritePos;
225
END WritePos;
Line 235... Line 226...
235
 
226
 
236
 
227
 
237
PROCEDURE EditBox_Focus (edit: box_lib.edit_box): BOOLEAN;
228
PROCEDURE EditBox_Focus (edit: EB.tEditBox): BOOLEAN;
238
VAR
229
VAR
239
	res: BOOLEAN;
230
	res: BOOLEAN;
240
BEGIN
231
BEGIN
Line 256... Line 247...
256
		Timer.create(mainTID)
247
		Timer.create(mainTID)
257
	END
248
	END
258
END resetTimer;
249
END resetTimer;
Line 259... Line 250...
259
 
250
 
260
 
251
 
261
PROCEDURE EditBox_SetFocus (edit: box_lib.edit_box; value: BOOLEAN);
252
PROCEDURE EditBox_SetFocus (edit: EB.tEditBox; value: BOOLEAN);
262
BEGIN
253
BEGIN
263
    IF value THEN
254
    IF value THEN
264
        edit.flags := ORD(BITS(edit.flags) + {1})
255
        edit.flags := ORD(BITS(edit.flags) + {1})
265
    ELSE
256
    ELSE
266
        edit.flags := ORD(BITS(edit.flags) - {1})
257
        edit.flags := ORD(BITS(edit.flags) - {1})
267
    END;
258
    END;
268
    IF search & searchOpened THEN
259
    IF search & searchOpened THEN
269
        box_lib.edit_box_draw(edit)
260
        EB.paint(edit)
Line 270... Line 261...
270
    END
261
    END
271
END EditBox_SetFocus;
262
END EditBox_SetFocus;
272
 
263
 
273
 
264
 
274
PROCEDURE SetFocus (edit: box_lib.edit_box; value: BOOLEAN);
265
PROCEDURE SetFocus (edit: EB.tEditBox; value: BOOLEAN);
275
BEGIN
266
BEGIN
Line 556... Line 547...
556
    ReplaceEdit.top := top + 75;
547
    ReplaceEdit.top := top + 75;
557
    GotoEdit.top := top + 350;
548
    GotoEdit.top := top + 350;
558
    FindEdit.left := left;
549
    FindEdit.left := left;
559
    ReplaceEdit.left := left;
550
    ReplaceEdit.left := left;
560
    GotoEdit.left := left;
551
    GotoEdit.left := left;
561
    box_lib.edit_box_draw(FindEdit);
552
    EB.paint(FindEdit);
562
    box_lib.edit_box_draw(ReplaceEdit);
553
    EB.paint(ReplaceEdit);
563
    box_lib.edit_box_draw(GotoEdit);
554
    EB.paint(GotoEdit);
564
    y := top + 200;
555
    y := top + 200;
565
    K.CreateButton(btnFindNext, left, y, btnWidth, btnHeight, K.btnColor, "next"); INC(y, btnHeight + 10);
556
    K.CreateButton(btnFindNext, left, y, btnWidth, btnHeight, K.btnColor, "next"); INC(y, btnHeight + 10);
566
    K.CreateButton(btnReplace, left, y, btnWidth, btnHeight, K.btnColor, "replace"); INC(y, btnHeight + 10);
557
    K.CreateButton(btnReplace, left, y, btnWidth, btnHeight, K.btnColor, "replace"); INC(y, btnHeight + 10);
567
    K.CreateButton(btnReplaceAll, left, y, btnWidth + 5*fontWidth - 2, btnHeight, K.btnColor, "replace all");
558
    K.CreateButton(btnReplaceAll, left, y, btnWidth + 5*fontWidth - 2, btnHeight, K.btnColor, "replace all");
568
    K.CreateButton(btnGoto, left, top + 380, btnWidth, btnHeight, K.btnColor, "go");
559
    K.CreateButton(btnGoto, left, top + 380, btnWidth, btnHeight, K.btnColor, "go");
Line 581... Line 572...
581
        K.DrawLine(x + toolBtnSize, btnTop, x + toolBtnSize, btnTop + toolBtnSize, K.shadowColor);
572
        K.DrawLine(x + toolBtnSize, btnTop, x + toolBtnSize, btnTop + toolBtnSize, K.shadowColor);
582
        K.CreateButton(id + ORD({30}), x, btnTop, toolBtnSize, toolBtnSize, K.btnColor, "");
573
        K.CreateButton(id + ORD({30}), x, btnTop, toolBtnSize, toolBtnSize, K.btnColor, "");
583
    END drawToolbarBtn;
574
    END drawToolbarBtn;
Line 584... Line -...
584
 
-
 
585
 
-
 
586
    PROCEDURE drawMainMenu (menu: Menu.tMenu; x: INTEGER; btn: INTEGER; caption: ARRAY OF WCHAR);
-
 
587
    VAR
-
 
588
        menuColor, textColor, n: INTEGER;
-
 
589
    BEGIN
-
 
590
        IF menu.tid # 0 THEN
-
 
591
            menuColor := K.textColor;
-
 
592
            textColor := K.winColor
-
 
593
        ELSE
-
 
594
            menuColor := K.winColor;
-
 
595
            textColor := K.textColor
-
 
596
        END;
-
 
597
        n := LENGTH(caption);
-
 
598
        K.DrawRect(x, 0, n*fontWidth + 2, MainMenuHeight, menuColor);
-
 
599
        K.CreateButton(btn + ORD({30}), x, 0, n*fontWidth + 2, MainMenuHeight, K.btnColor, "");
-
 
600
        K.DrawText(x + 1, (MainMenuHeight - fontHeight) DIV 2 + 1, textColor, caption)
-
 
601
    END drawMainMenu;
-
 
602
 
575
 
603
 
576
 
604
BEGIN
577
BEGIN
605
    K.BeginDraw;
578
    K.BeginDraw;
606
    K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, header);
579
    K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, header);
Line 612... Line 585...
612
        K.ClientSize(width, height);
585
        K.ClientSize(width, height);
Line 613... Line 586...
613
 
586
 
614
        K.DrawRect(0, 0, width, TOP, K.winColor);
587
        K.DrawRect(0, 0, width, TOP, K.winColor);
615
        K.DrawRect(0, 0, LEFT, height, K.winColor);
588
        K.DrawRect(0, 0, LEFT, height, K.winColor);
616
        K.DrawRect(LEFT + canvas.width + 1, TOP + canvas.height, scrollWidth - 1, scrollWidth, K.winColor);
-
 
617
 
-
 
618
        drawMainMenu(menuFile, menuFileX, btnFile, "file");
-
 
619
        drawMainMenu(menuEdit, menuEditX, btnEdit, "edit");
-
 
620
        drawMainMenu(menuSearch, menuSearchX, btnMenuSearch, "search");
-
 
621
        drawMainMenu(menuEncoding, menuEncodingX, btnEncoding, "encoding");
589
        K.DrawRect(LEFT + canvas.width + 1, TOP + canvas.height, scrollWidth - 1, scrollWidth, K.winColor);
622
        drawMainMenu(menuEOL, menuEOLX, btnEOL, "eol");
-
 
623
        drawMainMenu(menuView, menuViewX, btnView, "view");
-
 
624
        drawMainMenu(menuSyntax, menuSyntaxX, btnSyntax, "syntax");
-
 
625
        drawMainMenu(menuProgram, menuProgramX, btnProgram, "program");
-
 
Line 626... Line 590...
626
        drawMainMenu(menuTools, menuToolsX, btnTools, "tools");
590
        Menu.DrawMain(mainMenu);
Line 627... Line 591...
627
 
591
 
628
        x := searchLeft;
592
        x := searchLeft;
Line 685... Line 649...
685
    x := mouseX - winX - cliX - LEFT;
649
    x := mouseX - winX - cliX - LEFT;
686
    y := mouseY - winY - cliY - TOP;
650
    y := mouseY - winY - cliY - TOP;
687
END mouse;
651
END mouse;
Line 688... Line -...
688
 
-
 
689
 
-
 
690
PROCEDURE getKBState (VAR shift, ctrl: BOOLEAN);
-
 
691
VAR
-
 
692
    kbState: SET;
-
 
693
BEGIN
-
 
694
    kbState := K.GetControlKeys();
-
 
695
    shift := {0, 1} * kbState # {};
-
 
696
    ctrl := {2, 3} * kbState # {};
-
 
697
END getKBState;
-
 
698
 
652
 
699
 
653
 
700
PROCEDURE stopTimer;
654
PROCEDURE stopTimer;
701
BEGIN
655
BEGIN
702
	T.hideCursor;
656
	T.hideCursor;
Line 971... Line 925...
971
        error("'cedit: too many files' -E")
925
        error("'cedit: too many files' -E")
972
    END
926
    END
973
END open;
927
END open;
Line 974... Line 928...
974
 
928
 
975
 
929
 
976
PROCEDURE createEdit (left, top: INTEGER): box_lib.edit_box;
930
PROCEDURE createEdit (left, top: INTEGER): EB.tEditBox;
977
VAR
931
VAR
978
    edit, EditBox0: box_lib.edit_box;
932
    edit, EditBox0: EB.tEditBox;
979
BEGIN
933
BEGIN
980
    NEW(EditBox0);
934
    NEW(EditBox0);
981
    EditBox0.text := K.malloc(EDITBOX_MAXCHARS + 2);
935
    EditBox0.text := K.malloc(EDITBOX_MAXCHARS + 2);
982
    ASSERT(EditBox0.text # 0);
936
    ASSERT(EditBox0.text # 0);
983
    edit := box_lib.kolibri_new_edit_box(left, top, EditBox_Width, EDITBOX_MAXCHARS, EditBox0);
937
    edit := EB.create(left, top, EditBox_Width, EDITBOX_MAXCHARS, EditBox0);
984
    edit.flags := 4002H;
938
    edit.flags := 4002H;
985
    edit.text_color := 30000000H;
939
    edit.text_color := 30000000H;
986
    EditBox_SetFocus(edit, FALSE)
940
    EditBox_SetFocus(edit, FALSE)
Line 992... Line 946...
992
BEGIN
946
BEGIN
993
    FindEdit := createEdit(searchLeft, TOP + 20);
947
    FindEdit := createEdit(searchLeft, TOP + 20);
994
    ReplaceEdit := createEdit(searchLeft, TOP + 20 + 55);
948
    ReplaceEdit := createEdit(searchLeft, TOP + 20 + 55);
995
    GotoEdit := createEdit(searchLeft, TOP + 20 + 330);
949
    GotoEdit := createEdit(searchLeft, TOP + 20 + 330);
996
    GotoEdit.flags := ORD(BITS(GotoEdit.flags) + BITS(8000H));
950
    GotoEdit.flags := ORD(BITS(GotoEdit.flags) + BITS(8000H));
997
    BKW := CheckBox.create("backward");
951
    CheckBox.create("backward", BKW);
998
    CS  := CheckBox.create("match case");
952
    CheckBox.create("match case", CS);
999
    WH  := CheckBox.create("whole word");
953
    CheckBox.create("whole word", WH);
1000
END createSearchForm;
954
END createSearchForm;
Line 1001... Line 955...
1001
 
955
 
1002
 
956
 
1003
PROCEDURE EditBox_GetValue (edit: box_lib.edit_box; VAR s: ARRAY OF WCHAR);
957
PROCEDURE EditBox_GetValue (edit: EB.tEditBox; VAR s: ARRAY OF WCHAR);
1004
VAR
958
VAR
1005
    str: ARRAY EDITBOX_MAXCHARS + 1 OF CHAR;
959
    str: ARRAY EDITBOX_MAXCHARS + 1 OF CHAR;
1006
    i: INTEGER;
960
    i: INTEGER;
1007
BEGIN
961
BEGIN
1008
    box_lib.edit_box_get_value(edit, str);
962
    EB.getValue(edit, str);
1009
    i := 0;
963
    i := 0;
1010
    WHILE str[i] # 0X DO
964
    WHILE str[i] # 0X DO
1011
        s[i] := WCHR(E.cp866[ORD(str[i])]);
965
        s[i] := WCHR(E.cp866[ORD(str[i])]);
Line 1035... Line 989...
1035
PROCEDURE click (x, y: INTEGER): INTEGER;
989
PROCEDURE click (x, y: INTEGER): INTEGER;
1036
VAR
990
VAR
1037
    scrollX, scrollY: INTEGER;
991
    scrollX, scrollY: INTEGER;
1038
    shift, ctrl: BOOLEAN;
992
    shift, ctrl: BOOLEAN;
1039
BEGIN
993
BEGIN
1040
    getKBState(shift, ctrl);
994
    K.getKBState(shift, ctrl);
1041
    IF ~hScroll.mouse THEN
-
 
1042
    	Scroll.MouseDown(hScroll, x + LEFT, y + TOP);
995
	Scroll.MouseDown(hScroll, x + LEFT, y + TOP);
1043
        T.getScroll(text, scrollX, scrollY);
-
 
1044
        T.scroll(text, hScroll.value - scrollX, 0);
-
 
1045
        repaint
-
 
1046
    END;
-
 
1047
    IF ~vScroll.mouse THEN
-
 
1048
    	Scroll.MouseDown(vScroll, x + LEFT, y + TOP);
996
	Scroll.MouseDown(vScroll, x + LEFT, y + TOP);
1049
        T.getScroll(text, scrollX, scrollY);
997
    T.getScroll(text, scrollX, scrollY);
1050
        T.scroll(text, 0, vScroll.value - scrollY);
998
    T.scroll(text, hScroll.value - scrollX, vScroll.value - scrollY);
1051
        repaint
-
 
1052
    END;
-
 
1053
    IF search & searchOpened THEN
999
    IF search & searchOpened THEN
1054
	   	CheckBox.MouseDown(BKW, x + LEFT, y + TOP);
1000
	   	CheckBox.MouseDown(BKW, x + LEFT, y + TOP);
1055
	   	CheckBox.MouseDown(CS,  x + LEFT, y + TOP);
1001
	   	CheckBox.MouseDown(CS,  x + LEFT, y + TOP);
1056
	   	CheckBox.MouseDown(WH,  x + LEFT, y + TOP);
1002
	   	CheckBox.MouseDown(WH,  x + LEFT, y + TOP);
1057
   	END;
1003
   	END;
Line 1059... Line 1005...
1059
        leftButton := TRUE;
1005
        leftButton := TRUE;
1060
        SetFocus(FindEdit, FALSE);
1006
        SetFocus(FindEdit, FALSE);
1061
        IF ~shift THEN
1007
        IF ~shift THEN
1062
            T.resetSelect(text)
1008
            T.resetSelect(text)
1063
        END;
1009
        END;
1064
        T.mouse(text, x, y);
1010
        T.mouse(text, x, y)
-
 
1011
    END;
1065
        repaint
1012
    repaint
1066
    END
-
 
1067
    RETURN K.GetTickCount()
1013
    RETURN K.GetTickCount()
1068
END click;
1014
END click;
Line 1069... Line 1015...
1069
 
1015
 
Line 1110... Line 1056...
1110
    Menu.close(menuTools);
1056
    Menu.close(menuTools);
1111
    Menu.close(subCurLine);
1057
    Menu.close(subCurLine);
1112
    Menu.close(subIndent);
1058
    Menu.close(subIndent);
1113
    Menu.close(subCase);
1059
    Menu.close(subCase);
1114
    Menu.close(subBookmark);
1060
    Menu.close(subBookmark);
1115
    Menu.close(context);
1061
    Menu.close(context)
1116
END CloseMenu;
1062
END CloseMenu;
Line 1117... Line 1063...
1117
 
1063
 
1118
 
1064
 
Line 1176... Line 1122...
1176
        END
1122
        END
1177
    ELSE
1123
    ELSE
1178
        K.WinPos(winX, winY);
1124
        K.WinPos(winX, winY);
1179
        K.ClientPos(cliX, cliY);
1125
        K.ClientPos(cliX, cliY);
1180
        x := winX + cliX;
1126
        x := winX + cliX;
1181
        y := MainMenuHeight + winY + cliY
1127
        y := Menu.MainMenuHeight + winY + cliY
1182
    END;
1128
    END;
1183
 
-
 
1184
    selected := T.selected(text);
1129
    selected := T.selected(text);
Line 1185... Line 1130...
1185
 
1130
 
1186
    IF menu = menuFile THEN
1131
    IF menu = menuFile THEN
1187
        Menu.setEnabled(menu, menuSave, text.modified);
1132
        Menu.setEnabled(menu, menuSave, text.modified);
Line 1271... Line 1216...
1271
 
1216
 
1272
 
1217
 
1273
PROCEDURE receiveIPC;
1218
PROCEDURE receiveIPC;
-
 
1219
VAR
1274
VAR
1220
	scrollIPC: BOOLEAN;
1275
	scrollIPC: BOOLEAN;
1221
	item: List.tItem;
1276
BEGIN
1222
BEGIN
1277
	scrollIPC := FALSE;
1223
	scrollIPC := FALSE;
1278
    IF IPC[0] = Timer.ID THEN
1224
    IF IPC[0] = Timer.ID THEN
Line 1282... Line 1228...
1282
		END;
1228
		END;
1283
    	IPC[2] := 0
1229
    	IPC[2] := 0
1284
    ELSIF IPC[0] = mainTID THEN
1230
    ELSIF IPC[0] = mainTID THEN
1285
    	IF IPC[2] = Scroll.ScrollIPC THEN
1231
    	IF IPC[2] = Scroll.ScrollIPC THEN
1286
	    	Scroll.change(hScroll);
1232
	    	Scroll.change(hScroll);
1287
	    	IF hScroll.Dec THEN
-
 
1288
	    		T.scroll(text, -1, 0)
-
 
1289
	    	ELSIF hScroll.Inc THEN
-
 
1290
				T.scroll(text, 1, 0)
-
 
1291
	    	END;
-
 
1292
	    	Scroll.change(vScroll);
1233
	    	Scroll.change(vScroll);
1293
	    	IF vScroll.Dec THEN
-
 
1294
	    		T.scroll(text, 0, -1)
1234
	    	T.scroll(text, ORD(hScroll.Inc) - ORD(hScroll.Dec), ORD(vScroll.Inc) - ORD(vScroll.Dec));
1295
	    	ELSIF vScroll.Inc THEN
-
 
1296
				T.scroll(text, 0, 1)
-
 
1297
	    	END;
-
 
Line 1298... Line 1235...
1298
 
1235
 
1299
    		IF menuActive THEN
1236
    		IF menuActive THEN
1300
    			draw_window;
1237
    			draw_window;
1301
    			menuActive := FALSE
1238
    			menuActive := FALSE
1302
    		ELSE
1239
    		ELSE
1303
    			repaint
1240
    			repaint
Line 1304... Line 1241...
1304
    		END;
1241
    		END;
1305
 
1242
 
1306
    		IF (0 IN K.MouseState()) THEN
1243
    		IF 0 IN K.MouseState() THEN
1307
    			WHILE (0 IN K.MouseState()) & (delay > 0) DO
1244
    			WHILE (0 IN K.MouseState()) & (delay > 0) DO
1308
        			K.Pause(1);
1245
        			K.Pause(1);
1309
    	    		DEC(delay)
1246
    	    		DEC(delay)
Line 1313... Line 1250...
1313
					IPC[1] := 0;
1250
					IPC[1] := 0;
1314
					scrollIPC := TRUE;
1251
					scrollIPC := TRUE;
1315
	        		Scroll.SendIPC;
1252
	        		Scroll.SendIPC;
1316
    	    		delay := 2
1253
    	    		delay := 2
1317
        		ELSE
1254
        		ELSE
1318
        			delay := scrollDelay
1255
        			delay := Scroll.Delay
1319
        		END
1256
        		END
1320
        	ELSE
1257
        	ELSE
1321
        		delay := scrollDelay
1258
        		delay := Scroll.Delay
1322
			END
1259
			END
1323
    	END;
1260
    	END;
1324
    	IPC[2] := 0
1261
    	IPC[2] := 0
-
 
1262
    ELSE
1325
    ELSIF ~Menu.isSender(IPC[0]) THEN
1263
    	IF ~Menu.isSender(IPC[0]) THEN
-
 
1264
   			IPC[2] := 0
-
 
1265
    	ELSE
-
 
1266
    		IF IPC[2] < 0 THEN
-
 
1267
    			item := List.getItem(mainMenu, (-IPC[2] - mainMenuBtn) MOD mainMenu.count);
-
 
1268
    			IF item # NIL THEN
-
 
1269
    				ShowMenu(item(Menu.tMainItem).menu)
-
 
1270
    			END;
1326
   		IPC[2] := 0
1271
    			IPC[2] := 0
-
 
1272
    		END
-
 
1273
    	END
1327
    END;
1274
    END;
1328
    CASE IPC[2] OF
1275
    CASE IPC[2] OF
1329
    |0:
1276
    |0:
1330
    |menuCut:       T.key(text, ORD("X"), FALSE, TRUE)
1277
    |menuCut:       T.key(text, ORD("X"), FALSE, TRUE)
1331
    |menuCopy:      T.key(text, ORD("C"), FALSE, TRUE)
1278
    |menuCopy:      T.key(text, ORD("C"), FALSE, TRUE)
Line 1463... Line 1410...
1463
VAR
1410
VAR
1464
    menuItem: INTEGER;
1411
    menuItem: INTEGER;
1465
    shift, ctrl: BOOLEAN;
1412
    shift, ctrl: BOOLEAN;
1466
BEGIN
1413
BEGIN
1467
    menuItem := -1;
1414
    menuItem := -1;
1468
    getKBState(shift, ctrl);
1415
    K.getKBState(shift, ctrl);
1469
    IF ctrl THEN
1416
    IF ctrl THEN
1470
        CASE key DIV 65536 OF
1417
        CASE key DIV 65536 OF
1471
        |17: menuItem := menuClose
1418
        |17: menuItem := menuClose
1472
        |21: menuItem := menuRedo
1419
        |21: menuItem := menuRedo
1473
        |30: menuItem := menuSelectAll
1420
        |30: menuItem := menuSelectAll
-
 
1421
        |32: menuItem := menuDuplicate
1474
        |33: menuItem := menuFind
1422
        |33: menuItem := menuFind
1475
        |34: menuItem := menuGoto
1423
        |34: menuItem := menuGoto
1476
        |44: menuItem := menuUndo
1424
        |44: menuItem := menuUndo
1477
        |45: menuItem := menuCut
1425
        |45: menuItem := menuCut
1478
        |46: menuItem := menuCopy
1426
        |46: menuItem := menuCopy
1479
        |47: menuItem := menuPaste
1427
        |47: menuItem := menuPaste
1480
        |24: menuItem := menuOpen
1428
        |24: menuItem := menuOpen
1481
        |31: menuItem := menuSave
1429
        |31: menuItem := menuSave
1482
        |49: menuItem := menuNew
1430
        |49: menuItem := menuNew
1483
        |67: menuItem := menuBuild
1431
        |67: menuItem := menuBuild
-
 
1432
        |83: menuItem := menuRemove
-
 
1433
        |22: menuItem := menuUpper
-
 
1434
        |38: menuItem := menuLower
-
 
1435
        |60: menuItem := menuToggleBookmark
-
 
1436
        |72: menuItem := menuMoveUp
-
 
1437
        |80: menuItem := menuMoveDown
1484
        ELSE
1438
        ELSE
1485
        END
1439
        END
1486
    ELSE
1440
    ELSE
1487
        IF key DIV 65536 = 83 THEN
1441
        IF key DIV 65536 = 83 THEN
1488
            menuItem := menuDelete
1442
            menuItem := menuDelete
1489
        ELSIF key DIV 65536 = 67 THEN
1443
        ELSIF key DIV 65536 = 67 THEN
1490
            menuItem := menuRun
1444
            menuItem := menuRun
-
 
1445
        ELSIF key DIV 65536 = 15 THEN
-
 
1446
            menuItem := menuIncInd
-
 
1447
        ELSIF (key DIV 65536 = 14) & shift THEN
-
 
1448
            menuItem := menuDecInd
-
 
1449
        ELSIF key DIV 65536 = 60 THEN
-
 
1450
        	IF shift THEN
-
 
1451
        		menuItem := menuPrevBookmark
-
 
1452
        	ELSE
-
 
1453
        		menuItem := menuNextBookmark
-
 
1454
        	END
1491
        END
1455
        END
1492
    END;
1456
    END;
1493
    IF menuItem # -1 THEN
1457
    IF menuItem # -1 THEN
1494
        IF Menu.isEnabled(menu, menuItem) THEN
1458
        IF Menu.isEnabled(menu, menuItem) THEN
1495
            MenuItemClick(menu, menuItem)
1459
            MenuItemClick(menu, menuItem)
Line 1724... Line 1688...
1724
PROCEDURE KeyDown (key: INTEGER);
1688
PROCEDURE KeyDown (key: INTEGER);
1725
VAR
1689
VAR
1726
    keyCode: INTEGER;
1690
    keyCode: INTEGER;
1727
    shift, ctrl: BOOLEAN;
1691
    shift, ctrl: BOOLEAN;
1728
BEGIN
1692
BEGIN
-
 
1693
	K.getKBState(shift, ctrl);
1729
    keyCode := key DIV 65536;
1694
    keyCode := key DIV 65536;
1730
    getKBState(shift, ctrl);
-
 
1731
    IF confirm THEN
1695
    IF confirm THEN
1732
        IF keyCode = 28 THEN (* Enter *)
1696
        IF keyCode = 28 THEN (* Enter *)
1733
            save(text);
1697
            save(text);
1734
            IF ~text.modified THEN
1698
            IF ~text.modified THEN
1735
                closeFile(FALSE, curText)
1699
                closeFile(FALSE, curText)
Line 1758... Line 1722...
1758
            IF ctrl THEN
1722
            IF ctrl THEN
1759
                Script(buildScript)
1723
                Script(buildScript)
1760
            ELSE
1724
            ELSE
1761
                Script(runScript)
1725
                Script(runScript)
1762
            END
1726
            END
-
 
1727
        ELSIF keyCode = 68 THEN (* F10 *)
-
 
1728
            key := -1;
-
 
1729
            ShowMenu(menuFile)
1763
        ELSIF keyCode = 1 THEN (* Esc *)
1730
        ELSIF keyCode = 1 THEN (* Esc *)
1764
            key := -1;
1731
            key := -1;
1765
            IF search THEN
1732
            IF search THEN
1766
                Search
1733
                Search
1767
            END
1734
            END
Line 1781... Line 1748...
1781
            key := -1;
1748
            key := -1;
1782
            ShowSearchPanel;
1749
            ShowSearchPanel;
1783
            SetFocus(GotoEdit, TRUE)
1750
            SetFocus(GotoEdit, TRUE)
1784
        ELSE
1751
        ELSE
1785
            IF EditBox_Focus(FindEdit) THEN
1752
            IF EditBox_Focus(FindEdit) THEN
1786
                box_lib.edit_box_key(FindEdit, key);
1753
                EB.key(FindEdit, key);
1787
                EditBox_GetValue(FindEdit, new_searchText);
1754
                EditBox_GetValue(FindEdit, new_searchText);
1788
                IF new_searchText # searchText THEN
1755
                IF new_searchText # searchText THEN
1789
                    searchText := new_searchText;
1756
                    searchText := new_searchText;
1790
                    notFound := ~T.search(text, searchText, cs, whole)
1757
                    notFound := ~T.search(text, searchText, cs, whole)
1791
                END
1758
                END
1792
            ELSIF EditBox_Focus(ReplaceEdit) THEN
1759
            ELSIF EditBox_Focus(ReplaceEdit) THEN
1793
                box_lib.edit_box_key(ReplaceEdit, key);
1760
                EB.key(ReplaceEdit, key);
1794
                EditBox_GetValue(ReplaceEdit, replaceText)
1761
                EditBox_GetValue(ReplaceEdit, replaceText)
1795
            ELSIF EditBox_Focus(GotoEdit) THEN
1762
            ELSIF EditBox_Focus(GotoEdit) THEN
1796
                IF (key DIV 256) MOD 256 = 13 THEN
1763
                IF (key DIV 256) MOD 256 = 13 THEN
1797
                    goto
1764
                    goto
1798
                ELSE
1765
                ELSE
1799
                    box_lib.edit_box_key(GotoEdit, key)
1766
                    EB.key(GotoEdit, key)
1800
                END
1767
                END
1801
            ELSE
1768
            ELSE
1802
                CASE keyCode OF
1769
                CASE keyCode OF
1803
                |73: key := 33
1770
                |73: key := 33
1804
                |81: key := 34
1771
                |81: key := 34
Line 1856... Line 1823...
1856
 
1823
 
1857
PROCEDURE BtnClick;
1824
PROCEDURE BtnClick;
1858
VAR
1825
VAR
1859
    btn: INTEGER;
1826
    btn: INTEGER;
-
 
1827
    middle, exit: BOOLEAN;
1860
    middle, exit: BOOLEAN;
1828
    menu: Menu.tMenu;
1861
BEGIN
1829
BEGIN
1862
    btn := K.ButtonCode(middle);
1830
    btn := K.ButtonCode(middle);
1863
    IF (Tabs.btnID <= btn) & (btn <= Tabs.btnID + maxTexts - 1) THEN
1831
    IF U.between(Tabs.btnID, btn, Tabs.btnID + maxTexts - 1) THEN
1864
        DEC(btn, Tabs.btnID);
1832
        DEC(btn, Tabs.btnID);
1865
        IF middle THEN
1833
        IF middle THEN
1866
            IF texts[btn].modified THEN
1834
            IF texts[btn].modified THEN
1867
                SwitchTab(btn)
1835
                SwitchTab(btn)
Line 1874... Line 1842...
1874
    ELSE
1842
    ELSE
1875
        IF middle THEN
1843
        IF middle THEN
1876
            btn := 0
1844
            btn := 0
1877
        END
1845
        END
1878
    END;
1846
    END;
-
 
1847
    IF btn # 0 THEN
-
 
1848
    	menu := Menu.ClickMain(mainMenu, btn);
-
 
1849
    	IF menu # NIL THEN
-
 
1850
    		ShowMenu(menu);
-
 
1851
    		btn := 0
-
 
1852
    	END
-
 
1853
    END;
1879
    CASE btn OF
1854
    CASE btn OF
1880
    |Tabs.btnID - 1: Tabs.scroll(tabs, -1); switch := TRUE; repaint
1855
    |Tabs.btnID - 1: Tabs.scroll(tabs, -1); switch := TRUE; repaint
1881
    |Tabs.btnID - 2: Tabs.scroll(tabs, +1); switch := TRUE; repaint
1856
    |Tabs.btnID - 2: Tabs.scroll(tabs, +1); switch := TRUE; repaint
Line 1882... Line 1857...
1882
 
1857
 
Line 1883... Line -...
1883
    |0:
-
 
1884
 
-
 
1885
    |btnFile:
-
 
1886
        ShowMenu(menuFile)
-
 
1887
    |btnEdit:
-
 
1888
        ShowMenu(menuEdit)
-
 
1889
    |btnMenuSearch:
-
 
1890
        ShowMenu(menuSearch)
-
 
1891
    |btnEncoding:
-
 
1892
        ShowMenu(menuEncoding)
-
 
1893
    |btnEOL:
-
 
1894
        ShowMenu(menuEOL)
-
 
1895
    |btnView:
-
 
1896
        ShowMenu(menuView)
-
 
1897
    |btnSyntax:
-
 
1898
        ShowMenu(menuSyntax)
-
 
1899
    |btnProgram:
-
 
1900
        ShowMenu(menuProgram)
-
 
1901
    |btnTools:
1858
    |0:
1902
        ShowMenu(menuTools)
1859
 
1903
    |btnNo:
1860
    |btnNo:
1904
        exit := closing;
1861
        exit := closing;
1905
        closeFile(FALSE, curText);
1862
        closeFile(FALSE, curText);
Line 1980... Line 1937...
1980
VAR
1937
VAR
1981
    msState: SET;
1938
    msState: SET;
1982
    scroll, x, y, scrollX, scrollY: INTEGER;
1939
    scroll, x, y, scrollX, scrollY: INTEGER;
Line 1983... Line 1940...
1983
 
1940
 
1984
 
1941
 
1985
    PROCEDURE EditBox (eb: box_lib.edit_box);
1942
    PROCEDURE EditBox (eb: EB.tEditBox);
1986
    VAR
1943
    VAR
1987
        focus: BOOLEAN;
1944
        focus: BOOLEAN;
1988
    BEGIN
1945
    BEGIN
1989
        focus := EditBox_Focus(eb);
1946
        focus := EditBox_Focus(eb);
1990
        box_lib.edit_box_mouse(eb);
1947
        EB.mouse(eb);
1991
        IF focus # EditBox_Focus(eb) THEN
1948
        IF focus # EditBox_Focus(eb) THEN
1992
            SetFocus(eb, TRUE);
1949
            SetFocus(eb, TRUE);
1993
            repaint
1950
            repaint
Line 2035... Line 1992...
2035
        IF 9 IN msState THEN
1992
        IF 9 IN msState THEN
2036
            ShowMenu(context)
1993
            ShowMenu(context)
2037
        END;
1994
        END;
2038
        IF 24 IN msState THEN
1995
        IF 24 IN msState THEN
2039
            mouse(x, y);
1996
            mouse(x, y);
2040
    		IF ~hScroll.mouse THEN
-
 
2041
    			Scroll.MouseDown(hScroll, x + LEFT, y + TOP)
1997
    		Scroll.MouseDown(hScroll, x + LEFT, y + TOP);
2042
    		END;
-
 
2043
    		IF ~vScroll.mouse THEN
-
 
2044
    			Scroll.MouseDown(vScroll, x + LEFT, y + TOP)
1998
    		Scroll.MouseDown(vScroll, x + LEFT, y + TOP);
2045
    		END;
-
 
2046
    		IF search & searchOpened THEN
1999
    		IF search & searchOpened THEN
2047
	    		CheckBox.MouseDown(BKW, x + LEFT, y + TOP);
2000
	    		CheckBox.MouseDown(BKW, x + LEFT, y + TOP);
2048
	    		CheckBox.MouseDown(CS,  x + LEFT, y + TOP);
2001
	    		CheckBox.MouseDown(CS,  x + LEFT, y + TOP);
2049
	    		CheckBox.MouseDown(WH,  x + LEFT, y + TOP);
2002
	    		CheckBox.MouseDown(WH,  x + LEFT, y + TOP);
2050
    		END;
2003
    		END;
Line 2109... Line 2062...
2109
    fileName, filePath: RW.tFileName;
2062
    fileName, filePath: RW.tFileName;
2110
    width, height, cliWidth, cliHeight: INTEGER;
2063
    width, height, cliWidth, cliHeight: INTEGER;
2111
    resized: BOOLEAN;
2064
    resized: BOOLEAN;
2112
    firstClickX, firstClickY, time: INTEGER;
2065
    firstClickX, firstClickY, time: INTEGER;
2113
BEGIN
2066
BEGIN
2114
	delay := scrollDelay;
2067
	delay := Scroll.Delay;
2115
    K.GetSystemColors;
2068
    K.GetSystemColors;
2116
    Icons.get(icons, grayIcons);
2069
    Icons.get(icons, grayIcons);
2117
    modified := FALSE;
2070
    modified := FALSE;
2118
    switch := FALSE;
2071
    switch := FALSE;
2119
    closing := FALSE;
2072
    closing := FALSE;
Line 2161... Line 2114...
2161
    menuView := CreateMenuView();
2114
    menuView := CreateMenuView();
2162
    menuSyntax := CreateMenuSyntax();
2115
    menuSyntax := CreateMenuSyntax();
2163
    menuProgram := CreateMenuProgram();
2116
    menuProgram := CreateMenuProgram();
2164
    menuTools := CreateMenuTools();
2117
    menuTools := CreateMenuTools();
Line -... Line 2118...
-
 
2118
 
-
 
2119
    mainMenu := Menu.CreateMain(mainMenuBtn);
-
 
2120
    Menu.AddMainItem(mainMenu, "file", menuFile);
-
 
2121
    Menu.AddMainItem(mainMenu, "edit", menuEdit);
-
 
2122
    Menu.AddMainItem(mainMenu, "search", menuSearch);
-
 
2123
    Menu.AddMainItem(mainMenu, "encoding", menuEncoding);
-
 
2124
    Menu.AddMainItem(mainMenu, "eol", menuEOL);
-
 
2125
    Menu.AddMainItem(mainMenu, "view", menuView);
-
 
2126
    Menu.AddMainItem(mainMenu, "syntax", menuSyntax);
-
 
2127
    Menu.AddMainItem(mainMenu, "program", menuProgram);
-
 
2128
    Menu.AddMainItem(mainMenu, "tools", menuTools);
2165
 
2129
 
2166
    Ini.getSettings(buildScript, runScript, debugScript);
2130
    Ini.getSettings(buildScript, runScript, debugScript);
2167
    IF fileName = "" THEN
2131
    IF fileName = "" THEN
2168
        text := T.New();
2132
        text := T.New();
2169
        filePath := "/rd/1"
2133
        filePath := "/rd/1"
Line 2198... Line 2162...
2198
    Menu.init(resetTimer);
2162
    Menu.init(resetTimer);
2199
    draw_window;
2163
    draw_window;
2200
    Timer.create(mainTID);
2164
    Timer.create(mainTID);
2201
    WHILE TRUE DO
2165
    WHILE TRUE DO
2202
        CASE K.WaitForEvent() OF
2166
        CASE K.WaitForEvent() OF
2203
        |1: IF Menu.redraw THEN
2167
        |1: (*IF Menu.redraw THEN*)
2204
        		Redraw(resized, width, height, cliWidth, cliHeight)
2168
       			Redraw(resized, width, height, cliWidth, cliHeight)
2205
        	ELSE
2169
        	(*ELSE
2206
        		Menu.Redraw;
2170
        		Menu.Redraw;
2207
        		K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, header);
2171
        		K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, header);
2208
        		repaint
2172
        		repaint
2209
        	END
2173
        	END*)
2210
        |2: KeyDown(K.GetKey())
2174
        |2: KeyDown(K.GetKey())
2211
        |3: BtnClick
2175
        |3: BtnClick
2212
        |6: MouseEvent(resized, firstClickX, firstClickY, time)
2176
        |6: MouseEvent(resized, firstClickX, firstClickY, time)
2213
        |7: receiveIPC
2177
        |7: receiveIPC
2214
        END
2178
        END