Arrastrar archivos sobre el icono de una aplicación
Una de las cosas que caracterizan a Mac OS X es la cantidad de tareas que se pueden realizar arrastrando y soltando. Por eso, es importante que cualquier aplicación ofrezca el soporte para drag and drop que todo usuario espera.
Una de las formas de dar ese soporte es permitir que se puedan arrastrar archivos sobre el icono de una aplicación en el Dock. De esa forma, los archivos arrastrados pasarán al flujo de trabajo de la aplicación en cuestión.
Dar ese soporte es bastante sencillo. Vamos a verlo con un ejemplo.
Crea una nueva aplicación Cocoa. En mi caso, la aplicación se llama FilesOverIcon, nombre original hasta decir basta.
Una vez creado el proyecto en XCode, hay que editar las propiedades del Target de la aplicación, para incluir en ellas los tipos y extensiones de archivos soportados. ¿Soportados por quién? Soportados por la instancia de NSApplication que será mi aplicación. En mi caso, he declarado como extensiones válidas las *.jpg, *.png y *.nef:
Ahora, voy a crear el controlador de la aplicación. Por tanto, hay que abrir Interface Builder y crear una subclase de NSObject (que he llamado FilesOverIconController)
A continuación hay que crear una instancia de esa clase y los archivos correspondientes a la misma. Una vez creada la instancia, hay que declarar esa clase como delegate de NSApplication, lo que se consigue haciendo Control+Drag desde File's Owner hasta la instancia del controlador:
Y asignando posteriormente el outlet correspondiente:
Ya casi está. Ahora sólo falta declarar en el controlador el método correspondiente del delegate:
#import "FilesOverIconController.h"
@implementation FilesOverIconController
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)path
{
NSLog( @"files dropped over icon %@", path );
return YES;
}
@end
Ese método será ejecutado cada vez que se suelte sobre el icono de la aplicación un fichero de alguno de los tipos que previamente se declararon como válidos. No todos los ficheros que se suelten han de ser válidos, aquellos que no lo sean, simplemente serán ignorados por NSApplication.
Por si alguien está interesado en el código fuente, lo puede descargar del repositorio de Subversion:
svn co http://svn.liadorasoft.com/filesovericon
Comentarios
Muy interesante. Gracias por compartir estos conocimientos con los programadores de Cocoa (made in Spain).
Publicado por: Dani | Octubre 8, 2007 12:21 PM