📄 propertydlg.cpp
字号:
}
parent->SetColor(COL_BAR_LINE, newLine.color);
parent->SetSize(SIZE_BAR_LINE, newLine.width);
parent->SetSize(SIZE_YBASE, n_bl.fy);
parent->SetSize(SIZE_XBASE, n_bl.fx);
parent->Command(CMD_MRK_DIRTY, 0L, 0L);
parent->Command(CMD_BAR_TYPE, (void *)(& tmpType), 0L);
parent->Command(CMD_BAR_FILL, (void *)&newFill, 0L);
bRet = true;
break;
}
CloseDlgWnd(hDlg);
delete Dlg;
return bRet;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Data line properties dialog
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool
DataLine::PropertyDlg()
{
TabSHEET tab1 = {0, 40, 10, "Line"};
TabSHEET tab2 = {40, 80, 10, "Style"};
TabSHEET tab3 = {80, 120, 10, "Edit"};
DlgInfo LineDlg[] = {
{1, 2, 0, DEFAULT, PUSHBUTTON, (void*)"OK", 150, 10, 45, 12},
{2, 3, 0, 0x0L, PUSHBUTTON, (void*)"Cancel", 150, 25, 45, 12},
{3, 0, 4, ISPARENT | CHECKED, GROUP, NULL, 138, 40, 55, 12},
{4, 5, 100, ISPARENT | CHECKED, SHEET, &tab1, 5, 10, 139, 120},
{5, 6, 200, ISPARENT, SHEET, &tab2, 5, 10, 139, 120},
{6, 0, 300, ISPARENT | HIDDEN, SHEET, &tab3, 5, 10, 139, 120},
{100, 0, 0, NOSELECT, ODBUTTON, (void*)OD_linedef, 10, 38, 130, 100},
{200, 201, 0, 0x0L, LTEXT, (void*)"select style:", 10, 32, 130, 100},
{201, 202, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 12, 45, 25, 25},
{202, 203, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 37, 45, 25, 25},
{203, 204, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 62, 45, 25, 25},
{204, 205, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 87, 45, 25, 25},
{205, 206, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 112, 45, 25, 25},
{206, 207, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 37, 70, 25, 25},
{207, 208, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 62, 70, 25, 25},
{208, 209, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 87, 70, 25, 25},
{209, 210, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 112, 70, 25, 25},
{210, 211, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 37, 95, 25, 25},
{211, 0, 0, TOUCHEXIT | ISRADIO, ODBUTTON, (void*)(OD_LineStyleTempl), 62, 95, 25, 25},
{300, 301, 0, 0x0L, LTEXT, (void*)"range for x-values", 15, 30, 80, 9},
{301, 302, 0, 0x0L, EDTEXT, (void*)ssXref, 15, 40, 119, 10},
{302, 303, 0, 0x0L, LTEXT, (void*)"range for y-values", 15, 55, 80, 9},
{303, 0, 0, LASTOBJ, EDTEXT, (void*)ssYref, 15, 65, 119, 10}};
DlgRoot *Dlg;
void *hDlg;
int res, tmpType = type;
DWORD undo_flags = 0L;
LineDEF newLine;
bool bRet = false;
anyOutput *cdisp = Undo.cdisp;
if(!parent) return false;
if(parent->Id == GO_FUNCTION) return parent->PropertyDlg();
OD_linedef(OD_SETLINE, 0L, 0L, 0L, (void *)&LineDef, 0);
if(!(Dlg = new DlgRoot(LineDlg)))return false;
Dlg->SetCheck(201 + (type & 0x0f), 0L, true);
if(ssXref && ssYref) Dlg->ShowItem(6, true);
if(parent && parent->name) sprintf(TmpTxt, "Line of %s", parent->name);
else strcpy(TmpTxt, "Line properties");
hDlg = CreateDlgWnd(TmpTxt, 50, 50, 410, 300, Dlg, 0x0L);
do{
LoopDlgWnd();
res = Dlg->GetResult();
switch (res) {
case 201: case 202: case 203: case 204: case 205:
case 206: case 207: case 208: case 209: case 210: case 211:
if((tmpType & 0x0f) == (res-201)) res = 1;
else {
tmpType &= ~0x0f; tmpType |= (res-201);
res = -1;
}
break;
}
}while (res < 0);
if(res == 1){ //OK pressed
Undo.SetDisp(cdisp);
if(ssXref && ssYref) {
if(Dlg->GetText(301, TmpTxt) && strcmp(ssXref, TmpTxt)) {
Undo.String(this, &ssXref, undo_flags); undo_flags |= UNDO_CONTINUE;
if(ssXref = (char*)realloc(ssXref, strlen(TmpTxt)+1))
strcpy(ssXref, TmpTxt);
}
if(Dlg->GetText(303, TmpTxt) && strcmp(ssYref, TmpTxt)) {
Undo.String(this, &ssYref, undo_flags); undo_flags |= UNDO_CONTINUE;
if(ssYref = (char*)realloc(ssYref, strlen(TmpTxt)+1))
strcpy(ssYref, TmpTxt);
}
if(undo_flags & UNDO_CONTINUE) Command(CMD_UPDATE, 0L, cdisp);
parent->Command(CMD_MRK_DIRTY, 0L, cdisp);
}
OD_linedef(OD_GETLINE, 0L, 0L, 0L, (void *)&newLine, 0);
if(cmpLineDEF(&LineDef, &newLine)) {
Undo.Line(parent, &LineDef, undo_flags); undo_flags |= UNDO_CONTINUE;
memcpy(&LineDef, &newLine, sizeof(LineDEF));
}
undo_flags = CheckNewInt(&type, type, tmpType, parent, undo_flags);
if(undo_flags & UNDO_CONTINUE) bRet = true;
}
CloseDlgWnd(hDlg);
delete Dlg;
return bRet;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Data polygon properties dialog
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool
DataPolygon::PropertyDlg()
{
TabSHEET tab1 = {0, 40, 10, "Polygon"};
DlgInfo LineDlg[] = {
{1, 2, 0, DEFAULT, PUSHBUTTON, (void*)"OK", 102, 10, 45, 12},
{2, 3, 0, 0x0L, PUSHBUTTON, (void*)"Cancel", 102, 25, 45, 12},
{3, 0, 100, ISPARENT | CHECKED, SHEET, &tab1, 5, 10, 90, 75},
{100, 0, 0, LASTOBJ | NOSELECT, ODBUTTON, (void*)OD_filldef, 8, 30, 90, 50}};
DlgRoot *Dlg;
void *hDlg;
LineDEF newLine, newFillLine;
FillDEF newFill;
DWORD undo_flags = 0L;
anyOutput *cdisp = Undo.cdisp;
int res;
bool bRet = false;
OD_filldef(OD_SETLINE, 0L, 0L, 0L, (void *)&LineDef, 0);
OD_filldef(OD_SETFILL, 0L, 0L, 0L, (void *)&pgFill, 0);
Dlg = new DlgRoot(LineDlg);
if(parent && parent->name) sprintf(TmpTxt, "Polygon of %s", parent->name);
else strcpy(TmpTxt, "Polygon properties");
hDlg = CreateDlgWnd(TmpTxt, 50, 50, 310, 204, Dlg, 0x0L);
do{
LoopDlgWnd();
res = Dlg->GetResult();
}while (res < 0);
if(res == 1){ //OK pressed
Undo.SetDisp(cdisp);
OD_filldef(OD_GETLINE, 0L, 0L, 0L, (void *)&newLine, 0);
OD_filldef(OD_GETFILL, 0L, 0L, 0L, (void *)&newFill, 0);
memcpy(&newFillLine, &pgFillLine, sizeof(LineDEF));
if(newFill.hatch) memcpy(&newFillLine, newFill.hatch, sizeof(LineDEF));
if(cmpLineDEF(&LineDef, &newLine)) {
Undo.Line(parent, &LineDef, undo_flags); undo_flags |= UNDO_CONTINUE;
memcpy(&LineDef, &newLine, sizeof(LineDEF));
}
if(newFill.type && cmpLineDEF(&pgFillLine, &newFillLine)) {
Undo.Line(parent, &pgFillLine, undo_flags); undo_flags |= UNDO_CONTINUE;
memcpy(&pgFillLine, &newFillLine, sizeof(LineDEF));
}
if(cmpFillDEF(&pgFill, &newFill)) {
Undo.Fill(parent, &pgFill, undo_flags); undo_flags |= UNDO_CONTINUE;
memcpy(&pgFill, &newFill, sizeof(FillDEF));
}
pgFill.hatch = &pgFillLine;
if(undo_flags & UNDO_CONTINUE) bRet = true;
}
CloseDlgWnd(hDlg);
delete Dlg;
return bRet;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Regression line properties dialog
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool
RegLine::PropertyDlg()
{
TabSHEET tab1 = {0, 30, 10, "Line"};
TabSHEET tab2 = {30, 60, 10, "Model"};
TabSHEET tab3 = {60, 95, 10, "Clipping"};
char text1[40], text2[40], text3[40], text4[40], text5[40];
DlgInfo LineDlg[] = {
{1, 2, 0, DEFAULT, PUSHBUTTON, (void*)"OK", 155, 10, 45, 12},
{2, 3, 0, 0x0L, PUSHBUTTON, (void*)"Cancel", 155, 25, 45, 12},
{3, 0, 4, ISPARENT | CHECKED, GROUP, NULL, 138, 40, 55, 12},
{4, 5, 100, ISPARENT | CHECKED, SHEET, &tab1, 5, 10, 144, 130},
{5, 6, 200, ISPARENT, SHEET, &tab2, 5, 10, 144, 130},
{6, 0, 300, ISPARENT, SHEET, &tab3, 5, 10, 144, 130},
{100, 0, 0, NOSELECT, ODBUTTON, (void*)OD_linedef, 12, 38, 130, 100},
{200, 201, 0, TOUCHEXIT, RADIO1, (void*)"y dependent on x", 15, 25, 130, 8},
{201, 202, 0, 0x0L, LTEXT, (void*)text1, 25, 33, 120, 8},
{202, 203, 0, TOUCHEXIT, RADIO1, (void*)"x dependent on y", 15, 45, 130, 8},
{203, 204, 0, 0x0L, LTEXT, (void*)text2, 25, 53, 120, 8},
{204, 205, 0, TOUCHEXIT, RADIO1, (void*)"mixed model", 15, 65, 130, 8},
{205, 206, 0, 0x0L, LTEXT, (void*)text3, 25, 73, 120, 8},
{206, 207, 0, TOUCHEXIT, RADIO1, (void*)"zero crossing (x = 0, y = 0)", 15, 85, 130, 8},
{207, 208, 0, 0x0L, LTEXT, (void*)text4, 25, 93, 120, 8},
{208, 209, 0, TOUCHEXIT, RADIO1, (void*)"set manually", 15, 105, 130, 8},
{209, 210, 0, 0x0L, LTEXT, (void*)text5, 25, 113, 60, 8},
{210, 211, 0, 0x0L, RTEXT, (void*)"a =", 92, 113, 10, 8},
{211, 212, 0, 0x0L, EDVAL1, &l5.fx, 104, 113, 40, 10},
{212, 213, 0, 0x0L, RTEXT, (void*)"b =", 92, 125, 10, 8},
{213, 0, 0, 0x0L, EDVAL1, &l5.fy, 104, 125, 40, 10},
{300, 301, 0, 0x0L, LTEXT, (void*)"Line length is limited by", 15, 30, 100, 8},
{301, 302, 0, TOUCHEXIT, RADIO1, (void*)"data minima and maxima", 15, 45, 100, 8},
{302, 303, 0, TOUCHEXIT, RADIO1, (void*)"frame rectangle", 15, 60, 100, 8},
{303, 304, 0, TOUCHEXIT, RADIO1, (void*)"user defined values", 15, 75, 100, 8},
{304, 305, 0, 0x0L, RTEXT, (void*)"x", 10, 89, 15, 8},
{305, 306, 0, 0x0L, EDVAL1, &uclip.Xmin, 27, 89, 40, 10},
{306, 307, 0, 0x0L, LTEXT, (void*)"-", 70, 89, 5, 8},
{307, 308, 0, 0x0L, EDVAL1, &uclip.Xmax, 76, 89, 40, 10},
{308, 309, 0, 0x0L, LTEXT, (void*)"[data]", 119, 89, 15, 8},
{309, 310, 0, 0x0L, RTEXT, (void*)"y", 10, 101, 15, 8},
{310, 311, 0, 0x0L, EDVAL1, &uclip.Ymin, 27, 101, 40, 10},
{311, 312, 0, 0x0L, LTEXT, (void*)"-", 70, 101, 5, 8},
{312, 313, 0, 0x0L, EDVAL1, &uclip.Ymax, 76, 101, 40, 10},
{313, 0, 0, LASTOBJ, LTEXT, (void*)"[data]", 119, 101, 15, 8}};
DlgRoot *Dlg;
void *hDlg;
int res, tmpType;
bool bRet = false;
LineDEF newLine;
DWORD undo_flags = 0L;
anyOutput *cdisp = Undo.cdisp;
lfPOINT o_l5, n_l5;
fRECT o_clip, n_clip;
char *tx, *ty;
OD_linedef(OD_SETLINE, 0L, 0L, 0L, (void *)&LineDef, 0);
switch(type &0x700) {
case 0x100: tx = "log(x)"; break;
case 0x200: tx = "(1/x)"; break;
case 0x300: tx = "sqrt(x)"; break;
default: tx = "x"; break;
}
switch(type &0x7000) {
case 0x1000: ty = "log(y)"; break;
case 0x2000: ty = "(1/y)"; break;
case 0x3000: ty = "sqrt(y)"; break;
default: ty = "y"; break;
}
sprintf(text1, "%s = %.3lf + %.3lf * %s (n = %ld)", ty, l1.fx, l1.fy, tx, nPoints);
sprintf(text2, "%s = %.3lf + %.3lf * %s", ty, l2.fx, l2.fy, tx);
sprintf(text3, "%s = %.3lf + %.3lf * %s", ty, l3.fx, l3.fy, tx);
sprintf(text4, "%s = %.3lf + %.3lf * %s", ty, l4.fx, l4.fy, tx);
sprintf(text5, "%s = a + b * %s", ty, tx);
if(!(Dlg = new DlgRoot(LineDlg))) return false;
Dlg->Activate(211, false); Dlg->Activate(213, false);
switch(type & 0x07) {
case 1: Dlg->SetCheck(202, 0L, true); break;
case 2: Dlg->SetCheck(204, 0L, true); break;
case 3: Dlg->SetCheck(206, 0L, true); break;
case 4:
Dlg->SetCheck(208, 0L, true);
Dlg->Activate(211, true); Dlg->Activate(213, true);
break;
default: Dlg->SetCheck(200, 0L, true); break;
}
switch(type & 0x70) {
case 0x10: Dlg->SetCheck(302, 0L, true); break;
case 0x20: Dlg->SetCheck(303, 0L, true); break;
default: Dlg->SetCheck(301, 0L, true); break;
}
if(0x20 == (type & 0x70)) {
Dlg->Activate(305, true); Dlg->Activate(307, true);
Dlg->Activate(310, true); Dlg->Activate(312, true);
}
else {
Dlg->Activate(305, false); Dlg->Activate(307, false);
Dlg->Activate(310, false); Dlg->Activate(312, false);
}
if(!Dlg->GetValue(211, &o_l5.fx)) o_l5.fx = l5.fx;
if(!Dlg->GetValue(213, &o_l5.fy)) o_l5.fy = l5.fy;
n_l5.fx = o_l5.fx; n_l5.fy = o_l5.fy;
if(!Dlg->GetValue(305, &o_clip.Xmin)) o_clip.Xmin = uclip.Xmin;
if(!Dlg->GetValue(307, &o_clip.Xmax)) o_clip.Xmax = uclip.Xmax;
if(!Dlg->GetValue(310, &o_clip.Ymin)) o_clip.Ymin = uclip.Ymin;
if(!Dlg->GetValue(312, &o_clip.Ymax)) o_clip.Ymax = uclip.Ymax;
memcpy(&n_clip, &o_clip, sizeof(fRECT));
if(parent && parent->name) {
sprintf(TmpTxt, "Regression line of %s", parent->name);
}
else strcpy(TmpTxt, "Regression line properties");
hDlg = CreateDlgWnd(cp ? TmpTxt :
(char*)"Linear regression analysis step 2/2", 50, 50, 420, 320, Dlg, 0x0L);
if(!cp) Dlg->SetCheck(5, 0L, true);
do{
LoopDlgWnd();
res = Dlg->GetResult();
switch (res) {
case 200: case 202: case 204: case 206:
Dlg->Activate(211, false); Dlg->Activate(213, false);
res = -1;
break;
case 208:
Dlg->Activate(211, true); Dlg->Activate(213, true);
res = -1;
break;
case 301: case 302:
Dlg->Activate(305, false); Dlg->Activate(307, false);
Dlg->Activate(310, false); Dlg->Activate(312, false);
res = -1;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -