Skip to content

Commit

Permalink
Added new method to parser protocol to enable custom clicking behavio…
Browse files Browse the repository at this point in the history
…r. Needed by Flickr parser to implement "load more" button...
  • Loading branch information
peterb180369 committed Dec 2, 2009
1 parent 6dba02d commit e4cb0b7
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 50 deletions.
42 changes: 26 additions & 16 deletions IMBObjectViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,22 @@ extern NSString* const kIMBObjectImageRepresentationProperty;
//----------------------------------------------------------------------------------------------------------------------


#pragma mark SnowLeopard NSPasteboard Declarations
#pragma mark PROTOCOLS

// We have to declare a fake prototype because the 10.6 runtime interrogates our compliance with the protocol,
// We have to declare a fake prototypes because the 10.6 runtime interrogates our compliance with the protocol,
// rather that interrogating the presence of the particular method we implement.

#if !defined(MAC_OS_X_VERSION_10_6)
@protocol NSPasteboardItemDataProvider <NSObject> @end
#if ! IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK

@protocol NSPasteboardItemDataProvider <NSObject>
@end

@protocol QLPreviewPanelDelegate <NSObject>
@end

@protocol QLPreviewPanelDataSource <NSObject>
@end

#endif


Expand All @@ -124,12 +133,13 @@ extern NSString* const kIMBObjectImageRepresentationProperty;

#pragma mark

@interface IMBObjectViewController : NSViewController
#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
<NSPasteboardItemDataProvider,QLPreviewPanelDelegate,QLPreviewPanelDataSource>
#else
<NSPasteboardItemDataProvider>
#endif

@interface IMBObjectViewController : NSViewController <NSPasteboardItemDataProvider,QLPreviewPanelDelegate,QLPreviewPanelDataSource>
//#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
//<NSPasteboardItemDataProvider,QLPreviewPanelDelegate,QLPreviewPanelDataSource>
//#else
//<NSPasteboardItemDataProvider>
//#endif
{
IMBLibraryController* _libraryController;
IMBNodeViewController* _nodeViewController;
Expand All @@ -141,9 +151,9 @@ extern NSString* const kIMBObjectImageRepresentationProperty;
IBOutlet NSTableView* ibListView;
IBOutlet NSTableView* ibComboView;
IBOutlet NSSegmentedControl *ibSegments;
#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
QLPreviewPanel* _previewPanel;
#endif
// #if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
// QLPreviewPanel* _previewPanel;
// #endif

NSUInteger _viewType;
double _iconSize;
Expand Down Expand Up @@ -176,9 +186,9 @@ extern NSString* const kIMBObjectImageRepresentationProperty;
@property (readonly) IKImageBrowserView* iconView;
@property (readonly) NSTableView* listView;
@property (readonly) NSTableView* comboView;
#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
@property (retain) QLPreviewPanel* previewPanel;
#endif
//#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
//@property (retain) QLPreviewPanel* previewPanel;
//#endif

@property (assign) NSUInteger viewType;
@property (assign) double iconSize;
Expand Down
107 changes: 74 additions & 33 deletions IMBObjectViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -169,9 +169,9 @@ @implementation IMBObjectViewController
@synthesize objectCountFormatSingular = _objectCountFormatSingular;
@synthesize objectCountFormatPlural = _objectCountFormatPlural;

#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
@synthesize previewPanel = _previewPanel;
#endif
//#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
//@synthesize previewPanel = _previewPanel;
//#endif


//----------------------------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -281,6 +281,17 @@ - (void) awakeFromNib

- (void) dealloc
{
#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK

if (IMBRunningOnSnowLeopardOrNewer())
{
QLPreviewPanel* panel = [QLPreviewPanel sharedPreviewPanel];
if (panel.delegate == (id)self) panel.delegate = nil;
if (panel.dataSource == (id)self) panel.dataSource = nil;
}

#endif

[ibObjectArrayController removeObserver:self forKeyPath:kImageRepresentationKeyPath];
[ibObjectArrayController removeObserver:self forKeyPath:kArrangedObjectsKey];
[ibObjectArrayController release];
Expand All @@ -291,9 +302,9 @@ - (void) dealloc
IMBRelease(_nodeViewController);
IMBRelease(_progressWindowController);

#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
IMBRelease(_previewPanel);
#endif
// #if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
// IMBRelease(_previewPanel);
// #endif


for (IMBObject* object in _observedVisibleItems)
Expand Down Expand Up @@ -561,9 +572,9 @@ - (void) setIconSize:(double)inIconSize
NSSize size = [ibIconView cellSize];
IMBParser* parser = self.currentNode.parser;

if ([parser respondsToSelector:@selector(objectViewDidChangeIconSize:)])
if ([parser respondsToSelector:@selector(didChangeIconSize:objectView:)])
{
[parser objectViewDidChangeIconSize:size];
[parser didChangeIconSize:size objectView:ibIconView];
}

// Update the views. The row height of the combo view needs to be adjusted accordingly...
Expand Down Expand Up @@ -1181,11 +1192,17 @@ - (void) cleanupProgressForObjectPromise:(IMBObjectPromise*)inObjectPromise
- (void) imageBrowserSelectionDidChange:(IKImageBrowserView*)inView
{
#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK

if (IMBRunningOnSnowLeopardOrNewer())
{
[[QLPreviewPanel sharedPreviewPanel] reloadData];
[[QLPreviewPanel sharedPreviewPanel] refreshCurrentPreviewItem];
QLPreviewPanel* panel = [QLPreviewPanel sharedPreviewPanel];
if (panel.dataSource == (id)self)
{
[panel reloadData];
[panel refreshCurrentPreviewItem];
}
}

#endif
}

Expand Down Expand Up @@ -1626,9 +1643,9 @@ - (IBAction) quicklook:(id)inSender
#if IMB_COMPILING_WITH_SNOW_LEOPARD_OR_NEWER_SDK
if (IMBRunningOnSnowLeopardOrNewer())
{
if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible])
if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible])
{
[[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
[[QLPreviewPanel sharedPreviewPanel] close]; //]orderOut:nil];
}
else
{
Expand Down Expand Up @@ -1669,32 +1686,56 @@ - (NSInteger) numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel*)inPanel

- (BOOL) previewPanel:(QLPreviewPanel*)inPanel handleEvent:(NSEvent *)inEvent
{
NSString* characters = [inEvent charactersIgnoringModifiers];
unichar character = ([characters length] > 0) ? [characters characterAtIndex:0] : 0;
NSView* view = nil;

switch (character)
if (_viewType == kIMBObjectViewTypeIcon)
view = ibIconView;
else if (_viewType == kIMBObjectViewTypeList)
view = ibListView;
else if (_viewType == kIMBObjectViewTypeCombo)
view = ibComboView;

if ([inEvent type] == NSKeyDown)
{
case NSLeftArrowFunctionKey:
case NSRightArrowFunctionKey:
case NSUpArrowFunctionKey:
case NSDownArrowFunctionKey:

if (_viewType == kIMBObjectViewTypeIcon)
view = ibIconView;
else if (_viewType == kIMBObjectViewTypeList)
view = ibListView;
else if (_viewType == kIMBObjectViewTypeCombo)
view = ibComboView;

if (view)
{
[view keyDown:inEvent];
return YES;
}
[view keyDown:inEvent];
return YES;
}
else if ([inEvent type] == NSKeyUp)
{
[view keyUp:inEvent];
return YES;
}

return NO;




// NSString* characters = [inEvent charactersIgnoringModifiers];
// unichar character = ([characters length] > 0) ? [characters characterAtIndex:0] : 0;
// NSView* view = nil;
//
// switch (character)
// {
// case NSLeftArrowFunctionKey:
// case NSRightArrowFunctionKey:
// case NSUpArrowFunctionKey:
// case NSDownArrowFunctionKey:
//
// if (_viewType == kIMBObjectViewTypeIcon)
// view = ibIconView;
// else if (_viewType == kIMBObjectViewTypeList)
// view = ibListView;
// else if (_viewType == kIMBObjectViewTypeCombo)
// view = ibComboView;
//
// if (view)
// {
// [view keyDown:inEvent];
// return YES;
// }
// }
//
// return NO;
}

#endif
Expand Down
7 changes: 6 additions & 1 deletion IMBParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,12 @@
// of the IMBObjects they create. At first they may want to supply small thumbnails so it's faster, but as a user
// zooms the icons, the parser may want to supply larger thumbnails...

- (void) objectViewDidChangeIconSize:(NSSize)inSize;
- (void) didChangeIconSize:(NSSize)inSize objectView:(NSView*)inView;

// Sent to parser when an object is clicked in the UI. Parser can override and do special stuff. Default implemenation
// does nothing...

- (void) didClickObject:(IMBObject*)inObject objectView:(NSView*)inView;

// Called when the tumbnail for an object needs to be loaded lazily. This method will be called on a background thread...

Expand Down
9 changes: 9 additions & 0 deletions IMBParser.m
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,15 @@ - (void) watchedPathDidChange:(NSString*)inWatchedPath
//----------------------------------------------------------------------------------------------------------------------


- (void) didClickObject:(IMBObject*)inObject objectView:(NSView*)inView
{
// Default implementation does nothing. Override to provide custom behavior...
}


//----------------------------------------------------------------------------------------------------------------------


// This helper method can be used by subclasses to construct identifiers of form "classname://path/to/node"...

- (NSString*) identifierForPath:(NSString*)inPath
Expand Down

0 comments on commit e4cb0b7

Please sign in to comment.