• Lunes 18 de Noviembre de 2024, 09:38

Autor Tema:  Persistencia De Objetos  (Leído 6644 veces)

Eddycito

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Persistencia De Objetos
« en: Sábado 4 de Agosto de 2007, 05:36 »
0
al programar en gtk2-perl surge la necesidad de hacer persistencia de objetos o sea una vez terminado tu trabajo dentro del programa hacer que el programa guarde tu trabajo para luego despues poder abrirlo como si fuera un documento word.

La verdad no se como podria hacerlo, alguien sabe algo de persistencia de objetos.
Porfis necesito ayuda
atte. Eddy :rolleyes:

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #1 en: Sábado 4 de Agosto de 2007, 17:03 »
0
Que tienes que guardar?
Que elemntos de Gtk2 estas usando?

Se mas explicito y si es posible, pon un ejemplo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eddycito

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #2 en: Domingo 5 de Agosto de 2007, 05:48 »
0
Bueno tengo un objeto de perl que entre sus atributos tiene items de Gnome2::Canvas:

$object = { imagen => Gnome2::Canvas::Item->new($root,'Gnome2::Canvas::Pixbuf',
                  pixbuf => $encendido,
                  x      => $ejex,
                  y      => 100.0,
                  width  => $encendido->get_width,
                  height => $encendido->get_height,
                  anchor => 'center',
                  ),
      enlaces => [],
      };

estos objetos a la vez son añadidos a un arreglo:

push(@items,$object);

y tambien se conectan a eventos de raton:

$items[$contador-1]->{imagen}->signal_connect(event => \&item_event,$items[$contador-1]);

y quiero guardar lo que cree. A continuacion dejo una imagen de lo que quiero guardar.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #3 en: Domingo 5 de Agosto de 2007, 16:50 »
0
Lo primero que debes de hacer es la rutina de guardar... para eso abres un archivo con el flag ">>", guardas el nombre (objeto0, objeto1...), el valor de X, Y y toda la info necesaria:
Código: Text
  1.  
  2. my $i = 0;
  3. sub Guardar {
  4.   my ($x, $y, $w, $h, $a, $pixbuf) = @_;
  5.   open FL, ">>$0.conf" or die "$0.conf: $!\n"; #Solo agrega
  6.   print FL "<Canvas::Pixbuf, Name=objeto$i>\n";
  7.   print FL "X:$x\nY$y\nW:$w\nH:$h\nA:$a\nPix:$pixbuf\n";
  8.   print FL "</Canvas::Pixbuf>\n";
  9.   close FL;
  10.   $i++;
  11. }
  12.  
Cada vez que inicia el prorama debe de leer el archivo (con while y regex) y debujar segun los datos.

Otra forma seria usar XML, pero en este caso no es necesario.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eddycito

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #4 en: Lunes 6 de Agosto de 2007, 05:31 »
0
:hola:  Gracias por la ayuda, la verdad no tenia idea de como hacerlo, hay algunos ejemplos donde pueda ver con mas detalle la utilizacion del ejemplo que me das? porfa debe haber algun codigo por ahi.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #5 en: Lunes 6 de Agosto de 2007, 20:59 »
0
Cita de: "Eddycito"
:hola:  Gracias por la ayuda, la verdad no tenia idea de como hacerlo, hay algunos ejemplos donde pueda ver con mas detalle la utilizacion del ejemplo que me das? porfa debe haber algun codigo por ahi.
Lo que te digo son bases de Perl.
Si no entiendes esas funciones ve a http://perldoc.perl.org

Un ejmplo:
Código: Text
  1. #!/usr/bin/perl
  2. use strict;
  3. use Gtk2 -init;
  4.  
  5. my $text = Getk2::Label->new("Sin Texto, Salir");
  6. if(-f "archivo.cfg"){
  7.   open FL, "archivo.cfg";
  8.   while(my $linea = <FL>){
  9.     if($linea =~ /^Button_Text: (.*)$/){$text = $1;}
  10.   }
  11.   close FL;
  12. }
  13. my $entry = Gtk2::Entry->new;
  14. my $button = Gtk2::Button->new;
  15. $button->add($text);
  16. $button->signal_connect(clicked => sub {Gtk2_main->quit;});
  17. my $chbot  = Gtk2::Button->new("Modificar texto");
  18. my $box = Gtk2::VBox->new;
  19. $chbot->signal_connect(clicked =>
  20.     sub {
  21.        $text->set_text($entry->get_text or "Salir");
  22.        $box->show_all;
  23.        open FL, "+>archivo.cfg";
  24.        print FL "Button_Text: $entry->get_text\n";
  25.        close FL;
  26.     }
  27. );
  28. my $window = Gtk2::Window->new;
  29. $box->pack_start($button, 0, 0);
  30. $box->pack_start($entry, 0, 0);
  31. $box->pack_start($chbot, 0, 0);
  32. $window->add($box);
  33. $window->show_all;
  34. Gtk2->main;
  35.  
No es un diseño muy lindo, pero debe de dar la idea.
No se si funciona porque no lo he probado  ;)
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eddycito

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #6 en: Viernes 10 de Agosto de 2007, 00:41 »
0
Gracias su por la colaboracion. Como podriamos hacer este trabajo con XML?  :comp:

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #7 en: Viernes 10 de Agosto de 2007, 01:19 »
0
Cita de: "Eddycito"
Gracias su por la colaboracion. Como podriamos hacer este trabajo con XML?  :comp:
Aunque no necesitas tal cosa (lo pode hacer con un formato mas simple) podes usar XML::Simple y con el mismo metodo puesto en el ejemplo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eddycito

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #8 en: Viernes 10 de Agosto de 2007, 20:54 »
0
Yo creo que si lo necesito porque la cosa no es tan simple como parece, porque cada computadora que se ve en la imagen y si revisas el codigo que deje forma parte de un objeto o hash que a la ves este tiene un atributo llamado enlaces[] en este arreglo se guarda  una linea que hace referencia al objeto mismo y a otro objeto con la cual se enlazan, y la linea se redimensiona cada vez que se mueve la computadora con el mouse y todo esto esta guardado a la vez en un arreglo @items, todo esot cuando se guarda y se abre mediante el programa debe poder ademas de pintarse podeer generar los objetos y lo arreglos por si quiero hacer modificaciones. Como no tengo conocimentos de como hacer estas cosas, busco informacion ejemplos que mas o menos se parezcan al problema hasla el momento probe con Persistent, lo has usado?, ahora estoy viendo con XML::Mini::Document.

Para mi esto es una cosa de locos  :blink: casi no en tiendo como puede ser la logica de todo esto.

Voy a ver XML::Simple.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Persistencia De Objetos
« Respuesta #9 en: Viernes 10 de Agosto de 2007, 23:02 »
0
Ningun modulo de Persistent te va a servir ya que Gtk2 no funciona como X11::Protocol (nisiquiera con este seria valido usar un modulo de esos).

Y no, no necesitas XML... si estas usando este mismo codigo.

Lo que debe de hacer es mu simple, creas un hash y en event_mouse ingresas los datos de x, y, color e imagen con un atom para identificarlo.
Al salir del programa lo guardas.

Si no sabes esto (lo digo nuevamente) lee esto:

http://www.perl.org/books/beginning-perl/


Te repito, no puedes guardar elementos de Gtk2 en si, tenes que guardar los datos de dibujo para luego rehacerlo, mira el ejmplo que te puse.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.