forked from NSGod/ichm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHMTextEncodingMenu.m
84 lines (70 loc) · 1.77 KB
/
CHMTextEncodingMenu.m
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
//
// CHMTextEncodingMenu.m
// ichm
//
// Created by Robin Lu on 8/1/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "CHMTextEncodingMenu.h"
#import "CHMDocument.h"
@implementation CHMTextEncodingMenu
- (id)init
{
if ((self = [super init])) {
initialized = NO;
encodingNames = [[NSMutableArray alloc] init];
}
return self;
}
- (void) dealloc
{
[encodingNames release];
[super dealloc];
}
- (void)menuNeedsUpdate:(NSMenu *)menu
{
if(!initialized)
[self initEncodingMenu];
NSDocumentController * controller = [NSDocumentController sharedDocumentController];
CHMDocument *doc = [controller currentDocument];
[doc setupEncodingMenu];
}
- (void)initEncodingMenu
{
if(initialized)
return;
NSString *path = [[NSBundle mainBundle] pathForResource:@"textencoding" ofType:@"plist"];
NSArray *plist = [NSArray arrayWithContentsOfFile:path];
if(!plist)
{
NSLog(@"[%@ %@] failed to load textencoding.plist", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
return;
}
NSMenu * submenu = [menu submenu];
NSUInteger sectionCount = plist.count;
NSUInteger sectionIndex = 0;
for (NSArray *section in plist) {
for (NSDictionary *item in section) {
NSString *title = [item objectForKey:@"title"];
NSMenuItem *newitem = [[[NSMenuItem alloc] init] autorelease];
[newitem setTitle:title];
NSInteger tag = [encodingNames count];
NSString *name = [item objectForKey:@"name"];
[encodingNames addObject:name];
[newitem setTag:tag];
[submenu addItem:newitem];
}
sectionIndex++;
if (sectionIndex < sectionCount) {
[submenu addItem:[NSMenuItem separatorItem]];
}
}
initialized = YES;
}
- (NSString*)getEncodingByTag:(NSInteger)tag
{
if(0==tag)
return nil;
return [encodingNames objectAtIndex:tag];
}
@end