Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMLibraryViewController.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 233 - (hide annotations) (download)
Sun Jan 10 07:00:13 2010 UTC (14 years, 3 months ago) by masaki
File size: 6936 byte(s)
[Mod] ライブラリに関するUI部品をLibraryView.xibに移動した。
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 233 - (XspfMDragControl *)dragControl
46     {
47     return dragControl;
48     }
49 masaki 43
50 masaki 113 - (void)addSmartLibrary:(NSString *)name predicate:(NSPredicate *)predicate order:(NSInteger)order
51     {
52     id obj = [NSEntityDescription insertNewObjectForEntityForName:@"XspfList"
53     inManagedObjectContext:[self managedObjectContext]];
54     [obj setValue:predicate forKey:@"predicate"];
55     [obj setValue:name forKey:@"name"];
56     [obj setValue:[NSNumber numberWithInt:order] forKey:@"order"];
57     }
58 masaki 43 - (void)setupXspfList
59     {
60 masaki 48 NSManagedObjectContext *moc = [self managedObjectContext];
61 masaki 43 NSError *error = nil;
62     NSFetchRequest *fetch;
63     NSInteger num;
64    
65     fetch = [[[NSFetchRequest alloc] init] autorelease];
66     [fetch setEntity:[NSEntityDescription entityForName:@"XspfList"
67     inManagedObjectContext:moc]];
68     num = [moc countForFetchRequest:fetch
69     error:&error];
70     if(num != 0) return;
71    
72     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"urlString <> %@", @""];
73 masaki 113 [self addSmartLibrary:NSLocalizedString(@"Library", @"Library")
74     predicate:predicate
75     order:kLibraryOrder];
76 masaki 43
77     predicate = [NSPredicate predicateWithFormat:@"favorites = %@", [NSNumber numberWithBool:YES]];
78 masaki 113 [self addSmartLibrary:NSLocalizedString(@"Favorites", @"Favorites")
79     predicate:predicate
80     order:kFavoritesOrder];
81 masaki 43 }
82    
83 masaki 113 - (XspfMXspfListObject *)targetObject
84     {
85     id array = [[self representedObject] arrangedObjects];
86    
87     NSInteger row = [tableView clickedRow];
88     if(row >= 0 && [array count] > row) {
89     return [array objectAtIndex:row];
90     }
91     return nil;
92     }
93 masaki 116 - (BOOL)canUseNewSmartLibraryName:(NSString *)newName
94     {
95     NSManagedObjectContext *moc = [self managedObjectContext];
96     NSError *error = nil;
97     NSFetchRequest *fetch;
98     NSPredicate *predicate;
99     NSInteger num;
100    
101     fetch = [[[NSFetchRequest alloc] init] autorelease];
102     [fetch setEntity:[NSEntityDescription entityForName:@"XspfList"
103     inManagedObjectContext:moc]];
104     predicate = [NSPredicate predicateWithFormat:@"name = %@", newName];
105     [fetch setPredicate:predicate];
106     num = [moc countForFetchRequest:fetch
107     error:&error];
108    
109     return num == 0;
110     }
111     - (NSString *)newSmartLibraryName
112     {
113     NSString *template = NSLocalizedString(@"Untitled Library", @"Untitled Library");
114    
115     if([self canUseNewSmartLibraryName:template]) return template;
116    
117     NSInteger i = 1;
118     do {
119     NSString *name = [NSString stringWithFormat:@"%@ %d", template, i];
120     if([self canUseNewSmartLibraryName:name]) return name;
121     } while (i++ < INT_MAX);
122    
123     return @"hoge";
124     }
125 masaki 112 - (IBAction)newPredicate:(id)sender
126 masaki 43 {
127 masaki 112 if([editor numberOfRows] == 0) {
128     [editor addRow:self];
129     }
130 masaki 147
131 masaki 116 [nameField setStringValue:[self newSmartLibraryName]];
132 masaki 113 [nameField selectText:self];
133    
134 masaki 112 [NSApp beginSheet:predicatePanel
135     modalForWindow:[tableView window]
136     modalDelegate:self
137     didEndSelector:@selector(didEndEditPredicate:returnCode:contextInfo:)
138     contextInfo:@"Createion"];
139 masaki 43 }
140 masaki 113 - (IBAction)editPredicate:(id)sender
141     {
142     XspfMXspfListObject *obj = [self targetObject];
143     [nameField setStringValue:obj.name];
144     [nameField selectText:self];
145    
146 masaki 123 [ruleEditorDelegate setPredicate:obj.predicate];
147 masaki 113
148     [NSApp beginSheet:predicatePanel
149     modalForWindow:[tableView window]
150     modalDelegate:self
151     didEndSelector:@selector(didEndEditPredicate:returnCode:contextInfo:)
152     contextInfo:obj];
153     }
154     - (IBAction)deletePredicate:(id)sender
155     {
156     XspfMXspfListObject *obj = [self targetObject];
157     NSBeginInformationalAlertSheet(nil, nil, @"Cancel", nil, [[self view] window],
158     self, @selector(didEndAskDelete:::), Nil, obj,
159 masaki 118 NSLocalizedString(@"Do you really delete smart library \"%@\"?", @"Do you really delete smart library \"%@\"?"),
160     obj.name);
161 masaki 113 }
162 masaki 112 - (IBAction)didEndEditPredicate:(id)sender
163     {
164     [predicatePanel orderOut:self];
165     [NSApp endSheet:predicatePanel returnCode:[sender tag]];
166     }
167 masaki 118
168     - (BOOL)validateMenuItem:(NSMenuItem *)menuItem
169     {
170     SEL action = [menuItem action];
171     if(action == @selector(editPredicate:)
172     || action == @selector(deletePredicate:)) {
173     XspfMXspfListObject *obj = [self targetObject];
174     if(!obj) return NO;
175     if(obj.order == kLibraryOrder || obj.order == kFavoritesOrder) return NO;
176     }
177    
178     return YES;
179     }
180    
181 masaki 112 - (void)didEndEditPredicate:(id)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
182     {
183     if(returnCode == NSCancelButton) return;
184    
185 masaki 147 [editor reloadPredicate];
186     NSPredicate *predicate = [editor predicate];
187 masaki 122
188 masaki 125 if(!predicate || ![predicate isKindOfClass:[NSPredicate class]]) {
189 masaki 188 HMLog(HMLogLevelError, @"Could not create NSPredicate.");
190 masaki 125 NSBeep();
191     return;
192     }
193 masaki 126 if(![predicate isKindOfClass:[NSCompoundPredicate class]]) {
194     predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObject:predicate]];
195     }
196 masaki 150
197 masaki 113 NSString *name = [nameField stringValue];
198     if([name length] == 0) {
199     NSBeep();
200     NSBeginAlertSheet(nil, nil, nil, nil, [[self view] window],
201     self, @selector(retryEditPredicate:::), Nil, contextInfo,
202 masaki 118 NSLocalizedString(@"Name must not be empty.", @"Name must not be empty."));
203 masaki 116 return;
204 masaki 113 }
205 masaki 112
206 masaki 113 if([(id)contextInfo isKindOfClass:[NSString class]]) {
207     [self addSmartLibrary:name predicate:predicate order:kSmartLibraryOrder];
208     } else {
209     XspfMXspfListObject *obj = contextInfo;
210     obj.name = name;
211     obj.predicate = predicate;
212     }
213 masaki 112 }
214 masaki 113 - (void)retryEditPredicate:(NSWindow *)sheet :(NSInteger)returnCode :(void *)contextInfo
215     {
216     if([(id)contextInfo isKindOfClass:[NSString class]]) {
217     [self performSelector:@selector(newPredicate:) withObject:nil afterDelay:0.0];
218     } else {
219     [self performSelector:@selector(editPredicate:) withObject:nil afterDelay:0.0];
220     }
221     }
222     - (void)didEndAskDelete:(NSWindow *)sheet :(NSInteger)returnCode :(void *)contextInfo
223     {
224     if(returnCode == NSCancelButton) return;
225    
226     [[self managedObjectContext] deleteObject:contextInfo];
227     }
228 masaki 120
229 masaki 112 - (IBAction)test01:(id)sender
230     {
231 masaki 147 // NSArray *array = [editor rowTemplates];
232 masaki 112
233     // for(id templ in array) {
234 masaki 188 // HMLog(HMLogLevelDebug @"Views -> %@", [templ templateViews]);
235 masaki 112 // for(id v in [templ templateViews]) {
236     // if([v respondsToSelector:@selector(tag)]) {
237 masaki 188 // HMLog(HMLogLevelDebug, @"tag -> %d", [v tag]);
238 masaki 112 // }
239     // }
240     // }
241 masaki 147 // for(id templ in array) {
242 masaki 188 // HMLog(HMLogLevelDebug, @"template -> %@", templ);
243 masaki 147 // }
244 masaki 112 }
245 masaki 43
246 masaki 41 @end

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