2 * Adium is the legal property of its developers, whose names are listed in the copyright file included
3 * with this source distribution.
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.
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.
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.
17 #import "DCMessageContextDisplayPlugin.h"
18 #import "DCMessageContextDisplayPreferences.h"
19 #import <AIUtilities/AIDictionaryAdditions.h>
20 #import <AIUtilities/AIMenuAdditions.h>
21 #import <AIUtilities/AIImageAdditions.h>
24 AIMessageHistory_Always = 0,
25 AIMessageHistory_HaveTalkedInInterval,
26 AIMessageHistory_HaveNotTalkedInInterval
27 } AIMessageHistoryDisplayPref;
29 @interface DCMessageContextDisplayPreferences (PRIVATE)
30 - (NSMenu *)intervalUnitsMenu;
33 @implementation DCMessageContextDisplayPreferences
35 //Preference pane properties
36 - (AIPreferenceCategory)category{
37 return AIPref_Advanced;
40 return AILocalizedString(@"Message History",nil);
42 - (NSString *)nibName{
43 return @"MessageContextDisplayPrefs";
46 return [NSImage imageNamed:@"pref-messagehistory" forClass:[self class]];
50 //Configure the preference view
53 NSDictionary *preferenceDict = [[adium preferenceController] preferencesForGroup:PREF_GROUP_CONTEXT_DISPLAY];
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];
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];
80 } else if ( sender == textField_linesToDisplay ) {
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];
110 - (void)configureControlDimming
112 int selectedRow = [matrix_radioButtons selectedRow];
113 BOOL contextEnabled =[checkBox_showContext state];
115 [textField_linesToDisplay setEnabled:contextEnabled];
116 [stepper_linesToDisplay setEnabled:contextEnabled];
118 [textField_haveTalkedDays setEnabled:contextEnabled];
119 [stepper_haveTalkedDays setEnabled:contextEnabled];
120 [textField_haveNotTalkedDays setEnabled:contextEnabled];
121 [stepper_haveNotTalkedDays setEnabled:contextEnabled];
123 [menu_haveTalkedUnits setEnabled:contextEnabled];
124 [menu_haveNotTalkedUnits setEnabled:contextEnabled];
126 [matrix_radioButtons setEnabled:contextEnabled];
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];
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];
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];