⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertydlg.cpp

📁 Linux/windows 环境下跨平台开发程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			}
		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 + -