« Una de bindings | Inicio | Un clon de Photo Booth en 32 minutos (con un café a la mitad) »

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:

Post Icon Tipes

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)

Post Icon Controller

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:

Post Icon Delegate

Y asignando posteriormente el outlet correspondiente:

Post Icon Delegate 2

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).

Publicar un comentario

(Si no dejó aquí ningún comentario anteriormente, quizás necesite aprobación por parte del dueño del sitio, antes de que el comentario aparezca. Hasta entonces, no se mostrará en la entrada. Gracias por su paciencia).