#5576 Share Button (to iMessage, email, etc) for torrent file

This commit is contained in:
Mitchell Livingston
2014-01-09 16:23:54 +00:00
parent 371cf46151
commit ac45921cb4
5 changed files with 164 additions and 15 deletions

View File

@@ -44,6 +44,7 @@
#import "GlobalOptionsPopoverViewController.h"
#import "ButtonToolbarItem.h"
#import "GroupToolbarItem.h"
#import "ShareToolbarItem.h"
#import "ToolbarSegmentedCell.h"
#import "BlocklistDownloader.h"
#import "StatusBarController.h"
@@ -78,6 +79,7 @@
#define TOOLBAR_PAUSE_RESUME_SELECTED @"Toolbar Pause / Resume Selected"
#define TOOLBAR_FILTER @"Toolbar Toggle Filter"
#define TOOLBAR_QUICKLOOK @"Toolbar QuickLook"
#define TOOLBAR_SHARE @"Toolbar Share"
typedef enum
{
@@ -1783,6 +1785,11 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
[self applyFilter];
}
- (NSArray *)selectedTorrents
{
return [fTableView selectedTorrents];
}
- (void) showPreferenceWindow: (id) sender
{
NSWindow * window = [fPrefsController window];
@@ -3804,9 +3811,34 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
}
}
- (void) showToolbarShare: (id) sender
{
NSParameterAssert([sender isKindOfClass:[NSButton class]]);
NSSharingServicePicker * picker = [[NSSharingServicePicker alloc] initWithItems: [ShareToolbarItem shareTorrentURLs]];
picker.delegate = self;
[picker showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinYEdge];
}
- (id<NSSharingServiceDelegate>)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker delegateForSharingService:(NSSharingService *)sharingService
{
return self;
}
- (NSWindow *)sharingService:(NSSharingService *)sharingService sourceWindowForShareItems:(NSArray *)items sharingContentScope:(NSSharingContentScope *)sharingContentScope
{
return fWindow;
}
- (ButtonToolbarItem *) standardToolbarButtonWithIdentifier: (NSString *) ident
{
ButtonToolbarItem * item = [[ButtonToolbarItem alloc] initWithItemIdentifier: ident];
return [self toolbarButtonWithIdentifier: ident forToolbarButtonClass: [ButtonToolbarItem class]];
}
- (id) toolbarButtonWithIdentifier: (NSString *) ident forToolbarButtonClass:(Class)class
{
ButtonToolbarItem * item = [[class alloc] initWithItemIdentifier: ident];
NSButton * button = [[NSButton alloc] init];
[button setBezelStyle: NSTexturedRoundedBezelStyle];
@@ -4007,6 +4039,23 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
return item;
}
else if ([ident isEqualToString: TOOLBAR_SHARE])
{
ShareToolbarItem * item = [self toolbarButtonWithIdentifier: ident forToolbarButtonClass: [ShareToolbarItem class]];
[item setLabel: NSLocalizedString(@"Share", "Share toolbar item -> label")];
[item setPaletteLabel: NSLocalizedString(@"Share", "Share toolbar item -> palette label")];
[item setToolTip: NSLocalizedString(@"Share torrent file", "Share toolbar item -> tooltip")];
[item setImage: [NSImage imageNamed: NSImageNameShareTemplate]];
[item setVisibilityPriority: NSToolbarItemVisibilityPriorityLow];
NSButton *itemButton = (NSButton *)[item view];
[itemButton setTarget: self];
[itemButton setAction: @selector(showToolbarShare:)];
[itemButton sendActionOn:NSLeftMouseDownMask];
return item;
}
else
return nil;
}
@@ -4043,22 +4092,30 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
{
return [NSArray arrayWithObjects:
TOOLBAR_CREATE, TOOLBAR_OPEN_FILE, TOOLBAR_OPEN_WEB, TOOLBAR_REMOVE,
TOOLBAR_PAUSE_RESUME_SELECTED, TOOLBAR_PAUSE_RESUME_ALL,
TOOLBAR_QUICKLOOK, TOOLBAR_FILTER, TOOLBAR_INFO,
NSToolbarSeparatorItemIdentifier,
NSToolbarSpaceItemIdentifier,
NSToolbarFlexibleSpaceItemIdentifier,
NSToolbarCustomizeToolbarItemIdentifier, nil];
NSMutableArray *items = [NSMutableArray arrayWithObjects:
TOOLBAR_CREATE, TOOLBAR_OPEN_FILE, TOOLBAR_OPEN_WEB, TOOLBAR_REMOVE,
TOOLBAR_PAUSE_RESUME_SELECTED, TOOLBAR_PAUSE_RESUME_ALL,
TOOLBAR_SHARE, TOOLBAR_QUICKLOOK, TOOLBAR_FILTER, TOOLBAR_INFO,
NSToolbarSeparatorItemIdentifier,
NSToolbarSpaceItemIdentifier,
NSToolbarFlexibleSpaceItemIdentifier,
NSToolbarCustomizeToolbarItemIdentifier, nil];
if (![NSApp isOnMountainLionOrBetter]) {
[items removeObject:TOOLBAR_SHARE];
}
return items;
}
- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
{
return [NSArray arrayWithObjects:
TOOLBAR_CREATE, TOOLBAR_OPEN_FILE, TOOLBAR_REMOVE, NSToolbarSpaceItemIdentifier,
TOOLBAR_PAUSE_RESUME_ALL, NSToolbarFlexibleSpaceItemIdentifier,
TOOLBAR_QUICKLOOK, TOOLBAR_FILTER, TOOLBAR_INFO, nil];
NSMutableArray *items = [NSMutableArray arrayWithObjects:
TOOLBAR_CREATE, TOOLBAR_OPEN_FILE, TOOLBAR_REMOVE, NSToolbarSpaceItemIdentifier,
TOOLBAR_PAUSE_RESUME_ALL, NSToolbarFlexibleSpaceItemIdentifier,
TOOLBAR_SHARE, TOOLBAR_QUICKLOOK, TOOLBAR_FILTER, TOOLBAR_INFO, nil];
if (![NSApp isOnMountainLionOrBetter]) {
[items removeObject:TOOLBAR_SHARE];
}
return items;
}
- (BOOL) validateToolbarItem: (NSToolbarItem *) toolbarItem
@@ -4125,7 +4182,11 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
[(NSButton *)[toolbarItem view] setState: [QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]];
return YES;
}
//enable share item
if ([ident isEqualToString: TOOLBAR_SHARE])
return [fTableView numberOfSelectedRows] > 0;
return YES;
}