def mitral_measurement_capture(): firstIndexMeasurements = "{container=':mMprCaptureFrame_MprCaptureListWidget' type='QModelIndex'}" bottomFrame = ":mMprFrame.mCoronalMprFrame_TriPlaneMprFrame" lineContourEmbedFrame = ":contourHandle.ToolButton-contourAction-lineRoiContour_QToolButton" tagMVTOLAA = ":mGroupFrame.MV to LAA_QModelIndex" x, y = squish.waitForObject(bottomFrame).height, squish.waitForObject( bottomFrame).width squish.mouseMove(squish.waitForObject(bottomFrame), 10, x - 20) squish.clickButton(squish.waitForObject(lineContourEmbedFrame)) squish.mousePress(bottomFrame, randint(0 + 50, x - 70), randint(0 + 50, y - 70), squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseRelease(bottomFrame, randint(0 + 50, x - 70), randint(0 + 50, y - 70), squish.Qt.LeftButton) # squish.snooze(0.5) # Drag and drop LVOT tag on first measurement capture image squish.mousePress(squish.waitForObject(tagMVTOLAA)) # squish.snooze(1) squish.mouseMove(squish.waitForObject(firstIndexMeasurements), 5, 5) squish.mouseRelease(squish.waitForObject(firstIndexMeasurements)) return
def export_study(study_name): # status bar status = squish.waitForObject(cvi42Objects.statusBar) # Searches for study, and exports squish.waitForObject(cvi42Objects.patientlistEditBox).setText(study_name) squish.openContextMenu( squish.waitForObjectItem(cvi42Objects.studyTreeitem, study_name), 50, 5, 0) squish.activateItem( squish.waitForObjectItem(cvi42Objects.contextMenu, "Export Study")) # export dialog flow squish.mouseClick( squish.waitForObjectItem(":splitter.sidebar_QSidebar", "My Computer"), 53, 13, 0, squish.Qt.LeftButton) squish.mouseClick( squish.waitForObjectItem(":stackedWidget.treeView_QTreeView", "DATA (D:)"), 33, 14, 0, squish.Qt.LeftButton) squish.doubleClick( squish.waitForObjectItem(":stackedWidget.treeView_QTreeView", "DATA (D:)"), 34, 11, 0, squish.Qt.LeftButton) squish.clickButton(squish.waitForObject(":dcmBrowser.Choose_QPushButton")) start = time.time() while True: if status.currentMessage() == "Export Images done": break else: pass end = time.time() test.log("Time to export study: %.2f" % (end - start))
def mitral_define_annulus(): mitralWindow = ":mMprFrame.mAxialMprFrame_TriPlaneMprFrame" annulusTab = ":cmr42MainWindow.mPageButtons[ePage::Annulus]_QToolButton" annulusStartButton = ":groupBox.mStartAssistedButton_QPushButton" topFrame = ":mMprFrame.mSagittalMprFrame_TriPlaneMprFrame" bottomFrame = ":mMprFrame.mCoronalMprFrame_TriPlaneMprFrame" # Click on start annulus squish.mouseClick(squish.waitForObject(mitralWindow), 180, 460, 0, squish.Qt.LeftButton) # Switch to annulus tab and start annulus squish.clickButton(squish.waitForObject(annulusTab)) squish.clickButton(squish.waitForObject(annulusStartButton)) # Hardcoded annulus drawing squish.mouseClick(squish.waitForObject(topFrame), 146, 162, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(topFrame), 148, 253, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(bottomFrame), 158, 181, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(bottomFrame), 154, 252, 0, squish.Qt.LeftButton) return
def aortic_annulus(): annulusTab = ":cmr42MainWindow.mPageButtons[ePage::Annulus]_QToolButton" perimeterPoints = ":cmr42MainWindow.ToolButton-contourAction-perimeterPoints_QToolButton" aorticWindow = ":mMprFrame.mAxialMprFrame_TriPlaneMprFrame" # Click on annulus tab squish.clickButton(squish.waitForObject(annulusTab)) # Click on the perimeter contour button squish.clickButton(squish.waitForObject(perimeterPoints)) # Hardcoded mouse clicks for drawing annulus measurement squish.mouseClick(squish.waitForObject(aorticWindow), 172, 153, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(aorticWindow), 101, 208, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(aorticWindow), 172, 277, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(aorticWindow), 239, 227, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.doubleClick(squish.waitForObject(aorticWindow), 175, 152, 0, squish.Qt.LeftButton) return
def save_workspace(workspace_name): # Grabs the status bar object to check current message status = squish.waitForObject(cvi42Objects.statusBar) # Saves workspace as name given squish.activateItem( squish.waitForObjectItem(cvi42Objects.menuBar, "Workspace")) squish.activateItem( squish.waitForObjectItem(cvi42Objects.workspaceButton, "Save Workspace As")) squish.waitForObject( cvi42Objects.workspaceWindowEdit).setText(workspace_name) squish.clickButton( squish.waitForObject(cvi42Objects.workspaceWindowOkButton)) start = time.time() while True: if status.currentMessage() == "Save workspace done.": break else: pass end = time.time() test.log("Saving workspace: %.2f" % (end - start)) return
def addServer(self, context): clientDetails = getClientDetails(context) squish.mouseClick(squish.waitForObject(self.SERVER_ADDRESS_BOX)) squish.type( squish.waitForObject(self.SERVER_ADDRESS_BOX), clientDetails['server'] ) squish.clickButton(squish.waitForObject(self.NEXT_BUTTON))
def load_series(window_given, series_num): series = ":scrollArea.frame-%s_SeriesThumbPreview" % (series_num - 1) window, x, y = find_window(window_given) # if series needed is bigger than 8, check if scrolling is needed to reach the series if object.exists(cvi42Objects.series_scrollbar): squish.scrollTo(squish.waitForObject(cvi42Objects.series_scrollbar), -505) if series_num > 8: squish.scrollTo( squish.waitForObject(cvi42Objects.series_scrollbar), 855) # Load series into window requested squish.mouseMove(squish.waitForObject(series), 5, 5) squish.mousePress(squish.waitForObject(series)) # squish.snooze(1) squish.mouseRelease(squish.waitForObject(window)) squish.snooze(0.2) if object.exists(":Load Volume.Yes_QPushButton"): squish.clickButton( squish.waitForObject(":Load Volume.Yes_QPushButton")) # Wait for progress bar time = loading_time() if time > 10: test.log("Time to load series: %.2f" % time) return
def enterPassword(self, password): try: squish.waitForObject(self.PASSWORD_BOX, 10000) squish.type(squish.waitForObject(self.PASSWORD_BOX), password) squish.clickButton(squish.waitForObject(self.OK_BUTTON)) except LookupError: pass
def createPublicLinkWithRole(self, role): radioObjectName = self.getRadioObjectForPermssion(role) squish.clickButton(squish.waitForObject(radioObjectName)) squish.clickButton(squish.waitForObject(self.CREATE_SHARE_BUTTON)) squish.waitFor(lambda: (squish.findObject( names.linkShares_0_0_QModelIndex).displayText == "Public link"))
def segment_forward(): segmentContour = ":mContourOptions.ToolButton-segAction_QToolButton" forwardContour = ":mContourOptions.ToolButton-segForwardAction_QToolButton" squish.mousePress(squish.waitForObject(segmentContour)) # squish.snooze(1) squish.mouseRelease(squish.waitForObject(segmentContour)) squish.clickButton(squish.waitForObject(forwardContour)) return
def add_to_report(): addToReportButton = ":cmr42MainWindow.Add Report_QToolButton" # Click on the add to report button squish.clickButton(squish.waitForObject(addToReportButton)) # Check report42 time check_report42() return
def ml_button(): mlButton = ":mContourDetectionTools.mlButton_SwitchingToolButton" squish.clickButton(squish.waitForObject(mlButton)) # Wait for progress bar time = studyFunctions.loading_time() test.log("biplanarLAX ML %.2f" % time) return
def loadFile(self, model, track_time=False): self.click(names.mwi_btn_open_file) # Navigate to the correct dir first self.setTextFieldValue(names.fdg_input_name, self.testdata_dir) squish.clickButton(waitForObject(names.fdg_btn_open)) self.setTextFieldValue(names.fdg_input_name, model) squish.clickButton(waitForObject(names.fdg_btn_open)) if track_time: return Performance.trackFileloadTime()
def reset_workspace(): menuBar = ":cmr42MainWindow.appMenuBar_QMenuBar" workspaceButton = ":cmr42MainWindow.workspaceMenu_QMenu" resetWorkspaceButtonOk = ":Reset Workspace.Reset_QPushButton" squish.activateItem(squish.waitForObjectItem(menuBar, "Workspace")) squish.activateItem( squish.waitForObjectItem(workspaceButton, "Reset Workspace")) squish.clickButton(squish.waitForObject(resetWorkspaceButtonOk)) # squish.snooze(2) return
def removePermissions(self, permissions): removePermissionsList = permissions.split(",") ( isEditPermissionAvailable, isSharePermissionAvailable, ) = self.getAvailablePermission() if 'share' in removePermissionsList and isSharePermissionAvailable: squish.clickButton( squish.waitForObject( names.scrollArea_permissionShare_QCheckBox)) if 'edit' in removePermissionsList and isEditPermissionAvailable: squish.clickButton( squish.waitForObject( names.scrollArea_permissionsEdit_QCheckBox))
def selectFoldersToSync(self, context): self.openSyncDialog() # first deselect all squish.mouseClick( squish.waitForObject(self.SYNC_DIALOG_ROOT_FOLDER), 11, 11, squish.Qt.NoModifier, squish.Qt.LeftButton, ) for row in context.table[1:]: squish.mouseClick( squish.waitForObjectItem(self.SYNC_DIALOG_FOLDER_TREE, "/." + row[0]), 11, 11, squish.Qt.NoModifier, squish.Qt.LeftButton, ) squish.clickButton(squish.waitForObject(self.SYNC_DIALOG_OK_BUTTON))
def close_cvi42(): while True: process_id = [ item.split()[1] for item in os.popen('tasklist').read().splitlines()[4:] if "cvi42.exe" in item.split() ] if len(process_id) >= 1: os.system("taskkill /im cvi42.exe") if object.exists(cvi42Objects.QuitOkButton): squish.clickButton( squish.waitForObject(cvi42Objects.QuitOkButton)) else: break return
def click_ml(button): toolBarObject = ":cmr42MainWindow.ToolBar_QToolBar" contextWindow = ":cmr42MainWindow_QMenu" # # If button exists in toolbar, clicks otherwise, find button # children = find_children_by_text(squish.waitForObject(toolBarObject), button) contextButton = find_context_menu(button) squish.openContextMenu(squish.waitForObject(contextButton), 30, 20, 0) squish.activateItem(squish.waitForObjectItem(contextWindow, button)) # squish.snooze(1) squish.clickButton(squish.waitForObject(contextButton)) # Wait for progress bar time = studyFunctions.loading_time() test.log("Short3d %s: %.2f "% (button, time)) return
def aortic_tricuspid(): tricuspidButton = ":mWorkflowGroupbox.mTricuspidPushButton_QPushButton" aorticWindow = ":mMprFrame.mAxialMprFrame_TriPlaneMprFrame" # Click on the tricuspid option squish.clickButton(squish.waitForObject(tricuspidButton)) # Hardcoded mouse clicks of tricuspid locations squish.mouseClick(squish.waitForObject(aorticWindow), 169, 195, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(aorticWindow), 197, 249, 0, squish.Qt.LeftButton) # squish.snooze(0.5) squish.mouseClick(squish.waitForObject(aorticWindow), 134, 243, 0, squish.Qt.LeftButton) # squish.snooze(1.5) return
def lineContour(window_name, num=3): lineContourButton = ":mContourTools.ToolButton-contourAction-lineRoiContour_QToolButton" # Grabs Qt equivalent of given window name window, x, y = studyFunctions.find_window(window_name) # Finds and clicks on the line contour button in the toolbar squish.clickButton(squish.waitForObject(lineContourButton)) counter = 0 while counter < num: # Mouse press and release inside the frame of the selected window squish.mousePress(window, randint(0 + 50, x - 70), randint(0 + 50, y - 70), squish.Qt.LeftButton) squish.mouseRelease(window, randint(0 + 50, x - 70), randint(0 + 50, y - 70), squish.Qt.LeftButton) counter += 1 return
def createPublicLink(self, context, resource, password='', permissions=''): radioObjectName = '' if permissions: radioObjectName = self.getRadioObjectForPermssion(permissions) test.compare( str(squish.waitForObjectExists(self.ITEM_TO_SHARE).text), resource.replace(context.userData['clientSyncPathUser1'], ''), ) if radioObjectName: test.compare(str(squish.waitForObjectExists(radioObjectName).text), permissions) squish.clickButton(squish.waitForObject(radioObjectName)) if password: squish.clickButton(squish.waitForObject(self.PASSWORD_CHECKBOX)) squish.mouseClick( squish.waitForObject(self.PASSWORD_CHECKBOX), 0, 0, squish.Qt.NoModifier, squish.Qt.LeftButton, ) squish.type( squish.waitForObject(self.PASSWORD_CHECKBOX), password, ) squish.clickButton(squish.waitForObject(self.CREATE_SHARE_BUTTON)) squish.waitFor(lambda: (squish.waitForObject( names.linkShares_0_0_QModelIndex).displayText == "Public link"))
def anonymize_study(study, anon_name): # If user is not in patient list page condition if object.exists(cvi42Objects.returnPatientlistButton) is True: squish.clickButton( squish.waitForObject(cvi42Objects.returnPatientlistButton)) # Grabs the status bar object to check current message status = squish.waitForObject(cvi42Objects.statusBar) if "\\" in study: studyUpdated = study.replace("\\", "") else: studyUpdated = study # Searches for study, and anonymizes squish.waitForObject(cvi42Objects.patientlistEditBox).setText(studyUpdated) squish.openContextMenu( squish.waitForObjectItem(cvi42Objects.studyTreeitem, study), 50, 5, 0) squish.activateItem( squish.waitForObjectItem(cvi42Objects.contextMenu, "Anonymize Study")) squish.waitForObject(cvi42Objects.anonymizeEditBox).setText(anon_name) squish.clickButton(squish.waitForObject(cvi42Objects.anonymizeOkButton)) start = time.time() # squish.snooze(4) while True: if status.currentMessage() == "Import Study done": break else: pass end = time.time() test.log("Anonymizing %s time: %.2f" % (study, (end - start))) return anon_name
def freehandContour(window_name): freehandContour = ":mContourTools.ToolButton-contourAction-freeDrawRoiContour_QToolButton" # Grabs Qt equivalent of given window name window, x, y = studyFunctions.find_window(window_name) # Finds and clicks on the Contour measurement button squish.clickButton(squish.waitForObject(freehandContour)) # Starts drawing freehand contour by pressing the left mouse button squish.mousePress(squish.waitForObject(window), randint(0 + 50, x - 70), randint(0 + 50, y - 70), squish.Qt.LeftButton) for i in range(3): squish.mouseMove(squish.waitForObject(window), randint(0 + 50, x - 70), randint(0 + 50, y - 70)) squish.mouseRelease(squish.waitForObject(window), randint(0 + 50, x - 70), randint(0 + 50, y - 70), squish.Qt.LeftButton) return
def curvedMeasContour(window_name, num=3): curvedMeasurementContour = ":mContourTools.ToolButton-contourAction-openSplinePerimeterPoints_QToolButton" # Grabs Qt equivalent of given window name window, x, y = studyFunctions.find_window(window_name) # Finds and clicks on the Contour measurement button squish.clickButton(squish.waitForObject(curvedMeasurementContour)) counter = 0 while counter < num - 1: # Mouse click inside the frame of the selected window squish.mouseClick(squish.waitForObject(window), randint(0 + 50, x - 70), randint(0 + 50, y - 70), 0, squish.Qt.LeftButton) counter += 1 squish.doubleClick(squish.waitForObject(window), randint(0 + 50, x - 70), randint(0 + 50, y - 70), 0, squish.Qt.LeftButton) return
def loadOtherTypeFiles(self, filename): # Navigate to the correct dir first self.setTextFieldValue(names.fdg_input_name, self.testdata_dir) squish.clickButton(waitForObject(names.fdg_btn_open)) self.setTextFieldValue(names.fdg_input_name, filename) squish.clickButton(waitForObject(names.fdg_btn_open)) squish.clickButton(waitForObject(names.mbo_btn_OK))
def flowContour(window_name, contour=1): flowContour = ":mContourTools.ToolButton-contourAction-flow1Contour_QToolButton" new_contour = ":mContourTools.ToolButton-contourAction-flow%sContour_QToolButton" % contour # Grabs Qt equivalent of given window name window, x, y = studyFunctions.find_window(window_name) # Finds and clicks on the Contour measurement button squish.clickButton(squish.waitForObject(new_contour)) # Draw a handcoded contour for now squish.mousePress(squish.waitForObject(window), ((x / 2) + 20), ((y / 2) + 20), squish.Qt.LeftButton) squish.mouseMove(squish.waitForObject(window), ((x / 2) + 20), ((y / 2) - 20)) squish.mouseMove(squish.waitForObject(window), ((x / 2) - 30), ((y / 2) - 20)) squish.mouseRelease(squish.waitForObject(window), ((x / 2) - 30), ((y / 2) - 20), squish.Qt.LeftButton) return
def delete_study(study_name): squish.waitForObject(cvi42Objects.patientlistEditBox).setText(study_name) squish.openContextMenu( squish.waitForObjectItem(cvi42Objects.studyTreeitem, study_name), 50, 13, 0) squish.activateItem( squish.waitForObjectItem(cvi42Objects.contextMenu, "Delete Study")) # squish.snooze(1) squish.clickButton(squish.waitForObject(cvi42Objects.DeleteStudyOkButton)) start = time.time() while True: if object.exists(cvi42Objects.UpdatingStudyListMessage): break else: pass end = time.time() # test.log("Time to delete study: %.2f" %(end-start)) squish.waitForObject(cvi42Objects.patientlistEditBox).setText("") return
def measurement_capture(): measurementCaptureButton = ":mViewerMeasurementFrame.mCameraButton_QPushButton" SelectAllButton = ":mCentralStack.mSelectAllButton_QPushButton" PushtoReportOk = ":mCentralStack.mOkButton_QPushButton" # Open measurement capture window and send to report squish.clickButton(squish.waitForObject(measurementCaptureButton)) squish.clickButton(squish.waitForObject(SelectAllButton)) squish.clickButton(squish.waitForObject(PushtoReportOk)) # Check report42 time check_report42() return
def selectSyncFolder(self, context): clientDetails = getClientDetails(context) try: squish.clickButton(squish.waitForObject(self.ERROR_OK_BUTTON)) except LookupError: pass squish.clickButton(squish.waitForObject(self.SELECT_LOCAL_FOLDER)) squish.mouseClick(squish.waitForObject(self.DIRECTORY_NAME_BOX)) squish.type( squish.waitForObject(self.DIRECTORY_NAME_BOX), clientDetails['localfolder'] ) squish.clickButton(squish.waitForObject(self.CHOOSE_BUTTON)) test.compare( str(squish.waitForObjectExists(self.SELECT_LOCAL_FOLDER).text), self.sanitizeFolderPath(clientDetails['localfolder']), )
def addCollaborator(self, receiver, permissions, isGroup=False): self.selectCollaborator(receiver, isGroup) permissionsList = permissions.split(",") editChecked, shareChecked = self.getAvailablePermission() if ('edit' in permissionsList and editChecked == False) or ('edit' not in permissionsList and editChecked == True): squish.clickButton( squish.waitForObject(self.EDIT_PERMISSIONS_CHECKBOX)) if ('share' in permissionsList and shareChecked == False) or ('share' not in permissionsList and shareChecked == True): squish.clickButton( squish.waitForObject(self.SHARE_PERMISSIONS_CHECKBOX)) squish.clickButton( squish.waitForObject(self.SHARING_DIALOG_CLOSE_BUTTON))