def mouse(self, event, x, y, flag, *param): """ Trata os eventos de mouse disparados sobre a janela. Alguns dos eventos são tratados simplesmente delegando o evento para que seja tratado externamente. :param event Tipo de evento disparado pelo mouse. :param x Posição no eixo-x em que o evento ocorreu. :param y Posição no eixo-y em que o evento ocorreu. :param flag Informações adicionais sobre o evento. :param param Parâmetros adicionais. """ self.actual = Point(x, y) if event in [cv.EVENT_LBUTTONDOWN, cv.EVENT_RBUTTONDOWN]: self.start = self.actual self.mark = self.spec.mark() elif event == cv.EVENT_MOUSEMOVE and flag & cv.EVENT_FLAG_LBUTTON: diff = self.start - self.actual self.spec.move(self.mark, *diff) elif event == cv.EVENT_MOUSEMOVE and flag & cv.EVENT_FLAG_RBUTTON: diff = self.start.vector - self.actual self.spec.zoom(self.mark, diff.length * diff.versor[1] * 3) elif event in [cv.EVENT_LBUTTONUP, cv.EVENT_RBUTTONUP] \ and self.start == self.actual: Event("cvClick", self).post(self.actual, event) elif event in [cv.EVENT_LBUTTONDBLCLK, cv.EVENT_RBUTTONDBLCLK]: Event("cvDoubleClick", self).post(self.actual, event) cv.imshow(self.wname, self.spec.raw)
def bind(self): """ Víncula métodos do objeto a eventos que podem ser disparados. :return None """ Event("PopStatus").bind(self.pop) Event("PushStatus").bind(self.push)
def drop(self, canvas, fnames): """ Callback para o evento DropLeave. :param canvas Campo de drag-n-drop. :param fnames Arquivos a serem processados. """ for fn in fnames: newpg = Event("NewPage", self.parent.win.book).post(self.pg) newpg.initimage(fn) self.leave(canvas)
def lUp(self, canvas, e): """ Callback para o evento de mouse LEFT_UP. :param canvas Campo de exibição de imagens :param e Dados do evento. """ if self._move <= 3: if self.soil: Event("SoilClick", canvas).post((e.x, e.y)) elif self.cane: Event("CaneClick", canvas).post((e.x, e.y)) else: Event("Click", canvas).post(self._mstart)
def mMotion(self, canvas, e): """ Callback para o evento de mouse MOTION. :param canvas Campo de exibição de imagens :param e Dados do evento. """ if e.LeftIsDown(): if self.soil: Event("SoilClick", canvas).post((e.x, e.y)) elif self.cane: Event("CaneClick", canvas).post((e.x, e.y)) else: self._move = self._move + 1 diff = self._mstart - (e.x, e.y) canvas.im.move(self._mark, *diff) canvas.update()
def OnLeave(self): """ Callback para o evento de saída do mouse sobre a área de drop. Delega o evento para o manipulador personalizado de eventos. """ Event("DropLeave", self).post()
def bind(self, window): """ Vincula uma janela ao controlador. :param window Janela a ser vinculada. """ self.win = window Event("NewPage", self.win.book).bind(self.newpage)
def lUp(self, canvas, e): """ Callback para o evento de mouse LEFT_UP. :param canvas Campo de exibição de imagens :param e Dados do evento. """ if self._move <= 3: Event("Click", canvas).post(self._mstart)
def OnEnter(self, *args): """ Callback para o evento de entrada do mouse sobre a área de drop. Delega o evento para o manipulador personalizado de eventos. :param args Argumentos do evento. :return bool """ Event("DropEnter", self).post() return True
def OnDropFiles(self, x, y, fname): """ Callback para o evento de drop. Esse método somente delega o evento disparado para o manipulador personalizado de eventos. :param x Valor da coordenada x em que o evento ocorreu. :param y Valor da coordenada y em que o evento ocorreu. :param fname Arquivos que foram arrastados. """ Event("DropFiles", self).post(fname) return True
def __init__(self, parent, size, *args, **kwargs): """ Inicializa uma nova instância do objeto. :param parent Objeto pai. :param size Tamanho do canvas. :param args Argumentos de posição passados ao método. :param kwargs Argumentos nominais passados ao método. :return BufferedPanel """ wx.Panel.__init__(self, parent, -1, size=size, *args, **kwargs) wx.FileDropTarget.__init__(self) self.size = size self.frames = 0 Event(wx.EVT_PAINT, self).bind(Canvas.paint) self.SetDoubleBuffered(True) self.SetDropTarget(self) self.init()
def bind(self, window): """ Vincula uma janela ao controlador. :param window Janela a ser vinculada. """ self.win = window self.win.canvas.set(self.sp) self.soil, self.cane = False, False Event("Click", self.win.canvas).bind(e.click, self) Event("SoilClick", self.win.canvas).bind(e.clicksoil, self) Event("CaneClick", self.win.canvas).bind(e.clickcane, self) Event(wx.EVT_TOGGLEBUTTON, self.win.i_soil).bind(e.soil, self) Event(wx.EVT_TOGGLEBUTTON, self.win.i_cane).bind(e.cane, self) Event(wx.EVT_BUTTON, self.win.w_incr).bind(e.incrementa, self) Event(wx.EVT_BUTTON, self.win.w_sobr).bind(e.sobreescreve, self) Event(wx.EVT_BUTTON, self.win.w_test).bind(e.test, self) Event(wx.EVT_BUTTON, self.win.w_close).bind(e.close, self) Event(wx.EVT_MOTION, self.win.canvas).bind(self.mMotion) Event(wx.EVT_MOUSEWHEEL, self.win.canvas).bind(self.mWheel) Event(wx.EVT_LEFT_DOWN, self.win.canvas).bind(self.lDown) Event(wx.EVT_LEFT_UP, self.win.canvas).bind(self.lUp)
def bind(self, page): """ Vincula uma página ao controlador. :param page Página a ser vinculada. """ self.pg = page self.initmain() if self.main else self.waitprocess() Event("DropEnter", self.pg.canvas).bind(self.enter) Event("DropLeave", self.pg.canvas).bind(self.leave) Event("DropFiles", self.pg.canvas).bind(self.drop) if not self.main: Event(wx.EVT_TOGGLEBUTTON, self.pg.l_g).bind(e.grid, self) Event(wx.EVT_TOGGLEBUTTON, self.pg.l_1).bind(e.layer, self) Event(wx.EVT_TOGGLEBUTTON, self.pg.l_2).bind(e.layer, self) Event(wx.EVT_TOGGLEBUTTON, self.pg.l_3).bind(e.layer, self) Event(wx.EVT_BUTTON, self.pg.s_done).bind(e.deselect, self) Event(wx.EVT_BUTTON, self.pg.s_add).bind(e.addresult, self) Event(wx.EVT_BUTTON, self.pg.s_del).bind(e.delresult, self) Event(wx.EVT_BUTTON, self.pg.s_fsg).bind(e.patchsegment, self) Event(wx.EVT_BUTTON, self.pg.a_run).bind(e.run, self) Event(wx.EVT_BUTTON, self.pg.a_stop).bind(e.end, self) Event(wx.EVT_MOTION, self.pg.canvas).bind(self.mMotion) Event(wx.EVT_MOUSEWHEEL, self.pg.canvas).bind(self.mWheel) Event(wx.EVT_LEFT_DOWN, self.pg.canvas).bind(self.lDown) Event(wx.EVT_LEFT_UP, self.pg.canvas).bind(self.lUp) Event("Click", self.pg.canvas).bind(e.select, self) Event("ImageSegmented").bind(e.segmented) Event("ImageProcessed").bind(e.processed)