Now, groups can retrieve a list of the contacts in that group. I probably should...
[adiumx.git] / Source / AIAdvancedPreferences.m
blobd70b0c05c3b29cd3f57539a2693d24d1491e3a32
1 //
2 //  AIAdvancedPreferences.m
3 //  Adium
4 //
5 //  Created by Evan Schoenberg on 4/7/07.
6 //
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;
22 @end
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];
30         
31         return [super preferencePane];
34 - (NSString *)paneIdentifier
36         return @"Advanced";
38 - (NSString *)paneName{
39         return AILocalizedString(@"Advanced", "Title of the messages preferences");
41 - (NSString *)nibName{
42     return @"AdvancedPreferences";
44 - (NSImage *)paneIcon
46         return [NSImage imageNamed:@"pref-advanced"];
49 /*!
50  * @brief Configure the preference view
51  */
52 - (void)viewDidLoad
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];
64 - (void)viewWillClose
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];
74         
75         //Close open panes
76         [loadedAdvancedPanes makeObjectsPerformSelector:@selector(closeView)];
77         [modularPane removeAllSubviews];
78         [loadedAdvancedPanes release]; loadedAdvancedPanes = nil;
79         [_advancedCategoryArray release]; _advancedCategoryArray = nil;
82 /*!
83 * @brief Returns an array containing all the available advanced preference views
84  */
85 - (NSArray *)advancedCategoryArray
87     if (!_advancedCategoryArray) {
88         _advancedCategoryArray = [[[[adium preferenceController] advancedPaneArray] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] retain];
89     }
90     
91     return _advancedCategoryArray;
94 /*!
95  * @brief Displays the passed AIPreferencePane in the advanced preferences tab of our window
96  */
97 - (void)configureAdvancedPreferencesForPane:(AIAdvancedPreferencePane *)preferencePane
99         //Close open panes
100         [loadedAdvancedPanes makeObjectsPerformSelector:@selector(closeView)];
101         [modularPane removeAllSubviews];
102         [loadedAdvancedPanes release]; loadedAdvancedPanes = nil;
103         
104         //Load new panes
105         if (preferencePane) {
106                 loadedAdvancedPanes = [[NSArray arrayWithObject:preferencePane] retain];
107                 [modularPane setPanes:loadedAdvancedPanes];
108         }
112 * @brief Configure the advanced preference category table view
113  */
114 - (void)_configureAdvancedPreferencesTable
116     AIImageTextCell                     *cell;
117         
118     //Configure our tableView
119     cell = [[AIImageTextCell alloc] init];
120     [cell setFont:[NSFont systemFontOfSize:12]];
121     [[tableView_categories tableColumnWithIdentifier:@"description"] setDataCell:cell];
122         [cell release];
123         
124     [[tableView_categories enclosingScrollView] setAutohidesScrollers:YES];
125         [tableView_categories setDrawsGradientSelection:YES];
126         
127         //This is the Mail.app source list background color... which differs from the iTunes one.
128         [tableView_categories setBackgroundColor:[NSColor colorWithCalibratedRed:.9059
129                                                                                                                                            green:.9294
130                                                                                                                                                 blue:.9647
131                                                                                                                                            alpha:1.0]];
132         
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;
137         
138         [tableView_categories selectRow:row byExtendingSelection:NO];
139         [self tableViewSelectionDidChange:nil];
143 * @brief Return the number of accounts
144  */
145 - (int)numberOfRowsInTableView:(NSTableView *)tableView
147         return [[self advancedCategoryArray] count];
151 * @brief Return the account description or image
152  */
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
160  */
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
169  */
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]];
176         }
179 @end