ide: Debugger NLS support for debugee commandline

This commit is contained in:
Mirek Fidler 2022-02-11 13:44:38 +01:00
parent 161878682f
commit 05fdb8a04a
13 changed files with 62 additions and 35 deletions

View file

@ -67,21 +67,9 @@ static void sNoBlock(int fd)
#ifdef PLATFORM_WIN32
bool Win32CreateProcess(const char *command, const char *envptr, STARTUPINFOW& si, PROCESS_INFORMATION& pi, const char *cd)
{ // provides conversion of charset for cmdline and envptr
{ // provides conversion of charset for cmdline
Vector<WCHAR> cmd = ToSystemCharsetW(command);
cmd.Add(0);
#if 0 // unicode environment not necessary for now
wchar wenvptr = NULL;
Buffer<WCHAR> env(n);
if(envptr) {
int len = 0;
while(envptr[len] || envptr[len + 1])
len++;
WString wenv(envptr, len + 1);
env.Alloc(len + 2);
memcpy(env, wenv, (len + 2) * sizeof(wchar));
}
#endif
return CreateProcessW(NULL, cmd, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, (void *)envptr,
cd ? ToSystemCharsetW(cd).begin() : NULL, &si, &pi);
}

View file

@ -69,7 +69,8 @@ public:
String ReadOneString(int delim, bool chkend = true);
String ReadString(int delim, bool chkend = true);
void SkipTerm();
void Skip();
void SkipTerm() { Skip(); }
struct Pos {
const char *ptr;

View file

@ -524,9 +524,9 @@ char CParser::GetChar()
return c;
}
void CParser::SkipTerm()
void CParser::Skip()
{
LTIMING("SkipTerm");
LTIMING("Skip");
if(IsId())
while(iscid(*term))
term++;

View file

@ -348,12 +348,16 @@ permissive as it allows unterminated string literals `- string
is then also delimited by end of line or text.&]
[s3; &]
[s4; &]
[s5;:CParser`:`:SkipTerm`(`): [@(0.0.255) void]_[* SkipTerm]()&]
[s5;:Upp`:`:CParser`:`:Skip`(`): [@(0.0.255) void]_[* Skip]()&]
[s2;%% Skips a single symbol. Decimal numbers, identifiers and string
literals are skipped as whole symbols, otherwise input position
is advanced by 1 character.&]
[s3; &]
[s4; &]
[s5;:CParser`:`:SkipTerm`(`): [@(0.0.255) void]_[* SkipTerm]()&]
[s2;%% Same as Skip, legacy name.&]
[s3; &]
[s4; &]
[s5;:CParser`:`:GetPtr`(`)const: [@(0.0.255) const]_[@(0.0.255) char]_`*[* GetPtr]()_[@(0.0.255) c
onst]&]
[s2;%% Returns a pointer to the current position.&]

View file

@ -747,6 +747,7 @@ Ctrl *ArrayCtrl::SyncLineCtrls(int i, Ctrl *p)
if(!hasctrls)
return NULL;
Size sz = GetSize();
bool visible = IsLineVisible(i);
for(int j = 0; j < column.GetCount(); j++) {
bool ct = IsCtrl(i, j);
if(!ct && column[j].factory) {
@ -781,7 +782,7 @@ Ctrl *ArrayCtrl::SyncLineCtrls(int i, Ctrl *p)
}
p = &c;
Rect r;
if(i < min_visible_line || i > max_visible_line)
if(i < min_visible_line || i > max_visible_line || !visible)
r.bottom = r.top = -1;
else
r = GetCellRectM(i, j);

View file

@ -3,7 +3,7 @@
namespace Upp {
DropChoice::DropChoice() {
always_drop = false;
always_drop = hide_drop = false;
AddButton().Main() <<= THISBACK(Drop);
NoDisplay();
list.Normal();
@ -28,6 +28,8 @@ void DropChoice::AddTo(Ctrl& _owner)
void DropChoice::EnableDrop(bool b)
{
MainButton().Enable(b);
if(hide_drop)
MainButton().Show(b);
}
void DropChoice::PseudoPush()

View file

@ -162,11 +162,12 @@ public:
protected:
PopUpTable list;
Ctrl *owner;
bool appending;
bool dropfocus;
bool always_drop;
bool updownkeys;
bool rodrop;
bool appending : 1;
bool dropfocus : 1;
bool always_drop : 1;
bool hide_drop : 1;
bool updownkeys : 1;
bool rodrop : 1;
void Select();
void Drop();
@ -211,6 +212,7 @@ public:
DropChoice& SetDropLines(int n) { list.SetDropLines(n); return *this; }
DropChoice& Appending() { appending = true; return *this; }
DropChoice& AlwaysDrop(bool e = true);
DropChoice& HideDrop(bool e = true) { hide_drop = e; AlwaysDrop(always_drop); return *this; }
DropChoice& RdOnlyDrop(bool e = true) { rodrop = e; return *this; }
DropChoice& NoDropFocus() { dropfocus = false; return *this; }
@ -279,6 +281,7 @@ public:
WithDropChoice& SetDisplay(const Display& d, int lcy) { select.SetDisplay(d, lcy); return *this; }
WithDropChoice& SetConvert(const Convert& d) { select.SetConvert(d); return *this; }
WithDropChoice& AlwaysDrop(bool b = true) { select.AlwaysDrop(b); return *this; }
WithDropChoice& HideDrop(bool b = true) { select.HideDrop(b); return *this; }
WithDropChoice& RdOnlyDrop(bool b = true) { select.RdOnlyDrop(b); return *this; }
WithDropChoice& WithWheel(bool b = true) { withwheel = b; return *this; }
WithDropChoice& NoWithWheel() { return WithWheel(false); }

View file

@ -149,6 +149,12 @@ hoice][@(0.0.255) `&]_[* SetDisplay]([@(0.0.255) const]_[_^Display^ Display][@(0
(client code can fill it using WhenDrop callback).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:WithDropChoice`:`:HideDrop`(bool`): [_^Upp`:`:WithDropChoice^ WithDropChoic
e][@(0.0.255) `&]_[* HideDrop]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2;%% Instead of disabling the drop arrow when the list is empty
and AlwaysDrop is false, the drop arrow is hidden.&]
[s3;%% &]
[s4; &]
[s5;:WithDropChoice`:`:RdOnlyDrop`(bool`): [_^WithDropChoice^ WithDropChoice][@(0.0.255) `&
]_[* RdOnlyDrop]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2;%% If active, allows changing value even by drop even if ReadOnly.&]

View file

@ -0,0 +1,16 @@
TITLE("WithDropChoice")
COMPRESSED
120,156,189,89,9,115,226,184,18,254,43,170,157,221,41,178,97,131,111,155,228,237,171,33,16,142,0,33,4,8,57,138,4,99,203,88,193,7,177,205,97,182,118,127,251,107,217,230,202,49,19,134,236,155,154,10,96,169,187,245,125,234,75,242,61,17,4,229,68,229,196,147,81,181,145,61,225,208,175,191,178,105,230,11,47,179,188,34,242,172,192,73,240,135,229,89,78,228,120,129,85,184,172,160,240,188,194,28,107,150,234,251,189,123,139,83,148,72,136,3,33,78,22,57,86,22,20,65,97,121,89,225,64,150,99,24,142,145,57,145,21,120,133,19,143,117,236,107,189,123,6,166,243,48,61,43,241,89,134,101,24,153,101,25,158,147,25,94,20,88,150,231,64,5,39,115,44,35,30,99,71,239,221,151,165,19,42,32,128,0,35,74,12,195,72,160,77,16,24,208,78,197,4,158,229,25,142,23,217,172,40,29,15,240,144,56,189,251,215,144,196,31,66,146,153,99,18,96,59,65,164,10,39,191,127,19,79,88,16,149,210,210,23,25,204,10,34,24,203,82,68,60,136,113,156,36,
102,89,81,128,37,9,12,119,236,225,231,9,241,176,141,157,32,209,64,88,150,99,79,6,172,124,2,75,248,231,159,127,142,88,129,137,153,146,97,45,44,3,235,230,88,120,6,56,100,86,204,50,89,81,97,21,134,151,5,78,148,1,250,88,245,84,59,65,50,16,184,147,4,135,146,86,190,72,172,4,140,50,10,172,95,204,130,2,6,64,192,39,16,41,194,127,94,57,14,18,97,42,71,133,178,233,236,23,32,137,23,25,57,203,200,130,44,10,128,132,99,37,22,136,100,40,126,216,134,99,199,245,108,213,234,221,83,1,134,114,253,131,127,199,5,108,168,19,11,224,254,245,248,55,186,71,127,253,197,210,199,223,120,116,239,51,39,232,254,247,111,41,142,203,30,8,168,75,2,179,224,185,227,188,233,18,13,247,122,127,255,253,181,119,239,243,39,136,126,176,39,212,48,54,142,209,253,183,20,115,196,28,1,166,3,30,193,70,140,45,53,192,189,123,30,61,254,167,183,53,150,56,30,12,244,192,8,127,194,163,246,246,132,255,246,18,205,219,150,251,199,253,216,105,183,108,
37,234,30,239,127,127,185,208,199,227,199,205,121,227,201,192,34,26,157,248,141,90,164,38,152,147,223,126,139,80,112,244,203,183,111,196,86,135,248,152,5,158,191,242,60,155,202,101,135,185,139,102,46,151,171,79,51,57,250,175,76,52,249,46,156,183,131,32,87,170,20,22,173,167,121,153,151,206,46,153,106,209,171,42,183,37,147,72,195,186,221,113,239,58,197,124,237,156,113,67,119,88,109,118,42,65,101,84,169,92,95,119,198,133,167,51,214,60,35,150,57,80,159,14,153,122,135,149,25,249,156,51,202,186,47,187,135,153,230,69,224,149,218,149,50,175,137,173,188,109,100,236,241,147,64,42,77,241,240,208,168,4,183,190,127,219,104,10,185,150,219,169,187,195,225,161,225,205,167,211,133,29,118,234,76,93,50,75,213,230,172,46,203,6,183,254,61,153,134,30,191,24,168,58,59,28,212,159,111,166,121,245,185,204,94,220,4,153,65,237,202,247,47,4,99,106,219,234,101,214,205,228,204,78,225,217,241,228,203,90,119,62,156,233,226,208,215,47,237,194,164,33,207,238,14,27,
79,115,159,51,7,151,139,115,211,84,198,163,178,158,189,62,159,150,70,106,155,31,43,83,210,46,153,74,147,63,51,158,37,107,161,145,243,154,54,171,151,38,134,221,106,101,5,67,202,186,228,236,169,168,221,213,24,75,186,200,87,253,114,177,122,83,204,204,180,82,165,235,12,114,153,186,95,148,184,90,104,40,70,56,92,20,92,71,186,173,146,203,209,165,215,110,182,186,130,156,57,45,223,157,183,141,122,253,60,115,19,62,7,51,169,117,211,120,114,23,141,231,25,211,9,140,113,112,56,17,58,183,237,170,210,113,186,161,178,168,213,79,159,199,210,225,84,212,153,238,121,167,160,8,2,86,46,175,36,197,183,42,220,200,188,29,88,13,210,25,205,213,177,41,95,228,92,131,57,60,21,188,39,207,47,7,102,101,206,230,53,125,206,74,229,17,199,144,179,206,169,120,200,15,91,207,45,54,95,36,33,118,129,186,211,234,60,251,100,46,206,235,221,91,219,105,85,6,222,144,203,73,215,89,241,162,109,40,101,161,82,235,104,133,108,189,219,170,149,110,91,79,227,179,162,216,
30,77,207,47,178,211,108,189,145,169,94,96,173,180,48,220,246,121,187,58,15,234,194,216,172,182,186,226,52,224,45,193,47,223,72,162,218,24,169,23,150,105,20,180,234,66,38,53,181,90,31,5,242,64,85,75,210,164,37,140,117,143,227,13,119,32,10,245,166,116,73,10,119,85,205,245,107,122,199,186,186,26,117,239,220,66,163,110,102,74,5,189,242,116,103,53,218,182,200,221,221,88,99,93,229,230,126,120,209,174,79,5,182,213,17,27,238,212,241,178,98,166,235,57,198,173,219,184,83,212,160,35,132,55,149,252,221,152,107,21,137,171,87,204,137,125,218,50,15,71,153,102,83,109,150,219,238,89,81,58,45,104,185,51,233,244,20,15,155,124,254,212,191,226,187,147,243,186,78,92,99,126,86,12,115,5,159,78,57,213,134,57,249,244,244,154,56,195,156,63,43,187,149,26,147,47,9,205,98,181,156,203,119,159,116,233,201,117,240,98,42,183,7,55,215,230,164,150,207,220,136,147,235,145,88,94,20,249,172,17,180,139,151,108,227,48,115,58,124,150,109,177,246,140,131,90,
62,123,30,84,136,248,156,61,156,142,231,79,194,213,226,188,19,14,157,150,106,7,114,147,185,107,204,47,22,215,50,155,237,202,185,155,178,66,186,227,235,220,93,189,209,228,230,249,198,101,102,113,120,54,213,186,134,221,24,254,249,231,193,86,60,103,233,151,182,73,252,85,34,138,211,4,82,117,29,254,32,139,248,1,114,13,164,69,153,194,79,163,25,164,14,164,67,238,64,186,59,115,208,96,18,4,174,131,64,82,195,58,82,3,228,145,161,25,32,159,232,152,138,5,38,70,6,100,104,156,70,129,139,84,39,4,121,125,136,131,88,13,216,113,53,2,54,117,52,85,173,9,70,170,6,54,124,50,176,48,154,18,21,181,112,80,80,3,53,83,138,63,17,113,2,236,25,96,233,40,206,171,9,6,38,74,176,203,180,92,76,177,156,114,80,138,254,126,99,81,130,21,146,222,101,148,214,80,29,219,3,236,161,26,0,123,145,161,197,183,242,104,215,196,14,125,2,169,244,241,33,175,90,214,64,213,70,15,104,249,45,78,167,201,156,222,42,67,70,140,106,201,28,4,223,137,
51,117,71,128,115,6,83,35,86,34,10,19,246,96,124,60,241,77,24,78,13,176,1,69,98,131,224,104,3,212,241,24,171,158,127,112,132,242,22,129,194,139,52,23,248,213,84,7,77,124,140,72,64,201,213,60,76,119,207,245,144,106,1,77,145,17,42,188,205,149,240,3,168,45,108,97,45,248,17,216,120,214,119,224,210,239,212,31,12,186,18,88,163,135,252,72,132,62,3,188,224,107,224,22,174,29,225,236,255,177,1,212,209,97,225,160,32,246,135,153,234,83,39,33,67,7,4,1,35,197,52,80,1,114,236,69,31,135,150,183,128,63,186,229,253,84,255,96,187,42,78,93,162,71,192,86,115,122,169,131,21,178,232,161,191,218,177,141,181,126,220,120,78,215,99,211,154,235,0,198,107,10,173,255,245,221,117,36,211,123,169,173,218,77,69,97,248,241,33,18,127,136,181,108,118,3,168,255,53,41,217,58,196,74,111,13,33,71,35,249,254,183,63,86,67,75,38,63,8,168,51,30,71,222,241,10,87,145,56,250,11,108,201,220,31,65,220,144,124,15,230,166,166,127,3,109,
26,13,66,228,58,86,136,136,65,35,8,124,206,113,193,1,45,8,35,61,164,18,30,254,41,70,222,163,34,122,186,205,7,228,179,21,29,159,196,195,227,107,45,43,106,168,153,216,149,225,11,158,211,252,108,16,15,150,26,133,30,164,21,47,68,208,220,171,22,165,108,147,194,157,121,128,196,221,79,1,186,126,122,39,183,0,177,109,26,18,130,96,29,164,151,70,159,235,40,96,204,79,64,39,88,73,15,12,190,74,73,47,184,64,59,147,113,133,109,119,138,99,62,222,67,30,207,121,31,252,122,217,241,204,143,172,252,227,9,170,133,61,162,90,100,129,227,80,110,5,16,3,246,119,247,105,99,62,44,250,241,33,22,121,64,241,231,219,252,251,91,228,39,26,222,76,173,116,119,3,0,184,83,138,45,131,160,235,133,223,231,121,61,239,61,174,109,117,222,123,236,255,9,113,196,35,150,219,88,114,84,227,108,28,152,174,14,213,58,136,23,30,151,169,101,101,162,71,114,26,85,47,55,2,85,140,100,38,168,88,102,24,226,172,74,116,58,73,64,94,180,183,122,18,149,169,
72,196,223,156,136,84,232,13,38,14,121,158,224,131,72,107,148,166,168,168,77,187,134,192,132,226,154,184,4,197,17,21,90,127,219,82,164,134,182,123,30,177,109,172,31,109,225,162,141,138,142,33,1,68,109,74,232,78,160,2,59,81,8,140,48,30,71,90,204,152,62,10,115,236,225,41,113,39,73,177,246,63,190,91,244,215,24,186,226,126,106,224,186,86,180,89,143,15,219,211,30,94,158,81,95,187,20,90,170,217,222,74,170,50,217,203,65,178,147,235,193,192,131,236,176,222,211,138,19,119,27,54,180,83,233,151,45,217,148,68,157,40,244,92,192,234,0,211,54,38,110,66,160,81,118,61,213,35,80,59,226,29,123,219,135,213,177,58,32,22,9,194,35,148,92,32,80,173,174,243,113,158,46,220,53,83,63,205,210,90,201,102,95,3,199,6,104,183,253,21,135,41,67,181,124,112,170,29,215,86,116,181,137,191,247,226,34,45,155,171,3,207,222,24,137,162,70,11,200,20,246,200,88,62,160,197,58,142,22,216,146,141,158,48,118,221,55,187,235,173,125,0,169,213,214,69,
74,119,72,54,208,141,59,122,180,43,113,121,131,172,71,127,125,237,167,251,191,252,52,21,43,173,239,117,2,177,149,135,196,218,123,57,150,122,124,255,151,52,234,255,146,208,137,146,129,29,170,65,64,31,212,136,131,253,117,54,253,25,72,155,154,222,203,183,206,203,146,76,55,4,146,23,177,39,54,50,113,116,154,124,157,82,163,211,164,166,185,54,68,46,61,245,36,73,207,233,193,40,24,67,41,95,243,92,122,28,241,150,103,39,218,230,189,145,45,225,79,176,131,215,83,68,196,135,211,110,184,213,223,44,159,125,221,139,170,88,201,238,29,80,34,248,176,92,198,59,237,207,91,68,39,18,81,12,37,25,110,117,192,223,164,59,58,177,173,154,141,159,227,235,223,166,234,255,73,72,26,170,176,133,125,63,34,166,255,135,63,198,26,49,136,182,18,39,235,115,235,78,100,209,80,201,135,123,71,93,172,230,61,79,178,180,240,45,232,52,114,222,142,56,61,70,245,57,219,158,222,55,163,124,206,222,167,223,58,137,189,38,39,41,147,107,187,41,253,224,104,197,112,10,102,239,
150,61,242,174,51,197,222,234,188,188,252,185,87,52,36,74,222,99,36,25,126,88,26,219,33,26,18,137,127,45,61,228,172,153,26,250,244,217,158,173,224,90,209,30,205,160,177,234,50,222,238,4,17,158,66,107,17,215,145,85,31,13,205,96,16,162,148,246,226,94,206,32,150,69,187,250,137,15,181,122,117,65,184,186,35,91,58,205,71,207,144,101,104,203,95,209,244,230,236,143,176,181,212,182,79,227,236,7,112,138,137,242,4,241,213,129,69,81,174,174,53,85,207,115,103,235,171,206,109,170,232,21,223,122,187,232,243,168,245,76,191,20,135,1,147,232,58,222,161,95,190,210,27,142,21,126,130,59,173,21,125,138,59,193,166,187,51,31,105,208,112,12,41,81,241,89,48,242,166,65,24,99,94,186,214,21,176,74,109,239,112,107,11,79,192,191,176,181,39,230,149,158,159,135,220,141,59,112,56,223,106,65,210,97,67,206,152,81,165,201,57,115,213,201,71,192,227,110,124,151,51,199,6,216,61,206,28,27,80,95,167,250,213,224,246,145,232,67,135,90,32,32,48,247,171,222,
43,53,239,85,239,217,118,162,142,194,102,70,5,150,239,91,94,188,59,88,223,95,205,118,200,204,171,101,220,125,18,156,187,79,196,163,38,17,228,14,2,149,208,87,3,224,76,11,215,181,105,108,173,176,210,107,15,122,68,240,116,213,209,112,92,183,12,23,114,180,15,73,24,102,126,156,139,206,184,0,214,171,56,244,247,12,177,181,162,79,73,43,157,113,148,76,169,78,52,2,165,72,11,53,139,158,107,60,119,50,52,55,111,107,182,78,190,177,248,209,46,97,183,201,192,30,113,183,137,255,117,224,173,71,119,190,140,40,209,38,104,226,68,111,119,190,115,207,190,156,6,214,191,119,79,126,133,131,137,231,196,29,144,51,137,222,22,186,198,246,93,218,182,79,238,180,208,36,158,150,203,124,241,66,39,89,230,119,110,130,63,186,242,168,39,139,188,126,125,227,191,108,209,80,47,122,251,182,15,146,86,16,90,56,241,170,215,47,213,214,221,103,29,198,201,105,212,74,173,196,30,208,214,211,248,225,155,205,237,134,145,77,151,217,196,153,84,17,228,211,185,175,115,70,244,246,
153,190,205,94,191,65,220,122,121,248,145,166,61,90,198,178,101,127,11,208,126,253,123,12,255,157,238,125,31,254,94,93,186,39,109,125,204,73,76,88,92,30,118,177,179,244,34,191,247,234,53,124,175,247,63,9,239,143,94,

View file

@ -14,3 +14,7 @@ TOPIC("Upp_en-us")
#include "Upp_en-us.tppi"
END_TOPIC
TOPIC("WithDropChoice_en-us")
#include "WithDropChoice_en-us.tppi"
END_TOPIC

View file

@ -347,7 +347,7 @@ void Ide::BuildAndDebug(bool runto)
else
#endif
debugger = GdbCreate(host, target, runarg, console);
if(!debugger) {
IdeEndDebug();
SetBar();

View file

@ -156,8 +156,8 @@ bool Pdb::Create(Host& local, const String& exefile, const String& cmdline, bool
else
cl << exefile;
if(!IsNull(cmdline))
cl << ' ' << cmdline;
cl << ' ' << ToSystemCharset(cmdline);
clang = clang_;
Buffer<char> cmd(cl.GetLength() + 1);
@ -169,6 +169,7 @@ bool Pdb::Create(Host& local, const String& exefile, const String& cmdline, bool
bool h = CreateProcess(exefile, cmd, NULL, NULL, TRUE,
/*NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE|*/DEBUG_ONLY_THIS_PROCESS/*|DEBUG_PROCESS*/,
~env, NULL, &si, &pi);
if(!h) {
Exclamation("Error creating process&[* " + DeQtf(exefile) + "]&" +
"Windows error: " + DeQtf(GetLastErrorMessage()));
@ -204,6 +205,7 @@ bool Pdb::Create(Host& local, const String& exefile, const String& cmdline, bool
if(!SymInitialize(hProcess, 0, FALSE)) {
Error();
Exclamation("Failed to load symbols");
return false;
}
SymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_UNDNAME|SYMOPT_NO_UNQUALIFIED_LOADS);
@ -218,7 +220,7 @@ bool Pdb::Create(Host& local, const String& exefile, const String& cmdline, bool
break_running = false;
RunToException();
return !terminated;
}

View file

@ -1,10 +1,10 @@
LAYOUT(EditPDBExpressionLayout, 604, 484)
ITEM(Label, lbl, SetLabel(t_("Expression")).LeftPosZ(4, 64).TopPosZ(8, 19))
ITEM(EditString, text, HSizePosZ(72, 8).TopPosZ(8, 19))
ITEM(Label, value_lbl, SetLabel(t_(" current value")).LeftPosZ(4, 80).TopPosZ(32, 19))
ITEM(DataPusher, value, SetEditable(false).HSizePosZ(88, 8).TopPosZ(32, 19))
ITEM(Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 190).BottomPosZ(6, 22))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(6, 22))
ITEM(RichTextCtrl, help, LeftPosZ(4, 592).TopPosZ(52, 396))
ITEM(Upp::Label, lbl, SetLabel(t_("Expression")).LeftPosZ(4, 64).TopPosZ(8, 19))
ITEM(Upp::EditString, text, HSizePosZ(72, 8).TopPosZ(8, 19))
ITEM(Upp::Label, value_lbl, SetLabel(t_(" current value")).LeftPosZ(4, 80).TopPosZ(32, 19))
ITEM(Upp::DataPusher, value, SetEditable(false).HSizePosZ(88, 8).TopPosZ(32, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 190).BottomPosZ(6, 22))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(6, 22))
ITEM(Upp::RichTextCtrl, help, LeftPosZ(4, 592).TopPosZ(52, 396))
END_LAYOUT