mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 10:28:32 +00:00
114 lines
2.9 KiB
Plaintext
114 lines
2.9 KiB
Plaintext
// This file Copyright © Transmission authors and contributors.
|
|
// It may be used under the MIT (SPDX: MIT) license.
|
|
// License text can be found in the licenses/ folder.
|
|
|
|
#import "FileCheckCellView.h"
|
|
#import "FileListNode.h"
|
|
#import "Torrent.h"
|
|
|
|
@interface FileCheckCellView ()
|
|
@property(nonatomic, weak) NSButton* checkButton;
|
|
@end
|
|
|
|
@implementation FileCheckCellView
|
|
|
|
- (instancetype)initWithFrame:(NSRect)frameRect
|
|
{
|
|
if ((self = [super initWithFrame:frameRect]))
|
|
{
|
|
// Create checkbox button
|
|
NSButton* checkButton = [[NSButton alloc] initWithFrame:NSZeroRect];
|
|
checkButton.translatesAutoresizingMaskIntoConstraints = NO;
|
|
[checkButton setButtonType:NSButtonTypeSwitch];
|
|
checkButton.title = @"";
|
|
checkButton.allowsMixedState = YES;
|
|
checkButton.target = self;
|
|
checkButton.action = @selector(checkButtonClicked:);
|
|
[self addSubview:checkButton];
|
|
_checkButton = checkButton;
|
|
|
|
// Setup constraints
|
|
[NSLayoutConstraint activateConstraints:@[
|
|
[checkButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor],
|
|
[checkButton.centerYAnchor constraintEqualToAnchor:self.centerYAnchor],
|
|
]];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setNode:(FileListNode*)node
|
|
{
|
|
_node = node;
|
|
[self updateDisplay];
|
|
}
|
|
|
|
- (void)updateDisplay
|
|
{
|
|
if (!self.node)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FileListNode* node = self.node;
|
|
Torrent* torrent = node.torrent;
|
|
|
|
// Update checkbox state
|
|
self.checkButton.state = [torrent checkForFiles:node.indexes];
|
|
self.checkButton.enabled = [torrent canChangeDownloadCheckForFiles:node.indexes];
|
|
|
|
// Update tooltip
|
|
[self updateTooltip];
|
|
}
|
|
|
|
- (void)updateTooltip
|
|
{
|
|
if (!self.node)
|
|
{
|
|
return;
|
|
}
|
|
|
|
NSString* tooltip = nil;
|
|
switch (self.checkButton.state)
|
|
{
|
|
case NSControlStateValueOff:
|
|
tooltip = NSLocalizedString(@"Don't Download", "files tab -> tooltip");
|
|
break;
|
|
case NSControlStateValueOn:
|
|
tooltip = NSLocalizedString(@"Download", "files tab -> tooltip");
|
|
break;
|
|
case NSControlStateValueMixed:
|
|
tooltip = NSLocalizedString(@"Download Some", "files tab -> tooltip");
|
|
break;
|
|
}
|
|
self.checkButton.toolTip = tooltip;
|
|
}
|
|
|
|
- (void)checkButtonClicked:(NSButton*)sender
|
|
{
|
|
if (!self.node)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FileListNode* node = self.node;
|
|
Torrent* torrent = node.torrent;
|
|
|
|
NSIndexSet* indexSet;
|
|
if (NSEvent.modifierFlags & NSEventModifierFlagOption)
|
|
{
|
|
indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, torrent.fileCount)];
|
|
}
|
|
else
|
|
{
|
|
indexSet = node.indexes;
|
|
}
|
|
|
|
[torrent setFileCheckState:sender.state != NSControlStateValueOff ? NSControlStateValueOn : NSControlStateValueOff
|
|
forIndexes:indexSet];
|
|
|
|
// Notify that we need to refresh
|
|
[NSNotificationCenter.defaultCenter postNotificationName:@"UpdateUI" object:nil];
|
|
}
|
|
|
|
@end
|