def nuevo(self, dato): self.archivo = "" nuevo.nuevo(self.fondo) self.fondo.band = 0 R = self.cfg.get("icaro_config", "colorR") G = self.cfg.get("icaro_config", "colorG") B = self.cfg.get("icaro_config", "colorB") self.fondo.FONDO = (int(R), int(G), int(B)) self.fondo.ultimo = 1 inicial = componente_inicial(20, 50, 1, self.fondo, self) self.fondo.objetos.append(inicial)
def nuevo(self, dato): self.archivo = "" nuevo.nuevo(self.fondo) self.fondo.band = 0 self.fondo.FONDO = (00, 22, 55) self.fondo.ultimo = 1 inicial = componente_inicial( 20, 50, 1, self.fondo, self ) self.fondo.objetos.append(inicial)
def nuevo(self,dato): self.archivo="" nuevo.nuevo(self.fondo) self.fondo.band=0 self.fondo.FONDO=(00,22,55) inicial=componente_inicial( 20, 50, 1, self.fondo, self, self.textorender ) self.fondo.componentes.add(inicial) self.fondo.objetos.append(inicial)
def nuevo(self,dato): self.archivo="" nuevo.nuevo(self.fondo) self.fondo.band=0 self.fondo.FONDO=(00,22,55) self.fondo.ultimo_conectado=0 inicial=componente_inicial( 20, 50, 1, self.fondo, self, self.textorender ) self.fondo.componentes.add(inicial) self.fondo.objetos.append(inicial)
def nuevo(self, dato): self.archivo = "" nuevo.nuevo(self.fondo) self.fondo.band = 0 R = self.cfg.get("icaro_config", "colorR") G = self.cfg.get("icaro_config", "colorG") B = self.cfg.get("icaro_config", "colorB") self.fondo.FONDO = (int(R), int(G), int(B)) self.fondo.ultimo = 1 inicial = componente_inicial( 20, 50, 1, self.fondo, self ) self.fondo.objetos.append(inicial)
def inicio(icaro_dir, firmware_ruta): global ventana_principal global fon ventana_principal = Ventana(icaro_dir, firmware_ruta) fon = fondo() ventana_principal.fondo = fon inicial = componente_inicial(50, 50, 1, fon, ventana_principal) fon.objetos.append(inicial) ventana_principal.window1.show_all() R = ventana_principal.cfg.get("icaro_config", "colorR") G = ventana_principal.cfg.get("icaro_config", "colorG") B = ventana_principal.cfg.get("icaro_config", "colorB") X = ventana_principal.cfg.get("icaro_config", "pantallax") Y = ventana_principal.cfg.get("icaro_config", "pantallay") ventana_principal.area.set_size_request(int(X), int(Y)) ventana_principal.fondo.FONDO = (int(R), int(G), int(B)) GObject.timeout_add(50, ventana_principal.timeout) Gtk.main()
def abrir(self, b, dato): pagina = self.notebook2.get_current_page() dialog = Gtk.FileChooserDialog( "Open..", None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) dialog.set_default_response(Gtk.ResponseType.OK) try: dialog.set_current_folder(dato) except Exception as ex: dialog.set_current_folder(sys.path[0]) if pagina == 0: filter = Gtk.FileFilter() filter.set_name("icaro") filter.add_pattern("*.icr") dialog.add_filter(filter) if pagina == 1: filter = Gtk.FileFilter() filter.set_name("C") filter.add_pattern("*.c") dialog.add_filter(filter) response = dialog.run() if response == Gtk.ResponseType.OK: if pagina == 0: nuevo.nuevo(self.fondo) inicial = componente_inicial(20, 50, 1, self.fondo, self) self.fondo.objetos.append(inicial) cadena = dialog.get_filename() self.update() abrir.abrir(self.diccionario, cadena, self.fondo, self) self.archivo = cadena if pagina == 1: cadena = dialog.get_filename() self.ver.open_file(self.ver.buffer, cadena) elif response == Gtk.ResponseType.CANCEL: print('Closed, no files selected') dialog.destroy()
def inicio(icaro_dir,firmware_ruta): global ventana_principal global fon ventana_principal = Ventana(icaro_dir,firmware_ruta) fon = fondo() ventana_principal.fondo = fon inicial = componente_inicial(50, 50, 1, fon, ventana_principal) fon.objetos.append(inicial) ventana_principal.window1.show_all() R = ventana_principal.cfg.get("icaro_config", "colorR") G = ventana_principal.cfg.get("icaro_config", "colorG") B = ventana_principal.cfg.get("icaro_config", "colorB") X = ventana_principal.cfg.get("icaro_config", "pantallax") Y = ventana_principal.cfg.get("icaro_config", "pantallay") ventana_principal.area.set_size_request(int(X), int(Y)) ventana_principal.fondo.FONDO = (int(R), int(G), int(B)) gobject.timeout_add(50, ventana_principal.timeout) # gobject.idle_add(ventana_principal.timeout) # gobject.PRIORITY_DEFAULT=-1 gtk.main()
#aca va todo lo de pygame fon.update() fon.componentes.update() fon.datos.update() punt.update() pygame.display.update() return True # Inicio todas las clases ventana_principal=Ventana() #capturo el xid del drawingarea os.putenv('SDL_WINDOWID', str(ventana_principal.area.window.xid)) gtk.gdk.flush() gobject.idle_add(loop) ventana_principal.window1.show_all() fon=fondo() punt=puntero(fon,ventana_principal) texto=texto.Text(fon) menu=pygame.sprite.RenderClear() ventana_principal.fondo=fon ventana_principal.textorender=texto # el unico objeto que cargo con nombre identificable inicial=componente_inicial(20,50,1,fon,ventana_principal,texto) fondo.objetos.append(inicial) fon.componentes.add(inicial) gtk.main()
class Ventana(crear_comp, tool_compilador, UTILIDADES): """ Clase ventana contiene el constructor de la ventana GTK y las funciones basicas del sistema. diagrama de los widget anidados: ############################################### ventana | ->box1 | -> menu_bar | -> box2 | -> scrolled_window3 | | | -> toolbar | -> hp | -> self.notebook2 | | | -> scrolled_window | | | | | -> area | | | -> visor | -> scrolled_window2 | -> notebook ################################################ esta clase controla todos los eventos del programa, mouse, teclado, interaccion entre los componentes. A su ves es la encargada d actualizar el estado de los bloques icaro y redibujar la pantalla mediante la funcion ventana_principal.timeout """ # variables globales para manejar posicion del mouse, clicks y pulsaciones # de teclas dentro de la ventana archivo = "" mousexy = (0, 0) boton_mouse = [0, 0, 0, 0] seleccionado = 0 seleccionado_datos = 0 seleccionado_datos_ed = 0 tecla = 0 valor_tecla = "" tecla_enter = 0 cadena_pinguino = [] seleccion_menu = 1 tipo_componente = 1 diccionario = {} tooltip = {} lista = [] config = [] edicion = 0 z = 1 cursores = [0] dicc_accesos_directos = { 65470: "f1", 65471: "f2", 65472: "f3", 65473: "f4", 65474: "f5", 65475: "f6", 65476: "f7", 65477: "f8", 65478: "f9", 65479: "f10", 65480: "f11", 65481: "f12", } valor_datos_comp = {} def __init__(self, icaro_dir, firmware_ruta): # esta es la lista de donde se sacan los valores para los botones # icaro self.firmware_ruta = "." + firmware_ruta self.icaro_dir = icaro_dir arch = open(sys.path[0] + "/version", "r") version = arch.readline() creditos.Info.version = version self.carga_conf_ventana() # declaro la ventana principal # esta es la toolbar donde van los botones para cargar los datos # y compilar # declaro la tabla donde van los botones para el menu de bloques # box1 es el contenedor principal despues de la ventana self.window1 = gtk.Window() # ~ self.window1.fullscreen() titulo = "icaro " + version.strip("\n\r") self.window1.set_title(titulo) toolbar = gtk.Toolbar() self.area = gtk.DrawingArea() scrolled_window = gtk.ScrolledWindow() scrolled_window2 = gtk.ScrolledWindow() scrolled_window3 = gtk.ScrolledWindow() table = gtk.VBox(False, 0) #len(self.lista)) notebook = gtk.Notebook() self.notebook2 = gtk.Notebook() hp = gtk.HPaned() box2 = gtk.HBox(False, 3) box1 = gtk.VBox(False, 3) menu_bar = gtk.MenuBar() # empaqueto todo # esta es la idea de usar un hpaned para poder achicar la pantalla #, en las netbook no entra todo self.window1.add(box1) box1.pack_start(menu_bar, False, True, 1) box1.pack_start(box2, True, True, 1) scrolled_window.add_with_viewport(self.area) scrolled_window3.add_with_viewport(toolbar) scrolled_window2.add_with_viewport(notebook) self.notebook2.append_page(scrolled_window, gtk.Label("bloques")) box2.pack_start(scrolled_window3, False, False, 1) box2.pack_start(hp, True, True, 1) hp.pack1(self.notebook2, True, True) hp.pack2(scrolled_window2, True, True) archivo_nombre = self.cfg.get("pic", "arch") self.valor_datos_comp["fin "] = self.cfg.get("pic", "cierrebloque") dir_source = (os.path.expanduser('~') + "/" + self.firmware_ruta + "firmware/source/" + archivo_nombre) self.ver = visor.visor_codigo(self, self.notebook2, self.firmware_ruta, "source/" + archivo_nombre, "codigo fuente") self.ver2 = visor.visor_codigo(self, self.notebook2, self.firmware_ruta, "temporal/log.dat", "registro de compilación") hp.set_position(500) self.window1.connect('delete-event', gtk.main_quit) self.window1.set_icon_from_file(sys.path[0] + "/imagenes/icaro.png") self.area.set_app_paintable(True) self.area.set_size_request(800, 800) menu1 = [_("File"), _("Edit"), "herramientas"] menu_general = [(_("New"), _("Open"), _("Save"), _("Save as"), _("Save as function"), _("Examples"), _("Exit")), (_("Background"), _("Color"), _("About"), _("Config")), ( "graficador", "clemente bulk", "clemente cdc", "firmware", )] menu_bar.show() # declaro los botones del menu 'menu'5 y 'edicion' for a in range(len(menu_general)): menu = gtk.Menu() # buf es donde se cargan todos los botones del menu for i in menu_general[a]: menu_items = gtk.MenuItem(i) menu.append(menu_items) menu_items.connect("activate", self.menuitem_response, i) menu_items.show() root_menu = gtk.MenuItem(menu1[a]) root_menu.show() root_menu.set_submenu(menu) menu_bar.append(root_menu) # toolbar.append_item toolbar.set_style(gtk.TOOLBAR_BOTH_HORIZ) toolbar.set_orientation(gtk.ORIENTATION_VERTICAL) toolbar.show() # creo los botones de la toolbar botones_toolbar = self.crear_botones_bootlader(toolbar) # creo los botones de la toolbar en funcion de la tupla botonas_toolbar for dat in botones_toolbar: if dat[0] == 3: toolbar.append_space() if dat[0] == 1 or dat[0] == 2: self.crear_toolbuttons(dat[0], dat[1], dat[2], dat[3], dat[4], dat[5], dat[6]) scrolled_window.set_size_request(300, 300) scrolled_window.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS) scrolled_window.show() scrolled_window2.set_border_width(1) scrolled_window2.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) scrolled_window2.show() scrolled_window3.set_border_width(1) scrolled_window3.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) scrolled_window3.show() notebook.set_tab_pos(gtk.POS_RIGHT) label = gtk.Label(self.diccionario[self.lista[0]][1]) notebook.append_page(table, label) button = gtk.RadioButton() ## aca cargo los datos de cada bloque ## for i in range(1, len(self.lista)): if self.diccionario[self.lista[i]][0] == "notebook": table = gtk.VBox(False, 0) #len(self.lista)) label = gtk.Label(self.diccionario[self.lista[i]][1]) notebook.append_page(table, label) else: self.diccionario[self.lista[i]][0] caja = self.imagen_boton(self.diccionario[self.lista[i]][0], self.diccionario[self.lista[i]][0]) button = gtk.RadioButton(button) button.set_tooltip_text(self.diccionario[self.lista[i]][6]) button.add(caja) button.connect("clicked", self.botones, self.lista[i]) table.pack_start(button, False, True, 0) button.show() # capturo los eventos del drawing area # menos el teclado que lo capturo desde la ventana principal self.area.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.area.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.area.add_events(gtk.gdk.POINTER_MOTION_MASK) self.window1.add_events(gtk.gdk.KEY_PRESS_MASK) self.window1.add_events(gtk.gdk.KEY_RELEASE_MASK) self.area.connect("button-press-event", self.buttonpress_cb) self.area.connect("button-release-event", self.buttonrelease_cb) self.area.connect("motion-notify-event", self.move_cb) self.area.connect("expose-event", self.expose) self.window1.connect("key_press_event", self.keypress_cb) self.window1.connect("key_release_event", self.keyrelease_cb) self.area.realize() display = self.area.window.get_display() pixbuf = gtk.gdk.pixbuf_new_from_file( os.path.abspath(os.path.dirname(__file__)) + "/imagenes/mouse/lapiz.png") lapiz = gtk.gdk.Cursor(display, pixbuf, 6, 18) self.cursores.append(lapiz) pixbuf = gtk.gdk.pixbuf_new_from_file( os.path.abspath(os.path.dirname(__file__)) + "/imagenes/mouse/puntero.png") puntero = gtk.gdk.Cursor(display, pixbuf, 6, 18) self.cursores.append(puntero) pixbuf = gtk.gdk.pixbuf_new_from_file( os.path.abspath(os.path.dirname(__file__)) + "/imagenes/mouse/borrar.png") borrar = gtk.gdk.Cursor(display, pixbuf, 6, 18) self.cursores.append(borrar) pixbuf = gtk.gdk.pixbuf_new_from_file( os.path.abspath(os.path.dirname(__file__)) + "/imagenes/mouse/edicion.png") edicion = gtk.gdk.Cursor(display, pixbuf, 6, 18) self.cursores.append(edicion) self.definir_cursor(1) def crear_botones_bootlader(self, toolbar): botones_inic = [[ 1, toolbar, gtk.STOCK_NEW, "New", self.tooltip["nuevo"], self.nuevo, None ], [ 1, toolbar, gtk.STOCK_OPEN, "Open", self.tooltip["abrir"], self.abrir, None ], [ 1, toolbar, gtk.STOCK_SAVE, "Save", self.tooltip["guardar"], self.guardar, 0 ], [ 1, toolbar, gtk.STOCK_QUIT, "Quit", self.tooltip["salir"], self.salir, None ], [3]] # boton_medio=[ # [2, toolbar, sys.path[0] + "/imagenes/icaro.png", # "Compile", self.tooltip["compilar"], self.compilar, None], # [2, toolbar, sys.path[0] + "/imagenes/compilar.png", # "Load", self.tooltip["cargar"], self.upload, None], # [3], # [2, toolbar, sys.path[0] + "/imagenes/tortucaro.png", # "Tortucaro", self.tooltip["tortucaro"], self.comp_esp, # "tortucaro/tortucaro"], # [2, toolbar, sys.path[0] + "/imagenes/pilas.png", # "pilas", self.tooltip["pilas"], self.comp_esp, # "pilas/pilas-engine"], # [2, toolbar, sys.path[0] + "/imagenes/icaroblue.png", # "icaroblue", self.tooltip["icaroblue"], self.comp_esp, # "icaroblue/icaroblue"], # [3]] boton_medio = [] for linea in self.carga_info_botones(): boton_medio.append([ 2, toolbar, sys.path[0] + "/" + self.icaro_dir + linea[0], linea[1], self.tooltip[linea[2]], linea[3], linea[4] ]) boton_fin = [ [ 1, toolbar, gtk.STOCK_HELP, "Help", self.tooltip["ayuda"], self.ayuda, None ], [3], [ 1, toolbar, gtk.STOCK_ADD, "Pen", self.tooltip["lapiz"], self.dibujo, 1 ], [ 1, toolbar, gtk.STOCK_SELECT_COLOR, "Move", self.tooltip["mover"], self.dibujo, 2 ], [ 1, toolbar, gtk.STOCK_DELETE, "Erase", self.tooltip["borrar"], self.dibujo, 3 ], [1, toolbar, gtk.STOCK_EDIT, "Edit", "", self.dibujo, 4], [3], [ 1, toolbar, gtk.STOCK_ZOOM_IN, "agrandar", "", self.menuitem_response, "zoomas" ], [ 1, toolbar, gtk.STOCK_ZOOM_OUT, "achicar", "", self.menuitem_response, "zoomenos" ], [ 1, toolbar, gtk.STOCK_ZOOM_100, "zoom 1:1", "", self.menuitem_response, "zoomcero" ], ] botones_final = botones_inic + boton_medio + boton_fin return botones_final def crear_toolbuttons(self, tipo, toolbar, img, nombre, tooltip, func, metodos): # creo los botones de la toolbar if tipo == 1: iconw = gtk.Image() iconw.set_from_stock(img, 30) tool_button = toolbar.append_item(_(nombre), tooltip, "Private", iconw, func, metodos) if tipo == 2: iconw = gtk.Image() iconw.set_from_file(img) tool_button = toolbar.append_item(_(nombre), tooltip, "Private", iconw, func, metodos) def definir_cursor(self, b): self.area.window.set_cursor(self.cursores[b]) # if b==1: # self.area.window.set_cursor(None) self.puntero_seleccion_mouse = b # ======================================================================== # ABRIR LA VENTANA DE VISOR DE CODIGO # ======================================================================== def graf(self): graf = graficador_matplot.VENTANA() graf.window.show_all() def clemente(self, prt): cad = "clear\n python " + src + "/clemente/clemente.py " + prt + " \n" cle = terminal_vte.TERM_CLEMENTE(cad) cle.window.show_all() # ======================================================================== # VENTANA DE AYUDA (NAVEGADOR) # ======================================================================== def ayuda(self, b): #self.visor() texto = ( "para ver la documentación actualizada, ir a la pagina web: http://roboticaro.org/documentacion/" ) self.mensajes(3, texto) def dibujo(self, event, b): self.seleccion_menu = b self.definir_cursor(b) # ======================================================================== # ESTO ES PARA GREGAR IMAGENES AL BOTON DE LA TOOLBAR # ======================================================================== def imagen_boton(self, xpm_filename, label_text): box1 = gtk.HBox(False, 0) box1.set_border_width(0) image = gtk.Image() xpm_filename = xpm_filename.strip(" ") buf = sys.path[ 0] + "/" + self.icaro_dir + "/imagenes/componentes/" + xpm_filename + ".png" image.set_from_file(buf) label = gtk.Label(label_text) box1.pack_start(image, False, True, 1) box1.pack_start(label, False, True, 1) image.show() label.show() return box1 # esta funcion captura el evento de presionar un boton de la toolbar # table y lo manda tipo_componentes def botones(self, event, b): self.tipo_componente = b self.seleccion_menu = 1 self.definir_cursor(1) return def guardar(self, b, dato): pagina = self.notebook2.get_current_page() dialog = gtk.FileChooserDialog("save..", None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) response = dialog.run() if response == gtk.RESPONSE_OK: cadena = dialog.get_filename() # separo la cadena para sacar la extension del archivo # si el tamaño de cadena2 es 1, el nombre del archivo no # tiene extension, entonces le agrego - .icr - cadena2 = cadena.split(".") print len(cadena2) if len(cadena2) == 1: print "dato", dato, pagina if dato == 0 and pagina == 0: cadena = cadena + ".icr" elif dato == 0 and pagina == 1: cadena = cadena + ".c" elif dato == 1: cadena = cadena + ".func" if os.path.isfile(cadena): resp = self.mensajes( 1, "Ya existe un archivo con el nombre " + cadena + "¿Quiere reemplazarlo?") else: resp = False if resp == True or os.path.isfile(cadena) == False: if dato == 0: print "daot=0" if pagina == 0: print "pag=0" guardar.guardar(self.fondo.objetos, cadena, self.fondo) self.archivo = cadena else: if pagina == 1: self.ver.save_file(cadena) if dato == 1: crear.funcion( self.fondo, self, cadena, ) elif response == gtk.RESPONSE_CANCEL: pass dialog.destroy() print resp, cadena def abrir(self, dato): pagina = self.notebook2.get_current_page() dialog = gtk.FileChooserDialog("Open..", None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) try: dialog.set_current_folder(dato) except Exception, ex: dialog.set_current_folder(sys.path[0]) if pagina == 0: filter = gtk.FileFilter() filter.set_name("icaro") filter.add_pattern("*.icr") dialog.add_filter(filter) if pagina == 1: filter = gtk.FileFilter() filter.set_name("C") filter.add_pattern("*.c") dialog.add_filter(filter) response = dialog.run() if response == gtk.RESPONSE_OK: if pagina == 0: nuevo.nuevo(self.fondo) inicial = componente_inicial(20, 50, 1, self.fondo, self) self.fondo.objetos.append(inicial) cadena = dialog.get_filename() self.update() abrir.abrir(self.diccionario, cadena, self.fondo, self) self.archivo = cadena if pagina == 1: cadena = dialog.get_filename() self.ver.open_file(self.ver.buffer, cadena) elif response == gtk.RESPONSE_CANCEL: print 'Closed, no files selected' dialog.destroy()
class Ventana: # variables globales para manejar posicion del mouse, clicks y pulsaciones # de teclas dentro de la ventana archivo="" mousexy=(0,0) boton_mouse= [0,0,0,0] seleccionado=0 seleccionado_datos=0 seleccionado_datos_ed=0 tecla=0 valor_tecla="" tecla_enter=0 processor="18f4550" cadena_pinguino=[] seleccion_menu=1 tipo_componente=1 diccionario={} tooltip={} lista=[] config=[] edicion=0 dicc_accesos_directos={ 65470:"f1", 65471:"f2", 65472:"f3", 65473:"f4", 65474:"f5", 65475:"f6", 65476:"f7", 65477:"f8", 65478:"f9", 65479:"f10", 65480:"f11", 65481:"f12", } def __init__(self): ############################################### # el orden de los contenedores de la ventana # ventana # | # ->box1 # | # -> menu_bar # | # -> toolbar # | # -> box2 # | # -> scrolled_window # | # -> scrolled_window2 ################################################ #esta es la lista de donde se sacan los valores para los botones #icaro arch=open(sys.path[0] + "/version", "r") a=arch.readline() creditos.Info.version= a self.carga_dicc() self.tooltip=tooltips.dicc self.lista=self.diccionario.keys() self.lista.sort() self.carga_paleta() # cargo la configuracion de icaro conf=open(sys.path[0] +"/config.dat","r") dat=conf.readlines() for txt in dat: self.config.append(txt) conf.close() #declaro la ventana principal self.window1 = gtk.Window() self.window1.connect('delete-event', gtk.main_quit) self.window1.set_icon_from_file( sys.path[0] + "/imagenes/icaro.png" ) #~ self.window1.fullscreen() #self.window1.fullscreen() # declaro el drawing area donde va a estar pygame # y los eventos del mouse y teclado self.area = gtk.DrawingArea() self.area.set_app_paintable(True) self.area.set_size_request(3000, 3000) # declaro los botones del menu 'menu' y 'edicion' menu = gtk.Menu() # buf es donde se crgan todos los botones del menu buf=( _("New"), _("Open"), _("Save"), _("Save as"), _("Save as function"), _("Examples"), _("Exit") ) for i in buf: menu_items = gtk.MenuItem(i) menu.append(menu_items) menu_items.connect("activate", self.menuitem_response, i) menu_items.show() menu2 = gtk.Menu() # buf es donde se crgan todos los botones del menu buf2=(_("Background"),_("Color"),_("About"), _("Config")) for i in buf2: menu_items2 = gtk.MenuItem(i) menu2.append(menu_items2) menu_items2.connect("activate", self.menuitem_response, i) menu_items2.show() # los menus del toolbar se agrupan en estos dos "menus raices" root_menu = gtk.MenuItem(_("File")) root_menu.show() root_menu.set_submenu(menu) root_menu2 = gtk.MenuItem(_("Edit")) root_menu2.show() root_menu2.set_submenu(menu2) #los dos menus_root quedan dentro de la barra de menu menu_bar = gtk.MenuBar() menu_bar.show() menu_bar.append (root_menu) menu_bar.append (root_menu2) # esta es la toolbar donde van los botones para cargar los datos # y compilar toolbar = gtk.Toolbar() toolbar.append_item toolbar.set_style(gtk.TOOLBAR_BOTH) toolbar.show() # creo los botones de la toolbar iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_NEW,30) tool_button = toolbar.append_item( _("New"), self.tooltip["nuevo"], "Private", iconw, self.nuevo) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_OPEN,30) tool_button = toolbar.append_item( _("Open"), self.tooltip["abrir"], "Private", iconw, self.abrir) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_SAVE,30) tool_button = toolbar.append_item( _("Save"), self.tooltip["guardar"], "Private", iconw, self.guardar) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_QUIT,30) tool_button = toolbar.append_item( _("Exit"), self.tooltip["salir"], "Private", iconw, self.salir) toolbar.append_space() iconw = gtk.Image() iconw.set_from_file(sys.path[0] + "/imagenes/icaro.png") tool_button = toolbar.append_item( _("Compile"), self.tooltip["compilar"], "Private", iconw, self.compilar) iconw = gtk.Image() iconw.set_from_file(sys.path[0] + "/imagenes/compilar.png") tool_button = toolbar.append_item( _("Load"), self.tooltip["cargar"], "Private", iconw, self.upload) iconw = gtk.Image() iconw.set_from_file(sys.path[0] + "/imagenes/tortucaro.png") tool_button = toolbar.append_item( _("Tortucaro"), self.tooltip["tortucaro"], "Private", iconw, self.tortucaro) toolbar.append_space() iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_HELP,30) tool_button = toolbar.append_item( _("Help"), self.tooltip["ayuda"], "Private", iconw, self.ayuda) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_PROPERTIES,30) tool_button = toolbar.append_item( _("View source"), self.tooltip["ver_codigo"], "Private", iconw, self.ver) # un espacio en blanco para separar toolbar.append_space() iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_EDIT,30) dibujar_button = toolbar.append_element( gtk.TOOLBAR_CHILD_BUTTON,None, _("Pen"), self.tooltip["lapiz"], "Private", iconw, self.dibujo,1) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_SELECT_COLOR,30) mover_button = toolbar.append_element( gtk.TOOLBAR_CHILD_BUTTON,None, _("Move"), self.tooltip["mover"], "Private", iconw, self.dibujo,2) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_DELETE,30) tool_button = toolbar.append_element( gtk.TOOLBAR_CHILD_BUTTON,None, _("Erase"), self.tooltip["borrar"], "Private", iconw, self.dibujo,3) iconw = gtk.Image() iconw.set_from_stock(gtk.STOCK_ZOOM_FIT,30) mover_button = toolbar.append_element( gtk.TOOLBAR_CHILD_BUTTON,None, _("Edit"), self.tooltip["mover"], "Private", iconw, self.dibujo,4) #declaro el scroll_window donde esta inserto el drawing area scrolled_window = gtk.ScrolledWindow() scrolled_window.set_size_request(500, 600) scrolled_window.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS) scrolled_window.show() scrolled_window.add_with_viewport(self.area) #declaro el scroll window donde va la toolbar de los bloques scrolled_window2 = gtk.ScrolledWindow() scrolled_window2.set_border_width(1) scrolled_window2.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) scrolled_window2.show() #declaro la tabla donde van los botones para el menu de bloques table=gtk.VBox(False, len(self.lista)) notebook = gtk.Notebook() notebook.set_tab_pos(gtk.POS_RIGHT) # notebook.show() # scrolled_window2.add_with_viewport(notebook) label = gtk.Label(self.diccionario[self.lista[0]][1]) notebook.append_page(table,label) # box1 es el contenedor principal despues de la ventana box1 = gtk.VBox(False, 3) # box2 es el segundo en importancia box2 = gtk.HBox(False, 2) buffer = self.diccionario[self.lista[1]][0] caja = self.imagen_boton( self.diccionario[self.lista[1]][0], self.diccionario[self.lista[1]][0] ) button = gtk.RadioButton() if self.tooltip.has_key(self.diccionario[self.lista[1]][0]): val=self.tooltip[self.diccionario[self.lista[1]][0]] button.set_tooltip_text(val) # bucle principal donde se cargan los RAdioButton donde se cargan # los componentes del diccionario button.add(caja) button.connect("clicked", self.botones,self.lista[1])#buffer button.show() table.pack_start(button, False, True, 0) for i in range(2,len(self.lista)): if self.diccionario[self.lista[i]][0]=="notebook": table=gtk.VBox(False, len(self.lista)) label = gtk.Label(self.diccionario[self.lista[i]][1]) notebook.append_page(table,label) else: buffer = self.diccionario[self.lista[i]][0] caja = self.imagen_boton( self.diccionario[self.lista[i]][0], self.diccionario[self.lista[i]][0] ) button = gtk.RadioButton(button) if self.tooltip.has_key( self.diccionario[self.lista[i]][0] ): tool=self.tooltip [ self.diccionario[self.lista[i]][0] ] button.set_tooltip_text(tool) button.add(caja) button.connect("clicked", self.botones,self.lista[i]) table.pack_start(button, False, True, 0) button.show() #empaqueto todo box2.pack_start(scrolled_window, True, True, 1) box2.pack_start(scrolled_window2,False, False, 1) box1.pack_start(menu_bar, False, True, 1) box1.pack_start(toolbar, False, True, 1) box1.pack_start(box2, True, True, 1) self.window1.add(box1) # capturo los eventos del drawing area # menos el teclado que lo capturo desde la ventana principal self.area.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.area.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.area.add_events(gtk.gdk.POINTER_MOTION_MASK) self.window1.add_events(gtk.gdk.KEY_PRESS_MASK) self.window1.add_events(gtk.gdk.KEY_RELEASE_MASK) self.area.connect("button-press-event", self.buttonpress_cb) self.area.connect("button-release-event", self.buttonrelease_cb) self.area.connect("motion-notify-event", self.move_cb) self.window1.connect("key_press_event", self.keypress_cb) self.window1.connect("key_release_event", self.keyrelease_cb) self.area.realize() # self.area.grab_focus() # ============================================================================== # ABRIR LA VENTANA DE VISOR DE CODIGO # ============================================================================== def ver(self,b): ver=visor.visor_codigo(self) ver.window.show_all() # ============================================================================== # VENTANA DE AYUDA (NAVEGADOR) # ============================================================================== def ayuda(self,b): browser = navegador.SimpleBrowser() browser.open('http://roboticaro.org/documentacion/index.html') browser.show() def dibujo(self,event,b): self.seleccion_menu=b # ============================================================================== # ESTO ES PARA GREGAR IMAGENES AL BOTON DE LA TOOLBAR # ============================================================================== def imagen_boton(self, xpm_filename, label_text): box1 = gtk.HBox(False, 0) box1.set_border_width(0) image = gtk.Image() xpm_filename=xpm_filename.strip(" ") buf=sys.path[0] + "/imagenes/componentes/"+xpm_filename+".png" image.set_from_file(buf) label = gtk.Label(label_text) box1.pack_start(image, False, True, 1) box1.pack_start(label, False, True, 1) image.show() label.show() return box1 # ============================================================================== # GENERADOR DE MENSAJES # ============================================================================== def mensajes(self,num,mensa): tipo= ( gtk.MESSAGE_WARNING, gtk.MESSAGE_QUESTION, gtk.MESSAGE_ERROR, gtk.MESSAGE_INFO ) botones=( gtk.BUTTONS_OK, gtk.BUTTONS_OK_CANCEL, gtk.BUTTONS_OK, gtk.BUTTONS_OK ) md = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, tipo[num], botones[num], mensa) resp=md.run() md.destroy() if resp == gtk.RESPONSE_OK: return True elif resp == gtk.RESPONSE_CANCEL: return False # esta funcion captura el evento de presionar un boton de la toolbar # table y lo manda tipo_componentes def botones(self,event,b): print "boton -" ,b self.tipo_componente=b self.seleccion_menu=1 return # ============================================================================== # FUNCION PARA GENERAR LOS COMPONENTES DESDE EL DICCIONARIO # ============================================================================== def crear_componente(self,b,x,y): ax=0 ay=30 dx=10 dy=20 # siempre hay que tratar de que el foco quede en el drawing area self.area.grab_focus() if self.diccionario[b][1]==1: c1=componente ( x-ax, y-ay, self.fondo.identificador+1, self.diccionario[b][2], self.diccionario[b][3], self.diccionario[b][0], self.fondo, self, self.textorender ) self.fondo.componentes.add(c1) self.fondo.identificador+=1 self.fondo.objetos.append(c1) self.fondo.tipo_obj.append(self.diccionario[b][1]) if self.diccionario[b][1]==4: self.fondo.identificador+=1 c1=componente_cero_arg ( x-ax, y-ay, self.fondo.identificador, self.diccionario[b][3], self.diccionario[b][0], self.fondo, self, self.textorender ) self.fondo.componentes.add(c1) self.fondo.objetos.append(c1) self.fondo.tipo_obj.append(self.diccionario[b][1]) if self.diccionario[b][1]==5: self.fondo.identificador+=1 c1=componente_bloque_uno( x-ax, y-ay, self.fondo.identificador, self.diccionario[b][3], self.diccionario[b][0], self.fondo, self, self.textorender ) self.fondo.componentes.add(c1) self.fondo.objetos.append(c1) self.fondo.identificador +=1 c1=componente_bloque_dos ( x-ax, y+80-ay, self.fondo.identificador, self.diccionario[b][3], self.diccionario[b][4], self.fondo, self, self.textorender ) self.fondo.componentes.add(c1) self.fondo.objetos.append(c1) self.fondo.tipo_obj.append(self.diccionario[b][1]) self.fondo.tipo_obj.append(0) if self.diccionario[b][1]==6: c1=comp_dat_arg ( x-dx, y-dy, self.fondo.identificador_dat, self.diccionario[b][2], self.diccionario[b][4], self.diccionario[b][3], self.diccionario[b][5], self.diccionario[b][0].strip(" ")+".png", 6, self.fondo, self, self.textorender ) self.fondo.identificador_dat+=1 self.fondo.datos.add(c1) self.fondo.objetos_datos.append(c1) self.fondo.tipo_obj_datos.append(self.diccionario[b][1]) if self.diccionario[b][1]==7: c1=comp_dat_arg ( x-dx, y-dy, self.fondo.identificador_dat, self.diccionario[b][2], self.diccionario[b][4], self.diccionario[b][3], self.diccionario[b][5], self.diccionario[b][0].strip(" ")+".png", 7, self.fondo, self, self.textorender ) self.fondo.identificador_dat+=1 self.fondo.datos.add(c1) self.fondo.objetos_datos.append(c1) self.fondo.tipo_obj_datos.append(self.diccionario[b][1]) # por si quiero implementar un dialogo de mensajes # self.dialog = gtk.MessageDialog(None, # gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, # gtk.MESSAGE_QUESTION, # gtk.BUTTONS_OK,None) # self.dialog.set_markup('Please enter your <b>name</b>:') # entry = gtk.Entry() # entry.connect("activate", self.responseToDialog, self.dialog, gtk.RESPONSE_OK) # hbox = gtk.HBox() # hbox.pack_start(gtk.Label("valor:"), False, 5, 5) # hbox.pack_end(entry) # self.dialog.format_secondary_markup("ingresa el valor del componente") # self.dialog.vbox.pack_end(hbox, True, True, 0) # # def responseToDialog(self,entry, dialog, response): # dialog.response(response) # text= entry.get_text() # dialog.hide() # #return text # ============================================================================== # FUNCIONES PARA COMPILAR Y CARGAR EL FIRMWARE # ============================================================================== # cargo template.pde para tener la planilla estandar dentro de # cadena_pinguino def carga(self): self.cadena_pinguino[:]=[] dir_conf=os.path.expanduser('~') + "/.icaro/np05/" archivo=open(dir_conf +"/source/template.pde","r") for linea in archivo: self.cadena_pinguino.append(linea) def compilar(self,b): self.carga() crear.crear_archivo(self.fondo,self) i=carga.compilar_pic("main",self.config[0]) if i==1: self.mensajes(0,("no se encuentra el compilador sdcc en" + " la ruta " + self.config[0] + " . Pruebe configurar el archivo"+ " config.dat y corregirlo")) if i==0: self.mensajes(3,"la compilacion fue exitosa") else: self.mensajes(0,"hubo un error de compilacion") def upload(self,b): resultado=1 self.mensajes (3, "aprete el boton RESET de la placa pinguino antes de continuar" ) i=carga.upload_pic("main",self.config[0]) if i==0: self.mensajes(3,"la carga fue exitosa") return 0 if i==1: self.mensajes(0,"no se a detectado ningun dispositivo conectada. ¿esta conectado y encendido el PIC?") return 1 if i==2: self.mensajes(0,"Se detecto el dispositivo, pero no se puede cargar el firmware, hay que cargar el firmware antes de que se prenda el led rojo del dispositivo") return 2 if i==2: self.mensajes(0,"no se genero el archivo .hex para cargar") return 3 if i==2: self.mensajes(0,"error al compilar y generar el archivo .hex") return 4 def tortucaro(self,b): resultado=1 comp=1 i=carga.compilar_pic("tortucaro",self.config[0]) if i==0: self.mensajes(3,"la compilacion fue exitosa") comp=0 else: self.mensajes(0,"hubo un error de compilacion") comp=1 if comp==0: self.mensajes ( 3, "aprete el boton RESET de la placa pinguino antes de continuar" ) i=carga.upload_pic("tortucaro",self.config[0]) if i==0: self.mensajes(3,"la carga fue exitosa") return 0 if i==1: self.mensajes(0,"no se a detectado ningun dispositivo conectada. ¿esta conectado y encendido el PIC?") return 1 if i==2: self.mensajes(0,"Se detecto el dispositivo, pero no se puede cargar el firmware, hay que cargar el firmware antes de que se prenda el led rojo del dispositivo") return 2 if i==2: self.mensajes(0,"no se genero el archivo .hex para cargar") return 3 if i==2: self.mensajes(0,"error al compilar y generar el archivo .hex") return 4 def guardar(self,dato): dialog = gtk.FileChooserDialog("save..", None, gtk.FILE_CHOOSER_ACTION_SAVE, ( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK ) ) dialog.set_default_response(gtk.RESPONSE_OK) response = dialog.run() if response == gtk.RESPONSE_OK: cadena=dialog.get_filename() #separo la cadena para sacar la extension del archivo # si el tamaño de cadena2 es 1, el nombre del archivo no #tiene extension, entonces le agrego - .icr - cadena2=cadena.split(".") if len(cadena2)==1: cadena=cadena+".icr" if os.path.isfile(cadena): resp=self.mensajes( 1, "Ya existe un archivo con el nombre "+ cadena + "¿Quiere reemplazarlo?" ) else: resp=False if resp==True or os.path.isfile(cadena)==False : guardar.guardar( self.fondo.objetos, cadena, self.fondo ) self.archivo=cadena elif response == gtk.RESPONSE_CANCEL: pass dialog.destroy() def abrir(self,dato): dialog = gtk.FileChooserDialog( "Open..", None, gtk.FILE_CHOOSER_ACTION_OPEN, ( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK ) ) dialog.set_default_response(gtk.RESPONSE_OK) try: dialog.set_current_folder(dato) except Exception, ex: dialog.set_current_folder(sys.path[0]) #~ filter = gtk.FileFilter() #~ filter.set_name("All files") #~ filter.add_pattern("*") #~ dialog.add_filter(filter) filter = gtk.FileFilter() filter.set_name("icaro") filter.add_pattern("*.icr") dialog.add_filter(filter) response = dialog.run() if response == gtk.RESPONSE_OK: nuevo.nuevo(self.fondo) inicial=componente_inicial ( 20,50,1, self.fondo, self,self.textorender ) self.fondo.componentes.add(inicial) self.fondo.objetos.append(inicial) cadena= dialog.get_filename() abrir.abrir( self.diccionario, cadena, self.fondo, self, self.textorender ) self.archivo=cadena elif response == gtk.RESPONSE_CANCEL: print 'Closed, no files selected' dialog.destroy()