Package icaro-bloques :: Module icaro
[hide private]
[frames] | no frames]

Source Code for Module icaro-bloques.icaro

   1  #!/usr/bin/python 
   2  # -*- coding: utf-8 -*- 
   3   
   4  # This program is free software: you can redistribute it and/or modify 
   5  # it under the terms of the GNU General Public License as published by 
   6  # the Free Software Foundation, either version 3 of the License, or 
   7  # (at your option) any later version. 
   8  # 
   9  # This program is distributed in the hope that it will be useful, 
  10  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
  11  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  12  # GNU General Public License for more details. 
  13   
  14  import pygtk 
  15  import gtk 
  16  import os 
  17  import re 
  18  import shutil 
  19  import sys 
  20  import gobject 
  21  import pygame 
  22  import creditos 
  23  from subprocess import Popen,PIPE,STDOUT 
  24  import carga, abrir, nuevo, guardar, crear, navegador, visor, texto 
  25  from componente_inicial import * 
  26  from componente import * 
  27   
  28  # ============================================================================== 
  29  # variables globales de color 
  30  # ============================================================================== 
  31   
  32  BLACK = (0, 0, 0) 
  33  LINEA=(255,0,0) 
  34   
  35  # ============================================================================== 
  36  # PUNTERO 
  37  # ============================================================================== 
38 -class puntero(pygame.sprite.Sprite):
39 - def __init__ (self,fondo,ventana):
40 pygame.sprite.Sprite.__init__(self) 41 self.fondo=fondo 42 self.ventana=ventana
43
44 - def update(self):
45 posic_mouse= self.ventana.mousexy 46 if self.ventana.seleccion_menu==1: 47 self.imagen=pygame.image.load(sys.path[0] + "/imagenes/mouse/lapiz.png") 48 if self.ventana.seleccion_menu==2: 49 self.imagen=pygame.image.load(sys.path[0] + "/imagenes/mouse/puntero.png") 50 if self.ventana.seleccion_menu==3: 51 self.imagen=pygame.image.load(sys.path[0] + "/imagenes/mouse/borrar.png") 52 xy=posic_mouse[0]-10,posic_mouse[1]-10 53 self.fondo.screen.blit(self.imagen,xy)
54 55 # ============================================================================== 56 # FONDO 57 # ==============================================================================
58 -class fondo(pygame.sprite.Sprite):
59 FONDO=(00,22,55) 60 #variables para los componentes 61 componentes=pygame.sprite.RenderClear() 62 identificador=1 63 objetos=[] 64 tipo_obj=[0] 65 lista_ordenada=[] 66 lista_fina=[] 67 # variable para los componentes datos 68 datos=pygame.sprite.RenderClear() 69 identificador_dat=1 70 identificador_dat2=1 71 objetos_datos=[0] 72 tipo_obj_datos=[0] 73 lista_valor_datos=[] 74 lista_valor_datos2=[] 75 #variables globales 76 color_texto=(255,255,255) 77 poscion_botones=0 78 band=0 79
80 - def __init__(self):
81 pygame.sprite.Sprite.__init__(self) 82 size = 1100, 2000 83 self.screen = pygame.display.set_mode(size,pygame.DOUBLEBUF,32) 84 self.largo,self.alto=self.screen.get_size() 85 self.lista_ordenada.append(0) 86 self.img=""
87 - def carga_img(self,img):
88 self.img=img 89 self.imagen=pygame.image.load(self.img) 90 self.img_rect=self.imagen.get_rect() 91 self.band=1
92 - def update(self):
93 self.screen.fill(self.FONDO) 94 if self.band==1: 95 self.screen.blit(self.imagen,(0,0)) 96 pygame.mouse.set_visible(False) 97 pygame.display.update
98 99 100 # ============================================================================== 101 # VENTANA 102 # ==============================================================================
103 -class Ventana:
104 105 # variables globales para manejar posicion del mouse, clicks y pulsaciones 106 # de teclas dentro de la ventana 107 mousexy=(0,0) 108 boton_mouse= [0,0,0,0] 109 seleccionado=0 110 seleccionado_datos=0 111 seleccionado_datos_ed=0 112 tecla=0 113 valor_tecla="" 114 tecla_enter=0 115 processor="18f4550" 116 cadena_pinguino=[] 117 seleccion_menu=1 118 tipo_componente=1 119 diccionario={} 120 tooltip={} 121 lista=[] 122 config=[]
123 - def __init__(self):
124 125 ############################################### 126 # el orden de los contenedores de la ventana 127 # ventana 128 # | 129 # ->box1 130 # | 131 # -> menu_bar 132 # | 133 # -> toolbar 134 # | 135 # -> box2 136 # | 137 # -> scrolled_window 138 # | 139 # -> scrolled_window2 140 ################################################ 141 #esta es la lista de donde se sacan los valores para los botones 142 #icaro 143 arch=open(sys.path[0] + "/version", "r") 144 a=arch.readline() 145 creditos.Info.version= a 146 self.carga_dicc() 147 self.carga_tooltip() 148 self.lista=self.diccionario.keys() 149 self.lista.sort() 150 self.carga_paleta() 151 conf=open(sys.path[0] +"/config.dat","r") 152 dat=conf.readlines() 153 for txt in dat: 154 self.config.append(txt) 155 conf.close() 156 157 #declaro la ventana principal 158 self.window1 = gtk.Window() 159 self.window1.connect('delete-event', gtk.main_quit) 160 self.window1.set_icon_from_file( 161 sys.path[0] + 162 "/imagenes/icaro.png" 163 ) 164 #~ self.window1.fullscreen() 165 #self.window1.fullscreen() 166 # declaro el drawing area donde va a estar pygame 167 # y los eventos del mouse y teclado 168 self.area = gtk.DrawingArea() 169 self.area.set_app_paintable(True) 170 self.area.set_size_request(3000, 3000) 171 # declaro los botones del menu 'menu' y 'edicion' 172 menu = gtk.Menu() 173 # buf es donde se crgan todos los botones del menu 174 buf=( 175 "nuevo", 176 "abrir", 177 "guardar", 178 # "guardar como", 179 "guardar como función", 180 "ejemplos", 181 "salir" 182 ) 183 for i in buf: 184 menu_items = gtk.MenuItem(i) 185 menu.append(menu_items) 186 menu_items.connect("activate", self.menuitem_response, i) 187 menu_items.show() 188 189 190 menu2 = gtk.Menu() 191 # buf es donde se crgan todos los botones del menu 192 buf2=("fondo","color","acerca de") 193 for i in buf2: 194 menu_items2 = gtk.MenuItem(i) 195 menu2.append(menu_items2) 196 menu_items2.connect("activate", self.menuitem_response, i) 197 menu_items2.show() 198 199 200 # los menus del toolbar se agrupan en estos dos "menus raices" 201 root_menu = gtk.MenuItem("Archivo") 202 root_menu.show() 203 root_menu.set_submenu(menu) 204 205 root_menu2 = gtk.MenuItem("editar") 206 root_menu2.show() 207 root_menu2.set_submenu(menu2) 208 #los dos menus_root quedan dentro de la barra de menu 209 menu_bar = gtk.MenuBar() 210 menu_bar.show() 211 menu_bar.append (root_menu) 212 menu_bar.append (root_menu2) 213 # esta es la toolbar donde van los botones para cargar los datos 214 # y compilar 215 toolbar = gtk.Toolbar() 216 toolbar.append_item 217 toolbar.set_style(gtk.TOOLBAR_BOTH) 218 toolbar.show() 219 # creo los botones de la toolbar 220 iconw = gtk.Image() 221 iconw.set_from_stock(gtk.STOCK_NEW,30) 222 tool_button = toolbar.append_item( 223 "Nuevo", 224 self.tooltip["nuevo"], 225 "Private", 226 iconw, 227 self.nuevo) 228 229 iconw = gtk.Image() 230 iconw.set_from_stock(gtk.STOCK_OPEN,30) 231 tool_button = toolbar.append_item( 232 "Abrir", 233 self.tooltip["abrir"], 234 "Private", 235 iconw, 236 self.abrir) 237 iconw = gtk.Image() 238 iconw.set_from_stock(gtk.STOCK_SAVE,30) 239 tool_button = toolbar.append_item( 240 "Guardar", 241 self.tooltip["guardar"], 242 "Private", 243 iconw, 244 self.guardar) 245 iconw = gtk.Image() 246 iconw.set_from_stock(gtk.STOCK_QUIT,30) 247 tool_button = toolbar.append_item( 248 "salir", 249 self.tooltip["salir"], 250 "Private", 251 iconw, 252 exit) 253 254 toolbar.append_space() 255 256 257 258 iconw = gtk.Image() 259 iconw.set_from_file(sys.path[0] + "/imagenes/icaro.png") 260 tool_button = toolbar.append_item( 261 "compilar", 262 self.tooltip["compilar"], 263 "Private", 264 iconw, 265 self.compilar) 266 267 iconw = gtk.Image() 268 iconw.set_from_file(sys.path[0] + "/imagenes/compilar.png") 269 tool_button = toolbar.append_item( 270 "cargar", 271 self.tooltip["cargar"], 272 "Private", 273 iconw, 274 self.upload) 275 276 iconw = gtk.Image() 277 iconw.set_from_file(sys.path[0] + "/imagenes/tortucaro.png") 278 tool_button = toolbar.append_item( 279 "tortucaro", 280 self.tooltip["tortucaro"], 281 "Private", 282 iconw, 283 self.tortucaro) 284 toolbar.append_space() 285 286 iconw = gtk.Image() 287 iconw.set_from_stock(gtk.STOCK_HELP,30) 288 tool_button = toolbar.append_item( 289 "ayuda", 290 self.tooltip["ayuda"], 291 "Private", 292 iconw, 293 self.ayuda) 294 iconw = gtk.Image() 295 iconw.set_from_stock(gtk.STOCK_PROPERTIES,30) 296 tool_button = toolbar.append_item( 297 "ver codigo", 298 self.tooltip["ver_codigo"], 299 "Private", 300 iconw, 301 self.ver) 302 303 304 # un espacio en blanco para separar 305 toolbar.append_space() 306 iconw = gtk.Image() 307 iconw.set_from_stock(gtk.STOCK_EDIT,30) 308 dibujar_button = toolbar.append_element( 309 gtk.TOOLBAR_CHILD_RADIOBUTTON,None, 310 "lapiz", 311 self.tooltip["lapiz"], 312 "Private", 313 iconw, 314 self.dibujo,1) 315 iconw = gtk.Image() 316 iconw.set_from_stock(gtk.STOCK_SELECT_COLOR,30) 317 tool_button = toolbar.append_element( 318 gtk.TOOLBAR_CHILD_RADIOBUTTON,dibujar_button, 319 "mover", 320 self.tooltip["mover"], 321 "Private", 322 iconw, 323 self.dibujo,2) 324 325 iconw = gtk.Image() 326 iconw.set_from_stock(gtk.STOCK_DELETE,30) 327 tool_button = toolbar.append_element( 328 gtk.TOOLBAR_CHILD_RADIOBUTTON,dibujar_button, 329 "borrar", 330 self.tooltip["borrar"], 331 "Private", 332 iconw, 333 self.dibujo,3) 334 335 #declaro el scroll_window donde esta inserto el drawing area 336 scrolled_window = gtk.ScrolledWindow() 337 scrolled_window.set_size_request(500, 600) 338 scrolled_window.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS) 339 scrolled_window.show() 340 scrolled_window.add_with_viewport(self.area) 341 #declaro el scroll window donde va la toolbar de los bloques 342 scrolled_window2 = gtk.ScrolledWindow() 343 scrolled_window2.set_border_width(1) 344 scrolled_window2.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) 345 scrolled_window2.show() 346 #declaro la tabla donde van los botones para el menu de bloques 347 348 table=gtk.VBox(False, len(self.lista)) 349 notebook = gtk.Notebook() 350 notebook.set_tab_pos(gtk.POS_RIGHT) 351 # notebook.show() 352 353 # 354 scrolled_window2.add_with_viewport(notebook) 355 356 label = gtk.Label(self.diccionario[self.lista[0]][1]) 357 notebook.append_page(table,label) 358 # box1 es el contenedor principal despues de la ventana 359 box1 = gtk.VBox(False, 3) 360 # box2 es el segundo en importancia 361 box2 = gtk.HBox(False, 2) 362 buffer = self.diccionario[self.lista[1]][0] 363 caja = self.imagen_boton( 364 self.diccionario[self.lista[1]][0], 365 self.diccionario[self.lista[1]][0] 366 ) 367 button = gtk.RadioButton() 368 if self.tooltip.has_key(self.diccionario[self.lista[1]][0]): 369 val=self.tooltip[self.diccionario[self.lista[1]][0]] 370 button.set_tooltip_text(val) 371 # bucle principal donde se cargan los RAdioButton donde se cargan 372 # los componentes del diccionario 373 374 375 button.add(caja) 376 button.connect("clicked", self.botones,self.lista[1])#buffer 377 378 button.show() 379 table.pack_start(button, False, True, 0) 380 381 for i in range(2,len(self.lista)): 382 if self.diccionario[self.lista[i]][0]=="notebook": 383 table=gtk.VBox(False, len(self.lista)) 384 label = gtk.Label(self.diccionario[self.lista[i]][1]) 385 notebook.append_page(table,label) 386 else: 387 buffer = self.diccionario[self.lista[i]][0] 388 caja = self.imagen_boton( 389 self.diccionario[self.lista[i]][0], 390 self.diccionario[self.lista[i]][0] 391 ) 392 button = gtk.RadioButton(button) 393 if self.tooltip.has_key( 394 self.diccionario[self.lista[i]][0] 395 ): 396 tool=self.tooltip [ 397 self.diccionario[self.lista[i]][0] 398 ] 399 button.set_tooltip_text(tool) 400 button.add(caja) 401 button.connect("clicked", self.botones,self.lista[i]) 402 table.pack_start(button, False, True, 0) 403 button.show() 404 #empaqueto todo 405 406 box2.pack_start(scrolled_window, True, True, 1) 407 box2.pack_start(scrolled_window2,False, False, 1) 408 box1.pack_start(menu_bar, False, True, 1) 409 box1.pack_start(toolbar, False, True, 1) 410 box1.pack_start(box2, True, True, 1) 411 self.window1.add(box1) 412 413 # capturo los eventos del drawing area 414 # menos el teclado que lo capturo desde la ventana principal 415 self.area.add_events(gtk.gdk.BUTTON_PRESS_MASK) 416 self.area.add_events(gtk.gdk.BUTTON_RELEASE_MASK) 417 self.area.add_events(gtk.gdk.POINTER_MOTION_MASK) 418 self.window1.add_events(gtk.gdk.KEY_PRESS_MASK) 419 self.window1.add_events(gtk.gdk.KEY_RELEASE_MASK) 420 self.area.connect("button-press-event", self.buttonpress_cb) 421 self.area.connect("button-release-event", self.buttonrelease_cb) 422 self.area.connect("motion-notify-event", self.move_cb) 423 self.window1.connect("key_press_event", self.keypress_cb) 424 self.window1.connect("key_release_event", self.keyrelease_cb) 425 self.area.realize()
426 # self.area.grab_focus() 427 428 # ============================================================================== 429 # ABRIR LA VENTANA DE VISOR DE CODIGO 430 # ==============================================================================
431 - def ver(self,b):
432 ver=visor.visor_codigo(self) 433 ver.window.show_all()
434 435 # ============================================================================== 436 # VENTANA DE AYUDA (NAVEGADOR) 437 # ==============================================================================
438 - def ayuda(self,b):
439 browser = navegador.SimpleBrowser() 440 browser.open(sys.path[0]+'/documentos/publican/manual_np05/tmp/es-ES/html/index.html') 441 browser.show()
442
443 - def dibujo(self,event,b):
444 self.seleccion_menu=b
445 446 # ============================================================================== 447 # ESTO ES PARA GREGAR IMAGENES AL BOTON DE LA TOOLBAR 448 # ==============================================================================
449 - def imagen_boton(self, xpm_filename, label_text):
450 box1 = gtk.HBox(False, 0) 451 box1.set_border_width(0) 452 image = gtk.Image() 453 xpm_filename=xpm_filename.strip(" ") 454 buf=sys.path[0] + "/imagenes/componentes/"+xpm_filename+".png" 455 image.set_from_file(buf) 456 label = gtk.Label(label_text) 457 box1.pack_start(image, False, True, 1) 458 box1.pack_start(label, False, True, 1) 459 image.show() 460 label.show() 461 return box1
462 463 # ============================================================================== 464 # GENERADOR DE MENSAJES 465 # ==============================================================================
466 - def mensajes(self,num,mensa):
467 tipo= ( 468 gtk.MESSAGE_WARNING, 469 gtk.MESSAGE_QUESTION, 470 gtk.MESSAGE_ERROR, 471 gtk.MESSAGE_INFO 472 ) 473 botones=( 474 gtk.BUTTONS_OK, 475 gtk.BUTTONS_OK_CANCEL, 476 gtk.BUTTONS_OK, 477 gtk.BUTTONS_OK 478 ) 479 md = gtk.MessageDialog(None, 480 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 481 tipo[num], 482 botones[num], mensa) 483 resp=md.run() 484 md.destroy() 485 if resp == gtk.RESPONSE_OK: 486 return True 487 elif resp == gtk.RESPONSE_CANCEL: 488 return False
489 490 # esta funcion captura el evento de presionar un boton de la toolbar 491 # table y lo manda tipo_componentes
492 - def botones(self,event,b):
493 self.tipo_componente=b
494 495 # ============================================================================== 496 # FUNCION PARA GENERAR LOS COMPONENTES DESDE EL DICCIONARIO 497 # ==============================================================================
498 - def crear_componente(self,b):
499 ax=ay=30 500 # siempre hay que tratar de que el foco quede en el drawing area 501 self.area.grab_focus() 502 503 if self.diccionario[b][1]==1: 504 c1=componente ( 505 self.mousexy[0]-ax, 506 self.mousexy[1]-ay, 507 self.fondo.identificador+1, 508 self.diccionario[b][2], 509 self.diccionario[b][3], 510 self.diccionario[b][0], 511 self.fondo, 512 self, 513 self.textorender 514 ) 515 self.fondo.componentes.add(c1) 516 self.fondo.identificador+=1 517 self.fondo.objetos.append(c1) 518 self.fondo.tipo_obj.append(self.diccionario[b][1]) 519 if self.diccionario[b][1]==4: 520 521 self.fondo.identificador+=1 522 c1=componente_cero_arg ( 523 self.mousexy[0]-ax, 524 self.mousexy[1]-ay, 525 self.fondo.identificador, 526 self.diccionario[b][3], 527 self.diccionario[b][0], 528 self.fondo, 529 self, 530 self.textorender 531 ) 532 533 self.fondo.componentes.add(c1) 534 self.fondo.objetos.append(c1) 535 self.fondo.tipo_obj.append(self.diccionario[b][1]) 536 if self.diccionario[b][1]==5: 537 self.fondo.identificador+=1 538 c1=componente_bloque_uno( 539 self.mousexy[0]-ax, 540 self.mousexy[1]-ay, 541 self.fondo.identificador, 542 self.diccionario[b][3], 543 self.diccionario[b][0], 544 self.fondo, 545 self, 546 self.textorender 547 ) 548 self.fondo.componentes.add(c1) 549 self.fondo.objetos.append(c1) 550 self.fondo.identificador +=1 551 c1=componente_bloque_dos ( 552 self.mousexy[0]-ax, 553 self.mousexy[1]+80-ay, 554 self.fondo.identificador, 555 self.diccionario[b][3], 556 self.diccionario[b][4], 557 self.fondo, 558 self, 559 self.textorender 560 ) 561 self.fondo.componentes.add(c1) 562 self.fondo.objetos.append(c1) 563 self.fondo.tipo_obj.append(self.diccionario[b][1]) 564 self.fondo.tipo_obj.append(0) 565 if self.diccionario[b][1]==6: 566 c1=comp_dat_arg ( 567 self.mousexy[0]-ax, 568 self.mousexy[1]-ay, 569 self.fondo.identificador_dat, 570 self.diccionario[b][2], 571 self.diccionario[b][4], 572 self.diccionario[b][3], 573 self.diccionario[b][5], 574 self.diccionario[b][0].strip(" ")+".png", 575 6, 576 self.fondo, 577 self, 578 self.textorender 579 ) 580 self.fondo.identificador_dat+=1 581 self.fondo.datos.add(c1) 582 self.fondo.objetos_datos.append(c1) 583 self.fondo.tipo_obj_datos.append(self.diccionario[b][1]) 584 if self.diccionario[b][1]==7: 585 c1=comp_dat_arg ( 586 self.mousexy[0]-ax, 587 self.mousexy[1]-ay, 588 self.fondo.identificador_dat, 589 self.diccionario[b][2], 590 self.diccionario[b][4], 591 self.diccionario[b][3], 592 self.diccionario[b][5], 593 self.diccionario[b][0].strip(" ")+".png", 594 7, 595 self.fondo, 596 self, 597 self.textorender 598 ) 599 self.fondo.identificador_dat+=1 600 self.fondo.datos.add(c1) 601 self.fondo.objetos_datos.append(c1) 602 self.fondo.tipo_obj_datos.append(self.diccionario[b][1])
603 604 # por si quiero implementar un dialogo de mensajes 605 # self.dialog = gtk.MessageDialog(None, 606 # gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 607 # gtk.MESSAGE_QUESTION, 608 # gtk.BUTTONS_OK,None) 609 # self.dialog.set_markup('Please enter your <b>name</b>:') 610 # entry = gtk.Entry() 611 # entry.connect("activate", self.responseToDialog, self.dialog, gtk.RESPONSE_OK) 612 # hbox = gtk.HBox() 613 # hbox.pack_start(gtk.Label("valor:"), False, 5, 5) 614 # hbox.pack_end(entry) 615 # self.dialog.format_secondary_markup("ingresa el valor del componente") 616 # self.dialog.vbox.pack_end(hbox, True, True, 0) 617 # 618 # def responseToDialog(self,entry, dialog, response): 619 # dialog.response(response) 620 # text= entry.get_text() 621 # dialog.hide() 622 # #return text 623 624 625 # ============================================================================== 626 # FUNCIONES PARA COMPILAR Y CARGAR EL FIRMWARE 627 # ============================================================================== 628 # cargo template.pde para tener la planilla estandar dentro de 629 # cadena_pinguino
630 - def carga(self):
631 self.cadena_pinguino[:]=[] 632 archivo=open(sys.path[0] +"/source/template.pde","r") 633 for linea in archivo: 634 self.cadena_pinguino.append(linea)
635
636 - def compilar(self,b):
637 self.carga() 638 crear.crear_archivo(self.fondo,self) 639 i=carga.compilar_pic("/source/",self.config[0]) 640 if i==1: 641 self.mensajes(0,("no se encuentra el compilador sdcc en" + 642 " la ruta " + self.config[0] + 643 " . Pruebe configurar el archivo"+ 644 " config.dat y corregirlo")) 645 if i==0: 646 self.mensajes(3,"la compilacion fue exitosa") 647 else: 648 self.mensajes(0,"hubo un error de compilacion")
649
650 - def upload(self,b):
651 resultado=1 652 self.mensajes (3, 653 "aprete el boton RESET de la placa pinguino antes de continuar" 654 ) 655 656 i=carga.upload_pic("/source/main",self.config[0]) 657 if i==0: 658 self.mensajes(3,"la carga fue exitosa") 659 return 0 660 if i==1: 661 self.mensajes(0,"no se a detectado ningun dispositivo conectada. ¿esta conectado y encendido el PIC?") 662 return 1 663 if i==2: 664 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") 665 return 2 666 if i==2: 667 self.mensajes(0,"no se genero el archivo .hex para cargar") 668 return 3 669 if i==2: 670 self.mensajes(0,"error al compilar y generar el archivo .hex") 671 return 4
672
673 - def tortucaro(self,b):
674 resultado=1 675 comp=1 676 i=carga.compilar_pic("/tortucaro/",self.config[0]) 677 if i==0: 678 self.mensajes(3,"la compilacion fue exitosa") 679 comp=0 680 else: 681 self.mensajes(0,"hubo un error de compilacion") 682 comp=1 683 if comp==0: 684 self.mensajes ( 685 3, 686 "aprete el boton RESET de la placa pinguino antes de continuar" 687 ) 688 i=carga.upload_pic("/tortucaro/main",self.config[0]) 689 if i==0: 690 self.mensajes(3,"la carga fue exitosa") 691 return 0 692 if i==1: 693 self.mensajes(0,"no se a detectado ningun dispositivo conectada. ¿esta conectado y encendido el PIC?") 694 return 1 695 if i==2: 696 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") 697 return 2 698 if i==2: 699 self.mensajes(0,"no se genero el archivo .hex para cargar") 700 return 3 701 if i==2: 702 self.mensajes(0,"error al compilar y generar el archivo .hex") 703 return 4
704
705 - def guardar(self,dato):
706 dialog = gtk.FileChooserDialog("save..", 707 None, 708 gtk.FILE_CHOOSER_ACTION_SAVE, 709 ( 710 gtk.STOCK_CANCEL, 711 gtk.RESPONSE_CANCEL, 712 gtk.STOCK_SAVE, 713 gtk.RESPONSE_OK 714 ) 715 ) 716 dialog.set_default_response(gtk.RESPONSE_OK) 717 response = dialog.run() 718 if response == gtk.RESPONSE_OK: 719 cadena=dialog.get_filename() 720 if os.path.isfile(cadena): 721 resp=self.mensajes( 722 1, 723 "Ya existe un archivo con el nombre "+ 724 cadena + "¿Quiere reemplazarlo?" 725 ) 726 else: 727 resp=False 728 if resp==True or os.path.isfile(cadena)==False : 729 guardar.guardar( 730 self.fondo.objetos, 731 cadena, 732 self.fondo 733 ) 734 elif response == gtk.RESPONSE_CANCEL: 735 print 'Closed, no files selected' 736 dialog.destroy()
737
738 - def abrir(self,dato):
739 740 dialog = gtk.FileChooserDialog( 741 "Open..", 742 None, 743 gtk.FILE_CHOOSER_ACTION_OPEN, 744 ( 745 gtk.STOCK_CANCEL, 746 gtk.RESPONSE_CANCEL, 747 gtk.STOCK_OPEN, 748 gtk.RESPONSE_OK 749 ) 750 ) 751 dialog.set_default_response(gtk.RESPONSE_OK) 752 print dato 753 try: 754 dialog.set_current_folder(dato) 755 except Exception, ex: 756 dialog.set_current_folder(sys.path[0]) 757 758 759 #~ filter = gtk.FileFilter() 760 #~ filter.set_name("All files") 761 #~ filter.add_pattern("*") 762 #~ dialog.add_filter(filter) 763 filter = gtk.FileFilter() 764 filter.set_name("icaro") 765 filter.add_pattern("*.icr") 766 dialog.add_filter(filter) 767 response = dialog.run() 768 if response == gtk.RESPONSE_OK: 769 nuevo.nuevo(self.fondo) 770 inicial=componente_inicial ( 771 20,50,1, 772 self.fondo, 773 self,self.textorender 774 ) 775 self.fondo.componentes.add(inicial) 776 self.fondo.objetos.append(inicial) 777 cadena= dialog.get_filename() 778 abrir.abrir( 779 self.diccionario, 780 cadena, 781 self.fondo, 782 self, 783 self.textorender 784 ) 785 elif response == gtk.RESPONSE_CANCEL: 786 print 'Closed, no files selected' 787 dialog.destroy()
788 - def nuevo(self,dato):
789 nuevo.nuevo(self.fondo) 790 self.fondo.band=0 791 self.fondo.FONDO=(00,22,55) 792 inicial=componente_inicial( 793 20, 794 50, 795 1, 796 self.fondo, 797 self, 798 self.textorender 799 ) 800 self.fondo.componentes.add(inicial) 801 self.fondo.objetos.append(inicial)
802 # ============================================================================== 803 # FUNCIONES DE LOS EVENTOS DEL MOUSE Y TECLADO 804 # ============================================================================== 805
806 - def move_cb(self,win, event):
807 self.mousexy= event.get_coords()
808
809 - def buttonpress_cb(self,win,event):
810 self.boton_mouse[event.button]=1 811 if self.seleccion_menu==1: 812 self.crear_componente(self.tipo_componente)
813
814 - def buttonrelease_cb(self,win,event):
815 self.boton_mouse[event.button]=0
816
817 - def keypress_cb(self,win,event):
818 self.tecla=1 819 #~ print event.keyval 820 #~ if event.keyval==32: 821 #~ self.valor_tecla=" " 822 #~ else: 823 #~ self.valor_tecla= event.string 824 self.valor_tecla= event.string 825 826 if event.keyval==65293: 827 self.tecla_enter=1
828
829 - def keyrelease_cb(self,win,event):
830 self.tecla=0 831 self.tecla_enter=0 832 self.valor_tecla=""
833 # ============================================================================== 834 # LAS RESPUESTAS DEL MENU 835 # ==============================================================================
836 - def menuitem_response(self, widget, string):
837 838 if string=="abrir": 839 # tengo que madar un -dato- para mantener compatibilidad con 840 # los botones de la barra de herramienta que generan un dato 841 # -b- que envian a la funcion. 842 self.abrir(sys.path[0]) 843 if string=="salir": 844 exit() 845 if string=="nuevo": 846 self.nuevo(0) 847 if string=="guardar": 848 self.guardar(0) 849 if string=="guardar como función": 850 dialog = gtk.FileChooserDialog("save..", 851 None, 852 gtk.FILE_CHOOSER_ACTION_SAVE, 853 ( 854 gtk.STOCK_CANCEL, 855 gtk.RESPONSE_CANCEL, 856 gtk.STOCK_SAVE, 857 gtk.RESPONSE_OK 858 ) 859 ) 860 dialog.set_default_response(gtk.RESPONSE_OK) 861 response = dialog.run() 862 if response == gtk.RESPONSE_OK: 863 crear.funcion(self.fondo,self,dialog.get_filename(),) 864 elif response == gtk.RESPONSE_CANCEL: 865 print 'Closed, no files selected' 866 dialog.destroy() 867 if string=="ejemplos": 868 self.abrir(sys.path[0]+"/ejemplos") 869 if string=="fondo": 870 dialog = gtk.FileChooserDialog( 871 "Open..", 872 None, 873 gtk.FILE_CHOOSER_ACTION_OPEN, 874 ( 875 gtk.STOCK_CANCEL, 876 gtk.RESPONSE_CANCEL, 877 gtk.STOCK_OPEN, 878 gtk.RESPONSE_OK 879 ) 880 ) 881 dialog.set_default_response(gtk.RESPONSE_OK) 882 response = dialog.run() 883 cadena= dialog.get_filename() 884 if response == gtk.RESPONSE_OK: 885 print "imagen", cadena 886 try: 887 self.fondo.carga_img(cadena) 888 except Exception, ex: 889 self.mensajes(2,"archivo no valido") 890 891 elif response == gtk.RESPONSE_CANCEL: 892 print 'Closed, no files selected' 893 dialog.destroy() 894 if string=="color": 895 896 colorseldlg = gtk.ColorSelectionDialog("selección de color") 897 colorsel = colorseldlg.colorsel 898 response = colorseldlg.run() 899 if response -- gtk.RESPONSE_OK: 900 color = colorsel.get_current_color() 901 # color devuelve un gtk.gdk.color 902 # pero el RGB es un integer de 65535 valores 903 # con una regla de tres simple lo adapto a los 904 # 255 valores que soporta pygame 905 self.fondo.FONDO=( 906 (color.red*255)/65535, 907 (color.green*255)/65535, 908 (color.blue*255)/65535 909 ) 910 else: 911 colorseldlg.hide() 912 913 colorseldlg.hide() 914 if string=="acerca de": 915 916 about = gtk.AboutDialog() 917 logo=gtk.gdk.pixbuf_new_from_file(sys.path[0]+"/imagenes/icaro.png") 918 about.set_logo(logo) 919 about.set_name(creditos.Info.name) 920 about.set_authors(creditos.Info.authors) 921 about.set_documenters(creditos.Info.documenters) 922 about.set_artists(creditos.Info.artists) 923 about.set_translator_credits(creditos.Info.translator) 924 about.set_version(creditos.Info.version) 925 about.set_comments(creditos.Info.description) 926 about.set_copyright(creditos.Info.copyright) 927 about.set_website(creditos.Info.website) 928 about.set_license(creditos.Info.license) 929 about.set_wrap_license(True) 930 about.run() 931 about.destroy()
932 - def carga_tooltip(self):
933 ruta=os.path.abspath(os.path.dirname(__file__)) 934 ff=open(ruta + "/tooltips.xml","r") 935 t=ff.readlines() 936 for a in range(len(t)): 937 cad_aux=t[a].strip("\n") 938 if cad_aux=="<tool>": 939 self.tooltip[t[a+1].strip("\n")]=t[a+2].strip("\n")
940
941 - def carga_dicc(self):
942 """ 943 funcion para cargar los componentes bloques, 944 los valores del gtk.notebook estan determinados 945 por el nombre del archivo, leyendo el archivo saco el valor 946 y tipo de los bloques que cargo en el dic 947 """ 948 q=0 949 ruta=os.path.abspath(os.path.dirname(__file__)) + "/componente/" 950 951 # archivo=os.listdir(ruta) 952 ff=open(ruta + "lista.dat","r") 953 t=ff.read() 954 temp=t.strip("\n") 955 #~ print temp 956 archivo=temp.split(",") 957 #~ print archivo 958 for i in range(len(archivo)): 959 960 self.diccionario[q]=["notebook",str(archivo[i])] 961 q=q+1 962 f=open(ruta + archivo[i]+".xml","r") 963 cadena=f.readlines() 964 a=0 965 for n in range(len(cadena)): 966 cadena[n]=cadena[n].strip("\n") 967 tupla=[] 968 if cadena[a]=="<componente>": 969 tupla.append(cadena[a+1].strip("\n")) 970 tupla.append(int(cadena[a+2])) 971 tupla.append(int(cadena[a+3])) 972 color1=cadena[a+4].strip("()\n") 973 color2=color1.split(',') 974 tupla1=(int(color2[0]),int(color2[1]),int(color2[2])) 975 tupla.append(tupla1) 976 tupla.append(str(cadena[a+5].strip("\n"))) 977 tupla.append(str(cadena[a+6]).strip("\n")) 978 self.diccionario[q]=tupla 979 q=q+1 980 a=a+1
981 #print self.diccionario
982 - def carga_paleta(self):
983 R=G=B="" 984 archivo=open(os.path.abspath(os.path.dirname(__file__)) + "/colores.dat","r") 985 tupla=[] 986 cadena=archivo.readlines() 987 for n in cadena: 988 tupla.append(n.strip("()\n")) 989 for a in range(len(self.lista)): 990 if self.diccionario[self.lista[a]][0]<>"notebook": 991 R,G,B=tupla[a].split(",") 992 self.diccionario[self.lista[a]][3]=( 993 int(R), 994 int(G), 995 int(B) 996 )
997 998 # 999 # ============================================================================== 1000 # LOOP 1001 # ==============================================================================
1002 -def loop():
1003 #aca va todo lo de pygame 1004 fon.update() 1005 fon.componentes.update() 1006 fon.datos.update() 1007 punt.update() 1008 pygame.display.update() 1009 return True
1010 1011 # Inicio todas las clases 1012 ventana_principal=Ventana() 1013 1014 #capturo el xid del drawingarea 1015 os.putenv('SDL_WINDOWID', str(ventana_principal.area.window.xid)) 1016 gtk.gdk.flush() 1017 gobject.idle_add(loop) 1018 ventana_principal.window1.show_all() 1019 fon=fondo() 1020 punt=puntero(fon,ventana_principal) 1021 texto=texto.Text(fon) 1022 menu=pygame.sprite.RenderClear() 1023 ventana_principal.fondo=fon 1024 ventana_principal.textorender=texto 1025 # el unico objeto que cargo con nombre identificable 1026 inicial=componente_inicial(20,50,1,fon,ventana_principal,texto) 1027 fondo.objetos.append(inicial) 1028 fon.componentes.add(inicial) 1029 gtk.main() 1030