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

📄 editdlg.cpp

📁 一个面向对象的产生式推理模型
💻 CPP
📖 第 1 页 / 共 2 页
字号:

void EditDlg::OnChangeEditTMention() 
{
	CheckButtonMtAddReady();

}

void EditDlg::RewriteListMtItem(int pos, int id)
{
	m_ListMt.DeleteItem(pos);
	LV_ITEM lv_Item;
	lv_Item.mask=LVIF_TEXT;

	lv_Item.iItem=pos;
	lv_Item.iSubItem=0;
	char temp[4];
	itoa(id,temp,10);
	CString baseString = temp;
	lv_Item.pszText=(LPSTR)LPCTSTR(baseString);
		int index=m_ListMt.InsertItem(&lv_Item);

	lv_Item.iItem=pos;
	lv_Item.iSubItem=1;
	CString firstString = myExpert->GetAbbreviationMention(id);
	lv_Item.pszText=(LPSTR)LPCTSTR(firstString);
		m_ListMt.SetItem(&lv_Item);

	lv_Item.iItem=index;
	lv_Item.iSubItem=2;
	CString secondString = myExpert->GetAssertMention(id,NeedNotVersa);
	lv_Item.pszText=(LPSTR)LPCTSTR(secondString);
		m_ListMt.SetItem(&lv_Item);

	lv_Item.iItem=index;
	lv_Item.iSubItem=3;
	CString thirdString = myExpert->GetAssertMention(id,NeedVersa);
	lv_Item.pszText=(LPSTR)LPCTSTR(thirdString);
		 m_ListMt.SetItem(&lv_Item);

	lv_Item.iItem=index;
	lv_Item.iSubItem=4;
	CString forthString;
	int value = myExpert->GetIdFact(id);
	if (value == FactTrue)
		forthString = "√";
	else if (value == FactFalse)
		forthString = "×";
	else {
		ASSERT(value == FactUnknow);
		forthString = "⊙";
	}
	lv_Item.pszText=(LPSTR)LPCTSTR(forthString);
	   m_ListMt.SetItem(&lv_Item);

	lv_Item.iItem=index;
	lv_Item.iSubItem=5;
	CString fifthString;
	value = myExpert->GetMtNeedNotAsk(id);
	if (value)
		fifthString = "⊙";
	else 
		fifthString = " ";
	lv_Item.pszText=(LPSTR)LPCTSTR(fifthString);
	   m_ListMt.SetItem(&lv_Item);

	lv_Item.iItem=index;
	lv_Item.iSubItem=6;
	CString sixthString;
	value = myExpert->GetMtCanUnknow(id);
	if (value)
		fifthString = " ";
	else 
		fifthString = "¤";
	lv_Item.pszText=(LPSTR)LPCTSTR(sixthString);
	   m_ListMt.SetItem(&lv_Item);
}

void EditDlg::AddListRuleItem(int pos,CString str)
{
	LV_ITEM lv_Item;
	lv_Item.mask=LVIF_TEXT;

	lv_Item.iItem=pos;
	lv_Item.iSubItem=0;
	char temp[4];
	itoa(pos+1,temp,10);
	CString baseString = temp;
	lv_Item.pszText=(LPSTR)LPCTSTR(baseString);
	if (m_SelectedRuleIndex == pos){//?
		lv_Item.state = LVIS_SELECTED;
		lv_Item.stateMask = LVIS_SELECTED;
	}
		int index=m_ListRule.InsertItem(&lv_Item);
		
	lv_Item.iItem=index;
	lv_Item.iSubItem=1;
	CString firstString = str;
	lv_Item.pszText=(LPSTR)LPCTSTR(firstString);
		 m_ListRule.SetItem(&lv_Item);
	
}
void EditDlg::OnDblclkListMt(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if (pNMListView->iItem == -1)
		return;
	else
		m_SelectedMtId = pNMListView->iItem;
	AiMt* pMt = new AiMt;
	pMt->SetId(m_SelectedMtId);
	if (m_GetVersa)
		pMt->SetSign(NeedVersa);
	else 
		pMt->SetSign(NeedNotVersa);
	pMt->SetPre(m_RulePre);
	m_RulePre = pMt;
	m_RuleWffs = myExpert->GetStringOfWffs(m_RulePre);
	GetDlgItem(IDC_BUTTON_DELETE_LAST_MT)->EnableWindow(true);
	//
	UpdateData(false);
	CheckButtonRuleAddReady();
	*pResult = 0;
}
void EditDlg::OnCheckGetVersa() 
{
	// TODO: Add your control notification handler code here
	if (m_RulePre == NULL)
		return;
	m_GetVersa = 1-m_GetVersa;
	if (m_GetVersa)
		m_RulePre->SetSign(NeedVersa);
	else
		m_RulePre->SetSign(NeedNotVersa);
	m_RuleWffs = myExpert->GetStringOfWffs(m_RulePre);
	UpdateData(false);
}

void EditDlg::OnDropdownComboRuleMt() 
{
	// TODO: Add your control notification handler code here
	for (int i=m_RuleMt.GetCount()*2;i>=0;i--)
		m_RuleMt.DeleteString(i);
	CString str;
	for (i=0;i<myExpert->GetNumAssert();i++)
	{
		str = myExpert->GetAbbreviationMention(i);
		m_RuleMt.AddString(str);
		str = "!"+str;
		m_RuleMt.AddString(str);
	}
}

void EditDlg::OnButtonRuleRefresh() 
{
	// TODO: Add your control notification handler code here
	int iNum=0;
	CString str;
	for(iNum=myExpert->GetNumRule();iNum>=0;iNum--)
		m_ListRule.DeleteItem(iNum);	
	for(iNum=0;iNum<myExpert->GetNumRule();iNum++){
		str = myExpert->GetRuleString(iNum);
		AddListRuleItem(iNum,str);
	}
}
void EditDlg::OnButtonDeleteLastMt() 
{
	if (m_RulePre->GetPre() == NULL){
		m_RulePre = NULL;
		m_GetVersa = 0;
		m_RuleWffs = "";
		GetDlgItem(IDC_BUTTON_DELETE_LAST_MT)->EnableWindow(false);
		UpdateData(false);
		return;
	}
	m_RulePre = m_RulePre->GetPre();
	m_RuleWffs = myExpert->GetStringOfWffs(m_RulePre);
	if (m_RulePre->GetSign() == NeedVersa)
		m_GetVersa = 1;
	else 
		m_GetVersa = 0;
	UpdateData(false);
}

void EditDlg::OnItemchangedListRule(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	m_SelectedRuleIndex = pNMListView->iItem;
	GetDlgItem(IDC_BUTTON_RULE_DELETE)->EnableWindow(true);
	GetDlgItem(IDC_SCROLLBAR_RULE_MOVE)->EnableWindow(true);
	*pResult = 0;
}

void EditDlg::CheckButtonRuleAddReady()
{
	if (m_RulePre!=NULL 
		&&  m_RuleMt.GetCurSel() != CB_ERR)
		GetDlgItem(IDC_BUTTON_RULE_ADD)->EnableWindow(true);
	else
		GetDlgItem(IDC_BUTTON_RULE_ADD)->EnableWindow(false);
	
}
void EditDlg::OnButtonRuleAdd() 
{
	// TODO: Add your control notification handler code here
	AiWffs wffs = *m_RulePre;
	int index = m_RuleMt.GetCurSel();
	AiMt mt;
	mt.SetId(index/2);
	if (index == (index/2)*2)
		mt.SetSign(NeedNotVersa);
	else
		mt.SetSign(NeedVersa);
	myExpert->AddRule(wffs,mt);
	//
	OnButtonRuleRefresh();
	m_RuleWffs = "";
	m_RulePre = NULL;
	GetDlgItem(IDC_BUTTON_RULE_ADD)->EnableWindow(false);
	GetDlgItem(IDC_BUTTON_DELETE_LAST_MT)->EnableWindow(false);
	m_RuleMt.SetCurSel(-1);
	UpdateData(false);
}

void EditDlg::OnCloseupComboRuleMt() 
{
	// TODO: Add your control notification handler code here
	CheckButtonRuleAddReady();
	if (m_RuleMt.GetCurSel() != CB_ERR)
		GetDlgItem(IDC_BUTTON_GOAL_ADD)->EnableWindow(true);
	else 
		GetDlgItem(IDC_BUTTON_GOAL_ADD)->EnableWindow(false);
}
void EditDlg::OnButtonRuleDelete() 
{
	// TODO: Add your control notification handler code here
	myExpert->DeleteRule(m_SelectedRuleIndex);
	//OnButtonRuleRefresh();
	int iNum=0;
	CString str;
	for(iNum=myExpert->GetNumRule()+1;iNum>=0;iNum--)
		m_ListRule.DeleteItem(iNum);	
	for(iNum=0;iNum<myExpert->GetNumRule();iNum++){
		str = myExpert->GetRuleString(iNum);
		AddListRuleItem(iNum,str);
	}
	//
	GetDlgItem(IDC_BUTTON_RULE_DELETE)->EnableWindow(false);
	GetDlgItem(IDC_SCROLLBAR_RULE_MOVE)->EnableWindow(false);
}

void EditDlg::OnButtonGoalAdd() 
{
	// TODO: Add your control notification handler code here
	int index = m_RuleMt.GetCurSel();
	if (index == -1)
		return;
	AiMt mt;
	CString str; 
	mt.SetId(index/2);
	if (index == (index/2)*2){
		mt.SetSign(NeedNotVersa);
		str = myExpert->GetAbbreviationMention(index/2);
		str +=":";
		str += myExpert->GetAssertMention(index/2,NeedNotVersa);
	}
	else{
		mt.SetSign(NeedVersa);
		str = "!";
		str += myExpert->GetAbbreviationMention(index/2);
		str +=":";
		str += myExpert->GetAssertMention(index/2,NeedVersa);
	}
	myExpert->AddGoal(mt);
	m_ListGoal.AddString(str);
}
void EditDlg::InitListGoal()
{
	AiMt* goal;
	CString str;
	for (int i = 0;i<myExpert->GetNumGoal();i++)
	{
		goal = myExpert->GetGoalAsMt(i);
		if (goal->GetSign() == NeedVersa){
			str = "!";
			str += myExpert->GetAbbreviationMention(goal->GetId());
			str += ":";
			str +=myExpert->GetAssertMention(goal->GetId(),NeedVersa);
		}
		else{
			str = myExpert->GetAbbreviationMention(goal->GetId());
			str += ":";
			str +=myExpert->GetAssertMention(goal->GetId(),NeedNotVersa);
		}
		m_ListGoal.AddString(str);
	}
}

void EditDlg::OnGoalListRefresh()
{
	m_ListGoal.ResetContent();
	InitListGoal();
}
void EditDlg::OnDblclkListGoal() 
{
	// TODO: Add your control notification handler code here
	int i=m_ListGoal.GetCurSel();
	if (i == LB_ERR)
		return;
	myExpert->DeleteGoal(i);
	OnGoalListRefresh();
}

void EditDlg::OnCheckNeedAsk() 
{
	// TODO: Add your control notification handler code here
	m_NeedAsk = 1-m_NeedAsk;
}
void EditDlg::OnCheckCanUnknow() 
{
	// TODO: Add your control notification handler code here
	m_mtCanUnknow = 1-m_mtCanUnknow;
}


void EditDlg::OnButtonMtRefresh() 
{
	int iNum=0;
	CString str;
	for(iNum=myExpert->GetNumAssert();iNum>=0;iNum--)
		m_ListMt.DeleteItem(iNum);	
	for(iNum=0;iNum<myExpert->GetNumAssert();iNum++){
		AddListMtItem(iNum,iNum);
	}	
}

void EditDlg::Create()
{
	CDialog::Create(IDD_DIALOG_EDIT,m_pParent);
}

void EditDlg::PostNcDestroy() 
{
	delete this;
	CDialog::PostNcDestroy();
}

void EditDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	static int preState;
	if (nSBCode == SB_ENDSCROLL)
	{
		switch(preState)
		{
		case SB_LINEDOWN:
			MoveRuleDownOneStep(m_SelectedRuleIndex);
			break;
		case SB_LINEUP:
			MoveRuleUpOneStep(m_SelectedRuleIndex);
			break;
		}
	}
	preState = nSBCode;
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

void EditDlg::MoveRuleUpOneStep(int oldIndex)
{
	if (oldIndex == 0 ){
		MessageBeep(-1);
		return;
	}
	myExpert->MoveRuleUpOneStep(oldIndex);
	OnButtonRuleRefresh();
}

void EditDlg::MoveRuleDownOneStep(int oldIndex)
{	
	if (oldIndex >= myExpert->GetNumRule()){
		MessageBeep(-1);
		return;
	}
	myExpert->MoveRuleDownOneStep(oldIndex);
	OnButtonRuleRefresh();
}

void EditDlg::OnCheckMultiGoal() 
{
	m_IsMultiGoal = 1 - m_IsMultiGoal;
}

void EditDlg::OnSaveToFile() 
{
	CFile f;
	if (f.Open("KS.txt",CFile::modeWrite | CFile::modeCreate))
	{
		char endline[2]={13,10};
		CString str;
		CString blank;
		char temp[1000];
		int length;
		//strcpy(temp,text);
		//myF.Write(temp,text.GetLength());
		//命题
		blank = "命题:";
		length = blank.GetLength();
		strcpy(temp,blank);
		f.Write(temp,length);
		for (int i=0;i<myExpert->GetNumAssert();i++){
			itoa(i,temp,10);str = temp;
			f.Write(temp,str.GetLength());
			str = myExpert->GetAbbreviationMention(i);
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			f.Write(endline,2);
			str = myExpert->GetAssertQuestionMention(i);
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			f.Write(endline,2);
			str = myExpert->GetAssertMention(i,FactTrue);
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			f.Write(endline,2);
			str = myExpert->GetAssertMention(i,FactFalse);
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			f.Write(endline,2);
		}
		f.Write(endline,2);
		//规则
		blank = "规则:";
		length = blank.GetLength();
		strcpy(temp,blank);
		f.Write(temp,length);
		blank = " : ";
		for (i=0;i<myExpert->GetNumRule();i++){
			itoa(i,temp,10);str = temp;
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			str = myExpert->GetRuleString(i);
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			f.Write(endline,2);
		}
		f.Write(endline,2);
		//目标
		blank = "目标:";
		length = blank.GetLength();
		strcpy(temp,blank);
		f.Write(temp,length);
		blank = " : ";
		for (i=0;i<myExpert->GetNumGoal();i++){
			itoa(i,temp,10);str = temp;
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			str = myExpert->GetGoalString(i+1);
			length = str.GetLength();
			strcpy(temp,str);
			f.Write(temp,length);
			f.Write(endline,2);
		}
		f.Close();
	}
}

⌨️ 快捷键说明

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