diff --git a/src/gui/__init__.py b/src/gui/__init__.py --- a/src/gui/__init__.py +++ b/src/gui/__init__.py @@ -19,7 +19,6 @@ class MainWindow(tk.Frame): self.currentFrame=None self._boardGrid=None - self.gameState=None self.img=None self._imgSizeCoef=1 @@ -43,13 +42,6 @@ class MainWindow(tk.Frame): # shift compensates possible horizontal or vertical empty margins from unmatching aspect ratios self._imgShift=EPoint(wo-w*self._imgSizeCoef,ho-h*self._imgSizeCoef)/2 - def setGameState(self,gameState): - pass - - def setCallbacks(self,setCorners,setTresholds): - self.cornersCallback=setCorners - self.tresholdsCallback=setTresholds - def _createWidgets(self): # a captured frame with overlay graphics self.imgView=tk.Canvas(self) @@ -83,9 +75,7 @@ class MainWindow(tk.Frame): self._boardGrid=Grid(self.corners.corners) corners=[(c*self._imgSizeCoef+self._imgShift) for c in self.corners.corners] self.parent.sendMsg("setCorners",(corners,)) - # self.boardGrid=Grid(self.corners) - # self.boardView.setBoardGrid(self.boardGrid) - # + self.redrawImgView() ## Redraws the current image and its overlay. @@ -128,8 +118,6 @@ class MainWindow(tk.Frame): ## Handles and presents the game state as detected by the program. class BoardView(tk.Canvas): def __init__(self, master=None): - # self.detector=ImageAnalyzer() - tk.Canvas.__init__(self, master) self.configure(width=360,height=360,background="#ffcc00") @@ -138,25 +126,13 @@ class BoardView(tk.Canvas): self.grid() def redrawState(self,gameState): + # !! will need to remove old stones or redraw the element completely for r,row in enumerate(gameState): for c,point in enumerate(row): self.drawStone(r,c,point) self.grid() - ## Redraws and reananalyzes the board view. - # def redrawState(self,img,sizeCoef,shift): - # self.create_rectangle(0,0,360,360,fill="#ffcc00") - # self.drawGrid() - # - # self.detector.analyze(img,sizeCoef,shift) - # - # for r,row in enumerate(self.detector.board): - # for c,point in enumerate(row): - # self.drawStone(r,c,point) - # - # self.grid() - def drawGrid(self): for i in range(19): self.create_line(18,18*(i+1),360-18,18*(i+1),fill="#000000") # rows @@ -190,38 +166,26 @@ class GUI: self.root = tk.Tk() self.root.title("OneEye {0}.{1}.{2}".format(*config.misc.version)) - self.outcomingQueue=None - self.outcomingEvent=None + self._coreMessages=None self.mainWindow = MainWindow(self,master=self.root) self.root.bind("<>", lambda e: self.mainWindow.redrawImgView()) self.root.bind("<>", lambda e: print("fired receiveState")) - def __call__(self,incomingQueue,incomingEvent,outcomingQueue,outcomingEvent): - self.outcomingQueue=outcomingQueue - self.outcomingEvent=outcomingEvent + def __call__(self,ownMessages,coreMessages): + self._coreMessages=coreMessages - self.listenerThread=threading.Thread(target=lambda: self._listen(incomingQueue,incomingEvent)) + self.listenerThread=threading.Thread(target=lambda: ownMessages.listen(self._handleEvent)) self.listenerThread.start() self.mainWindow.mainloop() - def sendMsg(self,actionName,args=tuple(),kwargs=dict()): - self.outcomingQueue.put((actionName,args,kwargs)) - self.outcomingEvent.set() - - def _listen(self,incomingQueue,incomingEvent): - while True: - incomingEvent.wait() - msg=incomingQueue.get() - if incomingQueue.empty(): - incomingEvent.clear() - log.info(msg) - self._handleEvent(msg) + def sendMsg(self,actionName,args=tuple(),kwargs=None): + self._coreMessages.send(actionName,args,kwargs) def _handleEvent(self,e): - actions={"setCurrentFrame":self._frameHandler} + actions={"setCurrentFrame":self._frameHandler, "setGameState":self._stateHandler} (actionName,args,kwargs)=e return actions[actionName](*args,**kwargs) @@ -230,7 +194,7 @@ class GUI: self.mainWindow.setCurrentFrame(newFrame) self.root.event_generate("<>") - def _stateHandler(self,e): - pass + def _stateHandler(self,gameState): + self.mainWindow.boardView.redrawState(gameState) gui=GUI()