El proyecto de ejemplo Finder Icon Overlay representa un ejemplo pequeño y muy básico pero realmente funcional de la respuesta a continuación.
https://github.com/lesnie/Finder-Icon-Overlay
Sé que esto es tan viejo, pero algunos pueden ser todavía está interesado en el tema (?)
Aquí es lo que he hecho que bajo Leopard (10.6). Al principio se necesitan los encabezados adecuados de Finder. Use la herramienta de volcado de clase para obtenerlo. Luego, escriba su código como un complemento SIMBL (consulte la documentación sobre cómo hacerlo), modificando algunos métodos. Por ejemplo, para dibujar algo sobre un ícono en ListView, drawIconWithFrame: el método de TIconAndTextCell debe ser reemplazado.
Aquí está el código para el método swizzling:
+ (void) Plugin_load
{
Method old, new;
Class self_class = [self class];
Class finder_class = [objc_getClass("TIconAndTextCell") class];
class_addMethod(finder_class, @selector(FT_drawIconWithFrame:),
class_getMethodImplementation(self_class, @selector(FT_drawIconWithFrame:)),"[email protected]:{CGRect={CGPoint=dd}{CGSize=dd}}");
old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:));
new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:));
method_exchangeImplementations(old, new);
}
estoy superior "drawIconWithFrame:" método con mi método "FT_drawIconWithFrame:". A continuación se muestra la implementación de este método.
- (void) FT_drawIconWithFrame:(struct CGRect)arg1
{
[self FT_drawIconWithFrame:arg1];
if ([self respondsToSelector:@selector(node)]) {
if ([[[[NSClassFromString(@"FINode") nodeWithFENode:[(TNodeIconAndNameCell *)self node]] fullPath] lastPathComponent] hasPrefix:@"A"])
[myPrettyIconOverlayImage drawInRect:NSMakeRect(arg1.origin.x, arg1.origin.y, arg1.size.height, arg1.size.height) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}
Esencialmente empates "myPrettyIconOverlayImage" sobre cada icono de archivo con nombre comienza con la letra "A". Esta lógica depende de ti.
Preste atención a esta línea: [self FT_drawIconWithFrame:arg1];
esta es la forma de llamar a 'super' para obtener el icono y el nombre normal, etc. Lo sé, se ve raro, como bucle, pero en realidad no lo es. Luego envuelve el plugin SIMBL, instala SIMBL y ... ejecuta.
Debido a los cambios en Lion algunos trabajos deben realizarse desde cero (haga un nuevo archivo "Finder.h" con todas las declaraciones necesarias, encuentre la clase y los métodos adecuados para anular), pero esta técnica aún funciona.
Happy hacking!
Ha pasado un tiempo desde esta publicación, con 10.6 disponibles. ¿Has logrado lo que intentabas? ¿Fuiste con las tácticas del complemento Finder? – epologee
¿Alguna actualización sobre esto para el león? – Tony
@LesNie debajo de los enlaces a su proyecto [Finder Icon Overlay] (https://github.com/lesnie/Finder-Icon-Overlay). Vinculación en caso de que alguien más tenga dificultades para encontrar un ejemplo de complemento de OS X Finder de código abierto (como yo lo hice). – pkamb