📄 editdlg.cpp
字号:
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 + -