home *** CD-ROM | disk | FTP | other *** search
- // mapdwvw.cpp : implementation file
- //
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
- #include "collect.h"
- #include "colledoc.h"
- #include "mapdwvw.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CMapDWordToMyStructView
-
- IMPLEMENT_DYNCREATE(CMapDWordToMyStructView, CFormView)
-
- CMapDWordToMyStructView::CMapDWordToMyStructView()
- : CFormView(CMapDWordToMyStructView::IDD)
- {
- //{{AFX_DATA_INIT(CMapDWordToMyStructView)
- m_int = 0;
- m_float = 0.0f;
- m_str = "";
- m_dwKey = 0;
- //}}AFX_DATA_INIT
- }
-
- CMapDWordToMyStructView::~CMapDWordToMyStructView()
- {
- }
-
- void CMapDWordToMyStructView::OnInitialUpdate()
- {
- CFormView::OnInitialUpdate();
-
- // Copy all of the assocations from the document's CMap to the listbox.
- DWORD dwKey;
- CMyStruct* pMyStruct;
- m_ctlList.ResetContent();
- CMapDWordToMyStruct& map = GetDocument()->m_mapDWordToMyStruct;
- POSITION pos = map.GetStartPosition();
- while (pos != NULL)
- {
- map.GetNextAssoc(pos, dwKey, pMyStruct);
- AddMapEntryToListBox(dwKey, pMyStruct);
- }
- }
-
- void CMapDWordToMyStructView::DoDataExchange(CDataExchange* pDX)
- {
- CFormView::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMapDWordToMyStructView)
- DDX_Control(pDX, IDC_LIST, m_ctlList);
- DDX_Text(pDX, IDC_INT, m_int);
- DDX_Text(pDX, IDC_FLOAT, m_float);
- DDX_Text(pDX, IDC_STRING, m_str);
- DDX_Text(pDX, IDC_KEY, m_dwKey);
- //}}AFX_DATA_MAP
- }
-
-
- BEGIN_MESSAGE_MAP(CMapDWordToMyStructView, CFormView)
- //{{AFX_MSG_MAP(CMapDWordToMyStructView)
- ON_BN_CLICKED(IDC_ADD_OR_UPDATE, OnAddOrUpdate)
- ON_BN_CLICKED(IDC_FIND, OnFind)
- ON_BN_CLICKED(IDC_REMOVE, OnRemove)
- ON_BN_CLICKED(IDC_REMOVE_ALL, OnRemoveAll)
- ON_LBN_SELCHANGE(IDC_LIST, OnSelChangeList)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CMapDWordToMyStructView diagnostics
-
- #ifdef _DEBUG
- void CMapDWordToMyStructView::AssertValid() const
- {
- CFormView::AssertValid();
- }
-
- void CMapDWordToMyStructView::Dump(CDumpContext& dc) const
- {
- CFormView::Dump(dc);
- }
-
- CCollectDoc* CMapDWordToMyStructView::GetDocument() // non-debug version is inline
- {
- return STATIC_DOWNCAST(CCollectDoc, m_pDocument);
- }
- #endif //_DEBUG
-
- /////////////////////////////////////////////////////////////////////////////
- // CMapDWordToMyStructView internal implementation
-
- CString CMapDWordToMyStructView::FormatListBoxEntry(DWORD dwKey, CMyStruct* pMyStruct)
- {
- CString strListBoxEntry;
- strListBoxEntry.Format(_T("%d"),dwKey);
- strListBoxEntry += _T(" >> ");
- CString strMyStruct;
- pMyStruct->FormatMyStruct(strMyStruct);
- strListBoxEntry += strMyStruct;
- return strListBoxEntry;
- }
-
- int CMapDWordToMyStructView::FindKeyInListBox(DWORD dwKey)
- {
- for (int nSel = 0; nSel < m_ctlList.GetCount(); nSel++)
- {
- if (m_ctlList.GetItemData(nSel) == dwKey)
- return nSel;
- }
- return LB_ERR;
- }
-
- void CMapDWordToMyStructView::AddMapEntryToListBox(DWORD dwKey, CMyStruct* pMyStruct)
- {
- CString strListBoxEntry = FormatListBoxEntry(dwKey, pMyStruct);
- int nSel = m_ctlList.AddString(strListBoxEntry);
- m_ctlList.SetItemData(nSel, dwKey);
- }
-
- CMyStruct* CMapDWordToMyStructView::ConstructMyStructFromView()
- {
- CMyStruct* pMyStruct = new CMyStruct;
- pMyStruct->m_int = m_int;
- pMyStruct->m_float = m_float;
- pMyStruct->m_str = m_str;
- return pMyStruct;
- }
-
- void CMapDWordToMyStructView::UpdateViewFromMyStruct(CMyStruct* pMyStruct)
- {
- m_int = pMyStruct->m_int;
- m_float = pMyStruct->m_float;
- m_str = pMyStruct->m_str;
- UpdateData(FALSE); // update the value found in the map lookup
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CMapDWordToMyStructView message handlers
-
- void CMapDWordToMyStructView::OnAddOrUpdate()
- {
- if (UpdateData() != TRUE)
- return;
-
- // Add or replace entry in the listbox
- int nSel = FindKeyInListBox(m_dwKey);
- if (nSel != LB_ERR)
- m_ctlList.DeleteString(nSel);
- CMyStruct* pMyStruct = ConstructMyStructFromView();
- AddMapEntryToListBox(m_dwKey, pMyStruct);
-
- // Add or update association in the CMap
- CMyStruct* pTemp = GetDocument()->m_mapDWordToMyStruct[m_dwKey];
- delete pTemp; // delete old value
- GetDocument()->m_mapDWordToMyStruct[m_dwKey] = pMyStruct;
- }
-
- void CMapDWordToMyStructView::OnFind()
- {
- if (UpdateData() != TRUE)
- return;
-
- CMyStruct* pMyStruct;
- if (GetDocument()->m_mapDWordToMyStruct.Lookup(m_dwKey, pMyStruct) != TRUE)
- {
- AfxMessageBox(IDS_KEY_NOT_FOUND);
- return;
- }
-
- UpdateViewFromMyStruct(pMyStruct);
- }
-
- void CMapDWordToMyStructView::OnRemove()
- {
- if (UpdateData() != TRUE)
- return;
-
- CMyStruct* pMyStruct;
- CMapDWordToMyStruct& map = GetDocument()->m_mapDWordToMyStruct;
- if (map.Lookup(m_dwKey, pMyStruct) != TRUE)
- {
- AfxMessageBox(IDS_KEY_NOT_FOUND);
- return;
- }
-
- if (m_int != pMyStruct->m_int
- || m_float != pMyStruct->m_float
- || m_str != pMyStruct->m_str)
- {
- UpdateViewFromMyStruct(pMyStruct);
- AfxMessageBox(IDS_KEY_NOT_FOUND_CHOOSE_REMOVE_AGAIN);
- return;
- }
-
- // Remove assocation from the listbox
- int nSel = FindKeyInListBox(m_dwKey);
- ASSERT(nSel != LB_ERR);
- m_ctlList.DeleteString(nSel);
-
- // Remove the association from the CMap
- map.RemoveKey(m_dwKey);
-
- // Delete CMyStruct
- delete pMyStruct;
- }
-
- void CMapDWordToMyStructView::OnRemoveAll()
- {
- CCollectDoc* pDoc = GetDocument();
- POSITION pos = GetDocument()->m_mapDWordToMyStruct.GetStartPosition();
- while (pos != NULL)
- {
- DWORD dwKey;
- CMyStruct* pMyStruct;
- pDoc->m_mapDWordToMyStruct.GetNextAssoc(pos, dwKey, pMyStruct);
- delete pMyStruct;
- }
- pDoc->m_mapDWordToMyStruct.RemoveAll();
- m_ctlList.ResetContent();
- }
-
- void CMapDWordToMyStructView::OnSelChangeList()
- {
- // Update the "key" field to reflect the new selection in the listbox.
- m_dwKey = m_ctlList.GetItemData(m_ctlList.GetCurSel());
- UpdateData(FALSE);
-
- // Now that the key field has been updated to reflect the listbox selection,
- // find the string in the map as though the user had hit the Find button.
- OnFind();
- }
-