/////////////////////////////////////////////////////////////////////////////
//
// CConnectDialog dialog
//
// connectd.cpp : implementation file
//
#include "stdafx.h"
#include "gmud32.h"
#include "connectd.h"
#include "world.h"
#include "renamedi.h"
#include "namedial.h"
#include "selarraydlg.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
CConnectDialog::CConnectDialog(CWnd* pParent /*=NULL*/)
: CDialog(CConnectDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CConnectDialog)
m_sConnectString = _T("");
m_sHostName = _T("");
m_wPort = 0;
m_sWorldName = _T("");
m_sDescription = _T("");
m_sTriggerSetName = _T("");
m_sMacroSetName = _T("");
m_sAliasSet = _T("");
//}}AFX_DATA_INIT
m_paWorlds=0;
m_pWorld=0;
m_bShowConnect=TRUE;
m_pMacros=0;
m_pTriggers=0;
m_pAliases=0;
}
void CConnectDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CConnectDialog)
DDX_Text(pDX, IDC_CONNECTSTRING, m_sConnectString);
DDX_Text(pDX, IDC_HOSTNAME, m_sHostName);
DDX_Text(pDX, IDC_PORT, m_wPort);
DDX_LBString(pDX, IDC_WORLDLIST, m_sWorldName);
DDX_Text(pDX, IDC_DESCRIPTION, m_sDescription);
DDX_Text(pDX, IDC_TRIGSETNAME, m_sTriggerSetName);
DDX_Text(pDX, IDC_MACROSETNAME, m_sMacroSetName);
DDX_Text(pDX, IDC_ALIAS_SET, m_sAliasSet);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConnectDialog, CDialog)
//{{AFX_MSG_MAP(CConnectDialog)
ON_CBN_DBLCLK(IDC_WORLDLIST, OnDblclkWorldlist)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_CBN_SELCHANGE(IDC_WORLDLIST, OnSelchangeWorldlist)
ON_BN_CLICKED(IDC_DELETE_WORLD, OnDeleteWorld)
ON_BN_CLICKED(IDC_RENAME_WORLD, OnRenameWorld)
ON_BN_CLICKED(IDC_CHANGE_TRIGGER, OnChangeTrigger)
ON_BN_CLICKED(IDC_CHANGE_MACRO, OnChangeMacro)
ON_BN_CLICKED(IDC_CHANGE_ALIAS, OnChangeAlias)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConnectDialog message handlers
BOOL CConnectDialog::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT_VALID(m_paWorlds);
ASSERT(m_pTriggers);
ASSERT(m_pMacros);
ASSERT(m_pAliases);
PopulateList();
CenterWindow();
int iLastIndex=AfxGetApp()->GetProfileInt("World List","selected",0);
CListBox *pList = ((CListBox *)GetDlgItem(IDC_WORLDLIST));
if(pList && pList->GetCount())
{
pList->SetCurSel(iLastIndex);
pList->GetText(iLastIndex,m_sWorldName);
}
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
ShowWorld(pWorld);
if(!m_bShowConnect)
{
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
SetWindowText("Edit World List");
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConnectDialog::OnDblclkWorldlist()
{
if(m_bShowConnect)
OnOK();
}
void CConnectDialog::OnOK()
{
UpdateData(TRUE);
int iSel = ((CListBox *)GetDlgItem(IDC_WORLDLIST))->GetCurSel();
if(iSel!=LB_ERR)
AfxGetApp()->WriteProfileInt("World List","selected",iSel);
m_pWorld = FindWorld(m_sWorldName);
SaveWorld();
if(m_pWorld || !m_bShowConnect)
CDialog::OnOK();
}
void CConnectDialog::OnAdd()
{
// save the original world
SaveWorld();
CNameDialog dlg(this);
dlg.m_sPrompt = "Enter a Name for the new world";
if(dlg.DoModal()==IDOK && dlg.m_sName!="")
{
CWorld *pWorld = FindWorld(dlg.m_sName);
if(pWorld)
{
AfxMessageBox("That world name already exists, choose another name.");
return;
}
pWorld = new CWorld;
pWorld->m_sName=dlg.m_sName;
m_paWorlds->Add(pWorld);
m_pWorld = pWorld;
PopulateList();
ShowWorld(pWorld);
}
}
void CConnectDialog::GetWorld(CWorld *pWorld)
{
UpdateData(TRUE);
pWorld->m_sHostName = m_sHostName;
pWorld->m_wPort = (WORD) m_wPort;
pWorld->m_sConnectString = m_sConnectString;
pWorld->m_sDescription = m_sDescription;
pWorld->m_sTriggerList = m_sTriggerSetName;
pWorld->m_sMacroList = m_sMacroSetName;
pWorld->m_sAliasList = m_sAliasSet;
}
CConnectDialog::PopulateList()
{
CListBox *pList = (CListBox *)GetDlgItem(IDC_WORLDLIST);
ASSERT(pList);
while(pList->DeleteString(0)>0)
;;
for(int loop=0;loop<m_paWorlds->GetSize();loop++)
{
CWorld *pWorld=(CWorld *)m_paWorlds->GetAt(loop);
pList->AddString(pWorld->m_sName);
}
return TRUE;
}
CWorld *CConnectDialog::FindWorld(CString sName)
{
CWorld *pWorld=0;
for(int loop=0;loop<m_paWorlds->GetSize();loop++)
{
pWorld=(CWorld *)m_paWorlds->GetAt(loop);
if(pWorld->m_sName.CompareNoCase(sName)==0)
return pWorld;
}
return 0;
}
int CConnectDialog::FindWorldIndex(CString sName)
{
CWorld *pWorld=0;
for(int loop=0;loop<m_paWorlds->GetSize();loop++)
{
pWorld=(CWorld *)m_paWorlds->GetAt(loop);
if(pWorld->m_sName.CompareNoCase(sName)==0)
return loop;
}
return -1;
}
void CConnectDialog::ShowWorld(CWorld *pWorld)
{
m_sWorldName=pWorld->m_sName;
m_sHostName=pWorld->m_sHostName ;
m_wPort=pWorld->m_wPort ;
m_sConnectString=pWorld->m_sConnectString ;
m_sDescription=pWorld->m_sDescription ;
m_sTriggerSetName=pWorld->m_sTriggerList;
m_sMacroSetName=pWorld->m_sMacroList;
m_sAliasSet=pWorld->m_sAliasList;
UpdateData(FALSE);
}
void CConnectDialog::OnSelchangeWorldlist()
{
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
GetWorld(pWorld);
CListBox *pList = (CListBox *)GetDlgItem(IDC_WORLDLIST);
ASSERT_VALID(pList);
pList->GetText(pList->GetCurSel(),m_sWorldName);
// UpdateData(TRUE);
pWorld = FindWorld(m_sWorldName);
ShowWorld(pWorld);
}
BOOL CConnectDialog::SaveWorld()
{
UpdateData(TRUE);
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
GetWorld(pWorld);
else
TRACE("\nCouldn't find world [%s].",m_sWorldName);
return TRUE;
}
void CConnectDialog::OnDeleteWorld()
{
UpdateData(TRUE);
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld
&&
AfxMessageBox("Delete world "+m_sWorldName+" ?",MB_OKCANCEL)==IDOK)
{
m_paWorlds->RemoveAt(FindWorldIndex(m_sWorldName));
delete pWorld;
PopulateList();
m_sConnectString = _T("");
m_sHostName = _T("");
m_wPort = 0;
m_sWorldName = _T("");
m_sDescription="";
m_sTriggerSetName="Default";
m_sMacroSetName="Default";
UpdateData(FALSE);
}
}
void CConnectDialog::OnRenameWorld()
{
SaveWorld();
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
{
CRenameDialog dlg(this);
dlg.m_sOldName = pWorld->m_sName;
if(dlg.DoModal()==IDOK)
{
pWorld->m_sName = dlg.m_sNewName;
ShowWorld(pWorld);
PopulateList();
UpdateData(FALSE);
}
}
else
AfxMessageBox("Select a world to rename, first.");
}
void CConnectDialog::OnChangeTrigger()
{
SaveWorld();
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
{
CSelArrayDialog dlg;
dlg.Setup(m_pTriggers,TYPE_TRIGGER,m_paWorlds);
dlg.m_sSelected=pWorld->m_sTriggerList;
dlg.m_sTitle="Define / Select a Trigger set.";
dlg.DoModal();
pWorld->m_sTriggerList = dlg.m_sSelected;
ShowWorld(pWorld);
}
else
AfxMessageBox("Select a world first.");
}
void CConnectDialog::OnChangeMacro()
{
SaveWorld();
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
{
CSelArrayDialog dlg;
dlg.Setup(m_pMacros,TYPE_MACRO,m_paWorlds);
dlg.m_sSelected=pWorld->m_sMacroList;
dlg.m_sTitle="Define / Select a Macro set.";
dlg.DoModal();
pWorld->m_sMacroList = dlg.m_sSelected;
ShowWorld(pWorld);
}
else
AfxMessageBox("Select a world first.");
}
void CConnectDialog::OnChangeAlias()
{
SaveWorld();
CWorld *pWorld = FindWorld(m_sWorldName);
if(pWorld)
{
CSelArrayDialog dlg;
dlg.Setup(m_pAliases,TYPE_ALIAS,m_paWorlds);
dlg.m_sSelected=pWorld->m_sAliasList;
dlg.m_sTitle="Define / Select an Alias set.";
dlg.DoModal();
pWorld->m_sAliasList = dlg.m_sSelected;
ShowWorld(pWorld);
}
else
AfxMessageBox("Select a world first.");
}