mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
1328 lines
31 KiB
Text
1328 lines
31 KiB
Text
enum_property Frame {
|
|
"NullFrame()",
|
|
"FieldFrame()",
|
|
"InsetFrame()",
|
|
"OutsetFrame()",
|
|
"ButtonFrame()",
|
|
"ThinInsetFrame()",
|
|
"ThinOutsetFrame()",
|
|
"BlackFrame()",
|
|
"TopSeparatorFrame()",
|
|
"BottomSeparatorFrame()",
|
|
"LeftSeparatorFrame()",
|
|
"RightSeparatorFrame()"
|
|
};
|
|
|
|
enum_property Align {
|
|
"ALIGN_LEFT",
|
|
"ALIGN_CENTER",
|
|
"ALIGN_RIGHT"
|
|
};
|
|
|
|
fn DeflateRect(&r)
|
|
{
|
|
r.top++;
|
|
r.left++;
|
|
r.right--;
|
|
r.bottom--;
|
|
}
|
|
|
|
fn DrawFrame(w, &r, c1, c2) {
|
|
w.DrawRect(r.left, r.top, r.right - r.left, 1, c1);
|
|
w.DrawRect(r.left, r.top, 1, r.bottom - r.top, c1);
|
|
w.DrawRect(r.right - 1, r.top, 1, r.bottom - r.top, c2);
|
|
w.DrawRect(r.left, r.bottom - 1, r.right - r.left, 1, c2);
|
|
DeflateRect(r);
|
|
}
|
|
|
|
fn DrawBorder(w, &r, ...)
|
|
{
|
|
for(i = 0; i < count(argv); i += 2)
|
|
DrawFrame(w, r, argv[i], argv[i + 1]);
|
|
}
|
|
|
|
fn DrawButtonFrame(w, &r)
|
|
{
|
|
DrawBorder(w, r, :SWhite, :SBlack, :SWhiteGray, :SGray);
|
|
}
|
|
|
|
fn DrawEdgeButtonFrame(w, &r)
|
|
{
|
|
DrawBorder(w, r, :SWhiteGray, :SBlack, :SWhite, :SGray);
|
|
}
|
|
|
|
fn DrawEdgeButton(w, &r)
|
|
{
|
|
DrawEdgeButtonFrame(w, r);
|
|
w.DrawRect(r, :SLtGray);
|
|
}
|
|
|
|
fn DrawInsetFrame(w, &r)
|
|
{
|
|
DrawBorder(w, r, :SGray, :SWhite, :SBlack, :SLtGray);
|
|
}
|
|
|
|
fn DrawCtrlFrame(w, &r, frame)
|
|
{
|
|
width = r.right - r.left;
|
|
height = r.bottom - r.top;
|
|
switch(frame) {
|
|
case "FieldFrame()":
|
|
case "InsetFrame()": DrawInsetFrame(w, r); break;
|
|
case "OutsetFrame()": DrawBorder(w, r, :SLtGray, :SBlack, :SWhite, :SGray); break;
|
|
case "ButtonFrame()": DrawButtonFrame(w, r); break;
|
|
case "ThinInsetFrame()": DrawBorder(w, r, :SGray, :SWhite); break;
|
|
case "ThinOutsetFrame()": DrawBorder(w, r, :SWhite, :SGray); break;
|
|
case "BlackFrame()": DrawBorder(w, r, :SBlack, :SBlack); break;
|
|
case "TopSeparatorFrame()":
|
|
w.DrawRect(r.left, r.top, width, 1, :SGray);
|
|
w.DrawRect(r.left, r.top + 1, width, 1, :SWhite);
|
|
r.top += 2;
|
|
break;
|
|
case "BottomSeparatorFrame()":
|
|
w.DrawRect(r.left, r.bottom - 2, width, 1, :SGray);
|
|
w.DrawRect(r.left, r.bottom - 1, width, 1, :SWhite);
|
|
r.bottom -= 2;
|
|
break;
|
|
case "LeftSeparatorFrame()":
|
|
w.DrawRect(r.left, r.top, 1, height, :SGray);
|
|
w.DrawRect(r.left + 1, r.top, 1, height, :SWhite);
|
|
r.left += 2;
|
|
break;
|
|
case "RightSeparatorFrame()":
|
|
w.DrawRect(r.right - 2, r.top, 1, height, :SGray);
|
|
w.DrawRect(r.right - 1, r.top, 1, height, :SWhite);
|
|
r.right -= 2;
|
|
break;
|
|
}
|
|
}
|
|
|
|
fn GradientColor(fc, tc, i, n)
|
|
{
|
|
return Color(
|
|
fc.r + i * (tc.r - fc.r) / n,
|
|
fc.g + i * (tc.g - fc.g) / n,
|
|
fc.b + i * (tc.b - fc.b) / n
|
|
);
|
|
}
|
|
|
|
fn max(a, b)
|
|
{
|
|
return a > b ? a : b;
|
|
}
|
|
|
|
fn min(a, b)
|
|
{
|
|
return a < b ? a : b;
|
|
}
|
|
|
|
fn DrawSpinButtons(w, r)
|
|
{
|
|
h = r.bottom - r.top;
|
|
h2 = int(h / 2);
|
|
h7 = int(7 * h / 10);
|
|
x = r.right - h7;
|
|
DrawEdgeButton(w, RectC(x, r.top, h7, h2));
|
|
w.DrawImage((h7 - 5) / 2 + x, (h2 - 3) / 2 + r.top, "CtrlsImg::SpU");
|
|
DrawEdgeButton(w, RectC(x, r.top + h2, h7, h - h2));
|
|
w.DrawImage((h7 - 5) / 2 + x, (h - h2 - 3) / 2 + r.top + h2, "CtrlsImg::SpD");
|
|
}
|
|
|
|
fn XMinSize()
|
|
{
|
|
return Size(8, 13);
|
|
}
|
|
|
|
subctrl NormalSize {
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 2; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 7; return sz; }
|
|
};
|
|
|
|
subctrl Base {
|
|
>NormalSize;
|
|
|
|
Font SetFont = StdFont();
|
|
Color SetInk = :SBlack;
|
|
Frame SetFrame @1;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
ViewRect(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
return r;
|
|
}
|
|
ViewSize(w) {
|
|
r = ViewRect(w);
|
|
return Size(r.right - r.left, r.bottom - r.top);
|
|
}
|
|
};
|
|
|
|
subctrl Unknown {
|
|
> Base;
|
|
};
|
|
|
|
subctrl TextCtrl {
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 2; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Text SetLabel @1 ? "Label of control" ;
|
|
|
|
ViewRect(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
return r;
|
|
}
|
|
ViewSize(w) {
|
|
r = ViewRect(w);
|
|
return Size(r.right - r.left, r.bottom - r.top);
|
|
}
|
|
|
|
Paint(w) {
|
|
sz = ViewSize(w);
|
|
textsize = GetSmartTextSize(.SetLabel, .SetFont);
|
|
px = 0;
|
|
if(.SetAlign == "ALIGN_CENTER")
|
|
px = (sz.cx - textsize.cx) / 2;
|
|
if(.SetAlign == "ALIGN_RIGHT")
|
|
px = sz.cx - textsize.cx;
|
|
w.DrawSmartText(px, (sz.cy - textsize.cy) / 2, .SetLabel, .SetFont, .SetInk, sz.cx);
|
|
}
|
|
};
|
|
|
|
ctrl Label {
|
|
group "Static";
|
|
|
|
GetMinSize() { return XMinSize(); }
|
|
GetStdSize() { sz = GetMinSize(); sz.cy += 6; sz.cx *= 5; return sz; }
|
|
|
|
>TextCtrl;
|
|
|
|
Doc SetLabel ? "Label of control" ;
|
|
Align SetAlign = ALIGN_LEFT @2;
|
|
Font SetFont = StdFont() @2;
|
|
Color SetInk = :SBlack @2;
|
|
Frame SetFrame @3;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w) {
|
|
sz = ViewSize(w);
|
|
textsize = GetSmartTextSize(.SetLabel, .SetFont);
|
|
px = 0;
|
|
if(.SetAlign == "ALIGN_CENTER")
|
|
px = (sz.cx - textsize.cx) / 2;
|
|
if(.SetAlign == "ALIGN_RIGHT")
|
|
px = sz.cx - textsize.cx;
|
|
w.DrawSmartText(px, (sz.cy - textsize.cy) / 2, .SetLabel, .SetFont, .SetInk, sz.cx);
|
|
}
|
|
Sample() {
|
|
.SetLabel = "Label";
|
|
.SetFont = Arial(10).Bold().Italic();
|
|
}
|
|
};
|
|
|
|
ctrl StaticText {
|
|
group "Static";
|
|
|
|
GetMinSize() { return XMinSize(); }
|
|
GetStdSize() { sz = XMinSize(); sz.cy += 6; sz.cx *= 5; return sz; }
|
|
|
|
Doc SetText ? "Label of control" ;
|
|
Align SetAlign = ALIGN_LEFT;
|
|
Font SetFont = StdFont();
|
|
Color SetInk = :SBlack;
|
|
Frame SetFrame @1;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
ViewRect(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
return r;
|
|
}
|
|
ViewSize(w) {
|
|
r = ViewRect(w);
|
|
return Size(r.right - r.left, r.bottom - r.top);
|
|
}
|
|
|
|
Paint(w) {
|
|
sz = ViewSize(w);
|
|
textsize = GetSmartTextSize(.SetText, .SetFont);
|
|
px = 0;
|
|
if(.SetAlign == "ALIGN_CENTER")
|
|
px = (sz.cx - textsize.cx) / 2;
|
|
if(.SetAlign == "ALIGN_RIGHT")
|
|
px = sz.cx - textsize.cx;
|
|
w.DrawSmartText(px, (sz.cy - textsize.cy) / 2, .SetText, .SetFont, .SetInk);
|
|
}
|
|
Sample() {
|
|
.SetText = "Text";
|
|
.SetFont = Arial(10).Bold().Italic();
|
|
}
|
|
};
|
|
|
|
ctrl LabelBox {
|
|
group "Static";
|
|
|
|
GetMinSize() { return Size(0, 0); }
|
|
GetStdSize() { return Size(64, 24); }
|
|
|
|
>Base;
|
|
Text SetLabel ? "Box label" ;
|
|
|
|
Paint(w) {
|
|
sz = GetSize();
|
|
ts = GetSmartTextSize(.SetLabel, .SetFont);
|
|
d = ts.cy / 2;
|
|
if(2 * GetSmartTextSize("X").cy > sz.cy) {
|
|
d = sz.cy / 2;
|
|
w.DrawSmartText(d, (sz.cy - ts.cy) / 2, .SetLabel, .SetFont, .SetInk, sz.cx);
|
|
w.DrawRect(1, d, d - 1, 1, :SGray);
|
|
w.DrawRect(1, d + 1, d - 1, 1, :SWhite);
|
|
}
|
|
else {
|
|
w.DrawSmartText(d, 0, .SetLabel, .SetFont, .SetInk, sz.cx);
|
|
w.DrawRect(0, d + 2, 1, sz.cy - d - 4, :SGray);
|
|
w.DrawRect(1, d + 2, 1, sz.cy - d - 4, :SWhite);
|
|
w.DrawRect(sz.cx - 2, d, 1, sz.cy - d - 2, :SGray);
|
|
w.DrawRect(sz.cx - 1, d, 1, sz.cy - d - 2, :SWhite);
|
|
w.DrawRect(0, sz.cy - 2, sz.cx - 1, 1, :SGray);
|
|
w.DrawRect(0, sz.cy - 1, sz.cx - 1, 1, :SWhite);
|
|
w.DrawRect(sz.cx - 1, sz.cy - 2, 1, 2, :SWhite);
|
|
w.DrawRect(1, d, d - 1, 1, :SGray);
|
|
w.DrawRect(1, d + 1, d - 1, 1, :SWhite);
|
|
w.DrawRect(0, d, 1, 2, :SGray);
|
|
}
|
|
w.DrawRect(d + ts.cx, d, sz.cx - ts.cx - d - 2, 1, :SGray);
|
|
w.DrawRect(d + ts.cx, d + 1, sz.cx - ts.cx - d - 2, 1, :SWhite);
|
|
}
|
|
}
|
|
|
|
ctrl DataPusher {
|
|
group "Push";
|
|
|
|
GetStdSize() { return Size(64, 24); }
|
|
|
|
>Base;
|
|
Frame SetFrame = InsetFrame();
|
|
bool SetEditable = true @1;
|
|
Text Tip;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
}
|
|
};
|
|
|
|
|
|
ctrl Button {
|
|
group "Push";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 2; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 7; return sz; }
|
|
|
|
Text SetLabel ? "Button label";
|
|
Font SetFont = StdFont();
|
|
Frame SetFrame @1;
|
|
Text Tip;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
DrawButtonFrame(w, r);
|
|
sz = Size(r.right - r.left, r.bottom - r.top);
|
|
n = int(sz.cy / 8);
|
|
w.DrawRect(r.left, r.top, sz.cx, sz.cy, :SLtGray);
|
|
textsize = GetSmartTextSize(.SetLabel, .SetFont);
|
|
py = (sz.cy - textsize.cy) / 2;
|
|
if(count(.SetLabel) && (.SetLabel)[0] == 1)
|
|
w.DrawSmartText(r.left, r.top + py, .SetLabel, .SetFont, :SBlack, sz.cx);
|
|
else {
|
|
px = (sz.cx - textsize.cx) / 2;
|
|
w.DrawSmartText(px + r.left, py + r.top, .SetLabel, .SetFont, :SBlack, sz.cx);
|
|
}
|
|
}
|
|
}
|
|
|
|
ctrl Option {
|
|
group "Push";
|
|
|
|
Text SetLabel @1 ? "Option text";
|
|
Font SetFont = StdFont() @1;
|
|
Frame SetFrame @2;
|
|
bool BlackEdge;
|
|
bool SwitchImage;
|
|
bool SetEditable = true @1 ? "Editable";
|
|
bool ThreeState;
|
|
bool NotNull;
|
|
Text Tip @2;
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 2; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 7; sz.cy = max(16, sz.cy); return sz; }
|
|
|
|
ViewRect(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
return r;
|
|
}
|
|
ViewSize(w) {
|
|
r = ViewRect(w);
|
|
return Size(r.right - r.left, r.bottom - r.top);
|
|
}
|
|
|
|
Paint(w) {
|
|
x = self;
|
|
sz = ViewSize(w);
|
|
img = .SwitchImage ? "ClassicCtrlsImg::S0"
|
|
: .ThreeState ? "ClassicCtrlsImg::O2"
|
|
: "ClassicCtrlsImg::O0";
|
|
imagesize = GetImageSize(img);
|
|
textsize = GetSmartTextSize(.SetLabel, .SetFont);
|
|
w.DrawImage(0, (sz.cy - imagesize.cy) / 2, img);
|
|
w.DrawSmartText(imagesize.cx + 4, (sz.cy - textsize.cy) / 2, .SetLabel, .SetFont);
|
|
}
|
|
}
|
|
|
|
ctrl Switch {
|
|
group "Push";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 2; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 7; sz.cy = max(16, sz.cy); return sz; }
|
|
|
|
Doc SetLabel;
|
|
Font SetFont = StdFont();
|
|
bool SetEditable = true @1 ? "Editable";
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w)
|
|
{
|
|
sz = GetSize();
|
|
ln = [];
|
|
cs = [];
|
|
for(i = 0; i < count(.SetLabel); i++) {
|
|
if(.SetLabel[i] >= 32 && .SetLabel[i] < 65536)
|
|
ln[] = .SetLabel[i];
|
|
if(.SetLabel[i] == '\n') {
|
|
cs[] = ln;
|
|
ln = "";
|
|
}
|
|
}
|
|
cs[] = ln;
|
|
tcy = GetTextSize("W", .SetFont).cy;
|
|
linecy = max(16, tcy + 2);
|
|
imagesize = GetImageSize("ClassicCtrlsImg::S0");
|
|
y = 0;
|
|
x = 0;
|
|
setlabel = .SetLabel;
|
|
for(i = 0; i < count(cs); i++) {
|
|
textsize = GetSmartTextSize(cs[i], .SetFont);
|
|
if(linecy * count(cs) > sz.cy) {
|
|
w.DrawImage(x, (sz.cy - imagesize.cy) / 2, "ClassicCtrlsImg::S0");
|
|
w.DrawSmartText(x + imagesize.cx + 4, (sz.cy - tcy) / 2, cs[i], .SetFont);
|
|
x += imagesize.cx + 4 + textsize.cx + max(imagesize.cy, tcy) / 2;
|
|
}
|
|
else {
|
|
w.DrawImage(x, y, "ClassicCtrlsImg::S0");
|
|
w.DrawSmartText(x + imagesize.cx + 4, y + (imagesize.cy - tcy) / 2,
|
|
cs[i], .SetFont);
|
|
y += linecy;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
ctrl EditField {
|
|
group "Input fields";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Font SetFont = StdFont() @3;
|
|
int MaxChars @2;
|
|
bool AlignRight @1;
|
|
bool SetEditable = true @4 ? "Editable";
|
|
Frame SetFrame = InsetFrame() @5;
|
|
Text Tip @6;
|
|
bool WantFocus = true @7;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
PaintData(w);
|
|
}
|
|
|
|
PaintText(w, text) {
|
|
w.DrawText(3, (GetSize().cy - GetTextSize(text, Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + text, Arial(10), :SMagenta);
|
|
}
|
|
|
|
PaintData(w) {
|
|
PaintText(w, "EditField");
|
|
}
|
|
}
|
|
|
|
ctrl DocEdit {
|
|
group "Editors";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Font SetFont = StdFont();
|
|
Frame SetFrame = InsetFrame();
|
|
bool SetEditable = true @1 ? "Editable";
|
|
bool WantFocus = true;
|
|
Text Tip;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
PaintData(w);
|
|
}
|
|
|
|
PaintText(w, text) {
|
|
w.DrawText(3, (GetSize().cy - GetTextSize(text, Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + text, Arial(10), :SMagenta);
|
|
}
|
|
|
|
PaintData(w) {
|
|
PaintText(w, "DocEdit");
|
|
}
|
|
}
|
|
|
|
ctrl LineEdit {
|
|
group "Editors";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Font SetFont = StdFont() @3;
|
|
// int MaxChars @2;
|
|
// bool AlignRight @1;
|
|
bool SetEditable = true @4 ? "Editable";
|
|
Frame SetFrame = InsetFrame() @5;
|
|
Text Tip @6;
|
|
bool WantFocus = true @7;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
PaintData(w);
|
|
}
|
|
|
|
PaintText(w, text) {
|
|
w.DrawText(3, (GetSize().cy - GetTextSize(text, Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + text, Arial(10), :SMagenta);
|
|
}
|
|
|
|
PaintData(w) {
|
|
PaintText(w, "LineEdit");
|
|
}
|
|
}
|
|
|
|
subctrl EditNotNull {
|
|
>EditField;
|
|
bool NotNull = false;
|
|
|
|
PaintMinMax(w, type, minval, maxval) {
|
|
PaintMinMaxText(w, type, minval, maxval, addtext);
|
|
}
|
|
|
|
PaintMinMaxText(w, type, minval, maxval, addtext) {
|
|
text = (.NotNull ? "!" : "") + type;
|
|
if(minval != "" && maxval != "")
|
|
text << " " << minval << "..." << maxval;
|
|
else
|
|
if(minval != "")
|
|
text << " >= " << minval;
|
|
else
|
|
if(maxval != "")
|
|
text << " <= " << maxval;
|
|
text << addtext;
|
|
PaintText(w, text);
|
|
}
|
|
}
|
|
|
|
ctrl EditString {
|
|
>EditNotNull;
|
|
raw MaxLen;
|
|
bool TrimLeft = false;
|
|
bool TrimRight = false;
|
|
|
|
PaintData(w) {
|
|
text = (.NotNull ? "!" : "") + "Str";
|
|
if(.MaxLen != "")
|
|
text << "(" << .MaxLen << ")";
|
|
PaintText(w, text);
|
|
}
|
|
}
|
|
|
|
ctrl SuggestCtrl {
|
|
>EditString;
|
|
|
|
PaintData(w) {
|
|
text = (.NotNull ? "!" : "") + "SuggestCtrl";
|
|
if(.MaxLen != "")
|
|
text << "(" << .MaxLen << ")";
|
|
PaintText(w, text);
|
|
}
|
|
}
|
|
|
|
fn IntStr(x)
|
|
{
|
|
return x == :IntNull || x < :DblNullLim ? "" : to_string(x);
|
|
}
|
|
|
|
fn DblStr(x)
|
|
{
|
|
return x < :DblNullLim ? "" : to_string(x);
|
|
}
|
|
|
|
ctrl EditInt {
|
|
>EditNotNull;
|
|
int Min;
|
|
int Max;
|
|
|
|
PaintData(w) { PaintMinMax(w, "int", IntStr(.Min), IntStr(.Max)); }
|
|
}
|
|
|
|
ctrl EditInt64 {
|
|
>EditNotNull;
|
|
int Min;
|
|
int Max;
|
|
|
|
PaintData(w) { PaintMinMax(w, "int64", IntStr(.Min), IntStr(.Max)); }
|
|
}
|
|
|
|
ctrl EditIntNotNull {
|
|
>EditInt;
|
|
|
|
bool NotNull = true;
|
|
};
|
|
|
|
ctrl EditDouble {
|
|
>EditNotNull;
|
|
double Min;
|
|
double Max;
|
|
|
|
PaintData(w) { PaintMinMax(w, "dbl", DblStr(.Min), DblStr(.Max)); }
|
|
}
|
|
|
|
ctrl EditDoubleNotNull {
|
|
>EditDouble;
|
|
|
|
bool NotNull = true;
|
|
}
|
|
|
|
ctrl EditDate {
|
|
>EditNotNull;
|
|
PaintData(w) { PaintMinMax(w, "Date", "", ""); }
|
|
}
|
|
|
|
ctrl EditDateNotNull {
|
|
>EditDate;
|
|
|
|
bool NotNull = true;
|
|
}
|
|
|
|
ctrl EditTime {
|
|
>EditNotNull;
|
|
PaintData(w) { PaintMinMax(w, "Time", "", ""); }
|
|
}
|
|
|
|
ctrl EditTimeNotNull {
|
|
>EditTime;
|
|
|
|
bool NotNull = true;
|
|
}
|
|
|
|
ctrl EditIntSpin {
|
|
>EditInt;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
DrawSpinButtons(w, r);
|
|
PaintMinMax(w, "int", IntStr(.Min), IntStr(.Max));
|
|
}
|
|
}
|
|
|
|
ctrl EditInt64Spin {
|
|
>EditInt64;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
DrawSpinButtons(w, r);
|
|
PaintMinMax(w, "int64", IntStr(.Min), IntStr(.Max));
|
|
}
|
|
}
|
|
|
|
ctrl EditDoubleSpin {
|
|
>EditDouble;
|
|
|
|
double SetInc = 0.1;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
DrawSpinButtons(w, r);
|
|
PaintMinMaxText(w, "dbl", DblStr(.Min), DblStr(.Max), "+-" + DblStr(.SetInc));
|
|
}
|
|
}
|
|
|
|
ctrl EditDateSpin {
|
|
>EditDate;
|
|
|
|
double SetInc = 1;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
DrawSpinButtons(w, r);
|
|
PaintMinMaxText(w, "date", DblStr(.Min), DblStr(.Max), "+-" + DblStr(.SetInc));
|
|
}
|
|
}
|
|
|
|
ctrl EditTimeSpin {
|
|
>EditTime;
|
|
|
|
double SetInc = 1;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
DrawSpinButtons(w, r);
|
|
PaintMinMaxText(w, "time", DblStr(.Min), DblStr(.Max), "+-" + DblStr(.SetInc));
|
|
}
|
|
}
|
|
|
|
ctrl DropList {
|
|
group "Input fields";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Frame SetFrame = InsetFrame();
|
|
bool SetEditable = true @2 ? "Editable";
|
|
bool WantFocus = true;
|
|
bool DisplayAll = false;
|
|
bool AlwaysDrop = false @1;
|
|
bool NotNull = false;
|
|
Text Tip;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
n = r.bottom - r.top;
|
|
DrawEdgeButton(w, RectC(r.right - n, r.top, n, n));
|
|
w.DrawImage((n - 7) / 2 + r.right - n, (n - 6) / 2 + r.top, "ClassicCtrlsImg::DA");
|
|
w.DrawText(3, (GetSize().cy - GetTextSize("", Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + "DropList", Arial(10), :SMagenta);
|
|
}
|
|
}
|
|
|
|
ctrl DropTree {
|
|
group "Input fields";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Frame SetFrame = InsetFrame();
|
|
bool SetEditable = true @2 ? "Editable";
|
|
bool WantFocus = true;
|
|
bool DisplayAll = false;
|
|
bool AutoResize = false;
|
|
bool DropFocus = false;
|
|
bool AlwaysDrop = false @1;
|
|
Text Tip;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
n = r.bottom - r.top;
|
|
DrawEdgeButton(w, RectC(r.right - n, r.top, n, n));
|
|
w.DrawImage((n - 7) / 2 + r.right - n, (n - 6) / 2 + r.top, "ClassicCtrlsImg::DA");
|
|
w.DrawText(3, (GetSize().cy - GetTextSize("", Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + "DropTree", Arial(10), :SMagenta);
|
|
}
|
|
}
|
|
|
|
template WithDropChoice {
|
|
bool Dropping = true;
|
|
String Appending = ", ";
|
|
raw SetDropLines = 16;
|
|
Text Tip;
|
|
|
|
Paint(w) {
|
|
CtrlPaint(w);
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
n = r.bottom - r.top;
|
|
DrawEdgeButton(w, RectC(r.right - n, r.top, n, n));
|
|
w.DrawImage((n - 7) / 2 + r.right - n, (n - 6) / 2 + r.top, "ClassicCtrlsImg::DA");
|
|
}
|
|
};
|
|
|
|
fn TabItemSize(text, font)
|
|
{
|
|
SIDEGAP = 12;
|
|
VERTGAP = 4;
|
|
ts = GetTextSize(text, font.Bold());
|
|
return Size(ts.cx + 2 * SIDEGAP, (ts.cy < 16 ? 16 : ts.cy) + 2 * VERTGAP);
|
|
}
|
|
|
|
fn PaintTabItemFrame(w, rc)
|
|
{
|
|
size = Size(rc.right - rc.left, rc.bottom - rc.top);
|
|
w.DrawRect(rc.left, rc.top, 1, size.cy - 1, :SLtGray);
|
|
w.DrawRect(rc.left + 1, rc.top + 2, 1, size.cy - 2, :SWhite);
|
|
w.DrawRect(rc.left + 2, rc.top + 1, 1, 1, :SWhite);
|
|
w.DrawRect(rc.left + 2, rc.top + 2, 1, size.cy - 2, :SLtGray);
|
|
w.DrawRect(rc.left + 3, rc.top, size.cx - 5, 1, :SWhite);
|
|
w.DrawRect(rc.left + 3, rc.top + 1, size.cx - 5, size.cy - 1, :SLtGray);
|
|
w.DrawRect(rc.right - 2, rc.top, 1, size.cy, :SBlack);
|
|
w.DrawRect(rc.right - 1, rc.top + 2, 1, size.cy - 2, :SBlack);
|
|
}
|
|
|
|
fn PaintTabItem(w, rc, text, font, active)
|
|
{
|
|
if(active)
|
|
font = font.Bold();
|
|
else {
|
|
w.DrawRect(rc.left, rc.bottom - 1, rc.right - rc.left, 1, :SWhite);
|
|
w.DrawRect(rc.left, rc.bottom - 2, rc.right - rc.left, 1, :SLtGray);
|
|
rc.left += 2;
|
|
rc.top += 2;
|
|
rc.right -= 2;
|
|
rc.bottom -= 2;
|
|
}
|
|
|
|
PaintTabItemFrame(w, rc);
|
|
|
|
rc.top += (active ? 0 : 2);
|
|
SIDEGAP = 12;
|
|
sz = GetTextSize(text, font);
|
|
w.DrawText(rc.left + SIDEGAP, rc.top + ((rc.bottom - rc.top - sz.cy) >> 1), text, font);
|
|
}
|
|
|
|
ctrl TabCtrl {
|
|
group "Complex";
|
|
|
|
GetStdSize() { return Size(150, 100); }
|
|
|
|
// Font SetFont = StdFont();
|
|
bool AcceptCurrent = false;
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w) {
|
|
text1 = "Tab1";
|
|
text2 = "Tab2";
|
|
text3 = "Tab3";
|
|
size1 = TabItemSize(text1, StdFont());
|
|
size2 = TabItemSize(text2, StdFont());
|
|
size3 = TabItemSize(text3, StdFont());
|
|
r = GetRect();
|
|
r1 = r;
|
|
INITGAP = -1;
|
|
r1.right = (r1.left += INITGAP) + size1.cx;
|
|
r1.bottom = r1.top + size1.cy;
|
|
CELLSEP = -4;
|
|
r2 = r1;
|
|
r2.right = (r2.left = r2.right + CELLSEP) + size2.cx;
|
|
r3 = r2;
|
|
r3.right = (r3.left = r3.right + CELLSEP) + size3.cx;
|
|
PaintTabItem(w, r3, text3, StdFont(), 0);
|
|
PaintTabItem(w, r2, text2, StdFont(), 0);
|
|
PaintTabItem(w, r1, text1, StdFont(), 1);
|
|
w.DrawRect(r.left, r1.bottom, 1, r.bottom - r1.bottom, :SWhite);
|
|
w.DrawRect(r3.right, r1.bottom - 1, r.right - r3.right, 1, :SWhite);
|
|
w.DrawRect(r.right - 1, r1.bottom, 1, r.bottom - r1.bottom, :SGray);
|
|
w.DrawRect(r.left, r.bottom - 1, r.right - r.left, 1, :SGray);
|
|
}
|
|
};
|
|
|
|
fn PaintHeaderTab(w, r, text)
|
|
{
|
|
DrawButtonFrame(w, r);
|
|
w.DrawText(r.left + 2, (r.top + r.bottom - GetTextSize(text).cy) >> 1, text, StdFont());
|
|
}
|
|
|
|
fn PaintHeaderTabs(w, ...)
|
|
{
|
|
for(i = 0; i < count(argv); i += 2)
|
|
PaintHeaderTab(w, argv[i], argv[i + 1]);
|
|
}
|
|
|
|
fn PaintCenterImage(w, x, y, img)
|
|
{
|
|
sz = GetImageSize(img);
|
|
w.DrawImage(x - sz.cx / 2, y - sz.cy / 2, img);
|
|
}
|
|
|
|
fn PaintCenterText(w, x, y, text, fnt, color)
|
|
{
|
|
sz = GetTextSize(text, fnt);
|
|
w.DrawText(x - sz.cx / 2, y - sz.cy / 2, text, fnt, color);
|
|
}
|
|
|
|
fn PaintRcCenterImage(w, r, img)
|
|
{
|
|
PaintCenterImage(w, (r.left + r.right) >> 1, (r.top + r.bottom) >> 1, img);
|
|
}
|
|
|
|
fn PaintVScrollBar(w, r)
|
|
{
|
|
wd = r.right - r.left;
|
|
up = r;
|
|
r.top = (up.bottom = up.top + wd);
|
|
down = r;
|
|
r.bottom = (down.top = down.bottom - wd);
|
|
DrawButtonFrame(w, up);
|
|
PaintRcCenterImage(w, up, "ClassicCtrlsImg::UA");
|
|
DrawButtonFrame(w, down);
|
|
PaintRcCenterImage(w, down, "ClassicCtrlsImg::DA");
|
|
w.DrawRect(r, :SWhiteGray);
|
|
// ht = r.bottom - r.top;
|
|
// r.top += ht / 4;
|
|
// r.bottom = r.top + ht / 3;
|
|
// DrawButtonFrame(w, r);
|
|
// w.DrawRect(r, :SLtGray);
|
|
}
|
|
|
|
ctrl ArrayCtrl {
|
|
group "Complex";
|
|
|
|
GetStdSize() { return Size(150, 100); }
|
|
Frame SetFrame = InsetFrame() @1;
|
|
bool AutoHideSb = false;
|
|
bool Header = true;
|
|
bool Inserting = false;
|
|
bool Appending = false;
|
|
bool AppendLine = false;
|
|
bool Removing = false;
|
|
bool AskRemove = true;
|
|
bool Duplicating = false;
|
|
bool Moving = false;
|
|
bool Track = false;
|
|
bool VertGrid = true;
|
|
bool HorzGrid = true;
|
|
bool NoCursor = false;
|
|
bool MouseMoveCursor = false;
|
|
bool MultiSelect = false;
|
|
int SetLineCy;
|
|
|
|
// Qtf SetInfo @1 ? "Info of control" ;
|
|
|
|
Paint(w) {
|
|
PaintArray(w, GetRect());
|
|
}
|
|
|
|
PaintArray(w, r) {
|
|
col1 = "Column 1";
|
|
col2 = "Column 2";
|
|
col3 = "Column 3";
|
|
fontcy = GetTextSize(col1).cy;
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
if(!.AutoHideSb) {
|
|
rsb = r;
|
|
r.right = rsb.left = rsb.right - fontcy - 4;
|
|
PaintVScrollBar(w, rsb);
|
|
}
|
|
wd = r.right - r.left;
|
|
hdrcy = .Header ? fontcy + 4 : 0;
|
|
third = wd / 3;
|
|
r1 = r;
|
|
r1.bottom = r1.top + hdrcy;
|
|
r1.right = r.left + third;
|
|
r2 = r1;
|
|
r2.right = (r2.left = r1.right) + third;
|
|
r3 = r2;
|
|
r3.left = r2.right;
|
|
r3.right = r.right;
|
|
if(hdrcy)
|
|
PaintHeaderTabs(w, r1, col1, r2, col2, r3, col3);
|
|
linecy = .SetLineCy;
|
|
if(is_void(linecy) || linecy <= 0)
|
|
linecy = fontcy + 1;
|
|
celltop = r1.bottom;
|
|
cellht = 3 * linecy;
|
|
cellbot = celltop + cellht + 1;
|
|
w.DrawRect(r.left, celltop, wd, cellht, :SWhite);
|
|
if(.NoCursor == "false")
|
|
w.DrawRect(r.left, celltop + linecy, wd, linecy, :SBlue);
|
|
for(i = 1; i <= 3; i++)
|
|
{
|
|
if(.HorzGrid)
|
|
w.DrawRect(r.left, celltop + linecy * i, wd, 1, :SLtGray);
|
|
if(.VertGrid)
|
|
w.DrawRect(r.left + i * third - 1, celltop, 1, cellht, :SLtGray);
|
|
}
|
|
w.DrawRect(r.left, cellbot, wd, r.bottom - cellbot, :SGray);
|
|
}
|
|
};
|
|
|
|
ctrl RichTextView {
|
|
group "Complex";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Frame SetFrame = InsetFrame() @1;
|
|
Color Background = :SWhite;
|
|
bool VCenter = false;
|
|
bool NoSb = false;
|
|
bool AutoHideSb = false;
|
|
int HMargins = 0;
|
|
int VMargins = 0;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, .Background);
|
|
w.DrawText(3, 3, "RichTextView", Arial(10), :SMagenta);
|
|
}
|
|
}
|
|
|
|
ctrl RichTextCtrl {
|
|
group "Static";
|
|
|
|
>RichTextView;
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 8; return sz; }
|
|
|
|
Frame SetFrame = NullFrame() @1;
|
|
Color Background = Null;
|
|
bool AutoHideSb = true;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
if(!is_void(.Background))
|
|
w.DrawRect(r, .Background);
|
|
w.DrawText(3, 3, "RichTextCtrl", Arial(10), :SMagenta);
|
|
}
|
|
}
|
|
|
|
ctrl DropDate {
|
|
group "Input fields";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 13; return sz; }
|
|
|
|
bool SelectAll = true;
|
|
bool SwapMonthYear = false;
|
|
bool OneButton = false;
|
|
bool NotNull = false;
|
|
Frame SetFrame = InsetFrame();
|
|
bool SetEditable = true @2 ? "Editable";
|
|
bool WantFocus = true;
|
|
Text Tip;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
n = r.bottom - r.top;
|
|
DrawEdgeButton(w, RectC(r.right - n, r.top, n, n));
|
|
w.DrawImage((n - 7) / 2 + r.right - n, (n - 6) / 2 + r.top, "ClassicCtrlsImg::DA");
|
|
w.DrawText(3, (GetSize().cy - GetTextSize("", Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + (.NotNull ? "!" : "") + "01/05/2007", Arial(10), :SMagenta);
|
|
}
|
|
}
|
|
|
|
ctrl DropTime {
|
|
group "Input fields";
|
|
|
|
GetMinSize() { sz = XMinSize(); sz.cy += 6; return sz; }
|
|
GetStdSize() { sz = GetMinSize(); sz.cx *= 15; return sz; }
|
|
|
|
bool SelectAll = true;
|
|
bool SwapMonthYear = false;
|
|
bool Seconds = true;
|
|
bool DayEnd = false;
|
|
bool TimeAlways = false;
|
|
bool NotNull = false;
|
|
Frame SetFrame = InsetFrame();
|
|
bool SetEditable = true @2 ? "Editable";
|
|
bool WantFocus = true;
|
|
Text Tip;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
w.DrawRect(r, :SWhite);
|
|
n = r.bottom - r.top;
|
|
DrawEdgeButton(w, RectC(r.right - n, r.top, n, n));
|
|
w.DrawImage((n - 7) / 2 + r.right - n, (n - 6) / 2 + r.top, "ClassicCtrlsImg::DA");
|
|
w.DrawText(3, (GetSize().cy - GetTextSize("", Arial(10)).cy) / 2,
|
|
(.SetEditable ? "" : "R/O ") + (.NotNull ? "!" : "") + "01/05/2007 10:34:58", Arial(10), :SMagenta);
|
|
}
|
|
}
|
|
|
|
fn PaintButton(w, r, img)
|
|
{
|
|
col = Color(153, 204, 255);
|
|
w.DrawRect(r, :SWhite);
|
|
DeflateRect(r);
|
|
w.DrawRect(r, col);
|
|
PaintRcCenterImage(w, r, img);
|
|
}
|
|
|
|
ctrl Clock {
|
|
group "Input fields";
|
|
GetMinSize() { return Size(150, 156); }
|
|
GetStdSize() { return Size(150, 156); }
|
|
Frame SetFrame = BlackFrame();
|
|
bool SetEditable = true @2 ? "Editable";
|
|
bool WantFocus = true;
|
|
bool Seconds = true;
|
|
Text Tip;
|
|
|
|
PaintPtr(w, cmx, cmy, pos, m, d, color, cf) {
|
|
dx = m * sin(pos * 2 * 3.1415);
|
|
dy = m * cos(pos * 2 * 3.1415);
|
|
|
|
sx = cmx - dx * 35 / 2.0;
|
|
sy = cmy + dy * 35 / 2.0;
|
|
ex = cmx + dx * cf;
|
|
ey = cmy - dy * cf;
|
|
|
|
w.DrawLine(sx, sy, ex, ey, d, color);
|
|
}
|
|
|
|
Paint(w) {
|
|
ts = GetTextSize("X");
|
|
r = GetRect();
|
|
ro = GetRect();
|
|
b = r.bottom;
|
|
hs = 20;
|
|
r.bottom = hs;
|
|
w.DrawImageColor(r, "CtrlImg:Bg", :SColorHighlight, 120);
|
|
r.top = r.bottom;
|
|
r.bottom = b;
|
|
w.DrawRect(r, :SWhite);
|
|
width = r.right - r.left;
|
|
height = r.bottom - r.top;
|
|
|
|
w.DrawRect(0, hs, 5, ro.bottom - hs, Color(200, 200, 200));
|
|
w.DrawRect(ro.right - 5, hs, 5, ro.bottom - hs, Color(200, 200, 200));
|
|
|
|
cmx = width / 2;
|
|
cmy = height / 2 + hs;
|
|
|
|
cf = min(cmy - 15, cmx) - 5;
|
|
for(i = 1; i <= 60; i++)
|
|
{
|
|
x = cmx + (0.95 * sin(i * 3.1415 / 30.0) * cf);
|
|
y = cmy - (0.95 * cos(i * 3.1415 / 30.0) * cf);
|
|
if(i % 5 == 0)
|
|
w.DrawRect(x, y, 2, 2, :SBlack);
|
|
else
|
|
w.DrawRect(x, y, 1, 1, :SBlack);
|
|
}
|
|
|
|
fnt = Arial(10);
|
|
|
|
for(i = 1; i <= 12; i++)
|
|
{
|
|
x = cmx + (0.8 * sin(i * 3.1415 / 6.0) * cf);
|
|
y = cmy - (0.8 * cos(i * 3.1415 / 6.0) * cf);
|
|
PaintCenterText(w, x, y, to_string(i), .fnt, :Black);
|
|
}
|
|
|
|
hour = 10;
|
|
minute = 34;
|
|
second = 15;
|
|
|
|
tm = hour * 3600 + minute * 60 + second;
|
|
PaintPtr(w, cmx, cmy, tm / 3600 / 12, 0.5, 5, :SRed, cf);
|
|
PaintPtr(w, cmx, cmy, tm / 3600, 0.6, 3, :SBlue, cf);
|
|
PaintPtr(w, cmx, cmy, tm / 60, 0.75, 2, :SBlack, cf);
|
|
|
|
r = Rect(ro.left + 3, ro.top + 2, ro.left + 3 + 16, ro.top + 18);
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::LA");
|
|
left = r.left;
|
|
r.left += 15 + 25;
|
|
r.right += 15 + 25;
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::RA");
|
|
PaintCenterText(w, (r.right + left) / 2, (r.top + r.bottom) / 2, to_string(hour), .fnt, :White);
|
|
|
|
r = Rect(ro.right - 3 - 16, ro.top + 2, ro.right - 3, ro.top + 18);
|
|
//PaintButton(w, r, "ClassicCtrlsImg::RA");
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::RA");
|
|
right = r.right;
|
|
r.left -= 15 + 25;
|
|
r.right -= 15 + 25;
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::LA");
|
|
PaintCenterText(w, (right + r.left) / 2, (r.top + r.bottom) / 2, to_string(minute), .fnt, :White);
|
|
|
|
DrawCtrlFrame(w, ro, .SetFrame);
|
|
}
|
|
}
|
|
|
|
ctrl Calendar {
|
|
group "Input fields";
|
|
|
|
GetMinSize() { return Size(180, 120); }
|
|
GetStdSize() { return Size(236, 156); }
|
|
|
|
Frame SetFrame = BlackFrame();
|
|
bool SetEditable = true @2 ? "Editable";
|
|
bool WantFocus = true;
|
|
bool SelectAll = true;
|
|
bool SwapMonthYear = false;
|
|
bool OneButton = false;
|
|
Text Tip;
|
|
|
|
Paint(w) {
|
|
ts = GetTextSize("X");
|
|
r = GetRect();
|
|
ro = GetRect();
|
|
f = StdFont();
|
|
b = r.bottom;
|
|
hs = 20;
|
|
r.bottom = hs;
|
|
w.DrawImageColor(r, "CtrlImg:Bg", :SColorHighlight, 120);
|
|
r.top = r.bottom;
|
|
r.bottom = b;
|
|
w.DrawRect(r, :SWhite);
|
|
width = r.right - r.left;
|
|
height = r.bottom - r.top - 15;
|
|
sw = width / 8;
|
|
sh = height / 7;
|
|
w.DrawRect(r.left + 4, r.top + sh, width - 8, 1, :SBlack);
|
|
w.DrawRect(r.left + sw, r.top + 4, 1, height - 8, :SBlack);
|
|
ts = GetTextSize("Wk");
|
|
ty = r.top + (sh - ts.cy) / 2;
|
|
w.DrawText(r.left + (sw - ts.cx) / 2 , ty, "Wk", f, :SBlack);
|
|
|
|
days = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
|
|
for(i = 0; i < 7; i++)
|
|
w.DrawText(r.left + sw + i * sw + (sw - ts.cx) / 2, ty, days[i], f, :SBlack);
|
|
|
|
d = 1;
|
|
tn = GetTextSize("0");
|
|
gray = 0;
|
|
fnt = f;
|
|
for(j = 0; j < 6; j++)
|
|
{
|
|
ty = r.top + sh + j * sh + (sh - ts.cy) / 2;
|
|
w.DrawText(r.left + (sw - tn.cx) / 2, ty, to_string(j + 1), f, :SBlack);
|
|
|
|
for(i = 0; i < 7; i++)
|
|
{
|
|
if(d == 19)
|
|
{
|
|
w.DrawRect(r.left + sw + i * sw + 0, r.top + sh + j * sh + 0, sw, sh, :SBlack);
|
|
w.DrawRect(r.left + sw + i * sw + 1, r.top + sh + j * sh + 1, sw - 2, sh - 2, Color(255, 254, 220));
|
|
fnt = f.Bold(1);
|
|
}
|
|
day = to_string(d);
|
|
ts = GetTextSize(day, fnt);
|
|
|
|
w.DrawText(r.left + sw + i * sw + (sw - ts.cx) / 2, ty, day, fnt, gray ? :SGray : (i == 6 ? :SRed : :SBlack));
|
|
fnt = f.Bold(false);
|
|
if(++d > 31)
|
|
{
|
|
d = 1;
|
|
gray = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
today = "Today: 01/19/2007";
|
|
ts = GetTextSize(today, StdFont().Bold());
|
|
w.DrawText((r.right - ts.cx) / 2, r.bottom - 3 - ts.cy, today, f.Bold(), :SBlue);
|
|
|
|
r = Rect(ro.left + 3, ro.top + 2, ro.left + 3 + 16, ro.top + 18);
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::LA");
|
|
left = r.left;
|
|
r.left += 15 + 65;
|
|
r.right += 15 + 65;
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::RA");
|
|
PaintCenterText(w, (left + r.right) / 2, (r.top + r.bottom) / 2, "January", f.Bold(), :SWhite);
|
|
|
|
r = Rect(ro.right - 3 - 16, ro.top + 2, ro.right - 3, ro.top + 18);
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::RA");
|
|
right = r.right;
|
|
r.left -= 15 + 40;
|
|
r.right -= 15 + 40;
|
|
PaintRcCenterImage(w, r, "ClassicCtrlsImg::LA");
|
|
PaintCenterText(w, (r.left + right) / 2, (r.top + r.bottom) / 2, "2007", f.Bold(), :SWhite);
|
|
|
|
DrawCtrlFrame(w, ro, .SetFrame);
|
|
}
|
|
}
|
|
|
|
ctrl SliderCtrl {
|
|
group "Progress";
|
|
|
|
GetMinSize() { return Size(0, 0); }
|
|
GetStdSize() { return Size(64, 24); }
|
|
|
|
Frame SetFrame @1;
|
|
bool Jump = false;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
|
|
sz = Size(r.right - r.left, r.bottom - r.top);
|
|
|
|
halfX = int(r.left + r.right) >> 1;
|
|
halfY = int(r.top + r.bottom) >> 1;
|
|
|
|
if (sz.cx < sz.cy) {
|
|
DrawInsetFrame(w, Rect(halfX - 2, r.top + 2, halfX + 2, r.bottom - 2));
|
|
imgSz = GetImageSize("CtrlImg::vthumb");
|
|
w.DrawImage(halfX - (imgSz.cx >> 1), halfY - (imgSz.cy >> 1), "CtrlImg::vthumb");
|
|
} else {
|
|
DrawInsetFrame(w, Rect(r.left + 2, halfY - 2, r.right - 2, halfY + 2));
|
|
imgSz = GetImageSize("CtrlImg::hthumb");
|
|
w.DrawImage(halfX - (imgSz.cx >> 1), halfY - (imgSz.cy >> 1), "CtrlImg::hthumb");
|
|
}
|
|
}
|
|
}
|
|
|
|
ctrl ProgressIndicator {
|
|
group "Progress";
|
|
|
|
GetMinSize() { return Size(0, 0); }
|
|
GetStdSize() { return Size(64, 24); }
|
|
|
|
Frame SetFrame @1;
|
|
|
|
Paint(w) {
|
|
r = GetRect();
|
|
|
|
DrawCtrlFrame(w, r, .SetFrame);
|
|
DrawInsetFrame(w, r);
|
|
|
|
sz = Size(r.right - r.left, r.bottom - r.top);
|
|
|
|
w.DrawRect(r.left, r.top, sz.cx, sz.cy, :SBlack);
|
|
DeflateRect(r);
|
|
sz = Size(r.right - r.left, r.bottom - r.top);
|
|
w.DrawRect(r.left, r.top, sz.cx, sz.cy, :SWhite);
|
|
|
|
if(sz.cx > sz.cy) {
|
|
w.DrawRect(r.left, r.top, sz.cx >> 2, sz.cy, :SLtGreen);
|
|
}
|
|
else {
|
|
w.DrawRect(r.left, r.bottom - (sz.cy >> 2), sz.cx, sz.cy >> 2, :SLtGreen);
|
|
}
|
|
}
|
|
}
|