/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 11 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2000 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[] []*/ /*[] DirTree.c []*/ /*[]=====================================================================[]*/ #include "dirTree.h" #include /* Windows' header for common controls. */ #include "defines.h" #include "extern.h" #include "resource.h" #include "utils.h" #include "commun.h" #include "draw.h" #include "process.h" HWND CreateTreeDir(HWND hWnd) { HWND hTreeDir; DWORD dwStyle; RECT rcRect; RECT rcStatus; GetClientRect(hWnd, &rcRect); GetClientRect(hStatusBarGlobal, &rcStatus); dwStyle = WS_CHILD | WS_BORDER | WS_VISIBLE | WS_VSCROLL | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_DISABLEDRAGDROP; //Create tree control for logging messages hTreeDir = CreateWindowEx( WS_EX_CLIENTEDGE, // extended window style WC_TREEVIEW, // pointer to registered class name "", // pointer to window name dwStyle, // window style 0, // horizontal position of window 0, // vertical position of window (L_INT)(rcRect.right / 2), // window width (L_INT)(rcRect.bottom * TREE_FRACTION), // window height hWnd, // handle to parent or owner window (HMENU)IDC_DIR, // handle to menu, or child-window identifier hInst, // handle to application instance NULL // pointer to window-creation data ); if (hTreeMsg) { TreeView_SetImageList(hTreeDir, hImageListGlobal, TVSIL_NORMAL); } return hTreeDir; } L_VOID OnSelChangedDir(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView; pDICOMELEMENT pElement; pDICOMELEMENT pChild; L_INT nResult; pNMTreeView = (NM_TREEVIEW*)pNMHDR; pElement = (pDICOMELEMENT)pNMTreeView->itemNew.lParam; if (pElement == NULL) { *pResult = 0; TreeView_DeleteAllItems(hTreeKey); return; } if (L_DicomExistsElement(hDSGlobal, pElement) == FALSE) { *pResult = 0; return; } pChild = L_DicomGetChildElement(hDSGlobal,pElement, TRUE); if (pChild != NULL) { pChild = L_DicomFindFirstElement(hDSGlobal,pChild, TAG_ICON_IMAGE_SEQUENCE, TRUE); if (pChild != NULL) { pChild = L_DicomGetChildElement(hDSGlobal,pChild, TRUE); if (pChild != NULL) { pChild = L_DicomFindFirstElement(hDSGlobal,pChild, TAG_ITEM, TRUE); if (pChild != NULL) { pChild = L_DicomGetChildElement(hDSGlobal,pChild, TRUE); if (pChild != NULL) { pChild = L_DicomFindFirstElement(hDSGlobal,pChild, TAG_PIXEL_DATA, TRUE); } } } } } if (pChild != NULL) { /* */ nResult = L_DicomGetImage( hDSGlobal, pChild, &DicomBitmap, sizeof(BITMAPHANDLE), 0, 0, 0, DICOM_GETIMAGE_AUTO_APPLY_MODALITY_LUT| DICOM_GETIMAGE_AUTO_APPLY_VOI_LUT| DICOM_GETIMAGE_ALLOW_RANGE_EXPANSION, NULL, NULL); if (nResult == DICOM_SUCCESS) { if (hPaletteGlobal != NULL) { DeleteObject(hPaletteGlobal); hPaletteGlobal = NULL; //Set global hPalette to NULL--create this on first paint } ShowDicomImage(); } } else { LockWindowUpdate(hTreeKey); TreeView_DeleteAllItems(hTreeKey); HideDicomImage(); DisplayTree(hTreeKey, hDSGlobal, TVI_ROOT, pElement, DISPLAY_TREE_VALUES | DISPLAY_TREE_EXPANDED); LockWindowUpdate(NULL); TreeView_SelectItem(hTreeKey, TreeView_GetFirstVisible(hTreeKey)); } *pResult = 0; } L_VOID OnDirDoubleClick(NMHDR* pNMHDR, LRESULT* pResult) { HTREEITEM hItem; pDICOMELEMENT pParent; pDICOMELEMENT pElement; L_INT nResult; L_CHAR *lpszClass; L_BOOL bFind=TRUE; HDICOMDS hDSLocal; L_UCHAR nPresentationID; *pResult = 0; hItem = TreeView_GetSelection(hTreeDir); if (hItem == NULL) { return; } pParent = (pDICOMELEMENT) TV_GetItemData(hTreeDir, hItem); switch (uSecureMode) { case DICOM_SECURE_NONE: if (((TV_GetItemState(hTreeDir, hItem, TVIS_BOLD) & TVIS_BOLD) == 0) || (pParent == NULL) || (L_DicomExistsElement(hDSGlobal, pParent) == FALSE) || (L_DicomIsAssociated(hNetGlobal) == FALSE) || (processGlobal.nStatus == PROCESS_STATUS_PENDING)) { return; } break; case DICOM_SECURE_ISCL: if (((TV_GetItemState(hTreeDir, hItem, TVIS_BOLD) & TVIS_BOLD) == 0) || (pParent == NULL) || (L_DicomExistsElement(hDSGlobal, pParent) == FALSE) || (L_DicomIsAssociated(hNetGlobalISCL) == FALSE) || (processGlobal.nStatus == PROCESS_STATUS_PENDING)) { return; } break; case DICOM_SECURE_TLS: if (((TV_GetItemState(hTreeDir, hItem, TVIS_BOLD) & TVIS_BOLD) == 0) || (pParent == NULL) || (L_DicomExistsElement(hDSGlobal, pParent) == FALSE) || (L_DicomIsAssociated(hNetGlobalTLS) == FALSE) || (processGlobal.nStatus == PROCESS_STATUS_PENDING)) { return; } break; } hItemGlobal = hItem; hDSLocal = L_DicomCreateDS(szTempFilesFolder); switch (nQueryMethodGlobal) { case QUERY_PATIENT_ROOT: if (L_DicomGetParentKey(hDSGlobal, pParent) == NULL) { L_DicomInitDS(hDSLocal,CLASS_PATIENT_ROOT_QUERY_STUDY, DS_METAHEADER_ABSENT|DS_LITTLE_ENDIAN|DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal,NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal,NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal,pElement, "STUDY", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "PATIENT", TAG_PATIENT_ID); } else if (L_DicomGetParentKey(hDSGlobal, L_DicomGetParentKey(hDSGlobal, pParent)) == NULL) { L_DicomInitDS( hDSLocal, CLASS_PATIENT_ROOT_QUERY_SERIES, DS_METAHEADER_ABSENT|DS_LITTLE_ENDIAN|DS_EXPLICIT_VR ); pElement = L_DicomFindFirstElement(hDSLocal, NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal, NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal, pElement, "SERIES", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "PATIENT", TAG_PATIENT_ID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "STUDY", TAG_STUDY_INSTANCE_UID); } else if (L_DicomGetParentKey(hDSGlobal, L_DicomGetParentKey(hDSGlobal, L_DicomGetParentKey(hDSGlobal, pParent))) == NULL) { L_DicomInitDS(hDSLocal, CLASS_PATIENT_ROOT_QUERY_IMAGE, DS_METAHEADER_ABSENT|DS_LITTLE_ENDIAN|DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal, NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal, NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal,pElement, "IMAGE", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "PATIENT", TAG_PATIENT_ID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "STUDY", TAG_STUDY_INSTANCE_UID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "SERIES", TAG_SERIES_INSTANCE_UID); } else if (L_DicomGetParentKey(hDSGlobal,L_DicomGetParentKey(hDSGlobal,L_DicomGetParentKey(hDSGlobal,L_DicomGetParentKey(hDSGlobal, pParent)))) == NULL) { if (CheckAvailability(pParent) == FALSE) { L_DicomFreeDS(hDSLocal); return; } bFind = FALSE; L_DicomInitDS(hDSLocal, CLASS_UNKNOWN, DS_LITTLE_ENDIAN | DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal,NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal,NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal,pElement, "IMAGE", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "PATIENT", TAG_PATIENT_ID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "STUDY", TAG_STUDY_INSTANCE_UID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "SERIES", TAG_SERIES_INSTANCE_UID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "IMAGE", TAG_SOP_INSTANCE_UID); } else { L_DicomFreeDS(hDSLocal); return; } break; case QUERY_STUDY_ROOT: if (L_DicomGetParentKey(hDSGlobal, pParent) == NULL) { L_DicomInitDS(hDSLocal, CLASS_STUDY_ROOT_QUERY_SERIES, DS_METAHEADER_ABSENT|DS_LITTLE_ENDIAN|DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal,NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal,NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal,pElement, "SERIES", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "STUDY", TAG_STUDY_INSTANCE_UID); } else if (L_DicomGetParentKey(hDSGlobal,L_DicomGetParentKey(hDSGlobal, pParent)) == NULL) { L_DicomInitDS(hDSLocal,CLASS_STUDY_ROOT_QUERY_IMAGE, DS_METAHEADER_ABSENT|DS_LITTLE_ENDIAN|DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal,NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal,NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal,pElement, "IMAGE", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "STUDY", TAG_STUDY_INSTANCE_UID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "SERIES", TAG_SERIES_INSTANCE_UID); } else if (L_DicomGetParentKey(hDSGlobal, L_DicomGetParentKey(hDSGlobal, L_DicomGetParentKey(hDSGlobal, pParent))) == NULL) { if (CheckAvailability(pParent) == FALSE) { L_DicomFreeDS(hDSLocal); return; } bFind = FALSE; L_DicomInitDS(hDSLocal, CLASS_UNKNOWN, DS_LITTLE_ENDIAN | DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal,NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal,NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal,pElement, "IMAGE", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "STUDY", TAG_STUDY_INSTANCE_UID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "SERIES", TAG_SERIES_INSTANCE_UID); CopyTagKey(hDSGlobal, hDSLocal, pParent, "IMAGE", TAG_SOP_INSTANCE_UID); } else { L_DicomFreeDS(hDSLocal); return; } break; case QUERY_PATIENT_STUDY_ONLY: if (L_DicomGetParentKey(hDSGlobal, pParent) == NULL) { L_DicomInitDS(hDSLocal, CLASS_PATIENT_STUDY_QUERY_STUDY, DS_METAHEADER_ABSENT|DS_LITTLE_ENDIAN|DS_EXPLICIT_VR); pElement = L_DicomFindFirstElement(hDSLocal, NULL, TAG_QUERY_RETRIEVE_LEVEL, TRUE); if (pElement == NULL) { pElement = L_DicomInsertElement(hDSLocal, NULL, FALSE, TAG_QUERY_RETRIEVE_LEVEL, 0, FALSE, 0); } if (pElement != NULL) { L_DicomSetStringValue(hDSLocal, pElement, "STUDY", 1); } CopyTagKey(hDSGlobal, hDSLocal, pParent, "PATIENT", TAG_PATIENT_ID); } else { L_DicomFreeDS(hDSLocal); return; } break; } if (bFind) { switch (nQueryMethodGlobal) { case QUERY_PATIENT_ROOT: lpszClass = UID_PATIENT_ROOT_QUERY_FIND; break; case QUERY_STUDY_ROOT: lpszClass = UID_STUDY_ROOT_QUERY_FIND; break; case QUERY_PATIENT_STUDY_ONLY: lpszClass = UID_PATIENT_STUDY_QUERY_FIND; break; } nPresentationID = L_DicomFindAbstract(hAssociateAccept, lpszClass); if ((nPresentationID == 0) || (L_DicomGetResult(hAssociateAccept,nPresentationID) != PDU_ACCEPT_RESULT_SUCCESS)) { LogMessage(MSG_ERROR, "C-FIND-RQ\nPresentation ID not found"); L_DicomFreeDS(hDSLocal); return; } lstrcpy(szRetrieveAEsMsg, ""); StartProcess(PROCESS_C_FIND, nPresentationID); switch (uSecureMode) { case DICOM_SECURE_NONE: nResult = L_DicomSendCFindRequest( hNetGlobal, nPresentationID, uUniqueMessageID++, lpszClass, COMMAND_PRIORITY_MEDIUM, hDSLocal); break; case DICOM_SECURE_ISCL: nResult = L_DicomSendCFindRequest( hNetGlobalISCL, nPresentationID, uUniqueMessageID++, lpszClass, COMMAND_PRIORITY_MEDIUM, hDSLocal); break; case DICOM_SECURE_TLS: nResult = L_DicomSendCFindRequest( hNetGlobalTLS, nPresentationID, uUniqueMessageID++, lpszClass, COMMAND_PRIORITY_MEDIUM, hDSLocal); break; } LogMessage(MSG_SEND, "C-FIND-RQ"); if (nResult != DICOM_SUCCESS) FinishProcess(PROCESS_C_FIND); } else { HDICOMPDU hAssociateTemp; switch (nQueryMethodGlobal) { case QUERY_PATIENT_ROOT: lpszClass = UID_PATIENT_ROOT_QUERY_MOVE; break; case QUERY_STUDY_ROOT: lpszClass = UID_STUDY_ROOT_QUERY_MOVE; break; case QUERY_PATIENT_STUDY_ONLY: lpszClass = UID_PATIENT_STUDY_QUERY_MOVE; break; } switch (uSecureMode) { case DICOM_SECURE_NONE: hAssociateTemp = L_DicomGetAssociate(hNetGlobal); break; case DICOM_SECURE_ISCL: hAssociateTemp = L_DicomGetAssociate(hNetGlobalISCL); break; case DICOM_SECURE_TLS: hAssociateTemp = L_DicomGetAssociate(hNetGlobalTLS); break; } nPresentationID = L_DicomFindAbstract(hAssociateTemp, lpszClass); if ((nPresentationID == 0) || (L_DicomGetResult(hAssociateTemp, nPresentationID) != PDU_ACCEPT_RESULT_SUCCESS)) { LogMessage(MSG_ERROR, "C-MOVE-RQ\nPresentation ID not found"); L_DicomFreeDS(hDSLocal); return; } //Listen--Server will send an Associate Request as a result of the C-MOVE-RQ L_DicomListen ( hNetListenGlobal, NULL, //Host address (me) connections.connection[iIndexConnectionGlobal].uClientPort, //Host Port (me) 1 // nNbPeers ); LogMessage(MSG_SEND, "C-MOVE-RQ"); StartProcess(PROCESS_C_MOVE, nPresentationID); switch (uSecureMode) { case DICOM_SECURE_NONE: nResult = L_DicomSendCMoveRequest(hNetGlobal, nPresentationID, uUniqueMessageID++, lpszClass, COMMAND_PRIORITY_MEDIUM, L_DicomGetCalling(hAssociateAccept), hDSLocal); break; case DICOM_SECURE_ISCL: nResult = L_DicomSendCMoveRequest(hNetGlobalISCL, nPresentationID, uUniqueMessageID++, lpszClass, COMMAND_PRIORITY_MEDIUM, L_DicomGetCalling(hAssociateAccept), hDSLocal); break; case DICOM_SECURE_TLS: nResult = L_DicomSendCMoveRequest(hNetGlobalTLS, nPresentationID, uUniqueMessageID++, lpszClass, COMMAND_PRIORITY_MEDIUM, L_DicomGetCalling(hAssociateAccept), hDSLocal); break; } if (nResult != DICOM_SUCCESS) FinishProcess(PROCESS_C_MOVE); } L_DicomFreeDS(hDSLocal); }