Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
    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()
Example #7
0
@lasUpdate => 3-20-2020
@version   => 1.0.1
'''
import pyautogui
import xlrd
from datetime import datetime
from finalFunciones import encontrar
from dias import diasEntrega
from iconoGuardar import guardarIcono
from detallesUsuario import detallesUsuario
from textoOC import textoOC
from defUsuario import defUsuario
from parteProveedor import parteProveedor
from nuevo import nuevo
from cerrarPestana import cerrarPestana

i = 0
inicio = datetime.now()

#Iterate n cases.
for i in range(23):
    encontrar(i)
    diasEntrega(i)
    detallesUsuario(i)
    textoOC()
    defUsuario(i)
    parteProveedor()
    nuevo(i)
    cerrarPestana()
    print(datetime.now() - inicio)
Example #8
0
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()
Example #9
0
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()