(* Copyright 2021-2023 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* (text: ARRAY OF WCHAR; first, second: INTEGER; delimiter: ARRAY OF WCHAR); VAR s1, s2: tString; BEGIN IF first # 0 THEN s1 := text; U.int2str(first, s2); U.append(s1, s2); U.append(s1, delimiter); U.int2str(second, 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 height* (): INTEGER; RETURN font.height + 3 END height; PROCEDURE setWidth* (width: INTEGER); BEGIN ASSERT(width > 0); IF (SB.canvas = NIL) OR (SB.canvas.width # width) OR (SB.canvas.height # height()) THEN G.destroy(SB.canvas); SB.canvas := G.CreateCanvas(width, height()); 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.colors.work); G.SetBkColor(SB.canvas, K.colors.work); G.SetTextColor(SB.canvas, K.colors.work_text); G.clear(SB.canvas); TextOut(1, SB.pos); TextOut(16*font.width, SB.sel); TextOut(SB.canvas.width - LENGTH(SB.enc)*font.width - 1, SB.enc); G.DrawCanvas(SB.canvas, left, top) END draw; PROCEDURE SetFont* (_font: G.tFont); BEGIN font := _font; IF SB.canvas # NIL THEN setWidth(SB.canvas.width) END END SetFont; BEGIN SB.canvas := NIL; font := G.fonts[1] END StatusBar.