/programs/develop/cedit/CEDIT |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/programs/develop/cedit/SRC/CEdit.ob07 |
---|
25,10 → 25,10 |
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 |
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 |
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 |
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 |
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,20 → 383,14 |
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); |
Status(text, height); |
IF (enc # T.getEnc(text)) OR (eol # T.getEol(text)) THEN |
DrawState(text, width, height) |
ELSIF modified # text.modified THEN |
MarkModified |
END; |
T.getScroll(text, scrollX, scrollY); |
DrawScroll(vScroll, LEFT + canvas.width, TOP - 1, scrollY, text.count - 1); |
DrawScroll(hScroll, LEFT, TOP + canvas.height, scrollX, text.maxLength); |
487,13 → 442,13 |
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 |
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 |
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 |
firstClickX, firstClickY, time: INTEGER; |
BEGIN |
K.GetSystemColors; |
modified := FALSE; |
switch := FALSE; |
closing := FALSE; |
textsCount := 0; |
2058,7 → 2011,7 |
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, ""); |
/programs/develop/cedit/SRC/Graph.ob07 |
---|
175,13 → 175,10 |
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); |
/programs/develop/cedit/SRC/Icons.ob07 |
---|
81,7 → 81,7 |
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 |
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 |
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 |
copy(source, grayIcons) |
END; |
gray(grayIcons); |
iconsBackColor(icons); |
iconsBackColor(grayIcons) |
iconsBackColor(icons, BackColor); |
iconsBackColor(grayIcons, BackColor) |
END get; |
/programs/develop/cedit/SRC/KolibriOS.ob07 |
---|
29,9 → 29,7 |
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 |
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 |
END GetThreadSlot; |
PROCEDURE PutPixel* (x, y, color: INTEGER); |
BEGIN |
KOSAPI.sysfunc5(1, x, y, color, 0) |
END PutPixel; |
END KolibriOS. |
/programs/develop/cedit/SRC/Lines.ob07 |
---|
167,6 → 167,20 |
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 |
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 |
END insert; |
PROCEDURE insert2* (line1: tLine; pos: INTEGER; line2: tLine); |
PROCEDURE _insert2* (line1: tLine; pos: INTEGER; line2: tLine); |
VAR |
ptr: INTEGER; |
BEGIN |
310,8 → 305,16 |
movInt(line2.length, 0) |
END; |
INC(line1.length, line2.length); |
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(line1, ptr); |
free(line2, 0) |
END |
END insert2; |
/programs/develop/cedit/SRC/Menu.ob07 |
---|
27,7 → 27,7 |
fontWidth = 8; |
MainMenuHeight* = K.fontHeight + 7; |
MainMenuX* = 0; |
MainMenuX* = 3; |
RIGHT = 16; |
LEFT = 16; |
88,7 → 88,7 |
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); |
/programs/develop/cedit/SRC/RW.ob07 |
---|
44,6 → 44,7 |
tInput* = POINTER TO RECORD |
buffer: INTEGER; |
strBuf: Lines.tLine; |
pos, cnt: INTEGER; |
CR: BOOLEAN; |
clipbrd: BOOLEAN; |
55,7 → 56,8 |
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 |
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 |
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,24 → 190,19 |
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 |
214,19 → 209,15 |
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 |
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 |
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 |
ELSIF enc = E.W1251 THEN |
res.getChar := getCharW1251 |
END; |
eol := detectEOL(res) |
eol := detectEOL(res); |
createStrBuf(res) |
END |
RETURN res |
END load; |
372,6 → 397,8 |
res.buffer := CB.get(res.cnt); |
IF res.buffer = 0 THEN |
DISPOSE(res) |
ELSE |
createStrBuf(res) |
END |
RETURN res |
END clipboard; |
378,11 → 405,11 |
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 |
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) |
file.putChar(file, ORD(c)) |
END |
END; |
INC(i) |
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 |
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; |
IF ~((0 <= code) & (code <= 65535)) THEN |
code := ORD("?") |
END; |
putByte(file, code MOD 256); |
putByte(file, code DIV 256) |
ELSE |
res := FALSE |
END |
RETURN res |
END putCharUTF16LE; |
502,6 → 506,7 |
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 |
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 |
END; |
ASSERT(res.putChar # NIL); |
res.handle := File.Create(name); |
res.error := FALSE; |
IF res.handle = NIL THEN |
DISPOSE(res) |
END |
540,11 → 546,16 |
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 |
END destroy; |
/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 <http://www.gnu.org/licenses/>. |
*) |
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. |
/programs/develop/cedit/SRC/Text.ob07 |
---|
823,7 → 823,6 |
buf: CB.tBuffer; |
size: INTEGER; |
line: tLine; |
EOT: ARRAY 2 OF WCHAR; |
BEGIN |
size := 0; |
line := text.first(tLine); |
848,9 → 847,7 |
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 |
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 |
RW.newLine(file) |
END |
END |
END; |
IF ~RW.close(file) THEN |
res := FALSE |
END |
res := RW.close(file) |
ELSE |
res := FALSE |
END; |
1393,11 → 1381,10 |
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 |
line: tLine; |
BEGIN |
errno := 0; |
text := NIL; |
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; |
/programs/develop/cedit/SRC/Toolbar.ob07 |
---|
25,7 → 25,7 |
CONST |
max = 14; |
BtnSize* = 24; |
BtnSize* = 26; |
BtnInter = 5; |
DelimSize = 7; |
IconPad = (BtnSize - Icons.SIZE) DIV 2; |
42,7 → 42,8 |
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 |
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 |
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 |
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 |
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 |
toolbar.x := x; |
toolbar.y := y; |
toolbar.cnt := 0; |
toolbar.width := x; |
Icons.get(toolbar.icons, toolbar.grayIcons) |
toolbar.width := 0 |
END create; |