/*[]=====================================================================[]*/ /*[] LEADTOOLS for Windows - Version 10 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2000 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ //tree.c #include /* Required for all Windows applications. */ #include /* Needed for message crackers. */ #include /* Windows' header for common controls. */ #include "..\\..\\..\\include\\l_bitmap.h" /* LEADTOOLS main header file. */ #include "..\\..\\..\\include\\l_error.h" /* LEADTOOLS error definition header file. */ #include "..\\..\\..\\include\\ltdic.h" /* LEADTOOLS main header file. */ #include "dicom.h" #include "resource.h" #define MAX_STRING 15 //forward L_CHAR *IntToString(UINT iVal, L_CHAR *szVal); L_CHAR *IntToHexString(UINT iVal, L_CHAR *szVal); L_CHAR *CodeToString(L_UINT uiCode); L_CHAR *RestrictToString(L_UINT uiRestrict); L_VOID UpdateVRTextBoxes(HWND hDlg, pDICOMVR pVR); L_VOID UpdateUIDTextBoxes(HWND hDlg, pDICOMUID pUID); L_VOID UpdateTagTextBoxes(HWND hDlg, pDICOMTAG pTag); L_VOID ListView_SetCursor(HWND hTreeView, L_INT iTreeViewIndex); BOOL CALLBACK VRTableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK UITableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK TagTableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); L_VOID UpdateIODTextBoxes(HWND hDlg, pDICOMIOD pIOD) { L_CHAR szTemp[MAX_STRING]; if (pIOD != NULL) { Static_SetText(GetDlgItem(hDlg, IDC_EDIT_IOD_CODE), IntToString(pIOD->nCode, szTemp)); Static_SetText(GetDlgItem(hDlg, IDC_EDIT_IOD_NAME), pIOD->pszName); Static_SetText(GetDlgItem(hDlg, IDC_EDIT_IOD_TYPE), IntToString(pIOD->nType, szTemp)); Static_SetText(GetDlgItem(hDlg, IDC_EDIT_IOD_USAGE), IntToString(pIOD->nUsage, szTemp)); Static_SetText(GetDlgItem(hDlg, IDC_EDIT_IOD_DESC), pIOD->pszDescription); Static_SetText(GetDlgItem(hDlg, IDC_EDIT_IOD_DESC_LONG), pIOD->pszDescription); } } L_VOID TreeView_SetCursor(HWND hTreeView, HTREEITEM hTreeItem) { LPTV_ITEM lptvItem; lptvItem = (LPTV_ITEM)GlobalLock(hTreeItem); lptvItem->mask = TVIF_STATE; lptvItem->state = TVIF_SELECTEDIMAGE; lptvItem->stateMask = TVIF_SELECTEDIMAGE; TreeView_SetItem(hTreeView, lptvItem); GlobalUnlock(hTreeItem); } L_VOID TreeView_InsertChildren(HWND hTreeView, HTREEITEM hParent, pDICOMIOD pParentIOD) { TV_INSERTSTRUCT tvInsert; TV_ITEM tvItem; HTREEITEM hItem; pDICOMIOD pIOD; if (pParentIOD == NULL) pIOD = L_DicomGetFirstIOD(pParentIOD, TRUE); else pIOD = L_DicomGetChildIOD(pParentIOD); while (pIOD != NULL) { tvItem.mask = TVIF_TEXT | TVIF_PARAM; tvItem.pszText = pIOD->pszName; tvItem.lParam = (LPARAM)pIOD; tvInsert.hParent = hParent; tvInsert.hInsertAfter = TVI_LAST; tvInsert.item = tvItem; hItem = TreeView_InsertItem(hTreeView, &tvInsert); /* hItem = (HTREEITEM)SendMessage(hTreeView, TVM_INSERTITEM, (WPARAM)0, (LPARAM)(LPTV_INSERTSTRUCT)&tvInsert);*/ if (L_DicomGetChildIOD(pIOD) != NULL) TreeView_InsertChildren(hTreeView, hItem, pIOD); pIOD = L_DicomGetNextIOD(pIOD, TRUE); } } BOOL CALLBACK IODTableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static pDICOMIOD pIOD; pDICOMIOD pTempIOD; static HWND hTreeView; static HTREEITEM hTreeItemCurrent; switch(uMsg) { case WM_INITDIALOG: { hTreeView = GetDlgItem(hDlg, IDC_TREE_IOD); TreeView_InsertChildren(hTreeView, TVI_ROOT, NULL); pIOD = L_DicomGetFirstIOD(NULL, TRUE); hTreeItemCurrent = TreeView_GetRoot(hTreeView); SendMessage(hDlg, WM_COMMAND, IDC_ROOT, 0); } break; case WM_NOTIFY : { NM_TREEVIEW* pNM = (NM_TREEVIEW*)lParam; if (pNM->hdr.code == TVN_SELCHANGED) { pIOD = (pDICOMIOD)pNM->itemNew.lParam; UpdateIODTextBoxes(hDlg, pIOD); hTreeItemCurrent = pNM->itemNew.hItem; } } break; case WM_DESTROY: return FALSE; break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_FIRST: { HTREEITEM hTemp; pTempIOD = L_DicomGetFirstIOD(pIOD, TRUE); if (pTempIOD != NULL) { pIOD = pTempIOD; hTemp = TreeView_GetPrevSibling(hTreeView, hTreeItemCurrent); while (hTemp != NULL) { hTreeItemCurrent = hTemp; hTemp = TreeView_GetPrevSibling(hTreeView, hTreeItemCurrent); } if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDC_NEXT: { pTempIOD = L_DicomGetNextIOD(pIOD, TRUE); if (pTempIOD != NULL) { hTreeItemCurrent = TreeView_GetNextSibling(hTreeView, hTreeItemCurrent); if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDC_PREV: { pTempIOD = L_DicomGetPrevIOD(pIOD, TRUE); if (pTempIOD != NULL) { pIOD = pTempIOD; hTreeItemCurrent = TreeView_GetPrevSibling(hTreeView, hTreeItemCurrent); if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDC_LAST: { HTREEITEM hTemp; pTempIOD = L_DicomGetLastIOD(pIOD, TRUE); if (pTempIOD != NULL) { pIOD = pTempIOD; hTemp = TreeView_GetNextSibling(hTreeView, hTreeItemCurrent); while (hTemp != NULL) { hTreeItemCurrent = hTemp; hTemp = TreeView_GetNextSibling(hTreeView, hTreeItemCurrent); } if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDC_ROOT: { HTREEITEM hTemp; pTempIOD = L_DicomGetRootIOD(pIOD); if (pTempIOD != NULL) { pIOD = pTempIOD; hTemp = TreeView_GetParent(hTreeView, hTreeItemCurrent); while (hTemp != NULL) { hTreeItemCurrent = hTemp; hTemp = TreeView_GetParent(hTreeView, hTreeItemCurrent); } if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDC_PARENT: { pTempIOD = L_DicomGetParentIOD(pIOD); if (pTempIOD != NULL) { pIOD = pTempIOD; hTreeItemCurrent = TreeView_GetParent(hTreeView, hTreeItemCurrent); if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDC_CHILD: { pDICOMIOD pTempIOD; pTempIOD = L_DicomGetChildIOD(pIOD); if (pTempIOD != NULL) { pIOD = pTempIOD; hTreeItemCurrent = TreeView_GetChild(hTreeView, hTreeItemCurrent); if ( hTreeItemCurrent ) { TreeView_EnsureVisible( hTreeView, hTreeItemCurrent ); TreeView_SelectItem( hTreeView, hTreeItemCurrent ); } } SetFocus(hTreeView); } break; case IDCANCEL: case IDABORT: case ID_FILE_EXIT: EndDialog(hDlg, TRUE); break; } return FALSE; break; default: return FALSE; } return TRUE; } //IODTableDlgProc