Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMLibraryViewController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 188 - (hide annotations) (download)
Sat Jan 2 02:57:56 2010 UTC (14 years, 3 months ago) by masaki
File size: 6877 byte(s)
[New]  NSLogをすべてHMLogに置き換え。
1 masaki 41 //
2     // XspfMLibraryViewController.m
3     // XspfManager
4     //
5     // Created by Hori,Masaki on 09/11/08.
6     // Copyright 2009 masakih. All rights reserved.
7     //
8    
9     #import "XspfMLibraryViewController.h"
10    
11 masaki 113 #import "XspfMXspfListObject.h"
12    
13    
14 masaki 43 @interface XspfMLibraryViewController (HMPrivate)
15     - (NSArray *)sortDescriptors;
16     - (void)setupXspfList;
17     @end
18 masaki 41
19 masaki 113 enum {
20     kLibraryOrder = 0,
21     kFavoritesOrder,
22     kSmartLibraryOrder,
23     };
24    
25 masaki 41 @implementation XspfMLibraryViewController
26 masaki 113
27 masaki 41 - (id)init
28     {
29     [super initWithNibName:@"LibraryView" bundle:nil];
30    
31 masaki 43 [self setupXspfList];
32    
33 masaki 41 return self;
34     }
35    
36 masaki 43 - (void)awakeFromNib
37     {
38     [[self representedObject] setSortDescriptors:[self sortDescriptors]];
39     }
40 masaki 41 - (NSArray *)sortDescriptors
41     {
42 masaki 61 id desc = [[NSSortDescriptor alloc] initWithKey:@"order" ascending:YES];
43     return [NSArray arrayWithObject:[desc autorelease]];
44 masaki 41 }
45 masaki 43
46 masaki 113 - (void)addSmartLibrary:(NSString *)name predicate:(NSPredicate *)predicate order:(NSInteger)order
47     {
48     id obj = [NSEntityDescription insertNewObjectForEntityForName:@"XspfList"
49     inManagedObjectContext:[self managedObjectContext]];
50     [obj setValue:predicate forKey:@"predicate"];
51     [obj setValue:name forKey:@"name"];
52     [obj setValue:[NSNumber numberWithInt:order] forKey:@"order"];
53     }
54 masaki 43 - (void)setupXspfList
55     {
56 masaki 48 NSManagedObjectContext *moc = [self managedObjectContext];
57 masaki 43 NSError *error = nil;
58     NSFetchRequest *fetch;
59     NSInteger num;
60    
61     fetch = [[[NSFetchRequest alloc] init] autorelease];
62     [fetch setEntity:[NSEntityDescription entityForName:@"XspfList"
63     inManagedObjectContext:moc]];
64     num = [moc countForFetchRequest:fetch
65     error:&error];
66     if(num != 0) return;
67    
68     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"urlString <> %@", @""];
69 masaki 113 [self addSmartLibrary:NSLocalizedString(@"Library", @"Library")
70     predicate:predicate
71     order:kLibraryOrder];
72 masaki 43
73     predicate = [NSPredicate predicateWithFormat:@"favorites = %@", [NSNumber numberWithBool:YES]];
74 masaki 113 [self addSmartLibrary:NSLocalizedString(@"Favorites", @"Favorites")
75     predicate:predicate
76     order:kFavoritesOrder];
77 masaki 43 }
78    
79 masaki 113 - (XspfMXspfListObject *)targetObject
80     {
81     id array = [[self representedObject] arrangedObjects];
82    
83     NSInteger row = [tableView clickedRow];
84     if(row >= 0 && [array count] > row) {
85     return [array objectAtIndex:row];
86     }
87     return nil;
88     }
89 masaki 116 - (BOOL)canUseNewSmartLibraryName:(NSString *)newName
90     {
91     NSManagedObjectContext *moc = [self managedObjectContext];
92     NSError *error = nil;
93     NSFetchRequest *fetch;
94     NSPredicate *predicate;
95     NSInteger num;
96    
97     fetch = [[[NSFetchRequest alloc] init] autorelease];
98     [fetch setEntity:[NSEntityDescription entityForName:@"XspfList"
99     inManagedObjectContext:moc]];
100     predicate = [NSPredicate predicateWithFormat:@"name = %@", newName];
101     [fetch setPredicate:predicate];
102     num = [moc countForFetchRequest:fetch
103     error:&error];
104    
105     return num == 0;
106     }
107     - (NSString *)newSmartLibraryName
108     {
109     NSString *template = NSLocalizedString(@"Untitled Library", @"Untitled Library");
110    
111     if([self canUseNewSmartLibraryName:template]) return template;
112    
113     NSInteger i = 1;
114     do {
115     NSString *name = [NSString stringWithFormat:@"%@ %d", template, i];
116     if([self canUseNewSmartLibraryName:name]) return name;
117     } while (i++ < INT_MAX);
118    
119     return @"hoge";
120     }
121 masaki 112 - (IBAction)newPredicate:(id)sender
122 masaki 43 {
123 masaki 112 if([editor numberOfRows] == 0) {
124     [editor addRow:self];
125     }
126 masaki 147
127 masaki 116 [nameField setStringValue:[self newSmartLibraryName]];
128 masaki 113 [nameField selectText:self];
129    
130 masaki 112 [NSApp beginSheet:predicatePanel
131     modalForWindow:[tableView window]
132     modalDelegate:self
133     didEndSelector:@selector(didEndEditPredicate:returnCode:contextInfo:)
134     contextInfo:@"Createion"];
135 masaki 43 }
136 masaki 113 - (IBAction)editPredicate:(id)sender
137     {
138     XspfMXspfListObject *obj = [self targetObject];
139     [nameField setStringValue:obj.name];
140     [nameField selectText:self];
141    
142 masaki 123 [ruleEditorDelegate setPredicate:obj.predicate];
143 masaki 113
144     [NSApp beginSheet:predicatePanel
145     modalForWindow:[tableView window]
146     modalDelegate:self
147     didEndSelector:@selector(didEndEditPredicate:returnCode:contextInfo:)
148     contextInfo:obj];
149     }
150     - (IBAction)deletePredicate:(id)sender
151     {
152     XspfMXspfListObject *obj = [self targetObject];
153     NSBeginInformationalAlertSheet(nil, nil, @"Cancel", nil, [[self view] window],
154     self, @selector(didEndAskDelete:::), Nil, obj,
155 masaki 118 NSLocalizedString(@"Do you really delete smart library \"%@\"?", @"Do you really delete smart library \"%@\"?"),
156     obj.name);
157 masaki 113 }
158 masaki 112 - (IBAction)didEndEditPredicate:(id)sender
159     {
160     [predicatePanel orderOut:self];
161     [NSApp endSheet:predicatePanel returnCode:[sender tag]];
162     }
163 masaki 118
164     - (BOOL)validateMenuItem:(NSMenuItem *)menuItem
165     {
166     SEL action = [menuItem action];
167     if(action == @selector(editPredicate:)
168     || action == @selector(deletePredicate:)) {
169     XspfMXspfListObject *obj = [self targetObject];
170     if(!obj) return NO;
171     if(obj.order == kLibraryOrder || obj.order == kFavoritesOrder) return NO;
172     }
173    
174     return YES;
175     }
176    
177 masaki 112 - (void)didEndEditPredicate:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
178     {
179     if(returnCode == NSCancelButton) return;
180    
181 masaki 147 [editor reloadPredicate];
182     NSPredicate *predicate = [editor predicate];
183 masaki 122
184 masaki 125 if(!predicate || ![predicate isKindOfClass:[NSPredicate class]]) {
185 masaki 188 HMLog(HMLogLevelError, @"Could not create NSPredicate.");
186 masaki 125 NSBeep();
187     return;
188     }
189 masaki 126 if(![predicate isKindOfClass:[NSCompoundPredicate class]]) {
190     predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObject:predicate]];
191     }
192 masaki 150
193 masaki 113 NSString *name = [nameField stringValue];
194     if([name length] == 0) {
195     NSBeep();
196     NSBeginAlertSheet(nil, nil, nil, nil, [[self view] window],
197     self, @selector(retryEditPredicate:::), Nil, contextInfo,
198 masaki 118 NSLocalizedString(@"Name must not be empty.", @"Name must not be empty."));
199 masaki 116 return;
200 masaki 113 }
201 masaki 112
202 masaki 113 if([(id)contextInfo isKindOfClass:[NSString class]]) {
203     [self addSmartLibrary:name predicate:predicate order:kSmartLibraryOrder];
204     } else {
205     XspfMXspfListObject *obj = contextInfo;
206     obj.name = name;
207     obj.predicate = predicate;
208     }
209 masaki 112 }
210 masaki 113 - (void)retryEditPredicate:(NSWindow *)sheet :(NSInteger)returnCode :(void *)contextInfo
211     {
212     if([(id)contextInfo isKindOfClass:[NSString class]]) {
213     [self performSelector:@selector(newPredicate:) withObject:nil afterDelay:0.0];
214     } else {
215     [self performSelector:@selector(editPredicate:) withObject:nil afterDelay:0.0];
216     }
217     }
218     - (void)didEndAskDelete:(NSWindow *)sheet :(NSInteger)returnCode :(void *)contextInfo
219     {
220     if(returnCode == NSCancelButton) return;
221    
222     [[self managedObjectContext] deleteObject:contextInfo];
223     }
224 masaki 120
225 masaki 112 - (IBAction)test01:(id)sender
226     {
227 masaki 147 // NSArray *array = [editor rowTemplates];
228 masaki 112
229     // for(id templ in array) {
230 masaki 188 // HMLog(HMLogLevelDebug @"Views -> %@", [templ templateViews]);
231 masaki 112 // for(id v in [templ templateViews]) {
232     // if([v respondsToSelector:@selector(tag)]) {
233 masaki 188 // HMLog(HMLogLevelDebug, @"tag -> %d", [v tag]);
234 masaki 112 // }
235     // }
236     // }
237 masaki 147 // for(id templ in array) {
238 masaki 188 // HMLog(HMLogLevelDebug, @"template -> %@", templ);
239 masaki 147 // }
240 masaki 112 }
241 masaki 43
242 masaki 41 @end

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26