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

📄 dcfdiagram.c

📁 这个工具集提供以下结构化分析和UML分析中所用的图形化绘图工具:ER-diagrams, data and event flow diagrams and state-transition diagr
💻 C
📖 第 1 页 / 共 2 页
字号:
		SetNodeLineStyle(LineStyle::SOLID);		break;	case 5: SetNodeType(Code::EVENT_STORE);		SetNodeShapeType(Code::HORIZONTAL_BAR);		SetNodeLineStyle(LineStyle::DASHED);		break;	case 6: SetNodeType(Code::SPLIT_MERGE_NODE);		SetNodeShapeType(Code::BLACK_DOT);		SetNodeLineStyle(LineStyle::SOLID);		break;	case 7: SetNodeType(Code::COMMENT);		SetNodeShapeType(Code::TEXT_BOX);		SetNodeLineStyle(LineStyle::INVISIBLE);		break;	default:		error("%s, line %d: impl error: "			"unknown node type selected\n", __FILE__,__LINE__);	}}void DCFDiagram::UpdateEdgeType(int num) {	((DiagramWindow *)GetMainWindow())->SetEdgeName(num);	SetLineType(Code::LINE);	switch(num) {	case 1: SetEdgeType(Code::DATA_FLOW);		SetLineEnd1(LineEnd::EMPTY);		SetLineEnd2(LineEnd::FILLED_ARROW);		SetEdgeLineStyle(LineStyle::SOLID);		break;	case 2: SetEdgeType(Code::EVENT_FLOW);		SetLineEnd1(LineEnd::EMPTY);		SetLineEnd2(LineEnd::FILLED_ARROW);		SetEdgeLineStyle(LineStyle::DASHED);		break;	case 3: SetEdgeType(Code::BIDIRECTIONAL_DATA_FLOW);		SetLineEnd1(LineEnd::FILLED_ARROW);		SetLineEnd2(LineEnd::FILLED_ARROW);		SetEdgeLineStyle(LineStyle::SOLID);		break;	case 4: SetEdgeType(Code::CONTINUOUS_DATA_FLOW);		SetLineEnd1(LineEnd::EMPTY);		SetLineEnd2(LineEnd::DOUBLE_FILLED_ARROW);		SetEdgeLineStyle(LineStyle::SOLID);		break;	case 5: SetEdgeType(Code::CONTINUOUS_EVENT_FLOW);		SetLineEnd1(LineEnd::EMPTY);		SetLineEnd2(LineEnd::DOUBLE_FILLED_ARROW);		SetEdgeLineStyle(LineStyle::DASHED);		break;	default:		error("%s, line %d: impl error: "			"unknown edge type selected\n", __FILE__,__LINE__);	}}void DCFDiagram::AddSubject(Subject *subj) {	DFDiagram::AddSubject(subj);	int subjType = subj->GetClassType();	if (subjType == Code::CONTINUOUS_DATA_FLOW || 	    subjType == Code::CONTINUOUS_EVENT_FLOW) {		Subject *n = ((Edge *)subj)->GetSubject1();		if (n->GetClassType() == Code::DATA_PROCESS)			((DataProcess *)n)->SetInstantaneous(False);	}}void DCFDiagram::EditPersistence(Subject *s) {	if (s->GetClassType() != Code::DATA_PROCESS) {		ShowDialog(MessageDialog::ERROR, "Not a data process",			"Only the persistence of data processes can be set.");		return;	}	SetEditProcess((DataProcess *)s);	if (GetEditProcess()->IsProcessGroup()) {		ShowDialog(MessageDialog::ERROR, "A process group",			"This data process is a process group,\n"			"so you cannot set the persistence");		SetEditProcess(0);		return;	}	const string *n = GetEditProcess()->GetIndex();	string x = "Persistence of process ";	string title = x + *n;	persistenceDialog->SetTitle(&title);	bool ins = GetEditProcess()->IsInstantaneous();	persistenceDialog->SetValue(ins);	persistenceDialog->Popup();}void DCFDiagram::EditActivation(Subject *s) {	if (s->GetClassType() != Code::DATA_PROCESS) {		ShowDialog(MessageDialog::ERROR, "Not a data process",		"Only activation mechanisms of data processes can be set.");		return;	}	SetEditProcess((DataProcess *)s);	if (GetEditProcess()->IsProcessGroup()) {		ShowDialog(MessageDialog::ERROR, "A process group",			"This data process is a process group,\n"			"so you cannot set the activation mechanism");		SetEditProcess(0);		return;	}	else if (!GetEditProcess()->IsInstantaneous()) {		ShowDialog(MessageDialog::ERROR, "A continuing process",			"This data process is continuing,\n"			"so you cannot set the activation mechanism");		SetEditProcess(0);		return;	}	const string *n = GetEditProcess()->GetIndex();	string x = "Activation of process ";	string title = x + *n;	activationDialog->SetTitle(&title);	DataProcess::ActivationType at = 		GetEditProcess()-> GetActivationMechanism();	if (at == DataProcess::STIMULUS)		UpdateActivationDialog(0);	else if (at == DataProcess::TIME)		UpdateActivationDialog(1);	else if (at == DataProcess::TRIGGER)		UpdateActivationDialog(2);	else		UpdateActivationDialog(3);	activationDialog->Popup();}void DCFDiagram::UpdateActivationDialog(int n) {	activationDialog->SetValue(min(n, 3));	if (n == 0) {		activationDialog->ManageSelectionLabel(True);		activationDialog->ManageTextString(True);		activationDialog->SetSelectionLabel("Stimulus edge name");		activationDialog->SetTextString(GetEditProcess()->GetStimulus());	}	else if (n == 1) {		activationDialog->ManageSelectionLabel(True);		activationDialog->ManageTextString(True);		activationDialog->SetSelectionLabel("Time expression");		activationDialog->SetTextString(GetEditProcess()->GetTimeExpression());	}	else {		activationDialog->SetSelectionLabel("");		activationDialog->SetTextString("");		activationDialog->ManageSelectionLabel(False);		activationDialog->ManageTextString(False);	}} void DCFDiagram::SetPersistence() {	SetStatus("action: Set persistence");	if (!check(GetEditProcess()))		return;	bool b = persistenceDialog->GetValue();	GetEditProcess()->SetInstantaneous(b);} void DCFDiagram::SetActivation() {	SetStatus("action: Set activation");	if (!check(GetEditProcess()))		return;	int n = activationDialog->GetValue();	string s;	if (n < 2) {		activationDialog->GetTextString(&s);	}	if (n == 0) {		GetEditProcess()->SetActivationMechanism(DataProcess::STIMULUS);		GetEditProcess()->SetStimulus(&s);	}	else if (n == 1) {		GetEditProcess()->SetActivationMechanism(DataProcess::TIME);		GetEditProcess()->SetTimeExpression(&s);	}	else if (n == 2)		GetEditProcess()->SetActivationMechanism(DataProcess::TRIGGER);	else		GetEditProcess()->SetActivationMechanism(DataProcess::UNSPECIFIED);}void DCFDiagram::UpdateActivationToggle() {	SetStatus("action: Update activation toggle");	if (!check(GetEditProcess()))		return;	int n = activationDialog->GetValue();	UpdateActivationDialog(n);}bool DCFDiagram::CheckEdgeConstraints(Subject *s1, Subject *s2) {	return DFDiagram::CheckEdgeConstraints(s1, s2);}void DCFDiagram::CheckDocument() {	chkbuf = "";	unsigned total = 0;	total += dcfChecks->CheckNamelessNodes(Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessNodes(Code::DATA_STORE, chkbuf);	total += dcfChecks->CheckNamelessNodes(Code::EVENT_STORE, chkbuf);	total += dcfChecks->CheckNamelessNodes(Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckNamelessNodes(Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::DATA_FLOW, 			Code::EXTERNAL_ENTITY, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::EXTERNAL_ENTITY, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_DATA_FLOW, 			Code::EXTERNAL_ENTITY, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::EXTERNAL_ENTITY, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::EXTERNAL_ENTITY, Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::EXTERNAL_ENTITY, Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::DATA_FLOW, 			Code::DATA_PROCESS, Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::DATA_PROCESS, Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_DATA_FLOW, 			Code::DATA_PROCESS, Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::DATA_PROCESS, Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::DATA_FLOW, 			Code::DATA_PROCESS, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::DATA_PROCESS, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_DATA_FLOW, 			Code::DATA_PROCESS, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::DATA_PROCESS, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::DATA_PROCESS, Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::DATA_PROCESS, Code::CONTROL_PROCESS, chkbuf);	// nb. controlprocess -> data process should be a prompt.	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::CONTROL_PROCESS, Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::CONTROL_PROCESS, Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::CONTROL_PROCESS, Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::EVENT_FLOW, 			Code::CONTROL_PROCESS, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckNamelessFlows(Code::CONTINUOUS_EVENT_FLOW, 			Code::CONTROL_PROCESS, Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckDoubleNodes(Code::DATA_PROCESS, chkbuf);	total += dcfChecks->CheckDoubleNodes(Code::DATA_STORE, chkbuf);	total += dcfChecks->CheckDoubleNodes(Code::EVENT_STORE, chkbuf);	total += dcfChecks->CheckDoubleNodes(Code::EXTERNAL_ENTITY, chkbuf);	total += dcfChecks->CheckDoubleNodes(Code::CONTROL_PROCESS, chkbuf);	total += dcfChecks->CheckDoubleIndexes(chkbuf);	total += dcfChecks->CheckDataProcessCoherence(chkbuf);	total += dcfChecks->CheckControlProcessCoherence(chkbuf);	total += dcfChecks->CheckConnected(Code::DATA_STORE, False, chkbuf);	total += dcfChecks->CheckConnected(Code::EVENT_STORE, False, chkbuf);	total += dcfChecks->CheckConnected(		Code::EXTERNAL_ENTITY, False, chkbuf);	total += dcfChecks->CheckSplitMergeNodeCoherence(chkbuf);	total += dcfChecks->CheckNamelessSplitMergeEdges(chkbuf);	total += dcfChecks->CheckContinuousSplitMergeEdges(chkbuf);	total += dcfChecks->CheckPersistences(chkbuf);	total += dcfChecks->CheckActivationMechanisms(chkbuf);	total += dcfChecks->CheckMinispecs(chkbuf);	ReportCheck(total, &chkbuf);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -