Fixed the accessibility hierarchy of the message view to allow the accessibility...
[adiumx.git] / Source / DCMessageContextDisplayPreferences.m
blob2fd88b2459e8596a88cbf97dbc4167d1101bc633
1 /* 
2  * Adium is the legal property of its developers, whose names are listed in the copyright file included
3  * with this source distribution.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6  * General Public License as published by the Free Software Foundation; either version 2 of the License,
7  * or (at your option) any later version.
8  * 
9  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10  * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
11  * Public License for more details.
12  * 
13  * You should have received a copy of the GNU General Public License along with this program; if not,
14  * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
15  */
17 #import "DCMessageContextDisplayPlugin.h"
18 #import "DCMessageContextDisplayPreferences.h"
19 #import <AIUtilities/AIDictionaryAdditions.h>
20 #import <AIUtilities/AIMenuAdditions.h>
21 #import <AIUtilities/AIImageAdditions.h>
23 typedef enum {
24         AIMessageHistory_Always = 0,
25         AIMessageHistory_HaveTalkedInInterval,
26         AIMessageHistory_HaveNotTalkedInInterval
27 } AIMessageHistoryDisplayPref;
29 @interface DCMessageContextDisplayPreferences (PRIVATE)
30 - (NSMenu *)intervalUnitsMenu;
31 @end
33 @implementation DCMessageContextDisplayPreferences
35 //Preference pane properties
36 - (AIPreferenceCategory)category{
37     return AIPref_Advanced;
39 - (NSString *)label{
40     return AILocalizedString(@"Message History",nil);
42 - (NSString *)nibName{
43     return @"MessageContextDisplayPrefs";
45 - (NSImage *)image{
46         return [NSImage imageNamed:@"pref-messagehistory" forClass:[self class]];
50 //Configure the preference view
51 - (void)viewDidLoad
53     NSDictionary        *preferenceDict = [[adium preferenceController] preferencesForGroup:PREF_GROUP_CONTEXT_DISPLAY];
54     
55     // Set the values of the controls and fields
56     [checkBox_showContext setState:[[preferenceDict objectForKey:KEY_DISPLAY_CONTEXT] boolValue]];
57         [textField_linesToDisplay setIntValue:[[preferenceDict objectForKey:KEY_DISPLAY_LINES] intValue]];
58         [textField_haveTalkedDays setIntValue:[[preferenceDict objectForKey:KEY_HAVE_TALKED_DAYS] intValue]];
59         [textField_haveNotTalkedDays setIntValue:[[preferenceDict objectForKey:KEY_HAVE_NOT_TALKED_DAYS] intValue]];
60         [matrix_radioButtons selectCellAtRow:[[preferenceDict objectForKey:KEY_DISPLAY_MODE] intValue] column:0];
61         
62         NSMenu  *intervalUnitsMenu = [self intervalUnitsMenu];
63         [menu_haveTalkedUnits setMenu:intervalUnitsMenu];
64         [menu_haveNotTalkedUnits setMenu:[[intervalUnitsMenu copy] autorelease]];
66         [menu_haveTalkedUnits selectItemAtIndex:[[preferenceDict objectForKey:KEY_HAVE_TALKED_UNITS] intValue]];
67         [menu_haveNotTalkedUnits selectItemAtIndex:[[preferenceDict objectForKey:KEY_HAVE_NOT_TALKED_UNITS] intValue]];
69         [self configureControlDimming];
72 - (IBAction)changePreference:(id)sender
74         if ( sender == checkBox_showContext ) {
75                 [[adium preferenceController] setPreference:[NSNumber numberWithBool:[sender state]]
76                                                                                          forKey:KEY_DISPLAY_CONTEXT
77                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
78                 [self configureControlDimming];
79                 
80         } else if ( sender == textField_linesToDisplay ) {
81                 
82                 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[sender intValue]]
83                                                                                          forKey:KEY_DISPLAY_LINES
84                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
85         } else if ( sender == textField_haveTalkedDays ) {
86                 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[sender intValue]]
87                                                                                          forKey:KEY_HAVE_TALKED_DAYS
88                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
89         } else if (sender == textField_haveNotTalkedDays ) {
90                 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[sender intValue]]
91                                                                                          forKey:KEY_HAVE_NOT_TALKED_DAYS
92                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
93         } else if ( sender == matrix_radioButtons ) {
94                 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[sender selectedRow]]
95                                                                                          forKey:KEY_DISPLAY_MODE
96                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
97                 [self configureControlDimming];
98         } else if ( sender == menu_haveTalkedUnits ) {
99                 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[sender indexOfSelectedItem]]
100                                                                                          forKey:KEY_HAVE_TALKED_UNITS
101                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
102         } else if ( sender == menu_haveNotTalkedUnits ) {
103                 [[adium preferenceController] setPreference:[NSNumber numberWithInt:[sender indexOfSelectedItem]]
104                                                                                          forKey:KEY_HAVE_NOT_TALKED_UNITS
105                                                                                           group:PREF_GROUP_CONTEXT_DISPLAY];
106         }
107         
110 - (void)configureControlDimming
112         int             selectedRow = [matrix_radioButtons selectedRow];
113         BOOL    contextEnabled =[checkBox_showContext state];
114                 
115         [textField_linesToDisplay setEnabled:contextEnabled];
116         [stepper_linesToDisplay setEnabled:contextEnabled];
117         
118         [textField_haveTalkedDays setEnabled:contextEnabled];
119         [stepper_haveTalkedDays setEnabled:contextEnabled];
120         [textField_haveNotTalkedDays setEnabled:contextEnabled];
121         [stepper_haveNotTalkedDays setEnabled:contextEnabled];
122         
123         [menu_haveTalkedUnits setEnabled:contextEnabled];
124         [menu_haveNotTalkedUnits setEnabled:contextEnabled];
125         
126         [matrix_radioButtons setEnabled:contextEnabled];
127         
128         if ( [checkBox_showContext state] ) {
129                 switch ( selectedRow ) {
130                         case AIMessageHistory_Always:
131                                 [textField_haveTalkedDays setEnabled:NO];
132                                 [stepper_haveTalkedDays setEnabled:NO];
133                                 [textField_haveNotTalkedDays setEnabled:NO];
134                                 [stepper_haveNotTalkedDays setEnabled:NO];
135                                 [menu_haveTalkedUnits setEnabled:NO];
136                                 [menu_haveNotTalkedUnits setEnabled:NO];
137                                 break;
138                                 
139                         case AIMessageHistory_HaveTalkedInInterval:
140                                 [textField_haveTalkedDays setEnabled:YES];
141                                 [stepper_haveTalkedDays setEnabled:YES];
142                                 [textField_haveNotTalkedDays setEnabled:NO];
143                                 [stepper_haveNotTalkedDays setEnabled:NO];
144                                 [menu_haveTalkedUnits setEnabled:YES];
145                                 [menu_haveNotTalkedUnits setEnabled:NO];
146                                 break;
147                                 
148                         case AIMessageHistory_HaveNotTalkedInInterval:
149                                 [textField_haveTalkedDays setEnabled:NO];
150                                 [stepper_haveTalkedDays setEnabled:NO];
151                                 [textField_haveNotTalkedDays setEnabled:YES];
152                                 [stepper_haveNotTalkedDays setEnabled:YES];
153                                 [menu_haveTalkedUnits setEnabled:NO];
154                                 [menu_haveNotTalkedUnits setEnabled:YES];
155                 }
156         }
160 @end