def config_animate_to(t,item,x,y): # used to animate an item in specific ways animation = QGraphicsItemAnimation() # create a timeline (1 sec here) timeline = QTimeLine(100) timeline.setFrameRange(0,200) # 200 steps #item should at 'x,y' by time 't's animation.setPosAt(t,QPointF(x,y)) animation.setItem(item) # animate this item animation.setTimeLine(timeline) # with this duration/steps return animation
class HumanEvent(CallbackRegister,QObject): logger = None def __init__(self): CallbackRegister.__init__(self) QObject.__init__(self) self.callbacks_tail = [] self.time_line = QTimeLine() # print 'pido el logger' Logger.getLoggerFor(self.__class__) # print 'pedi el logger %s' % self.__class__.logger self.condition = None QtCore.QObject.connect(self.time_line, QtCore.SIGNAL("frameChanged(int)"), self.execRegisteredCallback) QtCore.QObject.connect(self.time_line, QtCore.SIGNAL("finished()"), self.finish) def registerCallback(self,objct,name_method,params,stack=False,parent_stack=False): key = CallbackRegister.registerCallback(self,objct,name_method,params,stack,parent_stack) self.logger.debug('Registered callback %s object %s : method %s : params len %s : stack %s : parent_stack %s ' % (key, objct.__class__.__name__, name_method, len(params), stack, parent_stack)) self.callbacks_tail.append(key) return key def fire(self): calls_len = len(self.callbacks_tail) if calls_len == 0: self.finish() return d = calls_len*300 self.time_line.setDuration(d) self.time_line.setFrameRange(0 , calls_len) # print 'El end frame es %s la duracion es %s' % ( self.time_line.endFrame(),self.time_line.duration()) if self.time_line.state() == QTimeLine.Running: self.logger.warning('Starting timeline started, %s' % self.__class__.__name__) self.time_line.stop() if self.time_line.state() == QTimeLine.NotRunning: self.logger.debug('Starting time line object %s' % self.__class__.__name__) logger_core = Logger.getInstance() try : self.time_line.start() except Exception as e: traceback.print_exc(file=logger_core.last_traceback) logger_core.last_traceback.seek(0) self.logger.fatal("Exception firing human event \n%s" % logger_core.last_traceback.getvalue()) Jaime.instance.finishWork() else: self.logger.error('Trying to start running time line on object %s ' % self.__class__.__name__) def execRegisteredCallback(self,pos): if pos > len(self.callbacks_tail): raise Exception('Inexistent callback index on %s [%s] max is %s' % (self.__class__.__name__, pos, len(self.callbacks_tail) ) ) else: pos = pos-1 key = self.callbacks_tail[pos] self.logger.debug('execRegisteredCallback %s %s %s' % (self.__class__.__name__, pos, key)) ret = getattr(self,key)() if len(self.call_register[key]) > 3 and self.call_register[key][3] : self.returns_stack.append(ret) if len(self.call_register[key]) > 4 and self.call_register[key][4] : self.parent().returns_stack.append(ret) return ret def finish(self): # print 'llamo al finish' self.logger.debug('sending finished signal %s' % self.__class__.__name__ ) self.emit(QtCore.SIGNAL('finished()')) def loadLinkCallback(self,link): self.logger.info('loadLinkCallback %s' % link) Jaime.instance.view.load(QUrl(link)) @classmethod def programAttachJavascript(cls,css,java): he = cls() he.logger.info('programAttachJavascript with css selector %s' % css) he.registerCallback(he,'attachJavascript',[css,java]) return he @classmethod def testUi(cls,css,must_match=None,child_css=None,attrs={}): he = cls() he.registerCallback(RouteNode,'elementXY',[css,must_match,child_css,attrs],stack=False,parent_stack=True) return he def attachJavascript(self,css,java): print 'Attaching javascript %s' % css frame = Jaime.instance.page.mainFrame() els = frame.findAllElements(css) for i in range(els.count()): el = els.at(i) el.evaluateJavaScript(java) self.logger.info('attachJavascript with css selector %s on elem with id %s' % (css, el.attribute('id')) ) def doSaveImageUnderMouse(self,filename): l = len(self.returns_stack) if not (l and isinstance(self.returns_stack[l-1],QPoint) ) : return pos = self.returns_stack.pop() # print 'saving image under pos %s' % pos frame = Jaime.instance.page.frameAt(pos) htc = frame.hitTestContent(pos) if not htc.isNull(): pix = htc.pixmap() # print 'pixmap size %s' % pix.size() if not pix.save(filename,'JPEG'): # print 'no guardo' self.logger.error("Error while saving image under the mouse") else: self.logger.info("Image under the mouse was saved successfully") else: self.logger.error("There isn't image under the mouse") @classmethod def saveImageUnderMouse(cls,filename): he = cls() he.logger.info('doSaveImageUnderMouse' ) he.registerCallback(MouseHumanEvent,'getMousePos',[],stack=True) he.registerCallback(he,'doSaveImageUnderMouse',[filename]) return he @classmethod def loadLink(cls,link): he = cls() he.logger.info('programLoadLink %s' % link ) he.registerCallback(he,'loadLinkCallback',[link]) return he @classmethod def loadLink(cls,link): he = cls() he.logger.info('programLoadLink %s' % link ) he.registerCallback(he,'loadLinkCallback',[link]) return he def makeTimeCallback(self): pass @classmethod def makeTime(cls): he = cls() he.registerCallback(he,'makeTimeCallback',[]) return he