def __init__(self,parent = None,imagePath = None,name='',**keys) : qt.QWidget.__init__(self,parent,name,qt.Qt.WDestructiveClose) layout = qt.QHBoxLayout(self) self.__mainView = QubPixmapDisplayView(parent=self) self.__mainView.setScrollbarMode('Auto') layout.addWidget(self.__mainView) self.__mainPlug = QubPixmapZoomPlug(self.__mainView) self.__image2Pixmap = QubImage2Pixmap() self.__image2Pixmap.plug(self.__mainPlug) self.putImagePath(imagePath) actions = [] ####### ZOOM LIST ####### zoomActionList = QubZoomListAction(place = "toolbar", initZoom = 1,zoomValList = [0.25,0.5,0.75,1,1.5,2], show = 1,group = "image") actions.append(zoomActionList) ####### ZOOM Action ####### zoomFitOrFill = QubZoomAction(place = "toolbar",group = "image") actions.append(zoomFitOrFill) ####### LINK ZOOM ACTION ####### zoomFitOrFill.setList(zoomActionList) zoomActionList.setActionZoomMode(zoomFitOrFill) ####### PRINT ACTION ####### printAction = QubPrintPreviewAction(name="print",group="admin") printAction.previewConnect(getPrintPreviewDialog()) actions.append(printAction) self.__mainView.addAction(actions)
class QubImageDisplay(qt.QWidget) : def __init__(self,parent = None,imagePath = None,name='',**keys) : qt.QWidget.__init__(self,parent,name,qt.Qt.WDestructiveClose) layout = qt.QHBoxLayout(self) self.__mainView = QubPixmapDisplayView(parent=self) self.__mainView.setScrollbarMode('Auto') layout.addWidget(self.__mainView) self.__mainPlug = QubPixmapZoomPlug(self.__mainView) self.__image2Pixmap = QubImage2Pixmap() self.__image2Pixmap.plug(self.__mainPlug) self.putImagePath(imagePath) actions = [] ####### ZOOM LIST ####### zoomActionList = QubZoomListAction(place = "toolbar", initZoom = 1,zoomValList = [0.25,0.5,0.75,1,1.5,2], show = 1,group = "image") actions.append(zoomActionList) ####### ZOOM Action ####### zoomFitOrFill = QubZoomAction(place = "toolbar",group = "image") actions.append(zoomFitOrFill) ####### LINK ZOOM ACTION ####### zoomFitOrFill.setList(zoomActionList) zoomActionList.setActionZoomMode(zoomFitOrFill) ####### PRINT ACTION ####### printAction = QubPrintPreviewAction(name="print",group="admin") printAction.previewConnect(getPrintPreviewDialog()) actions.append(printAction) self.__mainView.addAction(actions) def putImagePath(self,imagePath) : if imagePath: image = qt.QImage(imagePath) if image.width() and image.height(): self.__image2Pixmap.putImage(image,image) self.setCaption('File : %s' % os.path.split(imagePath)[1]) else: raise StandardError("Can't open image %s" % imagePath)
def __init__(self, *args): BlissWidget.__init__(self, *args) self.camera = None self.update_disabled = False self.__cameraName = None self.__zoomList = [1.5, 2, 2.5, 3, 3.5, 4] self.__initZoom = 2 self.__fixWidth = -1 self.__fixHeight = -1 self.__swapRgb = True ####### PRINT ####### self.__printWidget = QubPrintPreview(self) self.__printWidget.resize(400, 500) printer = qt.QPrinter() printer.setOutputToFile(1) printer.setOutputFileName('/tmp/print_file.ps') self.__printWidget.setPrinter(printer) self.__printWidget.update() self.__beamAction = None self.__scaleAction = None self.__chosenActions = {} self.__wholeActions = [] self.__measureDialog = None ####### PRINT ACTION ####### printAction = QubPrintPreviewAction( name="print", group="admin", withVectorMenu=True) printAction.previewConnect(self.__printWidget) self.__wholeActions.append(printAction) ####### SAVE IMAGE ####### self.__saveAction = QubSaveImageAction(parent=self, label='Save falcon image', name="save", group="admin") self.__saveAction.setConnectCallBack(self._save_dialog_new) self.__wholeActions.append(self.__saveAction) self.__defaultSavePath = '/tmp' ####### UPDATE ####### update = QubToggleAction(name="update", group="image", initState=True) self.connect(update, qt.PYSIGNAL("StateChanged"), self.__cameraUpdate) self.__wholeActions.append(update) ####### Start Camera ###### startCamera = QubToggleAction( name="startCamera", group="image", iconName='bright-cont', initState=True) self.connect(startCamera, qt.PYSIGNAL("StateChanged"), self.__cameraStart) self.__wholeActions.append(startCamera) ####### BRIGHTNESS/CONTRAST ####### self.__brightcount = QubOpenDialogAction(name="bright-cont", iconName='bright-cont', group="image") self.__brightcount.setDialog(QubBrightnessContrastDialog(self)) self.__wholeActions.append(self.__brightcount) ###### Grid TOOL ###### self.__gridToolAction = QubOpenDialogAction(parent=self, name='grid_tool', iconName='rectangle', label='Grid tool', group="Tools") # place="contextmenu") self.__gridDialog = GridDialog( self, "Grid Dialog", flags=qt.Qt.WStyle_StaysOnTop) self.__gridToolAction.setConnectCallBack(self._grid_dialog_connect_hdlr) self.__wholeActions.append(self.__gridToolAction) self.__previous_pos_dict = {} self.__beamWidth = 0 self.__beamHeight = 0 ####### BEAM ACTION ####### self.__beamAction = QubBeamAction(name="beam", group="Tools") self.__wholeActions.append(self.__beamAction) self.connect(self.__beamAction, qt.PYSIGNAL("BeamSelected"), self.beamSelection) ####### SCALE ####### self.__scaleAction = QubScaleAction(name='scale', group='Tools') self.__wholeActions.append(self.__scaleAction) self.__wholeActions.extend(self.__creatStdActions()) ####### ACTION INFO ####### actionInfo = QubInfoAction(name="actionInfo", group="image", place="statusbar") self.__wholeActions.append(actionInfo) ####### CHANGE FOREGROUND COLOR ####### self.__fcoloraction = QubForegroundColorAction(name="color", group="image") self.__wholeActions.append(self.__fcoloraction) ####### MEASURE ####### self.__measureAction = QubOpenDialogAction(parent=self, name='measure', iconName='measure', label='Measure', group="Tools") self.__measureAction.setConnectCallBack(self._measure_dialog_new) self.__wholeActions.append(self.__measureAction) # ###### POSITION TOOL ###### # self.__posToolAction = QubOpenDialogAction(parent=self, name='pos_tool', # iconName='circle', label='Position tool', # group="Tools") # self.__posToolAction.setConnectCallBack(self._line_dialog_new) # self.__wholeActions.append(self.__posToolAction) ####### ZOOM LIST ####### zoomActionList = QubZoomListAction(place="toolbar", initZoom=1, zoomValList=[0.1, 0.25, 0.5, 0.75, 1, 1.5, 2], show=1, group="zoom") self.__wholeActions.append(zoomActionList) ####### ZOOM Action ####### self.__zoomFitOrFill = QubZoomAction(place="toolbar", group="zoom") self.__wholeActions.append(self.__zoomFitOrFill) ####### LINK ZOOM ACTION ####### self.__zoomFitOrFill.setList(zoomActionList) zoomActionList.setActionZoomMode(self.__zoomFitOrFill) ####### ZOOM WINDOW ####### self.__zoomAction = QubZoomRectangle( label='Zoom Crop', place="toolbar", show=1, group="zoom") self.connect(self.__zoomAction, qt.PYSIGNAL("Actif"), self.__hide_show_zoom) self.__wholeActions.append(self.__zoomAction) self.__splitter = qt.QSplitter(qt.Qt.Horizontal, self) self.__splitter.show() self.__mainVideo = QubPixmapDisplayView(self.__splitter) self.__mainVideo.show() self.__mainVideo.setScrollbarMode('Auto') self.__mainPlug = _MainVideoPlug(self.__mainVideo, self.__zoomAction) actions = self.__creatStdActions() ####### ZOOM LIST ####### self.__zoomActionList = QubZoomListAction(place="toolbar", keepROI=True, initZoom=self.__initZoom, zoomValList=self.__zoomList, show=1, group="zoom") actions.insert(0, self.__zoomActionList) ####### ZOOM Action ####### zoomFitOrFill = QubZoomAction(place="toolbar", keepROI=True, group="zoom") zoomFitOrFill.setList(self.__zoomActionList) self.__zoomActionList.setActionZoomMode(zoomFitOrFill) actions.append(zoomFitOrFill) self.__zoomVideo = QubPixmapDisplayView(self.__splitter, None, actions) self.__zoomVideo.hide() self.__zoomPlug = _ZoomPlug(self.__zoomVideo) self.__zoomPlug.zoom().setZoom(2, 2) self.__cbk = _rectangleZoom(self.__zoomAction, self.__zoomPlug) layout = qt.QHBoxLayout(self, 0, 0, "layout") layout.addWidget(self.__splitter) self.__image2Pixmap = QubImage2Pixmap() self.__image2Pixmap.plug(self.__mainPlug) self.__zoomPlug.setPoller(self.__image2Pixmap) self.__jpegDecompress = QubStdData2Image() self.__jpegDecompress.setSwapRGB(True) self.__jpeg2image = None ####### PROPERTY ####### self.addProperty('camera', 'string', '') self.addProperty('zoom list', 'string', ','.join( [str(x) for x in self.__zoomList])) self.addProperty('init zoom', 'integer', self.__initZoom) self.addProperty('swap rgb', 'boolean', True) self.addProperty('fix : width', 'integer', -1) self.addProperty('fix : height', 'integer', -1) self.addProperty('action : print', 'boolean', True) self.addProperty('action : save image', 'boolean', True) self.addProperty('action : update', 'boolean', True) self.addProperty('action : startCamera', 'boolean', True) self.addProperty('action : brightness contrast', 'boolean', True) self.addProperty('action : beam', 'boolean', True) self.addProperty('action : scale', 'boolean', True) self.addProperty('action : change foreground color', 'boolean', True) self.addProperty('action : measure', 'boolean', True) self.addProperty('action : measure (place)', 'combo', ('toolbar', 'contextmenu'), 'toolbar') self.addProperty('action : zoom window', 'boolean', True) self.addProperty('action : zoom fit or fill', 'boolean', True) self.addProperty('action : zoom list', 'boolean', True) self.addProperty('action : x,y coordinates', 'boolean', True) self.addProperty('action : default color', 'combo', ('black', 'red', 'green'), 'black') self.addProperty('action : save image (place)', "combo", ('toolbar', 'contextmenu'), 'toolbar') self.addProperty('action : save image (default path)', "string", '/tmp') self.addProperty('action : save image (show always configure)', "boolean", True) self.addProperty("diffractometer", "string", "") self.diffractometerHwobj = None ####### SIGNAL ####### self.defineSignal("BeamPositionChanged", ()) ####### SLOT ####### self.defineSlot("changeBeamPosition", ()) self.defineSlot("changePixelScale", ()) self.defineSlot('getView', ()) self.defineSlot('getImage', ()) ####### LINK VIEW AND SUB VIEW ####### mainView = self.__mainVideo.view() zoomView = self.__zoomVideo.view() mainView.addEventMgrLink(zoomView, mainView.canvas(), zoomView.canvas(), mainView.matrix(), zoomView.matrix()) self.imageReceivedConnected = None
class CameraBrick(BlissWidget): def __init__(self, *args): BlissWidget.__init__(self, *args) self.camera = None self.update_disabled = False self.__cameraName = None self.__zoomList = [1.5, 2, 2.5, 3, 3.5, 4] self.__initZoom = 2 self.__fixWidth = -1 self.__fixHeight = -1 self.__swapRgb = True ####### PRINT ####### self.__printWidget = QubPrintPreview(self) self.__printWidget.resize(400, 500) printer = qt.QPrinter() printer.setOutputToFile(1) printer.setOutputFileName('/tmp/print_file.ps') self.__printWidget.setPrinter(printer) self.__printWidget.update() self.__beamAction = None self.__scaleAction = None self.__chosenActions = {} self.__wholeActions = [] self.__measureDialog = None ####### PRINT ACTION ####### printAction = QubPrintPreviewAction( name="print", group="admin", withVectorMenu=True) printAction.previewConnect(self.__printWidget) self.__wholeActions.append(printAction) ####### SAVE IMAGE ####### self.__saveAction = QubSaveImageAction(parent=self, label='Save falcon image', name="save", group="admin") self.__saveAction.setConnectCallBack(self._save_dialog_new) self.__wholeActions.append(self.__saveAction) self.__defaultSavePath = '/tmp' ####### UPDATE ####### update = QubToggleAction(name="update", group="image", initState=True) self.connect(update, qt.PYSIGNAL("StateChanged"), self.__cameraUpdate) self.__wholeActions.append(update) ####### Start Camera ###### startCamera = QubToggleAction( name="startCamera", group="image", iconName='bright-cont', initState=True) self.connect(startCamera, qt.PYSIGNAL("StateChanged"), self.__cameraStart) self.__wholeActions.append(startCamera) ####### BRIGHTNESS/CONTRAST ####### self.__brightcount = QubOpenDialogAction(name="bright-cont", iconName='bright-cont', group="image") self.__brightcount.setDialog(QubBrightnessContrastDialog(self)) self.__wholeActions.append(self.__brightcount) ###### Grid TOOL ###### self.__gridToolAction = QubOpenDialogAction(parent=self, name='grid_tool', iconName='rectangle', label='Grid tool', group="Tools") # place="contextmenu") self.__gridDialog = GridDialog( self, "Grid Dialog", flags=qt.Qt.WStyle_StaysOnTop) self.__gridToolAction.setConnectCallBack(self._grid_dialog_connect_hdlr) self.__wholeActions.append(self.__gridToolAction) self.__previous_pos_dict = {} self.__beamWidth = 0 self.__beamHeight = 0 ####### BEAM ACTION ####### self.__beamAction = QubBeamAction(name="beam", group="Tools") self.__wholeActions.append(self.__beamAction) self.connect(self.__beamAction, qt.PYSIGNAL("BeamSelected"), self.beamSelection) ####### SCALE ####### self.__scaleAction = QubScaleAction(name='scale', group='Tools') self.__wholeActions.append(self.__scaleAction) self.__wholeActions.extend(self.__creatStdActions()) ####### ACTION INFO ####### actionInfo = QubInfoAction(name="actionInfo", group="image", place="statusbar") self.__wholeActions.append(actionInfo) ####### CHANGE FOREGROUND COLOR ####### self.__fcoloraction = QubForegroundColorAction(name="color", group="image") self.__wholeActions.append(self.__fcoloraction) ####### MEASURE ####### self.__measureAction = QubOpenDialogAction(parent=self, name='measure', iconName='measure', label='Measure', group="Tools") self.__measureAction.setConnectCallBack(self._measure_dialog_new) self.__wholeActions.append(self.__measureAction) # ###### POSITION TOOL ###### # self.__posToolAction = QubOpenDialogAction(parent=self, name='pos_tool', # iconName='circle', label='Position tool', # group="Tools") # self.__posToolAction.setConnectCallBack(self._line_dialog_new) # self.__wholeActions.append(self.__posToolAction) ####### ZOOM LIST ####### zoomActionList = QubZoomListAction(place="toolbar", initZoom=1, zoomValList=[0.1, 0.25, 0.5, 0.75, 1, 1.5, 2], show=1, group="zoom") self.__wholeActions.append(zoomActionList) ####### ZOOM Action ####### self.__zoomFitOrFill = QubZoomAction(place="toolbar", group="zoom") self.__wholeActions.append(self.__zoomFitOrFill) ####### LINK ZOOM ACTION ####### self.__zoomFitOrFill.setList(zoomActionList) zoomActionList.setActionZoomMode(self.__zoomFitOrFill) ####### ZOOM WINDOW ####### self.__zoomAction = QubZoomRectangle( label='Zoom Crop', place="toolbar", show=1, group="zoom") self.connect(self.__zoomAction, qt.PYSIGNAL("Actif"), self.__hide_show_zoom) self.__wholeActions.append(self.__zoomAction) self.__splitter = qt.QSplitter(qt.Qt.Horizontal, self) self.__splitter.show() self.__mainVideo = QubPixmapDisplayView(self.__splitter) self.__mainVideo.show() self.__mainVideo.setScrollbarMode('Auto') self.__mainPlug = _MainVideoPlug(self.__mainVideo, self.__zoomAction) actions = self.__creatStdActions() ####### ZOOM LIST ####### self.__zoomActionList = QubZoomListAction(place="toolbar", keepROI=True, initZoom=self.__initZoom, zoomValList=self.__zoomList, show=1, group="zoom") actions.insert(0, self.__zoomActionList) ####### ZOOM Action ####### zoomFitOrFill = QubZoomAction(place="toolbar", keepROI=True, group="zoom") zoomFitOrFill.setList(self.__zoomActionList) self.__zoomActionList.setActionZoomMode(zoomFitOrFill) actions.append(zoomFitOrFill) self.__zoomVideo = QubPixmapDisplayView(self.__splitter, None, actions) self.__zoomVideo.hide() self.__zoomPlug = _ZoomPlug(self.__zoomVideo) self.__zoomPlug.zoom().setZoom(2, 2) self.__cbk = _rectangleZoom(self.__zoomAction, self.__zoomPlug) layout = qt.QHBoxLayout(self, 0, 0, "layout") layout.addWidget(self.__splitter) self.__image2Pixmap = QubImage2Pixmap() self.__image2Pixmap.plug(self.__mainPlug) self.__zoomPlug.setPoller(self.__image2Pixmap) self.__jpegDecompress = QubStdData2Image() self.__jpegDecompress.setSwapRGB(True) self.__jpeg2image = None ####### PROPERTY ####### self.addProperty('camera', 'string', '') self.addProperty('zoom list', 'string', ','.join( [str(x) for x in self.__zoomList])) self.addProperty('init zoom', 'integer', self.__initZoom) self.addProperty('swap rgb', 'boolean', True) self.addProperty('fix : width', 'integer', -1) self.addProperty('fix : height', 'integer', -1) self.addProperty('action : print', 'boolean', True) self.addProperty('action : save image', 'boolean', True) self.addProperty('action : update', 'boolean', True) self.addProperty('action : startCamera', 'boolean', True) self.addProperty('action : brightness contrast', 'boolean', True) self.addProperty('action : beam', 'boolean', True) self.addProperty('action : scale', 'boolean', True) self.addProperty('action : change foreground color', 'boolean', True) self.addProperty('action : measure', 'boolean', True) self.addProperty('action : measure (place)', 'combo', ('toolbar', 'contextmenu'), 'toolbar') self.addProperty('action : zoom window', 'boolean', True) self.addProperty('action : zoom fit or fill', 'boolean', True) self.addProperty('action : zoom list', 'boolean', True) self.addProperty('action : x,y coordinates', 'boolean', True) self.addProperty('action : default color', 'combo', ('black', 'red', 'green'), 'black') self.addProperty('action : save image (place)', "combo", ('toolbar', 'contextmenu'), 'toolbar') self.addProperty('action : save image (default path)', "string", '/tmp') self.addProperty('action : save image (show always configure)', "boolean", True) self.addProperty("diffractometer", "string", "") self.diffractometerHwobj = None ####### SIGNAL ####### self.defineSignal("BeamPositionChanged", ()) ####### SLOT ####### self.defineSlot("changeBeamPosition", ()) self.defineSlot("changePixelScale", ()) self.defineSlot('getView', ()) self.defineSlot('getImage', ()) ####### LINK VIEW AND SUB VIEW ####### mainView = self.__mainVideo.view() zoomView = self.__zoomVideo.view() mainView.addEventMgrLink(zoomView, mainView.canvas(), zoomView.canvas(), mainView.matrix(), zoomView.matrix()) self.imageReceivedConnected = None def safeConnect(self): if not self.imageReceivedConnected and self.camera is not None: #print "CONNECTING 0" self.camera.connect('imageReceived', self.__imageReceived) # self.connect(self.camera,qt.PYSIGNAL('imageReceived'),self.__imageReceived) self.imageReceivedConnected = False def safeDisconnect(self): if self.imageReceivedConnected and self.camera is not None: #print "DISCONNECTING 3" self.camera.disconnect('imageReceived', self.__imageReceived) # self.disconnect(self.camera,qt.PYSIGNAL('imageReceived'),self.__imageReceived) self.imageReceivedConnected = False def disable_update(self): # self.__imageReceived(DISABLED_JPEG,DISABLED_WIDTH,DISABLED_HEIGHT) self.update_disabled = True def enable_update(self): self.update_disabled = False def __imageReceived(self, image, width, height, force_update=False): if self.update_disabled: return if not force_update: if not self.isVisible(): return if isinstance(image, qt.QImage): if self.__swapRgb: image = image.swapRGB() self.__jpeg2image.setImage(image, image) else: self.__jpegDecompress.putData(image, width, height) def propertyChanged(self, property, oldValue, newValue): if property == 'camera': # if self.camera is not None and not self.isRunning(): # self.safeDisconnect() self.safeDisconnect() self.camera = self.getHardwareObject(newValue) self.__hwoName = newValue if self.camera is not None: try: self.__tangoName = self.camera.tangoname except BaseException: self.__tangoName = "" try: camera_role = self.camera.getDeviceByRole('camera') if camera_role is not None: self.camera = camera_role except AttributeError: pass self.__brightcount.setCamera(self.camera) elif property == 'zoom list': zoomList = [float(x) for x in newValue.split(',')] if zoomList != self.__zoomList: self.__zoomList = zoomList self.__zoomActionList.changeZoomList(zoomList, self.__initZoom) elif property == 'init zoom': if newValue != self.__initZoom: self.__initZoom = newValue self.__zoomActionList.changeZoomList(self.__zoomList, newValue) elif property == 'swap rgb': self.__jpegDecompress.setSwapRGB(newValue) self.__swapRgb = newValue elif property == 'action : print': self.__chosenActions['print'] = newValue elif property == 'action : save image': self.__chosenActions['save'] = newValue elif property == 'action : update': self.__chosenActions['update'] = newValue elif property == 'action : startCamera': self.__chosenActions['startCamera'] = newValue elif property == 'action : brightness contrast': self.__chosenActions['bright-cont'] = newValue elif property == 'action : beam': self.__chosenActions['beam'] = newValue elif property == 'action : scale': self.__chosenActions['scale'] = newValue elif property == 'action : change foreground color': self.__chosenActions['color'] = newValue elif property == 'action : measure': self.__chosenActions['measure'] = newValue elif property == 'action : zoom window': self.__chosenActions['zoomrect'] = newValue elif property == 'action : zoom fit or fill': self.__chosenActions['Zoom tools'] = newValue elif property == 'action : zoom list': self.__chosenActions['zoomlist'] = newValue elif property == 'action : x,y coordinates': self.__chosenActions['position'] = newValue elif property == 'action : default color': self.__chosenDefaultColor = newValue elif property == 'action : save image (place)': self.__saveAction.setPlace(newValue, True) elif property == 'action : measure (place)': self.__measureAction.setPlace(newValue, True) elif property == 'action : save image (default path)': self.__defaultSavePath = newValue elif property == 'action : save image (show always configure)': self.__saveAction.setConfigureOnClick(newValue) elif property == 'fix : width': self.__fixWidth = newValue elif property == 'fix : height': self.__fixHeight = newValue elif property == "diffractometer": self.diffractometerHwobj = self.getHardwareObject(newValue) if self.diffractometerHwobj is not None: self.__previous_pos_dict = self.diffractometerHwobj.getPositions() self.diffractometerHwobj.connect("minidiffStateChanged", self.diffractometerChanged) if self.diffractometerHwobj.zoomMotor is not None: zoom = self.diffractometerHwobj.zoomMotor.getPosition() xSize, ySize = self.diffractometerHwobj.getCalibrationData(zoom) #xSize,ySize = self.__scaleAction.xPixelSize(), self.__scaleAction.yPixelSize() self.diffractometerHwobj.getBeamInfo(self.__getBeamInfo) beam_pos_x = self.diffractometerHwobj.getBeamPosX() beam_pos_y = self.diffractometerHwobj.getBeamPosY() self.__gridDialog.set_x_pixel_size(xSize) self.__gridDialog.set_y_pixel_size(ySize) self.__gridDialog.set_beam_position(beam_pos_x, beam_pos_y, self.__beamWidth, self.__beamHeight) def run(self): chosenActions = [] for action in self.__wholeActions: if self.__chosenActions.get(action.name(), True): chosenActions.append(action) self.__mainVideo.addAction(chosenActions) if not self.__chosenActions.get('update', False): self.__cameraUpdate(True) if not self.__chosenActions.get('startCamera', False): self.__cameraStart(True) if self.__fixWidth != -1 and self.__fixHeight != -1: self.__mainVideo.view().setFixedSize(self.__fixWidth + 4, self.__fixHeight + 4) self.__startIdle = qt.QTimer(self) qt.QObject.connect(self.__startIdle, qt.SIGNAL('timeout()'), self.__idleRun) self.__startIdle.start(0) def __idleRun(self): self.__startIdle.stop() self.__fcoloraction.setColor(self.__chosenDefaultColor) self.__mainVideo.view().setForegroundColor(qt.QColor(self.__chosenDefaultColor)) def stop(self): self.safeDisconnect() def beamSelection(self, x, y): self.emit(qt.PYSIGNAL("BeamPositionChanged"), (x, y)) self.changeBeamPosition(x, y) def changeBeamPosition(self, x, y, beam_width=None, beam_height=None): self.__beamAction.setBeamPosition(x, y) try: if not beam_width: beam_width = self.__beamWidth if not beam_height: beam_height = self.__beamHeight self.__gridDialog.set_beam_position(x, y, beam_width, beam_height) except BaseException: pass def changePixelScale(self, sizex, sizey): self.__scaleAction.setXPixelSize(sizex) self.__scaleAction.setYPixelSize(sizey) if self.__measureDialog: self.__measureDialog.setXPixelSize(sizex) self.__measureDialog.setYPixelSize(sizey) self.__gridDialog.set_x_pixel_size(sizex) self.__gridDialog.set_y_pixel_size(sizey) def getView(self, key): try: key['drawing'] = self.__mainVideo.view() key['view'] = self.__mainVideo key['hwname'] = self.__hwoName key['dsname'] = self.__tangoName except BaseException: pass def getImage(self, key): if self.__jpeg2image is not None: try: key['image'] = self.__jpeg2image.getLastImage() except BaseException: pass def __creatStdActions(self): actions = [] ####### MOUSE POSITION ####### posaction = QubPositionAction(name="position", group="image", place="statusbar") actions.append(posaction) return actions def __cameraUpdate(self, onoff): if onoff: self.__jpeg2image = _Jpeg2ImagePlug(self.__image2Pixmap) self.__jpegDecompress.plug(self.__jpeg2image) if self.camera is not None: imageInfo = self.camera.imageType() else: imageInfo = None imType = self.__jpegDecompress.STANDARD if imageInfo: if imageInfo.type() == 'bayer': imType = self.__jpegDecompress.BAYER_RG elif imageInfo.type() == 'raw': imType = self.__jpegDecompress.RAW self.__jpegDecompress.setImageType(imType) self.safeConnect() else: self.safeDisconnect() self.__jpeg2image.setEnd() def __cameraStart(self, onoff): if onoff: print "********************************************************Set the camera ON" if self.camera is not None: self.camera.setLive(True) else: print "camera is none" else: print "****************************************************Set the camera off" if self.camera is not None: print "camera :" print self.camera self.camera.setLive(False) else: print "camera is none" def __hide_show_zoom(self, actif): if actif: if self.__chosenActions['Zoom tools']: self.__zoomFitOrFill.setState(True) else: self.__mainVideo.setScrollbarMode('Fit2Screen') self.__zoomPlug.start() self.__zoomVideo.show() splitterWidth = self.__splitter.width() self.__splitter.setSizes( [splitterWidth / 3, splitterWidth - splitterWidth / 3]) else: if self.__chosenActions['Zoom tools']: self.__zoomFitOrFill.setState(False) else: self.__mainVideo.setScrollbarMode('Auto') self.__zoomPlug.stop() self.__zoomVideo.hide() def _measure_dialog_new(self, openDialogAction, aQubImage): try: self.__measureDialog = QubMeasureListDialog(self, canvas=aQubImage.canvas(), matrix=aQubImage.matrix(), eventMgr=aQubImage) xSize, ySize = self.__scaleAction.xPixelSize(), self.__scaleAction.yPixelSize() self.__measureDialog.setXPixelSize(xSize) self.__measureDialog.setYPixelSize(ySize) self.__measureDialog.connect(aQubImage, qt.PYSIGNAL("ForegroundColorChanged"), self.__measureDialog.setDefaultColor) openDialogAction.setDialog(self.__measureDialog) except BaseException: import traceback traceback.print_exc() def _grid_dialog_connect_hdlr(self, openDialogAction, aQubImage): try: self.__gridDialog.set_qub_event_mgr(aQubImage) openDialogAction.setDialog(self.__gridDialog) except BaseException: import traceback traceback.print_exc() def __getBeamInfo(self, ret): self.__beamWidth = float(ret["size_x"]) self.__beamHeight = float(ret["size_y"]) #self.__beamShape = ret["shape"] def _save_dialog_new(self, openDialogAction, aQubImage): saveDialog = QubSaveImageDialog( self, matrix=aQubImage.matrix(), canvas=aQubImage.canvas()) saveDialog.setImage2Pixmap(self.__image2Pixmap) saveDialog.setSavePath(self.__defaultSavePath) openDialogAction.setDialog(saveDialog) def instanceMirrorChanged(self, mirror): #print "INSTANCEMIRRORCHANGED",mirror,BlissWidget.isInstanceMirrorAllow() return if BlissWidget.isInstanceModeSlave(): if BlissWidget.isInstanceMirrorAllow(): self.safeConnect() else: self.safeDisconnect() def diffractometerChanged(self, *args): """ Handles diffractometer change events, connected to the signal minidiffStateChanged of the diffractometer hardware object. """ if self.diffractometerHwobj.isReady(): pos_dict = self.diffractometerHwobj.getPositions() p1 = self.diffractometerHwobj.motor_positions_to_screen( self.__previous_pos_dict) p2 = (self.diffractometerHwobj.getBeamPosX(), self.diffractometerHwobj.getBeamPosY()) dx = p2[0] - p1[0] dy = p2[1] - p1[1] if dy != 0: self.__gridDialog.move_grid_ver(-dy) if dx != 0: self.__gridDialog.move_grid_hor(-dx) #print dx, dy self.__previous_pos_dict = pos_dict
def __init__(self, *args): BlissWidget.__init__(self, *args) self.camera = None self.update_disabled = False self.__cameraName = None self.__zoomList = [1.5,2,2.5,3,3.5,4] self.__initZoom = 2 self.__fixWidth = -1 self.__fixHeight = -1 self.__swapRgb = True ####### PRINT ####### self.__printWidget = QubPrintPreview(self) self.__printWidget.resize(400,500) printer = qt.QPrinter() printer.setOutputToFile(1) printer.setOutputFileName('/tmp/print_file.ps') self.__printWidget.setPrinter(printer) self.__printWidget.update() self.__beamAction = None self.__scaleAction = None self.__chosenActions = {} self.__wholeActions = [] self.__measureDialog = None ####### PRINT ACTION ####### printAction = QubPrintPreviewAction(name="print",group="admin",withVectorMenu=True) printAction.previewConnect(self.__printWidget) self.__wholeActions.append(printAction) ####### SAVE IMAGE ####### self.__saveAction = QubSaveImageAction(parent=self, label='Save falcon image', name="save", group="admin") self.__saveAction.setConnectCallBack(self._save_dialog_new) self.__wholeActions.append(self.__saveAction) self.__defaultSavePath = '/tmp' ####### UPDATE ####### update = QubToggleAction(name="update",group="image",initState=True) self.connect(update,qt.PYSIGNAL("StateChanged"),self.__cameraUpdate) self.__wholeActions.append(update) ####### Start Camera ###### startCamera = QubToggleAction(name="startCamera", group="image", iconName = 'bright-cont', initState=True) self.connect(startCamera, qt.PYSIGNAL("StateChanged"), self.__cameraStart) self.__wholeActions.append(startCamera) ####### BRIGHTNESS/CONTRAST ####### self.__brightcount = QubOpenDialogAction(name="bright-cont", iconName = 'bright-cont', group="image") self.__brightcount.setDialog(QubBrightnessContrastDialog(self)) self.__wholeActions.append(self.__brightcount) ###### Grid TOOL ###### self.__gridToolAction = QubOpenDialogAction(parent=self, name='grid_tool', iconName='rectangle', label='Grid tool', group="Tools") #place="contextmenu") self.__gridDialog = GridDialog(self, "Grid Dialog", flags = qt.Qt.WStyle_StaysOnTop) self.__gridToolAction.setConnectCallBack(self._grid_dialog_connect_hdlr) self.__wholeActions.append(self.__gridToolAction) self.__previous_pos_dict = {} self.__beamWidth = 0 self.__beamHeight = 0 ####### BEAM ACTION ####### self.__beamAction = QubBeamAction(name="beam", group="Tools") self.__wholeActions.append(self.__beamAction) self.connect(self.__beamAction,qt.PYSIGNAL("BeamSelected"), self.beamSelection) ####### SCALE ####### self.__scaleAction = QubScaleAction(name='scale',group='Tools') self.__wholeActions.append(self.__scaleAction) self.__wholeActions.extend(self.__creatStdActions()) ####### ACTION INFO ####### actionInfo = QubInfoAction(name="actionInfo", group="image",place="statusbar") self.__wholeActions.append(actionInfo) ####### CHANGE FOREGROUND COLOR ####### self.__fcoloraction = QubForegroundColorAction(name="color", group="image") self.__wholeActions.append(self.__fcoloraction) ####### MEASURE ####### self.__measureAction = QubOpenDialogAction(parent=self, name='measure', iconName='measure', label='Measure', group="Tools") self.__measureAction.setConnectCallBack(self._measure_dialog_new) self.__wholeActions.append(self.__measureAction) # ###### POSITION TOOL ###### # self.__posToolAction = QubOpenDialogAction(parent=self, name='pos_tool', # iconName='circle', label='Position tool', # group="Tools") # self.__posToolAction.setConnectCallBack(self._line_dialog_new) # self.__wholeActions.append(self.__posToolAction) ####### ZOOM LIST ####### zoomActionList = QubZoomListAction(place = "toolbar", initZoom = 1,zoomValList = [0.1,0.25,0.5,0.75,1,1.5,2], show = 1,group = "zoom") self.__wholeActions.append(zoomActionList) ####### ZOOM Action ####### self.__zoomFitOrFill = QubZoomAction(place = "toolbar",group = "zoom") self.__wholeActions.append(self.__zoomFitOrFill) ####### LINK ZOOM ACTION ####### self.__zoomFitOrFill.setList(zoomActionList) zoomActionList.setActionZoomMode(self.__zoomFitOrFill) ####### ZOOM WINDOW ####### self.__zoomAction = QubZoomRectangle(label='Zoom Crop',place="toolbar", show=1, group="zoom") self.connect(self.__zoomAction,qt.PYSIGNAL("Actif"),self.__hide_show_zoom) self.__wholeActions.append(self.__zoomAction) self.__splitter = qt.QSplitter(qt.Qt.Horizontal,self) self.__splitter.show() self.__mainVideo = QubPixmapDisplayView(self.__splitter) self.__mainVideo.show() self.__mainVideo.setScrollbarMode('Auto') self.__mainPlug = _MainVideoPlug(self.__mainVideo,self.__zoomAction) actions = self.__creatStdActions() ####### ZOOM LIST ####### self.__zoomActionList = QubZoomListAction(place = "toolbar",keepROI = True, initZoom = self.__initZoom,zoomValList = self.__zoomList, show = 1,group = "zoom") actions.insert(0,self.__zoomActionList) ####### ZOOM Action ####### zoomFitOrFill = QubZoomAction(place = "toolbar",keepROI = True,group = "zoom") zoomFitOrFill.setList(self.__zoomActionList) self.__zoomActionList.setActionZoomMode(zoomFitOrFill) actions.append(zoomFitOrFill) self.__zoomVideo = QubPixmapDisplayView(self.__splitter,None,actions) self.__zoomVideo.hide() self.__zoomPlug = _ZoomPlug(self.__zoomVideo) self.__zoomPlug.zoom().setZoom(2,2) self.__cbk = _rectangleZoom(self.__zoomAction,self.__zoomPlug) layout = qt.QHBoxLayout(self,0,0,"layout") layout.addWidget(self.__splitter) self.__image2Pixmap = QubImage2Pixmap() self.__image2Pixmap.plug(self.__mainPlug) self.__zoomPlug.setPoller(self.__image2Pixmap) self.__jpegDecompress = QubStdData2Image() self.__jpegDecompress.setSwapRGB(True) self.__jpeg2image = None ####### PROPERTY ####### self.addProperty('camera','string','') self.addProperty('zoom list','string',','.join([str(x) for x in self.__zoomList])) self.addProperty('init zoom','integer',self.__initZoom) self.addProperty('swap rgb','boolean',True) self.addProperty('fix : width','integer',-1) self.addProperty('fix : height','integer',-1) self.addProperty('action : print','boolean',True) self.addProperty('action : save image','boolean',True) self.addProperty('action : update','boolean',True) self.addProperty('action : startCamera','boolean',True) self.addProperty('action : brightness contrast','boolean',True) self.addProperty('action : beam','boolean',True) self.addProperty('action : scale','boolean',True) self.addProperty('action : change foreground color','boolean',True) self.addProperty('action : measure','boolean',True) self.addProperty('action : measure (place)', 'combo', ('toolbar','contextmenu'),'toolbar') self.addProperty('action : zoom window','boolean',True) self.addProperty('action : zoom fit or fill','boolean',True) self.addProperty('action : zoom list','boolean',True) self.addProperty('action : x,y coordinates','boolean',True) self.addProperty('action : default color','combo',('black','red','green'),'black') self.addProperty('action : save image (place)',"combo",('toolbar','contextmenu'),'toolbar') self.addProperty('action : save image (default path)',"string",'/tmp') self.addProperty('action : save image (show always configure)',"boolean",True) self.addProperty("diffractometer", "string", "") self.diffractometerHwobj = None ####### SIGNAL ####### self.defineSignal("BeamPositionChanged", ()) ####### SLOT ####### self.defineSlot("changeBeamPosition", ()) self.defineSlot("changePixelScale",()) self.defineSlot('getView',()) self.defineSlot('getImage',()) ####### LINK VIEW AND SUB VIEW ####### mainView = self.__mainVideo.view() zoomView = self.__zoomVideo.view() mainView.addEventMgrLink(zoomView, mainView.canvas(),zoomView.canvas(), mainView.matrix(),zoomView.matrix()) self.imageReceivedConnected = None
class CameraBrick(BlissWidget): def __init__(self, *args): BlissWidget.__init__(self, *args) self.camera = None self.update_disabled = False self.__cameraName = None self.__zoomList = [1.5,2,2.5,3,3.5,4] self.__initZoom = 2 self.__fixWidth = -1 self.__fixHeight = -1 self.__swapRgb = True ####### PRINT ####### self.__printWidget = QubPrintPreview(self) self.__printWidget.resize(400,500) printer = qt.QPrinter() printer.setOutputToFile(1) printer.setOutputFileName('/tmp/print_file.ps') self.__printWidget.setPrinter(printer) self.__printWidget.update() self.__beamAction = None self.__scaleAction = None self.__chosenActions = {} self.__wholeActions = [] self.__measureDialog = None ####### PRINT ACTION ####### printAction = QubPrintPreviewAction(name="print",group="admin",withVectorMenu=True) printAction.previewConnect(self.__printWidget) self.__wholeActions.append(printAction) ####### SAVE IMAGE ####### self.__saveAction = QubSaveImageAction(parent=self, label='Save falcon image', name="save", group="admin") self.__saveAction.setConnectCallBack(self._save_dialog_new) self.__wholeActions.append(self.__saveAction) self.__defaultSavePath = '/tmp' ####### UPDATE ####### update = QubToggleAction(name="update",group="image",initState=True) self.connect(update,qt.PYSIGNAL("StateChanged"),self.__cameraUpdate) self.__wholeActions.append(update) ####### Start Camera ###### startCamera = QubToggleAction(name="startCamera", group="image", iconName = 'bright-cont', initState=True) self.connect(startCamera, qt.PYSIGNAL("StateChanged"), self.__cameraStart) self.__wholeActions.append(startCamera) ####### BRIGHTNESS/CONTRAST ####### self.__brightcount = QubOpenDialogAction(name="bright-cont", iconName = 'bright-cont', group="image") self.__brightcount.setDialog(QubBrightnessContrastDialog(self)) self.__wholeActions.append(self.__brightcount) ###### Grid TOOL ###### self.__gridToolAction = QubOpenDialogAction(parent=self, name='grid_tool', iconName='rectangle', label='Grid tool', group="Tools") #place="contextmenu") self.__gridDialog = GridDialog(self, "Grid Dialog", flags = qt.Qt.WStyle_StaysOnTop) self.__gridToolAction.setConnectCallBack(self._grid_dialog_connect_hdlr) self.__wholeActions.append(self.__gridToolAction) self.__previous_pos_dict = {} self.__beamWidth = 0 self.__beamHeight = 0 ####### BEAM ACTION ####### self.__beamAction = QubBeamAction(name="beam", group="Tools") self.__wholeActions.append(self.__beamAction) self.connect(self.__beamAction,qt.PYSIGNAL("BeamSelected"), self.beamSelection) ####### SCALE ####### self.__scaleAction = QubScaleAction(name='scale',group='Tools') self.__wholeActions.append(self.__scaleAction) self.__wholeActions.extend(self.__creatStdActions()) ####### ACTION INFO ####### actionInfo = QubInfoAction(name="actionInfo", group="image",place="statusbar") self.__wholeActions.append(actionInfo) ####### CHANGE FOREGROUND COLOR ####### self.__fcoloraction = QubForegroundColorAction(name="color", group="image") self.__wholeActions.append(self.__fcoloraction) ####### MEASURE ####### self.__measureAction = QubOpenDialogAction(parent=self, name='measure', iconName='measure', label='Measure', group="Tools") self.__measureAction.setConnectCallBack(self._measure_dialog_new) self.__wholeActions.append(self.__measureAction) # ###### POSITION TOOL ###### # self.__posToolAction = QubOpenDialogAction(parent=self, name='pos_tool', # iconName='circle', label='Position tool', # group="Tools") # self.__posToolAction.setConnectCallBack(self._line_dialog_new) # self.__wholeActions.append(self.__posToolAction) ####### ZOOM LIST ####### zoomActionList = QubZoomListAction(place = "toolbar", initZoom = 1,zoomValList = [0.1,0.25,0.5,0.75,1,1.5,2], show = 1,group = "zoom") self.__wholeActions.append(zoomActionList) ####### ZOOM Action ####### self.__zoomFitOrFill = QubZoomAction(place = "toolbar",group = "zoom") self.__wholeActions.append(self.__zoomFitOrFill) ####### LINK ZOOM ACTION ####### self.__zoomFitOrFill.setList(zoomActionList) zoomActionList.setActionZoomMode(self.__zoomFitOrFill) ####### ZOOM WINDOW ####### self.__zoomAction = QubZoomRectangle(label='Zoom Crop',place="toolbar", show=1, group="zoom") self.connect(self.__zoomAction,qt.PYSIGNAL("Actif"),self.__hide_show_zoom) self.__wholeActions.append(self.__zoomAction) self.__splitter = qt.QSplitter(qt.Qt.Horizontal,self) self.__splitter.show() self.__mainVideo = QubPixmapDisplayView(self.__splitter) self.__mainVideo.show() self.__mainVideo.setScrollbarMode('Auto') self.__mainPlug = _MainVideoPlug(self.__mainVideo,self.__zoomAction) actions = self.__creatStdActions() ####### ZOOM LIST ####### self.__zoomActionList = QubZoomListAction(place = "toolbar",keepROI = True, initZoom = self.__initZoom,zoomValList = self.__zoomList, show = 1,group = "zoom") actions.insert(0,self.__zoomActionList) ####### ZOOM Action ####### zoomFitOrFill = QubZoomAction(place = "toolbar",keepROI = True,group = "zoom") zoomFitOrFill.setList(self.__zoomActionList) self.__zoomActionList.setActionZoomMode(zoomFitOrFill) actions.append(zoomFitOrFill) self.__zoomVideo = QubPixmapDisplayView(self.__splitter,None,actions) self.__zoomVideo.hide() self.__zoomPlug = _ZoomPlug(self.__zoomVideo) self.__zoomPlug.zoom().setZoom(2,2) self.__cbk = _rectangleZoom(self.__zoomAction,self.__zoomPlug) layout = qt.QHBoxLayout(self,0,0,"layout") layout.addWidget(self.__splitter) self.__image2Pixmap = QubImage2Pixmap() self.__image2Pixmap.plug(self.__mainPlug) self.__zoomPlug.setPoller(self.__image2Pixmap) self.__jpegDecompress = QubStdData2Image() self.__jpegDecompress.setSwapRGB(True) self.__jpeg2image = None ####### PROPERTY ####### self.addProperty('camera','string','') self.addProperty('zoom list','string',','.join([str(x) for x in self.__zoomList])) self.addProperty('init zoom','integer',self.__initZoom) self.addProperty('swap rgb','boolean',True) self.addProperty('fix : width','integer',-1) self.addProperty('fix : height','integer',-1) self.addProperty('action : print','boolean',True) self.addProperty('action : save image','boolean',True) self.addProperty('action : update','boolean',True) self.addProperty('action : startCamera','boolean',True) self.addProperty('action : brightness contrast','boolean',True) self.addProperty('action : beam','boolean',True) self.addProperty('action : scale','boolean',True) self.addProperty('action : change foreground color','boolean',True) self.addProperty('action : measure','boolean',True) self.addProperty('action : measure (place)', 'combo', ('toolbar','contextmenu'),'toolbar') self.addProperty('action : zoom window','boolean',True) self.addProperty('action : zoom fit or fill','boolean',True) self.addProperty('action : zoom list','boolean',True) self.addProperty('action : x,y coordinates','boolean',True) self.addProperty('action : default color','combo',('black','red','green'),'black') self.addProperty('action : save image (place)',"combo",('toolbar','contextmenu'),'toolbar') self.addProperty('action : save image (default path)',"string",'/tmp') self.addProperty('action : save image (show always configure)',"boolean",True) self.addProperty("diffractometer", "string", "") self.diffractometerHwobj = None ####### SIGNAL ####### self.defineSignal("BeamPositionChanged", ()) ####### SLOT ####### self.defineSlot("changeBeamPosition", ()) self.defineSlot("changePixelScale",()) self.defineSlot('getView',()) self.defineSlot('getImage',()) ####### LINK VIEW AND SUB VIEW ####### mainView = self.__mainVideo.view() zoomView = self.__zoomVideo.view() mainView.addEventMgrLink(zoomView, mainView.canvas(),zoomView.canvas(), mainView.matrix(),zoomView.matrix()) self.imageReceivedConnected = None def safeConnect(self): if not self.imageReceivedConnected and self.camera is not None: #print "CONNECTING 0" self.camera.connect('imageReceived', self.__imageReceived) #self.connect(self.camera,qt.PYSIGNAL('imageReceived'),self.__imageReceived) self.imageReceivedConnected = False def safeDisconnect(self): if self.imageReceivedConnected and self.camera is not None: #print "DISCONNECTING 3" self.camera.disconnect('imageReceived', self.__imageReceived) #self.disconnect(self.camera,qt.PYSIGNAL('imageReceived'),self.__imageReceived) self.imageReceivedConnected = False def disable_update(self): #self.__imageReceived(DISABLED_JPEG,DISABLED_WIDTH,DISABLED_HEIGHT) self.update_disabled = True def enable_update(self): self.update_disabled = False def __imageReceived(self,image,width,height,force_update=False): if self.update_disabled: return if not force_update: if not self.isVisible(): return if isinstance(image,qt.QImage): if self.__swapRgb: image = image.swapRGB() self.__jpeg2image.setImage(image,image) else: self.__jpegDecompress.putData(image,width,height) def propertyChanged(self,property,oldValue,newValue): if property=='camera': #if self.camera is not None and not self.isRunning(): # self.safeDisconnect() self.safeDisconnect() self.camera = self.getHardwareObject(newValue) self.__hwoName = newValue if self.camera is not None: try: self.__tangoName = self.camera.tangoname except: self.__tangoName = "" try: camera_role=self.camera.getDeviceByRole('camera') if camera_role is not None: self.camera=camera_role except AttributeError: pass self.__brightcount.setCamera(self.camera) elif property == 'zoom list' : zoomList = [float(x) for x in newValue.split(',')] if zoomList != self.__zoomList : self.__zoomList = zoomList self.__zoomActionList.changeZoomList(zoomList,self.__initZoom) elif property == 'init zoom' : if newValue != self.__initZoom : self.__initZoom = newValue self.__zoomActionList.changeZoomList(self.__zoomList,newValue) elif property == 'swap rgb' : self.__jpegDecompress.setSwapRGB(newValue) self.__swapRgb = newValue elif property == 'action : print' : self.__chosenActions['print'] = newValue elif property == 'action : save image' : self.__chosenActions['save'] = newValue elif property == 'action : update' : self.__chosenActions['update'] = newValue elif property == 'action : startCamera' : self.__chosenActions['startCamera'] = newValue elif property == 'action : brightness contrast' : self.__chosenActions['bright-cont'] = newValue elif property == 'action : beam' : self.__chosenActions['beam'] = newValue elif property == 'action : scale' : self.__chosenActions['scale'] = newValue elif property == 'action : change foreground color' : self.__chosenActions['color'] = newValue elif property == 'action : measure' : self.__chosenActions['measure'] = newValue elif property == 'action : zoom window' : self.__chosenActions['zoomrect'] = newValue elif property == 'action : zoom fit or fill' : self.__chosenActions['Zoom tools'] = newValue elif property == 'action : zoom list' : self.__chosenActions['zoomlist'] = newValue elif property == 'action : x,y coordinates' : self.__chosenActions['position'] = newValue elif property == 'action : default color' : self.__chosenDefaultColor = newValue elif property == 'action : save image (place)' : self.__saveAction.setPlace(newValue,True) elif property == 'action : measure (place)': self.__measureAction.setPlace(newValue, True) elif property == 'action : save image (default path)' : self.__defaultSavePath = newValue elif property == 'action : save image (show always configure)' : self.__saveAction.setConfigureOnClick(newValue) elif property == 'fix : width' : self.__fixWidth = newValue elif property == 'fix : height': self.__fixHeight = newValue elif property == "diffractometer": self.diffractometerHwobj = self.getHardwareObject(newValue) if self.diffractometerHwobj is not None: self.__previous_pos_dict = self.diffractometerHwobj.getPositions() self.diffractometerHwobj.connect("minidiffStateChanged", self.diffractometerChanged) if self.diffractometerHwobj.zoomMotor is not None: zoom = self.diffractometerHwobj.zoomMotor.getPosition() xSize,ySize = self.diffractometerHwobj.getCalibrationData(zoom) #xSize,ySize = self.__scaleAction.xPixelSize(), self.__scaleAction.yPixelSize() self.diffractometerHwobj.getBeamInfo(self.__getBeamInfo) beam_pos_x = self.diffractometerHwobj.getBeamPosX() beam_pos_y = self.diffractometerHwobj.getBeamPosY() self.__gridDialog.set_x_pixel_size(xSize) self.__gridDialog.set_y_pixel_size(ySize) self.__gridDialog.set_beam_position(beam_pos_x, beam_pos_y, self.__beamWidth, self.__beamHeight) def run(self) : chosenActions = [] for action in self.__wholeActions : if self.__chosenActions.get(action.name(), True) : chosenActions.append(action) self.__mainVideo.addAction(chosenActions) if not self.__chosenActions.get('update', False) : self.__cameraUpdate(True) if not self.__chosenActions.get('startCamera', False) : self.__cameraStart(True) if self.__fixWidth != -1 and self.__fixHeight != -1 : self.__mainVideo.view().setFixedSize(self.__fixWidth + 4,self.__fixHeight + 4) self.__startIdle = qt.QTimer(self) qt.QObject.connect(self.__startIdle,qt.SIGNAL('timeout()'),self.__idleRun) self.__startIdle.start(0) def __idleRun(self) : self.__startIdle.stop() self.__fcoloraction.setColor(self.__chosenDefaultColor) self.__mainVideo.view().setForegroundColor(qt.QColor(self.__chosenDefaultColor)) def stop(self) : self.safeDisconnect() def beamSelection(self,x,y) : self.emit(qt.PYSIGNAL("BeamPositionChanged"), (x,y)) self.changeBeamPosition(x,y) def changeBeamPosition(self, x, y, beam_width=None, beam_height=None): self.__beamAction.setBeamPosition(x, y) try: if not beam_width: beam_width = self.__beamWidth if not beam_height: beam_height = self.__beamHeight self.__gridDialog.set_beam_position(x, y, beam_width, beam_height) except: pass def changePixelScale(self,sizex,sizey) : self.__scaleAction.setXPixelSize(sizex) self.__scaleAction.setYPixelSize(sizey) if self.__measureDialog : self.__measureDialog.setXPixelSize(sizex) self.__measureDialog.setYPixelSize(sizey) self.__gridDialog.set_x_pixel_size(sizex) self.__gridDialog.set_y_pixel_size(sizey) def getView(self,key): try: key['drawing'] = self.__mainVideo.view() key['view'] = self.__mainVideo key['hwname'] = self.__hwoName key['dsname'] = self.__tangoName except: pass def getImage(self,key) : if self.__jpeg2image is not None : try: key['image'] = self.__jpeg2image.getLastImage() except: pass def __creatStdActions(self) : actions = [] ####### MOUSE POSITION ####### posaction = QubPositionAction(name="position", group="image",place="statusbar") actions.append(posaction) return actions def __cameraUpdate(self,onoff) : if onoff : self.__jpeg2image = _Jpeg2ImagePlug(self.__image2Pixmap) self.__jpegDecompress.plug(self.__jpeg2image) if self.camera is not None: imageInfo = self.camera.imageType() else: imageInfo = None imType = self.__jpegDecompress.STANDARD if imageInfo : if imageInfo.type() == 'bayer': imType = self.__jpegDecompress.BAYER_RG elif imageInfo.type() == 'raw': imType = self.__jpegDecompress.RAW self.__jpegDecompress.setImageType(imType) self.safeConnect() else: self.safeDisconnect() self.__jpeg2image.setEnd() def __cameraStart(self, onoff) : if onoff : print "********************************************************Set the camera ON" if self.camera is not None: self.camera.setLive(True) else: print "camera is none" else: print "****************************************************Set the camera off" if self.camera is not None: print "camera :" print self.camera self.camera.setLive(False) else: print "camera is none" def __hide_show_zoom(self,actif) : if actif : if self.__chosenActions['Zoom tools'] : self.__zoomFitOrFill.setState(True) else: self.__mainVideo.setScrollbarMode('Fit2Screen') self.__zoomPlug.start() self.__zoomVideo.show() splitterWidth = self.__splitter.width() self.__splitter.setSizes([splitterWidth/3,splitterWidth - splitterWidth/3]) else: if self.__chosenActions['Zoom tools'] : self.__zoomFitOrFill.setState(False) else: self.__mainVideo.setScrollbarMode('Auto') self.__zoomPlug.stop() self.__zoomVideo.hide() def _measure_dialog_new(self,openDialogAction,aQubImage) : try : self.__measureDialog = QubMeasureListDialog(self, canvas=aQubImage.canvas(), matrix=aQubImage.matrix(), eventMgr=aQubImage) xSize,ySize = self.__scaleAction.xPixelSize(),self.__scaleAction.yPixelSize() self.__measureDialog.setXPixelSize(xSize) self.__measureDialog.setYPixelSize(ySize) self.__measureDialog.connect(aQubImage, qt.PYSIGNAL("ForegroundColorChanged"), self.__measureDialog.setDefaultColor) openDialogAction.setDialog(self.__measureDialog) except: import traceback traceback.print_exc() def _grid_dialog_connect_hdlr(self,openDialogAction, aQubImage) : try : self.__gridDialog.set_qub_event_mgr(aQubImage) openDialogAction.setDialog(self.__gridDialog) except: import traceback traceback.print_exc() def __getBeamInfo(self, ret): self.__beamWidth = float(ret["size_x"]) self.__beamHeight = float(ret["size_y"]) #self.__beamShape = ret["shape"] def _save_dialog_new(self,openDialogAction,aQubImage) : saveDialog = QubSaveImageDialog(self,matrix=aQubImage.matrix(),canvas=aQubImage.canvas()) saveDialog.setImage2Pixmap(self.__image2Pixmap) saveDialog.setSavePath(self.__defaultSavePath) openDialogAction.setDialog(saveDialog) def instanceMirrorChanged(self,mirror): #print "INSTANCEMIRRORCHANGED",mirror,BlissWidget.isInstanceMirrorAllow() return if BlissWidget.isInstanceModeSlave(): if BlissWidget.isInstanceMirrorAllow(): self.safeConnect() else: self.safeDisconnect() def diffractometerChanged(self, *args): """ Handles diffractometer change events, connected to the signal minidiffStateChanged of the diffractometer hardware object. """ if self.diffractometerHwobj.isReady(): pos_dict = self.diffractometerHwobj.getPositions() p1 = self.diffractometerHwobj.motor_positions_to_screen(self.__previous_pos_dict) p2 = (self.diffractometerHwobj.getBeamPosX(), self.diffractometerHwobj.getBeamPosY()) dx = p2[0] - p1[0] dy = p2[1] - p1[1] if dy != 0: self.__gridDialog.move_grid_ver(-dy) if dx != 0: self.__gridDialog.move_grid_hor(-dx) #print dx, dy self.__previous_pos_dict = pos_dict