/* ** AreaEditor - a program for editing SMAUG and ROM area files. ** Author: Nick Gammon ** http://www.gammon.com.au/ ** See Copyright Notice at the end of AreaEditor.h */ // AreaNeighbourView.cpp : implementation file // #include "stdafx.h" #include "AreaEditor.h" #include "AreaEditorDoc.h" #include "defaults.h" #include "AreaNeighbourView.h" #include "NeighbourNameDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAreaNeighbourView dialog CAreaNeighbourView::CAreaNeighbourView(CWnd* pParent /*=NULL*/) : CDialog(CAreaNeighbourView::IDD, pParent) { //{{AFX_DATA_INIT(CAreaNeighbourView) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_area = NULL; } void CAreaNeighbourView::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAreaNeighbourView) DDX_Control(pDX, IDC_NEIGHBOURS_LIST, m_ctlNeighboursList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAreaNeighbourView, CDialog) //{{AFX_MSG_MAP(CAreaNeighbourView) ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_DELETE, OnDelete) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAreaNeighbourView message handlers void CAreaNeighbourView::OnAdd() { CNeighbourNameDlg dlg; if (dlg.DoModal () != IDOK) return; m_area->neighboursList.AddTail (dlg.m_strName); // add to neighbours list m_area->m_pDoc->SetModifiedFlag (); // redraw the list RedrawList (); } void CAreaNeighbourView::OnDelete() { for (int nIndex = -1; (nIndex = m_ctlNeighboursList.GetNextItem(nIndex, LVNI_SELECTED)) != -1; ) { CString strItem = m_ctlNeighboursList.GetItemText (nIndex, 0); POSITION pos = (POSITION) m_area->neighboursList.Find (strItem); if (pos) { m_area->neighboursList.RemoveAt (pos); // remove from string list m_area->m_pDoc->SetModifiedFlag (); m_ctlNeighboursList.DeleteItem (nIndex); // and delete from control } } } BOOL CAreaNeighbourView::OnInitDialog() { CDialog::OnInitDialog(); // set list control to display whole row when selected m_ctlNeighboursList.SendMessage (LVM_SETEXTENDEDLISTVIEWSTYLE, 0, m_ctlNeighboursList.SendMessage (LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) | LVS_EX_FULLROWSELECT); m_ctlNeighboursList.InsertColumn(0, "Name", LVCFMT_LEFT, 80); RedrawList (); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CAreaNeighbourView::RedrawList (void) { int nItem = 0; POSITION neighbourPos; m_ctlNeighboursList.DeleteAllItems (); for (neighbourPos = m_area->neighboursList.GetHeadPosition (); neighbourPos; ) { CString strNeighbour = m_area->neighboursList.GetNext (neighbourPos); m_ctlNeighboursList.InsertItem (nItem, strNeighbour); m_ctlNeighboursList.SetItemData (nItem, (DWORD) neighbourPos); nItem++; } } // end of CAreaNeighbourView::RedrawList