From 02272ecd2b110bb584e2f917e7807e15b5166d21 Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Wed, 29 Dec 2021 15:38:29 +0000 Subject: [PATCH] CEdit: new toolbar buttons design; refactoring git-svn-id: svn://kolibrios.org@9522 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/CEDIT | Bin 31310 -> 31425 bytes programs/develop/cedit/SRC/CEdit.ob07 | 91 ++++--------- programs/develop/cedit/SRC/Graph.ob07 | 7 +- programs/develop/cedit/SRC/Icons.ob07 | 10 +- programs/develop/cedit/SRC/KolibriOS.ob07 | 20 ++- programs/develop/cedit/SRC/Lines.ob07 | 49 +++---- programs/develop/cedit/SRC/Menu.ob07 | 4 +- programs/develop/cedit/SRC/RW.ob07 | 151 ++++++++++++---------- programs/develop/cedit/SRC/StatusBar.ob07 | 112 ++++++++++++++++ programs/develop/cedit/SRC/Text.ob07 | 39 +++--- programs/develop/cedit/SRC/Toolbar.ob07 | 42 ++++-- 11 files changed, 303 insertions(+), 222 deletions(-) create mode 100644 programs/develop/cedit/SRC/StatusBar.ob07 diff --git a/programs/develop/cedit/CEDIT b/programs/develop/cedit/CEDIT index 44c49d92f2160f2d647b97989f1121cb1427e989..e4e8e3d09d53f86d55e7f153f38dab7c65aece7a 100644 GIT binary patch literal 31425 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 literal 31310 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
1_CKnQ$rL-j?sHsF$kVt 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 rIdhZ~s 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

0Pu$Q1(PX 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 VV8XJ#k??Yk`{6WA-s=kh00#_p0Dk}g diff --git a/programs/develop/cedit/SRC/CEdit.ob07 b/programs/develop/cedit/SRC/CEdit.ob07 index f2900125b7..b428d780dc 100644 --- a/programs/develop/cedit/SRC/CEdit.ob07 +++ b/programs/develop/cedit/SRC/CEdit.ob07 @@ -25,10 +25,10 @@ IMPORT G := Graph, T := Text, E := Encodings, CB := Clipboard, Languages, ChangeLog, Scroll, CheckBox, - RW, Ini, EB := EditBox, Tabs, Toolbar; + RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; CONST - HEADER = "CEdit (23-dec-2021)"; + HEADER = "CEdit (29-dec-2021)"; ShellFilter = ""; EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; @@ -182,8 +182,7 @@ VAR winWidth, winHeight: INTEGER; AppPath, runScript, buildScript, debugScript: RW.tFileName; OD: OpenDlg.Dialog; - confirm, notFound, menuFindClicked, search, searchOpened, modified: BOOLEAN; - eol, enc: INTEGER; + confirm, notFound, menuFindClicked, search, searchOpened: BOOLEAN; switch, closing: BOOLEAN; leftButton: BOOLEAN; @@ -216,33 +215,6 @@ VAR timerEnabled: BOOLEAN; -PROCEDURE WritePos (y: INTEGER); -VAR - s1, s2, s3: ARRAY 32 OF WCHAR; - line, col, chars, lines: INTEGER; -BEGIN - T.getPos(text, col, line); - U.int2str(line, s1); - U.int2str(col, s2); - U.append(s1, ": "); - U.append(s1, s2); - IF T.selected(text) THEN - T.getSelCnt(text, chars, lines); - s3 := "sel: "; - U.int2str(chars, s2); - U.append(s3, s2); - U.append(s3, " | "); - U.int2str(lines, s2); - U.append(s3, s2) - ELSE - s3 := "" - END; - K.DrawRect(LEFT, TOP + canvas.height + scrollWidth, (16+24)*fontWidth, BOTTOM - scrollWidth + 1, K.winColor); - K.DrawText(LEFT, y, K.textColor, s1); - K.DrawText(LEFT + 16*fontWidth, y, K.textColor, s3) -END WritePos; - - PROCEDURE EditBox_Focus (edit: EB.tEditBox): BOOLEAN; RETURN 1 IN edit.flags END EditBox_Focus; @@ -356,13 +328,6 @@ BEGIN END getIdx; -PROCEDURE MarkModified; -BEGIN - modified := text.modified; - Tabs.modify(tabs, getIdx(text), modified) -END MarkModified; - - PROCEDURE SetCaption (fileName: RW.tFileName); VAR header: RW.tFileName; @@ -376,23 +341,19 @@ BEGIN END SetCaption; -PROCEDURE DrawState (text: T.tText; width, height: INTEGER); +PROCEDURE Status (text: T.tText; height: INTEGER); VAR - y: INTEGER; - s: ARRAY 24 OF WCHAR; + line, col, chars, lines: INTEGER; BEGIN - eol := T.getEol(text); - enc := T.getEnc(text); - s := ""; - U.append(s, RW.eolNames[eol]); - U.append(s, 20X + 20X); - U.append(s, E.names[enc]); - SetCaption(text.fileName); - K.DrawRect(LEFT + (16+24)*fontWidth, TOP + canvas.height + scrollWidth, width - (LEFT + (16+24)*fontWidth), BOTTOM - scrollWidth + 1, K.winColor); - y := height - (BOTTOM - scrollWidth) + (BOTTOM - scrollWidth - 16) DIV 2; - K.DrawText(width - LENGTH(s)*fontWidth - (RIGHT_PADDING + 1), y, K.textColor, s); - MarkModified -END DrawState; + T.getPos(text, col, line); + T.getSelCnt(text, chars, lines); + SB.setWidth(canvas.width + scrollWidth); + SB.setPos(line, col); + SB.setSel(chars, lines); + SB.setEnc(RW.eolNames[T.getEol(text)], E.names[T.getEnc(text)]); + SB.draw(LEFT, height - BOTTOM + scrollWidth - 1); + Tabs.modify(tabs, getIdx(text), text.modified) +END Status; PROCEDURE DrawScroll (VAR scroll: Scroll.tScroll; left, top, value, maxVal: INTEGER); @@ -422,19 +383,13 @@ BEGIN END; K.ClientSize(width, height); IF switch THEN - DrawState(text, width, height); + Status(text, height); Tabs.draw(tabs); IF search & T.search(text, searchText, cs, whole) THEN END; switch := FALSE END; T.draw(text); - WritePos(height - (BOTTOM - scrollWidth) + (BOTTOM - scrollWidth - 16) DIV 2); - - IF (enc # T.getEnc(text)) OR (eol # T.getEol(text)) THEN - DrawState(text, width, height) - ELSIF modified # text.modified THEN - MarkModified - END; + Status(text, height); T.getScroll(text, scrollX, scrollY); DrawScroll(vScroll, LEFT + canvas.width, TOP - 1, scrollY, text.count - 1); @@ -487,13 +442,13 @@ END resize; PROCEDURE SearchPanel (left, top: INTEGER); VAR - y, right, bottom, color: INTEGER; + y, right, bottom: INTEGER; BEGIN DEC(top, Tabs.tabHeight); right := left + EditBox_Width + SEARCH_PADDING*2; bottom := top + 395 + btnHeight + SEARCH_PADDING; - color := K.borderColor; - Rect(left, top, right, bottom, color); + Rect(left, top, right, bottom, K.borderColor); + K.CreateButton(btnCloseSearch, right - 20, top, 20, 20, 0EF999FH, ""); K.DrawLine(right - 14, top + 5, right - 5, top + 14, 0FFFFFFH); K.DrawLine(right - 15, top + 5, right - 5, top + 15, 0FFFFFFH); @@ -537,7 +492,6 @@ END SearchPanel; PROCEDURE draw_window; VAR width, height: INTEGER; - BEGIN K.BeginDraw; K.CreateWindow(30 + K.GetTickCount() MOD 128, 30 + K.GetTickCount() MOD 128, winWidth, winHeight, K.winColor, 73H, 0, 0, ""); @@ -555,8 +509,8 @@ BEGIN Menu.DrawMain(mainMenu); Toolbar.draw(toolbar); - - DrawState(text, width, height); + SetCaption(text.fileName); + Status(text, height); IF search & searchOpened THEN SearchPanel(LEFT_PADDING, TOP) END; @@ -1998,7 +1952,6 @@ VAR firstClickX, firstClickY, time: INTEGER; BEGIN K.GetSystemColors; - modified := FALSE; switch := FALSE; closing := FALSE; textsCount := 0; @@ -2058,7 +2011,7 @@ BEGIN Menu.AddMainItem(mainMenu, "program", menuProgram); Menu.AddMainItem(mainMenu, "tools", menuTools); - Toolbar.create(toolbar, LEFT_PADDING + 1, toolbarTop); + Toolbar.create(toolbar, LEFT_PADDING + 5, toolbarTop); Toolbar.add(toolbar, btnNew, 2, ""); Toolbar.add(toolbar, btnOpen, 0, ""); Toolbar.add(toolbar, btnSave, 5, ""); diff --git a/programs/develop/cedit/SRC/Graph.ob07 b/programs/develop/cedit/SRC/Graph.ob07 index a5a84bfa53..248640ec0b 100644 --- a/programs/develop/cedit/SRC/Graph.ob07 +++ b/programs/develop/cedit/SRC/Graph.ob07 @@ -175,13 +175,10 @@ VAR color: INTEGER; d: INTEGER; BEGIN + ASSERT(ABS(k) = 1); color := canvas.color; ptr := canvas.bitmap + 4*(y*canvas.width + x1); - IF k = -1 THEN - d := 4*(canvas.width + 1) - ELSIF k = 1 THEN - d := 4*(1 - canvas.width) - END; + d := 4*(1 - canvas.width*k); WHILE x1 <= x2 DO SYSTEM.PUT32(ptr, color); INC(ptr, d); diff --git a/programs/develop/cedit/SRC/Icons.ob07 b/programs/develop/cedit/SRC/Icons.ob07 index b90cb09b42..5d042bad01 100644 --- a/programs/develop/cedit/SRC/Icons.ob07 +++ b/programs/develop/cedit/SRC/Icons.ob07 @@ -81,7 +81,7 @@ BEGIN END gray; -PROCEDURE iconsBackColor (icons: INTEGER); +PROCEDURE iconsBackColor (icons: INTEGER; BackColor: INTEGER); VAR sizeX, sizeY, data, x, y: INTEGER; b, g, r: BYTE; @@ -93,7 +93,7 @@ BEGIN SYSTEM.GET8(data + 1, g); SYSTEM.GET8(data + 2, r); IF b + g + r = 765 THEN - Graph.getRGB(K.toolbarColor, r, g, b) + Graph.getRGB(BackColor, r, g, b) END; SYSTEM.PUT8(data, b); SYSTEM.PUT8(data + 1, g); @@ -104,7 +104,7 @@ BEGIN END iconsBackColor; -PROCEDURE get* (VAR icons, grayIcons: INTEGER); +PROCEDURE get* (VAR icons, grayIcons: INTEGER; BackColor: INTEGER); BEGIN IF source = 0 THEN source := load(); @@ -115,8 +115,8 @@ BEGIN copy(source, grayIcons) END; gray(grayIcons); - iconsBackColor(icons); - iconsBackColor(grayIcons) + iconsBackColor(icons, BackColor); + iconsBackColor(grayIcons, BackColor) END get; diff --git a/programs/develop/cedit/SRC/KolibriOS.ob07 b/programs/develop/cedit/SRC/KolibriOS.ob07 index 3eab66d3c6..bbddb59ca0 100644 --- a/programs/develop/cedit/SRC/KolibriOS.ob07 +++ b/programs/develop/cedit/SRC/KolibriOS.ob07 @@ -29,9 +29,7 @@ CONST VAR winColor*, textColor*, btnColor*, btnTextColor*, - toolbarColor*, scrollColor*, scrollBkColor*, - borderColor*, shadowColor*, (*darkColor,*) lightColor*, - textToolbarColor*, disTextToolbarColor*: INTEGER; + borderColor*, (*darkColor,*) lightColor*: INTEGER; PROCEDURE GetCommandLine* (): INTEGER; @@ -337,21 +335,13 @@ VAR BEGIN ASSERT(LEN(buf) >= 10); KOSAPI.sysfunc4(48, 3, SYSTEM.ADR(buf[0]), 40); - (*darkColor := buf[2];*) lightColor := buf[3]; winColor := buf[5]; - textColor := buf[8]; btnColor := buf[6]; btnTextColor := buf[7]; - scrollColor := btnColor; - scrollBkColor := winColor; + textColor := buf[8]; borderColor := buf[9]; - - toolbarColor := lightColor;(*0DFDFDFH;*) - shadowColor := borderColor;(*0808080H;*) - textToolbarColor := 00000FFH; - disTextToolbarColor := borderColor;(*0808080H*) END GetSystemColors; @@ -413,4 +403,10 @@ PROCEDURE GetThreadSlot* (tid: INTEGER): INTEGER; END GetThreadSlot; +PROCEDURE PutPixel* (x, y, color: INTEGER); +BEGIN + KOSAPI.sysfunc5(1, x, y, color, 0) +END PutPixel; + + END KolibriOS. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Lines.ob07 b/programs/develop/cedit/SRC/Lines.ob07 index c7b1da89fb..8d69f843d8 100644 --- a/programs/develop/cedit/SRC/Lines.ob07 +++ b/programs/develop/cedit/SRC/Lines.ob07 @@ -167,6 +167,20 @@ BEGIN END destroy; +PROCEDURE resize* (line: tLine; size: INTEGER); +BEGIN + ASSERT(line.temp); + IF size > 0 THEN + line.ptr := API._DISPOSE(line.ptr); + size := size*WCHAR_SIZE + 4; + INC(size, (-size) MOD 32); + line.ptr := API._NEW(size) + ELSE + destroy(line) + END +END resize; + + PROCEDURE getChar* (line: tLine; i: INTEGER): WCHAR; VAR c: WCHAR; @@ -236,25 +250,6 @@ BEGIN END move; -PROCEDURE concat* (line: tLine; s: ARRAY OF WCHAR); -VAR - Len: INTEGER; - ptr: INTEGER; -BEGIN - Len := LENGTH(s); - ptr := malloc(line.length + Len + 1); - ASSERT(ptr # 0); - SYSTEM.MOVE(line.ptr, ptr, line.length*WCHAR_SIZE); - SYSTEM.MOVE(SYSTEM.ADR(s[0]), ptr + line.length*WCHAR_SIZE, Len*WCHAR_SIZE); - SYSTEM.PUT16(ptr + (line.length + Len)*WCHAR_SIZE, 0); - IF ~line.temp THEN - movInt(line.length, line.length + Len) - END; - INC(line.length, Len); - free(line, ptr) -END concat; - - PROCEDURE delChar* (line: tLine; pos: INTEGER); VAR ptr: INTEGER; @@ -292,7 +287,7 @@ BEGIN END insert; -PROCEDURE insert2* (line1: tLine; pos: INTEGER; line2: tLine); +PROCEDURE _insert2* (line1: tLine; pos: INTEGER; line2: tLine); VAR ptr: INTEGER; BEGIN @@ -310,10 +305,18 @@ BEGIN movInt(line2.length, 0) END; INC(line1.length, line2.length); - line2.length := 0; - free(line1, ptr); - free(line2, 0) + free(line1, ptr) END +END _insert2; + + +PROCEDURE insert2* (line1: tLine; pos: INTEGER; line2: tLine); +BEGIN + _insert2(line1, pos, line2); + IF line2.length > 0 THEN + line2.length := 0; + free(line2, 0) + END END insert2; diff --git a/programs/develop/cedit/SRC/Menu.ob07 b/programs/develop/cedit/SRC/Menu.ob07 index 630af03a76..f50551fdc2 100644 --- a/programs/develop/cedit/SRC/Menu.ob07 +++ b/programs/develop/cedit/SRC/Menu.ob07 @@ -27,7 +27,7 @@ CONST fontWidth = 8; MainMenuHeight* = K.fontHeight + 7; - MainMenuX* = 0; + MainMenuX* = 3; RIGHT = 16; LEFT = 16; @@ -88,7 +88,7 @@ TYPE tProc = PROCEDURE; VAR - stack: ARRAY maxLEVEL + 1, 250000 OF INTEGER; + stack: ARRAY maxLEVEL + 1, 2500 OF INTEGER; TIDs: ARRAY maxLEVEL + 1 OF INTEGER; resetTimer: tProc; _open: PROCEDURE (m: tMenu; x, y: INTEGER); diff --git a/programs/develop/cedit/SRC/RW.ob07 b/programs/develop/cedit/SRC/RW.ob07 index 4da1281e75..2b684afd7a 100644 --- a/programs/develop/cedit/SRC/RW.ob07 +++ b/programs/develop/cedit/SRC/RW.ob07 @@ -44,6 +44,7 @@ TYPE tInput* = POINTER TO RECORD buffer: INTEGER; + strBuf: Lines.tLine; pos, cnt: INTEGER; CR: BOOLEAN; clipbrd: BOOLEAN; @@ -55,7 +56,8 @@ TYPE buffer: ARRAY BUF_SIZE OF BYTE; pos: INTEGER; eol: tEOL; - putChar: PROCEDURE (file: tOutput; code: INTEGER): BOOLEAN + putChar: PROCEDURE (file: tOutput; code: INTEGER); + error: BOOLEAN END; @@ -63,7 +65,6 @@ VAR eol*: ARRAY 3 OF tEOL; eolNames*: ARRAY 3, 16 OF WCHAR; - strBuf: ARRAY 1000000 OF WCHAR; PROCEDURE getByte (file: tInput): BYTE; @@ -168,9 +169,8 @@ END getCharUTF16LE; PROCEDURE getString* (file: tInput; line: Lines.tLine; tabs: BOOLEAN; VAR eol: BOOLEAN): INTEGER; VAR c: WCHAR; - i, L, k, n: INTEGER; + i, k, n: INTEGER; BEGIN - L := LEN(strBuf); eol := FALSE; n := 0; i := ORD(file.cnt > 0) - 1; @@ -190,43 +190,34 @@ BEGIN ELSIF c = TAB THEN k := Lines.tab - i MOD Lines.tab; IF tabs THEN - strBuf[i] := TAB + Lines.setChar(file.strBuf, i, TAB) ELSE - strBuf[i] := SPACE + Lines.setChar(file.strBuf, i, SPACE) END; INC(i); DEC(k); WHILE k > 0 DO IF tabs THEN - strBuf[i] := Lines.TAB1 + Lines.setChar(file.strBuf, i, Lines.TAB1) ELSE - strBuf[i] := SPACE + Lines.setChar(file.strBuf, i, SPACE) END; INC(i); - IF i = L THEN - Lines.concat(line, strBuf); - INC(n, i); - i := 0 - END; DEC(k) END; file.CR := FALSE ELSIF c = BOM THEN file.CR := FALSE ELSE - strBuf[i] := c; + Lines.setChar(file.strBuf, i, c); INC(i); - IF i = L THEN - Lines.concat(line, strBuf); - INC(n, i); - i := 0 - END; file.CR := FALSE END END; IF i >= 0 THEN - strBuf[i] := 0X; - Lines.concat(line, strBuf); + Lines.setChar(file.strBuf, i, 0X); + file.strBuf.length := i; + Lines._insert2(line, 0, file.strBuf) END; INC(n, i) RETURN n @@ -324,6 +315,40 @@ BEGIN END detectEOL; +PROCEDURE getMaxLength (file: tInput): INTEGER; +VAR + res, cur, cnt: INTEGER; + c: WCHAR; +BEGIN + res := 0; + cur := 0; + cnt := file.cnt; + WHILE file.cnt > 0 DO + c := WCHR(file.getChar(file) MOD 65536); + IF (c = CR) OR (c = LF) THEN + cur := 0 + ELSIF c = TAB THEN + INC(cur, Lines.tab - cur MOD Lines.tab) + ELSE + INC(cur) + END; + IF cur > res THEN + res := cur + END + END; + file.cnt := cnt; + file.pos := 0 + RETURN res +END getMaxLength; + + +PROCEDURE createStrBuf (file: tInput); +BEGIN + file.strBuf := Lines.create(TRUE); + Lines.resize(file.strBuf, MAX(2048, getMaxLength(file) + 1)) +END createStrBuf; + + PROCEDURE load* (name: tFileName; VAR enc, eol: INTEGER): tInput; VAR res: tInput; @@ -337,7 +362,6 @@ BEGIN fsize := File.FileSize(name); IF fsize = 0 THEN res.buffer := KOSAPI.malloc(4096); - ASSERT(res.buffer # 0); res.cnt := 0 ELSE res.buffer := File.Load(name, res.cnt) @@ -353,7 +377,8 @@ BEGIN ELSIF enc = E.W1251 THEN res.getChar := getCharW1251 END; - eol := detectEOL(res) + eol := detectEOL(res); + createStrBuf(res) END RETURN res END load; @@ -372,17 +397,19 @@ BEGIN res.buffer := CB.get(res.cnt); IF res.buffer = 0 THEN DISPOSE(res) + ELSE + createStrBuf(res) END RETURN res END clipboard; PROCEDURE putByte (file: tOutput; b: BYTE); -VAR - c: INTEGER; BEGIN IF file.pos = BUF_SIZE THEN - c := File.Write(file.handle, SYSTEM.ADR(file.buffer[0]), BUF_SIZE); + IF File.Write(file.handle, SYSTEM.ADR(file.buffer[0]), BUF_SIZE) # BUF_SIZE THEN + file.error := TRUE + END; file.pos := 0 END; file.buffer[file.pos] := b; @@ -390,45 +417,34 @@ BEGIN END putByte; -PROCEDURE putString* (file: tOutput; line: Lines.tLine; n: INTEGER): INTEGER; +PROCEDURE putString* (file: tOutput; line: Lines.tLine; n: INTEGER); VAR i: INTEGER; c: WCHAR; - err: BOOLEAN; BEGIN - i := 0; - err := FALSE; - WHILE (i < n) & ~err DO + FOR i := 0 TO n - 1 DO c := Lines.getChar(line, i); IF c # Lines.TAB1 THEN - IF ~file.putChar(file, ORD(c)) THEN - err := TRUE; - DEC(i) - END - END; - INC(i) + file.putChar(file, ORD(c)) + END END - RETURN i END putString; -PROCEDURE newLine* (file: tOutput): BOOLEAN; +PROCEDURE newLine* (file: tOutput); VAR i: INTEGER; BEGIN i := 0; - WHILE (file.eol[i] # 0X) & file.putChar(file, ORD(file.eol[i])) DO + WHILE file.eol[i] # 0X DO + file.putChar(file, ORD(file.eol[i])); INC(i) END - RETURN i = LENGTH(file.eol) END newLine; -PROCEDURE putCharUTF8 (file: tOutput; code: INTEGER): BOOLEAN; -VAR - res: BOOLEAN; +PROCEDURE putCharUTF8 (file: tOutput; code: INTEGER); BEGIN - res := TRUE; IF code <= 7FH THEN putByte(file, code) ELSIF (80H <= code) & (code <= 7FFH) THEN @@ -439,56 +455,44 @@ BEGIN putByte(file, (code DIV 64) MOD 64 + 080H); putByte(file, code MOD 64 + 080H) ELSE - res := FALSE + putByte(file, ORD("?")) END - RETURN res END putCharUTF8; -PROCEDURE putCharW1251 (file: tOutput; code: INTEGER): BOOLEAN; +PROCEDURE putCharW1251 (file: tOutput; code: INTEGER); VAR n: INTEGER; - res: BOOLEAN; BEGIN - res := TRUE; n := E.UNI[code, E.W1251]; IF n # E.UNDEF THEN putByte(file, n) ELSE - res := FALSE + putByte(file, ORD("?")) END - RETURN res END putCharW1251; -PROCEDURE putCharCP866 (file: tOutput; code: INTEGER): BOOLEAN; +PROCEDURE putCharCP866 (file: tOutput; code: INTEGER); VAR n: INTEGER; - res: BOOLEAN; BEGIN - res := TRUE; n := E.UNI[code, E.CP866]; IF n # E.UNDEF THEN putByte(file, n) ELSE - res := FALSE + putByte(file, ORD("?")) END - RETURN res END putCharCP866; -PROCEDURE putCharUTF16LE (file: tOutput; code: INTEGER): BOOLEAN; -VAR - res: BOOLEAN; +PROCEDURE putCharUTF16LE (file: tOutput; code: INTEGER); BEGIN - IF (0 <= code) & (code <= 65535) THEN - res := TRUE; - putByte(file, code MOD 256); - putByte(file, code DIV 256) - ELSE - res := FALSE - END - RETURN res + IF ~((0 <= code) & (code <= 65535)) THEN + code := ORD("?") + END; + putByte(file, code MOD 256); + putByte(file, code DIV 256) END putCharUTF16LE; @@ -502,6 +506,7 @@ BEGIN IF file.pos > 0 THEN res := File.Write(file.handle, SYSTEM.ADR(file.buffer[0]), file.pos) = file.pos END; + res := res & ~file.error; File.Close(file.handle) END; DISPOSE(file) @@ -521,7 +526,7 @@ BEGIN IF (enc = E.UTF8) OR (enc = E.UTF8BOM) THEN res.putChar := putCharUTF8; IF enc = E.UTF8BOM THEN - ASSERT(res.putChar(res, ORD(BOM))) + res.putChar(res, ORD(BOM)) END ELSIF enc = E.UTF16LE THEN res.putChar := putCharUTF16LE; @@ -532,6 +537,7 @@ BEGIN END; ASSERT(res.putChar # NIL); res.handle := File.Create(name); + res.error := FALSE; IF res.handle = NIL THEN DISPOSE(res) END @@ -540,10 +546,15 @@ END create; PROCEDURE destroy* (VAR file: tInput); +VAR + null: INTEGER; BEGIN IF file # NIL THEN IF file.buffer # 0 THEN - file.buffer := KOSAPI.free(file.buffer - 12*ORD(file.clipbrd)) + null := KOSAPI.free(file.buffer - 12*ORD(file.clipbrd)) + END; + IF file.strBuf # NIL THEN + Lines.resize(file.strBuf, 0) END; DISPOSE(file) END diff --git a/programs/develop/cedit/SRC/StatusBar.ob07 b/programs/develop/cedit/SRC/StatusBar.ob07 new file mode 100644 index 0000000000..21048b90db --- /dev/null +++ b/programs/develop/cedit/SRC/StatusBar.ob07 @@ -0,0 +1,112 @@ +(* + Copyright 2021 Anton Krotov + + This file is part of CEdit. + + CEdit is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CEdit is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CEdit. If not, see . +*) + +MODULE StatusBar; + +IMPORT G := Graph, U := Utils, K := KolibriOS; + +TYPE + + tString = ARRAY 32 OF WCHAR; + + tStatusBar* = RECORD + + pos, sel, enc: tString; + canvas: G.tCanvas + + END; + +VAR + + SB: tStatusBar; + font: G.tFont; + + +PROCEDURE setPos* (line, col: INTEGER); +VAR + s1, s2: tString; +BEGIN + U.int2str(line, s1); + U.append(s1, ": "); + U.int2str(col, s2); + U.append(s1, s2); + SB.pos := s1 +END setPos; + + +PROCEDURE setSel* (chars, lines: INTEGER); +VAR + s1, s2: tString; +BEGIN + IF chars # 0 THEN + s1 := "sel: "; + U.int2str(chars, s2); + U.append(s1, s2); + U.append(s1, " | "); + U.int2str(lines, s2); + U.append(s1, s2); + SB.sel := s1 + ELSE + SB.sel := "" + END +END setSel; + + +PROCEDURE setEnc* (eol, enc: ARRAY OF WCHAR); +BEGIN + SB.enc := eol; + U.append(SB.enc, 20X + 20X); + U.append(SB.enc, enc) +END setEnc; + + +PROCEDURE setWidth* (width: INTEGER); +BEGIN + ASSERT(width > 0); + IF (SB.canvas = NIL) OR (SB.canvas.width # width) THEN + G.destroy(SB.canvas); + SB.canvas := G.CreateCanvas(width, 19); + G.SetFont(SB.canvas, font) + END +END setWidth; + + +PROCEDURE TextOut (x: INTEGER; s: ARRAY OF WCHAR); +BEGIN + G.TextOut2(SB.canvas, x, 2, s, LENGTH(s)) +END TextOut; + + +PROCEDURE draw* (left, top: INTEGER); +BEGIN + G.SetColor(SB.canvas, K.winColor); + G.SetBkColor(SB.canvas, K.winColor); + G.SetTextColor(SB.canvas, K.textColor); + G.clear(SB.canvas); + TextOut(1, SB.pos); + TextOut(16*K.fontWidth, SB.sel); + TextOut(SB.canvas.width - LENGTH(SB.enc)*K.fontWidth - 1, SB.enc); + G.DrawCanvas(SB.canvas, left, top) +END draw; + + +BEGIN + SB.canvas := NIL; + font := G.CreateFont(1, "", {}) +END StatusBar. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Text.ob07 b/programs/develop/cedit/SRC/Text.ob07 index 990b01e26a..0633c3299e 100644 --- a/programs/develop/cedit/SRC/Text.ob07 +++ b/programs/develop/cedit/SRC/Text.ob07 @@ -823,7 +823,6 @@ VAR buf: CB.tBuffer; size: INTEGER; line: tLine; - EOT: ARRAY 2 OF WCHAR; BEGIN size := 0; line := text.first(tLine); @@ -848,9 +847,7 @@ BEGIN END END; IF eot THEN - EOT[0] := 0X; - EOT[1] := 0X; - CB.appends(buf, EOT, 0, 1) + CB.appends(buf, 0X + 0X, 0, 1) END RETURN buf END plain; @@ -1355,29 +1352,20 @@ VAR line: tLine; file: RW.tOutput; res: BOOLEAN; - Len: INTEGER; BEGIN ChangeLog.setGuard(text.edition); - res := TRUE; file := RW.create(tempFile, text.enc, text.eol); IF file # NIL THEN ChangeLog.delSaved; line := text.first(tLine); - WHILE (line # NIL) & res DO - Len := Lines.trimLength(line); - IF RW.putString(file, line, Len) # Len THEN - res := FALSE - END; + WHILE line # NIL DO + RW.putString(file, line, Lines.trimLength(line)); NextLine(line); IF line # NIL THEN - IF ~RW.newLine(file) THEN - res := FALSE - END + RW.newLine(file) END END; - IF ~RW.close(file) THEN - res := FALSE - END + res := RW.close(file) ELSE res := FALSE END; @@ -1393,11 +1381,10 @@ BEGIN Lines.save(line) END; NextLine(line) - END; - - IF File.Delete(tempFile) THEN END + END END END; + IF File.Delete(tempFile) THEN END; IF ~res THEN ChangeLog.delCurSaved END @@ -2465,10 +2452,16 @@ VAR line: tLine; BEGIN errno := 0; - text := NIL; - file := RW.load(name, enc, eol); + text := create(name); + IF text # NIL THEN + file := RW.load(name, enc, eol); + IF file = NIL THEN + destroy(text) + END + ELSE + file := NIL + END; IF file # NIL THEN - text := create(name); ChangeLog.changeInt(text.enc, enc); ChangeLog.changeInt(text.eol, eol); text.enc := enc; diff --git a/programs/develop/cedit/SRC/Toolbar.ob07 b/programs/develop/cedit/SRC/Toolbar.ob07 index 4f11805e7a..cb5f39e9a7 100644 --- a/programs/develop/cedit/SRC/Toolbar.ob07 +++ b/programs/develop/cedit/SRC/Toolbar.ob07 @@ -25,7 +25,7 @@ IMPORT CONST max = 14; - BtnSize* = 24; + BtnSize* = 26; BtnInter = 5; DelimSize = 7; IconPad = (BtnSize - Icons.SIZE) DIV 2; @@ -42,7 +42,8 @@ TYPE tToolbar* = RECORD buttons: ARRAY max OF tButton; x, y, cnt, width: INTEGER; - icons, grayIcons: INTEGER + icons, grayIcons: INTEGER; + colors: RECORD back, text, disText, light, shadow, window: INTEGER END END; @@ -57,15 +58,15 @@ BEGIN IF button.btn # 0 THEN IF button.enabled THEN icons := toolbar.icons; - color := K.textToolbarColor + color := toolbar.colors.text ELSE icons := toolbar.grayIcons; - color := K.disTextToolbarColor + color := toolbar.colors.disText END; IF button.icon # -1 THEN Icons.draw(icons, button.icon, button.x + IconPad, toolbar.y + IconPad) ELSE - K.DrawRect(button.x, toolbar.y, BtnSize, BtnSize, K.toolbarColor); + K.DrawRect(button.x + 1, toolbar.y + 1, BtnSize - 1, BtnSize - 1, toolbar.colors.back); K.DrawText69(button.x + (BtnSize - LENGTH(button.text)*6) DIV 2, toolbar.y + (BtnSize - 9) DIV 2 + 2, color, button.text) END END; @@ -74,12 +75,24 @@ BEGIN END drawIcons; +PROCEDURE setColors (VAR toolbar: tToolbar); +BEGIN + toolbar.colors.back := 0F2EFECH;//K.lightColor; + toolbar.colors.text := 00000FFH; + toolbar.colors.disText := 0808080H;//K.borderColor; + toolbar.colors.light := 0FEFEFEH; + toolbar.colors.shadow := 09F9C9AH;//K.borderColor; + toolbar.colors.window := K.winColor +END setColors; + + PROCEDURE draw* (VAR toolbar: tToolbar); VAR i, x, y, btn: INTEGER; button: tButton; BEGIN - Icons.get(toolbar.icons, toolbar.grayIcons); + setColors(toolbar); + Icons.get(toolbar.icons, toolbar.grayIcons, toolbar.colors.back); i := 0; WHILE i < toolbar.cnt DO button := toolbar.buttons[i]; @@ -87,10 +100,14 @@ BEGIN IF btn # 0 THEN x := button.x; y := toolbar.y; - K.DrawRect(x, y, BtnSize, BtnSize, K.toolbarColor); - K.DrawLine(x, y + BtnSize, x + BtnSize, y + BtnSize, K.shadowColor); - K.DrawLine(x + BtnSize, y, x + BtnSize, y + BtnSize, K.shadowColor); - K.CreateButton(btn + ORD({30}), x, y, BtnSize, BtnSize, K.btnColor, "") + K.DrawRect(x + 1, y + 1, BtnSize, BtnSize - 1, toolbar.colors.back); + K.DrawLine(x + 1, y + BtnSize, x + BtnSize - 1, y + BtnSize, toolbar.colors.shadow); + K.DrawLine(x + 1, y, x + BtnSize - 1, y, toolbar.colors.light); + K.DrawLine(x, y + 1, x, y + BtnSize - 1, toolbar.colors.light); + K.PutPixel(x + BtnSize, y + 1, toolbar.colors.light); + K.PutPixel(x, y + BtnSize - 1, toolbar.colors.shadow); + K.PutPixel(x + BtnSize, y + BtnSize - 1, toolbar.colors.shadow); + K.CreateButton(btn + ORD({30}), x, y, BtnSize, BtnSize, 0, "") END; INC(i) END; @@ -119,7 +136,7 @@ BEGIN ASSERT(toolbar.cnt < max); button.btn := btn; button.icon := icon; - button.x := toolbar.width; + button.x := toolbar.width + toolbar.x; button.text := text; button.enabled := TRUE; toolbar.buttons[toolbar.cnt] := button; @@ -143,8 +160,7 @@ BEGIN toolbar.x := x; toolbar.y := y; toolbar.cnt := 0; - toolbar.width := x; - Icons.get(toolbar.icons, toolbar.grayIcons) + toolbar.width := 0 END create;