///////////////////////////////////////////////////////////////////////////// // CSelArrayDialog dialog #include "stdafx.h" #include "resource.h" #include "selarraydlg.h" #include "selectable.h" #include "selarray.h" #include "triggerd.h" #include "namedial.h" #include "triggerarray.h" #include "macroarray.h" #include "buttoned.h" #include "world.h" #include "macro.h" #include "AliasArray.h" #include "AliasDialog.h" BEGIN_MESSAGE_MAP(CSelArrayDialog, CDialog) //{{AFX_MSG_MAP(CSelArrayDialog) ON_BN_CLICKED(IDC_EDIT, OnEdit) ON_BN_CLICKED(IDC_COPY, OnCopy) ON_BN_CLICKED(IDC_NEW, OnNew) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDOK, OnOk) ON_LBN_DBLCLK(IDC_ARRAY_LIST, OnDblclkArrayList) //}}AFX_MSG_MAP END_MESSAGE_MAP() #define new DEBUG_NEW CSelArrayDialog::CSelArrayDialog(CWnd* pParent /*=NULL*/) : CDialog(CSelArrayDialog::IDD, pParent) { //{{AFX_DATA_INIT(CSelArrayDialog) m_sSelected = _T(""); //}}AFX_DATA_INIT m_pArray=NULL; } void CSelArrayDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSelArrayDialog) DDX_LBString(pDX, IDC_ARRAY_LIST, m_sSelected); //}}AFX_DATA_MAP } BOOL CSelArrayDialog::OnInitDialog() { ASSERT(m_pArray); CString sTemp=m_sSelected; CDialog::OnInitDialog(); PopulateList(); m_sSelected=sTemp; UpdateData(FALSE); SetWindowText(m_sTitle); return TRUE; // return TRUE unless you set the focus to a control } BOOL CSelArrayDialog::Setup(CSelArray *pArray, int iType, CObArray *pWorlds) { m_pArray=pArray; m_iType=iType; m_pWorlds=pWorlds; return TRUE; } CSelArrayDialog::PopulateList() { ASSERT(m_pArray); CListBox *pList = (CListBox *)GetDlgItem(IDC_ARRAY_LIST); ASSERT_VALID(pList); while(pList->DeleteString(0)>0) ;; for(int loop=0;loop<m_pArray->GetSize();loop++) { CSelectable *pSel=m_pArray->Get(loop); ASSERT_VALID(pSel); pList->AddString(pSel->GetName()); } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CSelArrayDialog message handlers void CSelArrayDialog::OnEdit() { UpdateData(TRUE); switch(m_iType) { case TYPE_TRIGGER: { CSelArray *pSel = (CSelArray *)m_pArray->Get(m_sSelected); if(pSel) { CTriggerDialog dlg(this); dlg.SetTriggers(pSel); dlg.DoModal(); } else AfxMessageBox("Select A trigger list, then select edit."); break; } case TYPE_MACRO: { CMacroArray *pSel = (CMacroArray *)m_pArray->Get(m_sSelected); if(pSel) { CButtonEdit dlg(this); dlg.SetList(pSel); dlg.DoModal(); } else AfxMessageBox("Select A Macro list, then select edit."); break; } case TYPE_ALIAS: { CAliasArray *pSel = (CAliasArray *)m_pArray->Get(m_sSelected); if(pSel) { CAliasDialog dlg(this); dlg.SetAliases(pSel); dlg.DoModal(); } else AfxMessageBox("Select An Alias list, then select edit."); break; } default: TRACE("\nUnknown selarray type."); ASSERT(0); } } void CSelArrayDialog::OnCopy() { UpdateData(TRUE); CSelArray *pSel = (CSelArray *)m_pArray->Get(m_sSelected); if(!pSel) { AfxMessageBox("Please select a set to copy first."); return; } CNameDialog dlg(this); dlg.m_sPrompt="Enter a name for the set you are copying to."; if(dlg.DoModal()==IDOK) { if(m_pArray->Get(dlg.m_sName)) { AfxMessageBox("A set with that name already exists, please choose another name."); return; } if(dlg.m_sName == "") { AfxMessageBox("You must give a name to a set. Operation aborted."); return; } CSelArray *pArray = (CSelArray *)(pSel->CreateCopy()); pArray->SetName(dlg.m_sName); m_pArray->Add(pArray); PopulateList(); m_sSelected = dlg.m_sName; } UpdateData(FALSE); } void CSelArrayDialog::OnNew() { CNameDialog dlg(this); CSelArray *pArray ; switch(m_iType) { case TYPE_TRIGGER: dlg.m_sPrompt="Enter a name for the new trigger set"; pArray= new CTriggerArray; break; case TYPE_MACRO: { dlg.m_sPrompt="Enter a name for the new Macro set"; pArray= new CMacroArray; for(int mloop=1;mloop<11;mloop++) { char temps[5]; wsprintf(temps,"F%d",mloop); CMacro *pMac = new CMacro; pMac->SetName(temps); pMac->m_sText=""; pArray->Add(pMac); } break; } case TYPE_ALIAS: dlg.m_sPrompt="Enter a name for the new alias set"; pArray= new CAliasArray; break; default: ASSERT(0); } if(dlg.DoModal()==IDOK) { if(m_pArray->Get(dlg.m_sName)) { AfxMessageBox("A set with that name already exists, please choose another name."); delete pArray; return; } if(dlg.m_sName == "") { AfxMessageBox("You must give a name to a set. Operation aborted."); delete pArray; return; } pArray->SetName(dlg.m_sName); m_pArray->Add(pArray); PopulateList(); m_sSelected = dlg.m_sName; UpdateData(FALSE); } else delete pArray; } void CSelArrayDialog::OnDelete() { UpdateData(TRUE); CSelArray *pSel = (CSelArray *)m_pArray->Get(m_sSelected); if(!pSel) { AfxMessageBox("Please select a set to delete first."); return; } if(pSel->GetName()=="Default") { AfxMessageBox("You cannot delete the default set."); return; } CString sOutPut; for(int loop=0;loop<m_pWorlds->GetSize();loop++) { CWorld *pWorld = (CWorld *)m_pWorlds->GetAt(loop); CString sWorldList; switch(m_iType) { case TYPE_TRIGGER: sWorldList = pWorld->m_sTriggerList; break; case TYPE_MACRO: sWorldList = pWorld->m_sMacroList; break; case TYPE_ALIAS: sWorldList = pWorld->m_sAliasList; } if(sWorldList==m_sSelected) { if(sOutPut=="") sOutPut="The following worlds are using this list, and will be set to \n'default' if you delete this list.\n\n"; sOutPut+=pWorld->m_sName; sOutPut+="\n"; } } if(sOutPut!="") sOutPut+="\n"; if(AfxMessageBox(sOutPut+"Delete set "+m_sSelected+" ?",MB_OKCANCEL)==IDOK) { for(int loop=0;loop<m_pWorlds->GetSize();loop++) { CWorld *pWorld = (CWorld *)m_pWorlds->GetAt(loop); CString *psWorldList; switch(m_iType) { case TYPE_TRIGGER: psWorldList = &pWorld->m_sTriggerList; break; case TYPE_MACRO: psWorldList = &pWorld->m_sMacroList; break; case TYPE_ALIAS: psWorldList = &pWorld->m_sAliasList; } if(*psWorldList==m_sSelected) *psWorldList="Default"; } m_pArray->Delete(m_sSelected); m_sSelected="Default"; // duplicated incase of background processing interruption PopulateList(); // duplicated incase of background processing interruption m_sSelected="Default"; UpdateData(FALSE); } } void CSelArrayDialog::OnOk() { UpdateData(TRUE); if(m_sSelected == "") { AfxMessageBox("You must select a set before exiting this dialog."); return; } CDialog::OnOK(); } void CSelArrayDialog::OnDblclkArrayList() { OnOK(); }