blob: 0ffe3e52acbfc0941214a71031fe4a3ac8c7df53 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
/* HBLanguagesSelection.m $
This file is part of the HandBrake source code.
Homepage: <http://handbrake.fr/>.
It may be used under the terms of the GNU General Public License. */
#import "HBLanguagesSelection.h"
#include "lang.h"
@implementation HBLang
- (instancetype)initWithLanguage:(NSString *)value iso639_2code:(NSString *)code
{
self = [super init];
if (self)
{
_language = [value retain];
_iso639_2 = [code retain];
}
return self;
}
- (void)dealloc
{
[super dealloc];
[_language release];
}
@end
@implementation HBLanguagesSelection
- (instancetype)initWithLanguages:(NSArray *)languages
{
self = [super init];
if (self)
{
NSMutableArray *internal = [[NSMutableArray alloc] init];
int insertedItems = 0;
const iso639_lang_t *lang = lang_get_next(NULL);
for (lang = lang_get_next(lang); lang != NULL; lang = lang_get_next(lang))
{
NSString *nativeLanguage = strlen(lang->native_name) ? @(lang->native_name) : @(lang->eng_name);
HBLang *item = [[[HBLang alloc] initWithLanguage:nativeLanguage
iso639_2code:@(lang->iso639_2)] autorelease];
if ([languages containsObject:item.iso639_2])
{
item.isSelected = YES;
[internal insertObject:item atIndex:insertedItems++];
}
else
{
[internal addObject:item];
}
}
// Add the (Any) item.
HBLang *item = [[[HBLang alloc] initWithLanguage:@"(Any)"
iso639_2code:@"und"] autorelease];
if ([languages containsObject:item.iso639_2])
{
item.isSelected = YES;
}
[internal insertObject:item atIndex:0];
_languagesArray = internal;
}
return self;
}
- (NSArray *)selectedLanguages
{
NSMutableArray *selected = [[[NSMutableArray alloc] init] autorelease];
for (HBLang *lang in self.languagesArray)
{
if (lang.isSelected)
{
[selected addObject:lang.iso639_2];
}
}
return [[selected copy] autorelease];
}
- (void)dealloc
{
[super dealloc];
[_languagesArray release];
}
@end
NSString *kHBLanguagesDragRowsType = @"kHBLanguagesDragRowsType";
@implementation HBLanguageArrayController
- (void)setShowSelectedOnly:(BOOL)showSelectedOnly
{
_showSelectedOnly = showSelectedOnly;
[self rearrangeObjects];
}
- (NSArray *)arrangeObjects:(NSArray *)objects
{
if (!self.showSelectedOnly) {
return [super arrangeObjects:objects];
}
// Returns a filtered array with only the selected items
NSMutableArray *filteredObjects = [NSMutableArray arrayWithCapacity:[objects count]];
for (id item in objects)
{
if ([[item valueForKeyPath:@"isSelected"] boolValue])
{
[filteredObjects addObject:item];
}
}
return [super arrangeObjects:filteredObjects];
}
@end
|