class Control: def deleteEvent(self, widget, event, data=None): gtk.main_quit() return False def __init__(self): #variable initialization self.seleccionado = None self.guardado = False self.hist = Historia() self.cuenta = None self.zoom = 2 #Contiene todo self.todo = gtk.HBox(False, 0) self.todo.show() #Contiene los menus self.menus = gtk.VBox(False, 0) self.menus.show() self.todo.pack_start(self.menus, False, False) #Contiene el pizarron self.pizarron = gtk.ScrolledWindow() self.pizarron.show() self.cargarCuenta(0) self.todo.add(self.pizarron) self.num = Numeros() self.menus.add(self.num.agregar) self.menu = Menu() self.menus.add(self.menu.agregar) self.menu.setDeshacerListeners((self.__deshacer, )) self.menu.setHistListeners((self.__moverHistoria, )) self.menu.setSumaListeners((self.__suma, )) self.menu.setRestaListeners((self.__resta, )) self.menu.setDivisionListeners((self.__division, )) self.menu.setMultiplicacionListeners((self.__multiplicacion, )) self.menu.setZoomListeners( (self.__moverZoom, self.cuenta.actualizarLineHor)) self.menu.setBorrarListeners( (self.__agregarAHistCV, self.__numClic, self.__actualizarAdj)) #registro listeners self.num.setListener( (self.__agregarAHistCV, self.__numClic, self.__actualizarAdj)) self.mngr = Manager((self.__digClic, )) #<uncomment for PC> #self.menu.setGuardarListeners((self.mantener,)) #self.menu.setAbrirListeners((self.cargar,)) # Create a new window #self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) #self.window.set_title("Mateton") #self.window.connect("delete_event", self.deleteEvent) #self.window.set_border_width(5) #self.window.set_default_size(800, 600) #self.window.add(self.todo) #self.window.show() #self.window.connect('key_press_event', self.onKeyPress) #</uncomment for PC> def cargarCuenta(self, tipo, operacion=None): if self.seleccionado != None: self.__desseleccionar() if not self.cuenta == None: self.todo.remove(self.pizarron) self.pizarron = gtk.ScrolledWindow() self.pizarron.show() self.todo.add(self.pizarron) del self.cuenta del self.hist self.hist = Historia() self.__actualizarAdj() if not operacion == None: self.cuenta = operacion else: if tipo == 0: self.cuenta = Suma((self.__digClic, )) elif tipo == 1: self.cuenta = Resta((self.__digClic, )) elif tipo == 2: self.cuenta = Multiplicacion((self.__digClic, )) elif tipo == 3: self.cuenta = Division((self.__digClic, )) if tipo == 0 or tipo == 1: self.cuenta.factores.setListenerClicMas( (self.__agregarAHistAF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.factores.setListenerClicMenos( (self.__agregarAHistQF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.factores.setListenerFactores( (self.__agregarAHistAD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom), (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) for e in self.cuenta.extra: e.setListenerClicMas( (self.__agregarAHistAD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) e.setListenerClicMenos( (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) elif tipo == 2: self.cuenta.factores.setListenerClicMas( (self.__agregarAHistAF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.factores.setListenerClicMenos( (self.__agregarAHistQF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.factores.setListenerFactores( (self.__agregarAHistAD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom), (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.suma.factores.setListenerFactores( (self.__agregarAHistAD, self.__actualizarAdj, self.__moverZoom), (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.suma.factores.setListenerClicMenos( (self.__agregarAHistQF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.suma.factores.setListenerClicMas( (self.__agregarAHistAF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom, self.__actualizarFactores)) for e in self.cuenta.extra: e.setListenerClicMas( (self.__agregarAHistAD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) e.setListenerClicMenos( (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) elif tipo == 3: self.cuenta.restos.setListenerClicMas( (self.__agregarAHistAF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.restos.setListenerClicMenos( (self.__agregarAHistQF, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.restos.setListenerFactores( (self.__agregarAHistAD, self.__actualizarAdj, self.__moverZoom), (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.cociente.setListenerClicMas( (self.__agregarAHistAD, self.__actualizarAdj, self.__desseleccionar, self.__moverZoom)) self.cuenta.cociente.setListenerClicMenos( (self.__agregarAHistQD, self.__actualizarAdj, self.__desseleccionar)) self.pizarron.add_with_viewport(self.cuenta.agregar) self.cuenta.setZoom(self.zoom) def __numClic(self, valor): #callback para clic en boton numero if self.seleccionado: self.seleccionado.setValor(valor) def __digClic(self, digito): #callback para clic en digitos if self.seleccionado != None: self.seleccionado.seleccionar(False) self.seleccionado = digito self.seleccionado.seleccionar(True) def __agregarAHistCV(self, valor): #callback para clic en boton numero if self.seleccionado and self.seleccionado.getValor() != valor: suc = Suceso(0) suc.setObjeto(self.seleccionado.idFactor, self.seleccionado.idDigito) suc.setValor((self.seleccionado.getValor(), valor)) self.hist.agregar(suc) def __agregarAHistAF(self): #callback para agregar factor suc = Suceso(1) self.hist.agregar(suc) def __agregarAHistQF(self): #callback para quitar factor suc = Suceso(2) self.hist.agregar(suc) def __agregarAHistAD(self, idFactor): suc = Suceso(3) suc.setObjeto(idFactor) self.hist.agregar(suc) def __agregarAHistQD(self, idFactor): suc = Suceso(4) suc.setObjeto(idFactor) self.hist.agregar(suc) def __actualizarAdj(self, data1=0, data2=0): self.menu.cargarAdj(self.hist.getPosicion() + 1, 0, len(self.hist.suc) - 1) self.menu.setHistListeners((self.__moverHistoria, )) def __deshacer(self, boton, data): #callback para el boton deshacer self.hist.setPosicion(self.hist.getPosicion() - 1, self.cuenta) self.menu.adj.set_value(self.hist.getPosicion()) def __moverHistoria(self, obj): #callback el slider valor = obj.get_value() if valor != self.hist.getPosicion(): self.hist.setPosicion(int(round(valor)), self.cuenta) def __moverZoom(self, obj=None, data=0): #callback el slider if obj != None: try: self.zoom = obj.get_value() except: pass self.cuenta.setZoom(self.zoom) def mantener(self, obj=None, data=None, nombre=""): if (nombre != ""): self.mngr.setArchivo(nombre) else: self.mngr.setArchivo("prueba1") self.guardado = True self.mngr.setHistoria(self.hist) estado = EstadoOperacion(self.cuenta) self.mngr.setEstadoOperacion(estado) self.mngr.guardar() def cargar(self, obj=None, data=None, nombre=""): if (nombre != ""): self.mngr.setArchivo(nombre) else: self.mngr.setArchivo("prueba1") (hist, op) = self.mngr.abrir() self.cargarCuenta(op.tipo, op) self.hist = hist self.__actualizarAdj() def __suma(self, obj, data): self.cargarCuenta(0) def __resta(self, obj, data): self.cargarCuenta(1) def __multiplicacion(self, obj, data): self.cargarCuenta(2) def __division(self, obj, data): self.cargarCuenta(3) def __desseleccionar(self, obj=0, data=0): if self.seleccionado != None: self.seleccionado.seleccionar(False) self.seleccionado = None def __actualizarFactores(self): """Solucion chancha. Solo para multiplicaciones. Agrega el nuevo factor de la suma a la lista de factores""" self.cuenta.factores.factores.append( self.cuenta.suma.factores.factores[ len(self.cuenta.suma.factores.factores) - 1]) def onKeyPress(self, widget, event): if self.seleccionado != None: keyname = gtk.gdk.keyval_name(event.keyval) value = -1 if keyname == "0" or keyname == "KP_0": value = 0 elif keyname == "1" or keyname == "KP_1": value = 1 elif keyname == "2" or keyname == "KP_2": value = 2 elif keyname == "3" or keyname == "KP_3": value = 3 elif keyname == "4" or keyname == "KP_4": value = 4 elif keyname == "5" or keyname == "KP_5": value = 5 elif keyname == "6" or keyname == "KP_6": value = 6 elif keyname == "7" or keyname == "KP_7": value = 7 elif keyname == "8" or keyname == "KP_8": value = 8 elif keyname == "9" or keyname == "KP_9": value = 9 elif keyname == "period" or keyname == "KP_Decimal": value = "," if value != -1: self.num.simularClic(value)