123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- MODULE Panels;
- IMPORT Gui, G := Graph, Strings, Out;
- CONST
- marTop = 8;
- indent = 6;
- TYPE
- Panel* = POINTER TO PanelDesc;
- PanelDesc* = RECORD(Gui.WidgetDesc) END;
- PROCEDURE DrawPanel*(W: Gui.Widget; x, y: INTEGER);
- VAR c: G.Color;
- f: G.Font;
- fw, fh, tLen: INTEGER;
- BEGIN
- f := Gui.GetFont(W);
- G.GetMonoFontSize(f, fw, fh);
- tLen := fw * Strings.Length(W.text.s(*!FIXME*)) + 4;
- G.MakeCol(c, 0, 0, 0);
- G.DrawString(W.text.s(*!FIXME*), x + indent + 2, y, f, c);
- G.MakeCol(c, 128, 128, 128);
- G.HLine(x, y + marTop, x + indent, c);
- G.HLine(x + indent + tLen, y + marTop, x + W.w - 2, c);
- G.VLine(x, y + marTop, y + W.h - 2, c);
- G.HLine(x, y + W.h - 2, x + W.w - 2, c);
- G.VLine(x + W.w - 2, y + marTop, y + W.h - 2, c);
- G.MakeCol(c, 255, 255, 255);
- G.HLine(x + 1, y + marTop + 1, x + indent, c);
- G.HLine(x + indent + tLen, y + marTop + 1, x + W.w - 3, c);
- G.VLine(x + 1, y + marTop + 1, y + W.h - 3, c);
- G.HLine(x, y + W.h - 1, x + W.w - 1, c);
- G.VLine(x + W.w - 1, y + marTop, y + W.h - 2, c);
- Gui.DrawBody(W, x, y)
- END DrawPanel;
- PROCEDURE InitPanel*(p: Panel; w, h: INTEGER; title: ARRAY OF CHAR);
- BEGIN
- Gui.InitWidget(p);
- p.w := w; p.h := h;
- Gui.SetText(p, title);
- p.draw := DrawPanel
- END InitPanel;
- PROCEDURE NewPanel*(w, h: INTEGER; title: ARRAY OF CHAR): Panel;
- VAR p: Panel;
- BEGIN NEW(p); InitPanel(p, w, h, title)
- RETURN p END NewPanel;
- END Panels.
|