[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

[Ayuda] Re: AYUDA con GTK



From: "Jorge Rafael Torres C." <jtorres en tricom net>
To: "Arturo Espinosa-Aldama" <arturoea en hotmail com>, <max en upn mx>, <jlso en www secver gob mx>
CC: <ayuda en linux org mx>, <c-con-clase en smartgroups com>
Subject: AYUDA con GTK
Date: Wed, 9 Oct 2002 01:47:07 -0400

Saludo a todos



Tengo un problemita.

Estoy hacienda u n programa en GTK que me visualice los archivos en los
directorios de mi disco, pero ahora tengo inconveniente con la segunda parte
que es ya visualizados esos archivos copiarlo a otro directorio.



Me puede decir como guardar las rutas de los archivos que quiero copiar.

Toda la ayuda que me puedan brindar se lo agradare de corazón.



Jorge Torres

Interesante. Que tipo de administrador de archivos estas tratando de hacer?

El mejor modelo para un administrador de archivos es el modelo de datos-vistas, donde para cada archivo tienes una estructura que representa sus datos (como la ruta) y luego puedes crear tantas vistas como desees, que son representaciones graficas de las estructuras que representan los archivos. Normalmente cada vista es un subdirectorio, pero en administradores de archivos mas abstractos no tiene por que ser asi.

Cuando quieres copiar un archivo de un lugar a otro, como las vistas son mapeos de los datos en memoria a graficos en pantalla, puedes saber a que archivos en particular se referia el usuario al hacer click o seleccionar, y luego llamas a una rutina que acepte una estructura o un contenedor con estructuras y la ruta de destino, con lo cual se lleva a cabo la copia, la cual a la vez le pide a las vistas pertinentes que sincronicen los movimientos o copias realizados y listo. Ineficientemente:

typedef struct {
   char *ruta;

   /* otros datos como i-nodo, tipo mime, whatever */
} Archivo;

/* Esto es solo una clase "abstracta". Vistas particulares haran piggyback de la estructura, implementando sus propias funciones de inicializacion, dibujado y guardando sus propios datos para la representacion grafica. */
typedef struct {
  char *directorio; /* cada vista visualiza un directorio */
  GList *archivos; /* los archivos que la vista muestra */
GList *seleccion; /* cuando el usuario selecciona uno o varios archivos, se meten aqui */

FuncActualizar *actualizar; /* diferentes vistas visualizan datos de maneras distintas */
} Vista;

void copiar (FileManager manager, Vista *vista, char *dest) {
     GList *l;
      char *cmd;

      for (l = vista->seleccion; l; l = l->next) {
cmd = g_strdup_printf ("cp %s %s", ((Archivo *) l->data)->ruta, dest); system (cmd); /* asqueroso. Ademas hay que checar si tuvo exito, handling de errores, errores al usuario, blah, blah */
           g_free (cmd);
      }

actualizar_vistas (manager, dest); /* llamar a la funcion actualizar de todas las vistas que usen la ruta destino. Claro que un delta lo haria mas eficiente, en vez de re-scannear todo el subdirectorio completo. */
}

Saludos,
Arturo

Don't use hotmail: hotmail sucks.


_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: http://photos.msn.com/support/worldwide.aspx

_______________________________________________
Ayuda mailing list
Ayuda en linux org mx
Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/



[Hilos de Discusión] [Fecha] [Tema] [Autor]