// Page6.cpp : implementation file // #include "stdafx.h" #include "dicommwl.h" #include "Page6.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPage6 property page IMPLEMENT_DYNCREATE(CPage6, CPropertyPage) CPage6::CPage6() : CPropertyPage(CPage6::IDD, IDS_PAGE6) { //{{AFX_DATA_INIT(CPage6) m_strValue = _T(""); m_strStaticInstructions = _T(""); //}}AFX_DATA_INIT m_bListOriginate = FALSE; m_bTreeOriginate = FALSE; m_pSheet = NULL; NO_PAGE_HELP(); } CPage6::~CPage6() { } void CPage6::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPage6) DDX_Control(pDX, IDC_TREE_DS_RESULT, m_TreeResult); DDX_Control(pDX, IDC_LIST_EMPTY_TAGS, m_ListEmptyTags); DDX_Text(pDX, IDC_EDIT_VALUE, m_strValue); DDX_Text(pDX, IDC_STATIC_INSTRUCTIONS, m_strStaticInstructions); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPage6, CPropertyPage) //{{AFX_MSG_MAP(CPage6) ON_NOTIFY(NM_DBLCLK, IDC_TREE_DS_RESULT, OnDblclkTreeDsResult) ON_NOTIFY(NM_DBLCLK, IDC_LIST_EMPTY_TAGS, OnDblclkListEmptyTags) //}}AFX_MSG_MAP ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_DS_RESULT, OnSelchangedTree) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_EMPTY_TAGS, OnItemchangedList) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPage6 message handlers BOOL CPage6::OnInitDialog() { CPropertyPage::OnInitDialog(); m_pSheet = (CMyPropertySheet *)GetParent(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CPage6::OnSetActive() { if (m_ListEmptyTags.GetItemCount()) m_ListEmptyTags.DeleteAllItems(); if (m_TreeResult.GetCount()) m_TreeResult.DeleteAllItems(); // TODO: Add your specialized code here and/or call the base class //HOPKINS Debug code /********************** L_UINT16 nRet; CGlobals::m_pDS = new LMyDicomDS(); nRet = CGlobals::m_pDS->LoadDS("d:\\erase\\clone0.dic", 0); CGlobals::m_uClass = CLASS_US_IMAGE_STORAGE; *******************/ m_strStaticInstructions.LoadString(IDS_PAGE6_INSTR); UpdateData(FALSE); m_ListEmptyTags.SetImageList(&CGlobals::m_ImageList, LVSIL_SMALL); m_ListEmptyTags.InitializeList(); m_TreeResult.SetImageList(&CGlobals::m_ImageList, TVSIL_NORMAL); //m_ListEmptyTags.Update(CGlobals::m_pDS); m_TreeResult.m_pMyListCtrl = &m_ListEmptyTags; m_TreeResult.m_pIODClass = LDicomIOD::FindClass(CGlobals::m_uClass); m_TreeResult.DisplayCommandSet(CGlobals::m_pDS, TVI_ROOT, TVI_ROOT, NULL); m_TreeResult.m_pMyListCtrl = NULL; m_TreeResult.m_pIODClass = NULL; m_pSheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT); return CPropertyPage::OnSetActive(); } BOOL CPage6::OnKillActive() { // TODO: Add your specialized code here and/or call the base class return CPropertyPage::OnKillActive(); } void CPage6::UpdateEditBox(HTREEITEM hItem) { CMyTreeData *pMyTreeData = (CMyTreeData *)m_TreeResult.GetItemData(hItem); if (pMyTreeData) m_strValue = pMyTreeData->m_strValue; else m_strValue = ""; UpdateData(FALSE); } void CPage6::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; if (m_bTreeOriginate) return; m_bTreeOriginate = TRUE; NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here if (pNMTreeView->itemNew.hItem != pNMTreeView->itemOld.hItem) { UpdateEditBox(pNMTreeView->itemNew.hItem); UpdateList(pNMTreeView->itemNew.hItem); } m_bTreeOriginate = FALSE; } void CPage6::OnItemchangedList(LPNMLISTVIEW p, LRESULT *pResult) { *pResult = 0; if (m_bListOriginate) return; m_bListOriginate = TRUE; if ((p->iItem != -1) && (p->uNewState & LVIS_SELECTED) ) m_TreeResult.Select((HTREEITEM)p->lParam, TVGN_CARET ); m_bListOriginate = FALSE; } void CPage6::ModifyTreeItem(HTREEITEM hItem) { if (hItem == NULL) return; CMyTreeData *pMyTreeData = (CMyTreeData *)m_TreeResult.GetItemData(hItem); if (!pMyTreeData) return; if ((pMyTreeData->m_pElement) && (pMyTreeData->m_pElement->nLength != ELEMENT_LENGTH_MAX) && (pMyTreeData->m_pElement->nTag != TAG_PIXEL_DATA)) { CDicomModifyElementDlg dlg; dlg.m_pMyTreeData = pMyTreeData; if ((pMyTreeData) && (pMyTreeData->m_pDicomIOD)) { if (pMyTreeData->m_pDicomIOD->pszDescription) dlg.m_strHint = pMyTreeData->m_pDicomIOD->pszDescription; } if (dlg.DoModal() != IDOK) return; dlg.m_strValue.TrimLeft(); dlg.m_strValue.TrimRight(); CGlobals::m_pDS->FreeValue(pMyTreeData->m_pElement); CGlobals::m_pDS->SetConvertValue(pMyTreeData->m_pElement, (L_CHAR *)(LPCTSTR)dlg.m_strValue, dlg.m_nCount); char *pszValue=NULL; int nLength = 0; int nCount =0; if (pMyTreeData->m_pElement->nLength > 0) { nLength = CGlobals::m_pDS->GetConvertValue(pMyTreeData->m_pElement, NULL); } if (nLength > 0) { pszValue = (L_CHAR *)malloc(nLength); if (pszValue != NULL) { CGlobals::m_pDS->GetConvertValue(pMyTreeData->m_pElement, pszValue); nCount = CGlobals::m_pDS->GetCountValue(pMyTreeData->m_pElement); } } if (pszValue) { pMyTreeData->m_strValue = pszValue; pMyTreeData->m_nCount = nCount; free(pszValue); } else { pMyTreeData->m_strValue = ""; } UpdateEditBox(hItem); } } void CPage6::OnDblclkTreeDsResult(NMHDR* pNMHDR, LRESULT* pResult) { HTREEITEM hItem = m_TreeResult.GetSelectedItem(); ModifyTreeItem(hItem); *pResult = 0; } void CPage6::OnDblclkListEmptyTags(NMHDR* pNMHDR, LRESULT* pResult) { int nSelected = m_ListEmptyTags.GetFirstSelected(); if (nSelected != -1) { HTREEITEM hTreeItem = (HTREEITEM)m_ListEmptyTags.GetItemData(nSelected); ModifyTreeItem(hTreeItem); } *pResult = 0; } void CPage6::UpdateList(HTREEITEM hItem) { CMyTreeData *pData = (CMyTreeData *)m_TreeResult.GetItemData(hItem); if (pData) { int nOldSelect = m_ListEmptyTags.GetFirstSelected(); if (pData->m_nListIndex != nOldSelect) { m_ListEmptyTags.SetUnselected(nOldSelect); //if (pData->m_nListIndex != -1) m_ListEmptyTags.SetSelected(pData->m_nListIndex); m_ListEmptyTags.EnsureVisible(pData->m_nListIndex, FALSE); } } }