root/trunk/PrefController.m @ 38

Revision 38, 14.5 kB (checked in by ngerakines, 3 years ago)

* fixed save/load of general prefs
* cleaned up the language of general prefs
* login now loads up to 10 unique last login ids
* save_login prefs now populate user/pass of last login

Line 
1#import "PrefController.h"
2
3@implementation PrefController
4
5// init
6// 1
7- (id)init {
8        NSLog(@"PrefController - init -- called \n");
9    if (self = [super init]) {
10        [self setToolbar:[[NSToolbar alloc] initWithIdentifier:@"preferencePanes"]];
11        [self setItems:[[NSMutableDictionary alloc] init]];
12                [self setMyCollections:[[NSMutableDictionary alloc] init]];
13        [self setAllowedPanels:[[NSMutableArray alloc] init]];
14        [self setService:[[NSString alloc] init]];
15    }
16    return self;
17}
18
19// 2
20- (void)awakeFromNib {
21        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowWillClose:) name:@"NSWindowWillCloseNotification" object:myWindow];
22       
23        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
24        [self setService:[userDefaults objectForKey:@"service type"]];
25        // Set the general pref view control values
26        [enable_growl setObjectValue:[userDefaults objectForKey:@"enable_growl"]];
27        [save_login setObjectValue:[userDefaults objectForKey:@"save_login"]];
28       
29        if ([self service]) {
30                if ([[self service] isEqualToString:@"TypePad"]) {
31                        [self init_typepad];
32                }
33                if ([[self service] isEqualToString:@"Vox"]) {
34                        [self init_vox];
35                }
36        } else {
37                [self init_generic];
38        }
39
40    toolbar = [[NSToolbar alloc] initWithIdentifier:@"preferencePanes"];
41    [toolbar setDelegate:self];
42    [toolbar setAllowsUserCustomization:NO];
43    [toolbar setAutosavesConfiguration:NO];
44    [myWindow setToolbar:toolbar];
45    [toolbar release];
46
47    [myWindow center];
48
49    [self switchViews:nil];
50}
51
52/* dealloc */
53- (void) dealloc {
54    [toolbar release]; toolbar = nil;
55    [items release]; items = nil;
56    [allowedPanels release]; allowedPanels = nil;
57    [service release]; service = nil;
58        [myCollections release]; myCollections = nil;
59    [super dealloc];
60}
61
62- (void) init_generic {
63        [items setObject:[self newItem:@"General" image:@"General"] forKey:@"General"];
64        allowedPanels = [NSArray arrayWithObjects:@"General", NSToolbarFlexibleSpaceItemIdentifier, nil];
65}
66
67- (void) init_typepad {
68        [items setObject:[self newItem:@"General" image:@"General"] forKey:@"General"];
69        [items setObject:[self newItem:@"Image" image:@"Weblog"] forKey:@"Image"];
70        [items setObject:[self newItem:@"Text" image:@"Gallery"] forKey:@"Text"];
71        allowedPanels = [NSArray arrayWithObjects:@"General", @"Image", @"Text", NSToolbarFlexibleSpaceItemIdentifier, nil];
72
73        // [tp_image_dropdown setState:NSOffState];
74        // [tp_text_dropdown setState:NSOffState];
75        [tp_image_dropdown removeAllItems];
76        [tp_text_dropdown removeAllItems];
77
78        id key;
79        TypePad *tp = [[[TypePad alloc] init] autorelease];
80        // TypePadAccount *uacc = [[tp accounts] objectForKey:[self defaultaccount]];
81
82        // set the items that need blogs
83        // NSArray *blogs = [tp defaultAccountWeblogs];
84        NSEnumerator *blog_enumerator = [[tp defaultAccountWeblogs] objectEnumerator];
85        while (key = [blog_enumerator nextObject]) {
86                TypePadWeblog *tpobj = key;
87                [myCollections setObject:[tpobj weblogID] forKey:[NSString stringWithFormat:@"Weblog: %@", [tpobj weblogTitle]]];
88                [tp_image_dropdown addItemWithTitle:[NSString stringWithFormat:@"Weblog: %@", [tpobj weblogTitle]]];
89                [tp_text_dropdown addItemWithTitle:[NSString stringWithFormat:@"Weblog: %@", [tpobj weblogTitle]]];
90        }
91       
92        // set the items that need galleries - defaultAccountGalleries
93        // NSArray *galleries = [tp defaultAccountGalleries];
94        NSEnumerator *gallery_enumerator = [[tp defaultAccountGalleries] objectEnumerator];
95        while (key = [gallery_enumerator nextObject]) {
96                TypePadGallery *tpobj = key;
97                [myCollections setObject:[tpobj galleryID] forKey:[NSString stringWithFormat:@"Gallery: %@", [tpobj galleryTitle]]];
98                [tp_image_dropdown addItemWithTitle:[NSString stringWithFormat:@"Gallery: %@", [tpobj galleryTitle]]];
99        }
100       
101        if ([tp_image_dropdown numberOfItems] == 0) {
102                [tp_image_dropdown setState:NSOffState];
103        }
104        if ([tp_text_dropdown numberOfItems] == 0) {
105                [tp_text_dropdown setState:NSOffState];
106        }
107
108        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
109        if ([userDefaults objectForKey:@"image destination id"]) {
110                if ([[userDefaults objectForKey:@"image destination type"] isEqualToString:@"1"]) {
111                        [tp_image_dropdown selectItemWithTitle:[NSString stringWithFormat:@"Weblog: %@", [userDefaults objectForKey:@"image destination title"]]];
112                }
113                if ([[userDefaults objectForKey:@"image destination type"] isEqualToString:@"2"]) {
114                        [tp_image_dropdown selectItemWithTitle:[NSString stringWithFormat:@"Gallery: %@", [userDefaults objectForKey:@"image destination title"]]];
115                }
116        }
117        if ([userDefaults objectForKey:@"text destination id"]) {
118                if ([[userDefaults objectForKey:@"text destination type"] isEqualToString:@"1"]) {
119                        [tp_text_dropdown selectItemWithTitle:[NSString stringWithFormat:@"Weblog: %@", [userDefaults objectForKey:@"text destination title"]]];
120                }
121        }
122
123}
124
125- (void) init_vox {
126        [items setObject:[self newItem:@"General" image:@"General"] forKey:@"General"];
127        [items setObject:[self newItem:@"Audio" image:@"Weblog"] forKey:@"Audio"];
128        [items setObject:[self newItem:@"Image" image:@"Gallery"] forKey:@"Image"];
129        [items setObject:[self newItem:@"Text" image:@"Weblog"] forKey:@"Text"];
130        allowedPanels = [NSArray arrayWithObjects:@"General", @"Audio", @"Image", @"Text", NSToolbarFlexibleSpaceItemIdentifier, nil];
131       
132        [vx_image_dropdown removeAllItems];
133        [vx_text_dropdown removeAllItems];
134       
135        id key;
136        Vox *vx = [[[Vox alloc] init] autorelease];
137        // TypePadAccount *uacc = [[tp accounts] objectForKey:[self defaultaccount]];
138       
139        // set the items that need blogs
140        // NSArray *blogs = [tp defaultAccountWeblogs];
141        NSEnumerator *col_enumerator = [[vx defaultAccountCollections] objectEnumerator];
142        while (key = [col_enumerator nextObject]) {
143                VoxCollection *voxcol = key;
144                [myCollections setObject:[voxcol collectionID] forKey:[NSString stringWithFormat:@"Collection: %@", [voxcol collectionTitle]]];
145                NSLog(@"Mapping collection '%@' to id '%@'", [voxcol collectionTitle], [voxcol collectionID]);
146                [vx_image_dropdown addItemWithTitle:[NSString stringWithFormat:@"Collection: %@", [voxcol collectionTitle]]];
147                [vx_text_dropdown addItemWithTitle:[NSString stringWithFormat:@"Collection: %@", [voxcol collectionTitle]]];
148        }
149        if ([vx_image_dropdown numberOfItems] == 0) {
150                [vx_image_dropdown setState:NSOffState];
151        }
152        if ([vx_text_dropdown numberOfItems] == 0) {
153                [vx_text_dropdown setState:NSOffState];
154        }
155       
156        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
157        if ([userDefaults objectForKey:@"vox image destination id"]) {
158                if ([[userDefaults objectForKey:@"vox image destination type"] isEqualToString:@"1"]) {
159                        [tp_image_dropdown selectItemWithTitle:[NSString stringWithFormat:@"Collection: %@", [userDefaults objectForKey:@"vox image destination title"]]];
160                }
161        }
162        if ([userDefaults objectForKey:@"vox text destination id"]) {
163                if ([[userDefaults objectForKey:@"vox text destination type"] isEqualToString:@"1"]) {
164                        [tp_text_dropdown selectItemWithTitle:[NSString stringWithFormat:@"Collection: %@", [userDefaults objectForKey:@"vox text destination title"]]];
165                }
166        }
167}
168
169- (NSToolbarItem *) newItem:(NSString *) name image:(NSString *) image {
170        NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:name] autorelease];
171    [item setPaletteLabel:name];
172    [item setLabel:name];
173    [item setToolTip:@""];
174    [item setImage:[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:image ofType:@"tiff"]]];
175    [item setTarget:self];
176    [item setAction:@selector(switchViews:)];
177        return item;
178}
179
180- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
181    return [items objectForKey:itemIdentifier];
182}
183
184- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)theToolbar {
185    return [self toolbarDefaultItemIdentifiers:theToolbar];
186}
187
188- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)theToolbar {
189    return [self allowedPanels];
190}
191
192- (NSArray *)toolbarSelectableItemIdentifiers: (NSToolbar *)toolbar {
193    return [items allKeys];
194}
195
196- (void)switchViews:(NSToolbarItem *)item {
197       
198    NSString *sender;
199    if (item == nil){
200        sender = @"General";
201        [toolbar setSelectedItemIdentifier:sender];
202    } else {
203        sender = [item label];
204    }
205    NSView *prefsView;
206    [myWindow setTitle:sender];
207    if([sender isEqualToString:@"General"]){
208        prefsView = PrefsGeneral;
209    }else if([sender isEqualToString:@"Audio"]){
210        prefsView = PrefsVoxAudio;
211    }else if([sender isEqualToString:@"Image"]){
212        prefsView = [[self service] isEqualToString:@"TypePad"] ? PrefsTypePadImage : PrefsVoxImage;
213    }else if([sender isEqualToString:@"Text"]){
214        prefsView = [[self service] isEqualToString:@"TypePad"] ? PrefsTypePadText : PrefsVoxText;
215    }
216       
217        NSView *tempView = [[NSView alloc] initWithFrame:[[myWindow contentView] frame]];
218        [myWindow setContentView:tempView];
219        [tempView release];
220       
221        NSRect newFrame = [myWindow frame];
222        newFrame.size.height = [prefsView frame].size.height + ([myWindow frame].size.height - [[myWindow contentView] frame].size.height);
223        newFrame.size.width = [prefsView frame].size.width;
224        newFrame.origin.y += ([[myWindow contentView] frame].size.height - [prefsView frame].size.height);
225       
226        [myWindow setShowsResizeIndicator:NO];
227        [myWindow setFrame:newFrame display:YES animate:YES];
228        [myWindow setContentView:prefsView];
229}
230
231- (void) windowWillClose:(id) sender {
232        NSLog(@"Window closed\n");
233        [self save_generic];
234        if ([self service]) {
235                if ([[self service] isEqualToString:@"TypePad"]) {
236                        [self save_typepad];
237                }
238                if ([[self service] isEqualToString:@"Vox"]) {
239                        [self save_vox];
240                }
241        }
242}
243
244/* toolbar */
245- (NSToolbar *) toolbar { return toolbar; }
246
247/* -setToolbar: */
248- (void) setToolbar: (NSToolbar *) Toolbar {
249    //NSLog(@"in -setToolbar:, old value of toolbar: %@, changed to: %@", toolbar, Toolbar);
250    if (toolbar != Toolbar) {
251        [toolbar autorelease];
252        toolbar = [Toolbar retain];
253    }
254}
255
256/* items */
257- (NSMutableDictionary *) items { return items; }
258
259/* -setItems: */
260- (void) setItems: (NSMutableDictionary *) Items {
261    //NSLog(@"in -setItems:, old value of items: %@, changed to: %@", items, Items);
262    if (items != Items) {
263        [items autorelease];
264        items = [Items retain];
265    }
266}
267
268/* allowedPanels */
269- (NSMutableArray *) allowedPanels { return allowedPanels; }
270
271/* -setAllowedPanels: */
272- (void) setAllowedPanels: (NSMutableArray *) AllowedPanels {
273    //NSLog(@"in -setAllowedPanels:, old value of allowedPanels: %@, changed to: %@", allowedPanels, AllowedPanels);
274    if (allowedPanels != AllowedPanels) {
275        [allowedPanels autorelease];
276        allowedPanels = [AllowedPanels retain];
277    }
278}
279
280/* service */
281- (NSString *) service { return service; }
282
283/* -setService: */
284- (void) setService: (NSString *) Service {
285    //NSLog(@"in -setService:, old value of service: %@, changed to: %@", service, Service);
286    if (service != Service) {
287        [service autorelease];
288        service = [Service retain];
289    }
290}
291
292/* myCollections */
293- (NSMutableDictionary *) myCollections { return myCollections; }
294
295/* -setMyCollections: */
296- (void) setMyCollections: (NSMutableDictionary *) MyCollections {
297    //NSLog(@"in -setMyCollections:, old value of myCollections: %@, changed to: %@", myCollections, MyCollections);
298    if (myCollections != MyCollections) {
299        [myCollections autorelease];
300        myCollections = [MyCollections retain];
301    }
302}
303
304- (void) save_generic {
305        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
306        [userDefaults setObject:[enable_growl objectValue] forKey:@"enable_growl"];
307        [userDefaults setObject:[save_login objectValue] forKey:@"save_login"];
308}
309
310- (void) save_typepad {
311        NSLog(@"- (void) save_typepad -- called\n");
312        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
313        if ([tp_image_dropdown numberOfItems] > 0) {
314                NSArray *image_target = [self parseTargetType:[tp_image_dropdown titleOfSelectedItem]];
315                if ([image_target count] > 0) {
316                        [userDefaults setObject:[image_target objectAtIndex:0] forKey:@"image destination type"];
317                        [userDefaults setObject:[image_target objectAtIndex:1] forKey:@"image destination id"];
318                        [userDefaults setObject:[image_target objectAtIndex:2] forKey:@"image destination title"];
319                }
320        }
321        if ([tp_text_dropdown numberOfItems] > 0) {
322                NSArray *text_target = [self parseTargetType:[tp_text_dropdown titleOfSelectedItem]];
323                if ([text_target count] > 0) {
324                        [userDefaults setObject:[text_target objectAtIndex:0] forKey:@"text destination type"];
325                        [userDefaults setObject:[text_target objectAtIndex:1] forKey:@"text destination id"];
326                        [userDefaults setObject:[text_target objectAtIndex:2] forKey:@"text destination title"];
327                }
328        }
329        [userDefaults synchronize];
330}
331
332- (void) save_vox {
333        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
334        if ([vx_image_dropdown numberOfItems] > 0) {
335                NSArray *image_target = [self parseTargetType:[vx_image_dropdown titleOfSelectedItem]];
336                if ([image_target count] > 0) {
337                        [userDefaults setObject:[image_target objectAtIndex:0] forKey:@"vox image destination type"];
338                        [userDefaults setObject:[image_target objectAtIndex:1] forKey:@"vox image destination id"];
339                        [userDefaults setObject:[image_target objectAtIndex:2] forKey:@"vox image destination title"];
340                }
341        }
342        if ([vx_text_dropdown numberOfItems] > 0) {
343                NSArray *text_target = [self parseTargetType:[vx_text_dropdown titleOfSelectedItem]];
344                if ([text_target count] > 0) {
345                        [userDefaults setObject:[text_target objectAtIndex:0] forKey:@"vox text destination type"];
346                        [userDefaults setObject:[text_target objectAtIndex:1] forKey:@"vox text destination id"];
347                        [userDefaults setObject:[text_target objectAtIndex:2] forKey:@"vox text destination title"];
348                }
349        }
350        [userDefaults synchronize];
351}
352
353- (NSArray *) parseTargetType: (NSString *) title {
354        NSMutableArray *ret = [[[NSMutableArray alloc] initWithCapacity:3] autorelease];
355        if ([title rangeOfString:@"Weblog: "].location != NSNotFound) {
356                [ret addObject:@"1"];
357                [ret addObject:[myCollections objectForKey:title]];
358                [ret addObject:[title substringFromIndex:8]];
359        }
360        if ([title rangeOfString:@"Gallery: "].location != NSNotFound) {
361                [ret addObject:@"2"];
362                [ret addObject:[myCollections objectForKey:title]];
363                [ret addObject:[title substringFromIndex:9]];
364        }
365        if ([title rangeOfString:@"TypeList: "].location != NSNotFound) {
366                [ret addObject:@"3"];
367                [ret addObject:[myCollections objectForKey:title]];
368                [ret addObject:[title substringFromIndex:10]];
369        }
370        if ([title rangeOfString:@"Collection: "].location != NSNotFound) {
371                [ret addObject:@"1"];
372                [ret addObject:[myCollections objectForKey:title]];
373                [ret addObject:[title substringFromIndex:12]];
374        }
375        return ret;
376}
377
378@end
Note: See TracBrowser for help on using the browser.