2 // AIAdvancedPreferences.m
5 // Created by Evan Schoenberg on 4/7/07.
8 #import "AIAdvancedPreferences.h"
9 #import <Adium/AIAdvancedPreferencePane.h>
10 #import <Adium/KNShelfSplitView.h>
11 #import <Adium/AIModularPaneCategoryView.h>
12 #import <Adium/AIPreferenceControllerProtocol.h>
13 #import <AIUtilities/AIImageTextCell.h>
14 #import <AIUtilities/AIViewAdditions.h>
15 #import <AIUtilities/AIAlternatingRowTableView.h>
17 #define KEY_ADVANCED_PREFERENCE_SELECTED_ROW @"Preference Advanced Selected Row"
18 #define KEY_ADVANCED_PREFERENCE_SHELF_WIDTH @"AdvancedPrefs:ShelfWidth"
20 @interface AIAdvancedPreferences (PRIVATE)
21 - (void)_configureAdvancedPreferencesTable;
24 @implementation AIAdvancedPreferences
25 + (AIPreferencePane *)preferencePane
27 [[[AIObject sharedAdiumInstance] preferenceController] registerDefaults:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:150]
28 forKey:KEY_ADVANCED_PREFERENCE_SHELF_WIDTH]
29 forGroup:PREF_GROUP_WINDOW_POSITIONS];
31 return [super preferencePane];
34 - (NSString *)paneIdentifier
38 - (NSString *)paneName{
39 return AILocalizedString(@"Advanced", "Title of the messages preferences");
41 - (NSString *)nibName{
42 return @"AdvancedPreferences";
46 return [NSImage imageNamed:@"pref-advanced"];
50 * @brief Configure the preference view
54 [shelf_splitView setFrame:[[shelf_splitView superview] frame]];
55 [shelf_splitView setShelfWidth:[[[adium preferenceController] preferenceForKey:KEY_ADVANCED_PREFERENCE_SHELF_WIDTH
56 group:PREF_GROUP_WINDOW_POSITIONS] floatValue]];
58 [tableView_categories accessibilitySetOverrideValue:AILocalizedString(@"Advanced Preference Categories", nil)
59 forAttribute:NSAccessibilityRoleDescriptionAttribute];
61 [self _configureAdvancedPreferencesTable];
66 //Select the previously selected row
67 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[tableView_categories selectedRow]]
68 forKey:KEY_ADVANCED_PREFERENCE_SELECTED_ROW
69 group:PREF_GROUP_WINDOW_POSITIONS];
71 [[adium preferenceController] setPreference:[NSNumber numberWithFloat:[shelf_splitView shelfWidth]]
72 forKey:KEY_ADVANCED_PREFERENCE_SHELF_WIDTH
73 group:PREF_GROUP_WINDOW_POSITIONS];
76 [loadedAdvancedPanes makeObjectsPerformSelector:@selector(closeView)];
77 [modularPane removeAllSubviews];
78 [loadedAdvancedPanes release]; loadedAdvancedPanes = nil;
79 [_advancedCategoryArray release]; _advancedCategoryArray = nil;
83 * @brief Returns an array containing all the available advanced preference views
85 - (NSArray *)advancedCategoryArray
87 if (!_advancedCategoryArray) {
88 _advancedCategoryArray = [[[[adium preferenceController] advancedPaneArray] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] retain];
91 return _advancedCategoryArray;
95 * @brief Displays the passed AIPreferencePane in the advanced preferences tab of our window
97 - (void)configureAdvancedPreferencesForPane:(AIAdvancedPreferencePane *)preferencePane
100 [loadedAdvancedPanes makeObjectsPerformSelector:@selector(closeView)];
101 [modularPane removeAllSubviews];
102 [loadedAdvancedPanes release]; loadedAdvancedPanes = nil;
105 if (preferencePane) {
106 loadedAdvancedPanes = [[NSArray arrayWithObject:preferencePane] retain];
107 [modularPane setPanes:loadedAdvancedPanes];
112 * @brief Configure the advanced preference category table view
114 - (void)_configureAdvancedPreferencesTable
116 AIImageTextCell *cell;
118 //Configure our tableView
119 cell = [[AIImageTextCell alloc] init];
120 [cell setFont:[NSFont systemFontOfSize:12]];
121 [[tableView_categories tableColumnWithIdentifier:@"description"] setDataCell:cell];
124 [[tableView_categories enclosingScrollView] setAutohidesScrollers:YES];
125 [tableView_categories setDrawsGradientSelection:YES];
127 //This is the Mail.app source list background color... which differs from the iTunes one.
128 [tableView_categories setBackgroundColor:[NSColor colorWithCalibratedRed:.9059
133 //Select the previously selected row
134 int row = [[[adium preferenceController] preferenceForKey:KEY_ADVANCED_PREFERENCE_SELECTED_ROW
135 group:PREF_GROUP_WINDOW_POSITIONS] intValue];
136 if (row < 0 || row >= [tableView_categories numberOfRows]) row = 1;
138 [tableView_categories selectRow:row byExtendingSelection:NO];
139 [self tableViewSelectionDidChange:nil];
143 * @brief Return the number of accounts
145 - (int)numberOfRowsInTableView:(NSTableView *)tableView
147 return [[self advancedCategoryArray] count];
151 * @brief Return the account description or image
153 - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
155 return [[[self advancedCategoryArray] objectAtIndex:row] label];
159 * @brief Set the category image before the cell is displayed
161 - (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row
163 [cell setImage:[[[self advancedCategoryArray] objectAtIndex:row] image]];
164 [cell setSubString:nil];
168 * @brief Update our advanced preferences for the selected pane
170 - (void)tableViewSelectionDidChange:(NSNotification *)aNotification
172 int row = [tableView_categories selectedRow];
174 if (row >= 0 && row < [[self advancedCategoryArray] count]) {
175 [self configureAdvancedPreferencesForPane:[[self advancedCategoryArray] objectAtIndex:row]];