On Jan 3, 2011, at 8:42 AM, Brad Stone wrote:

> I don't think the Quick Look documentation is as robust as it can be, I'm 
> still trying to figure out how to do the same thing the right way. 


Roughly:



@interface MyView : NSView <QLPreviewPanelDataSource, QLPreviewPanelDelegate> {
    QLPreviewPanel * mQLPreviewPanel;
}



- (IBAction)toggleQuickLook:(id)sender;
{
    if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel 
sharedPreviewPanel] isVisible]) {
        [[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
    } else {
        [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil];
    }
}




// Quick Look panel support
// ------------------------------------

- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel;
{
    return YES;
}


- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel;
{
    // This view is now responsible of the preview panel
    // It is allowed to set the delegate, data source and refresh panel.
    mQLPreviewPanel = [panel retain];
    panel.delegate = self;
    panel.dataSource = self;
}


- (void)endPreviewPanelControl:(QLPreviewPanel *)panel;
{
    // This document loses its responsisibility on the preview panel
    // Until the next call to -beginPreviewPanelControl: it must not
    // change the panel's delegate, data source or refresh it.
    [mQLPreviewPanel release];
    mQLPreviewPanel = nil;
}




// Quick Look panel data source
// ------------------------------------

- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel;
{
    return [self.controller.selectedItems count];
}


- (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel 
previewItemAtIndex:(NSInteger)index;
{
    return [self.controller.selectedItems objectAtIndex:index];
}




// Quick Look panel delegate
// ------------------------------------

//- (BOOL)previewPanel:(QLPreviewPanel *)panel handleEvent:(NSEvent *)event
//{
//  // redirect all key down events to the view
//  if ([event type] == NSKeyDown) {
//      [self keyDown:event];
//      return YES;
//  }
//  return NO;
//}


// This delegate method provides the rect on screen from which the panel will 
zoom.
- (NSRect)previewPanel:(QLPreviewPanel *)panel 
sourceFrameOnScreenForPreviewItem:(id <QLPreviewItem>)item;
{
    NSRect boundsInView = ...;
    NSRect boundsOnScreen = [self convertRectToBase:boundsInView];
    
    boundsOnScreen.origin = [[self window] 
convertBaseToScreen:boundsOnScreen.origin];
    
    return boundsOnScreen;
}


// This delegate method provides a transition image between the table view and 
the preview panel
- (id)previewPanel:(QLPreviewPanel *)panel transitionImageForPreviewItem:(id 
<QLPreviewItem>)item contentRect:(NSRect *)contentRect
{
    return [self.controller imageForItems:[NSArray arrayWithObject:item]];
}




--
Seth Willits



_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to