Changeset 14701
- Timestamp:
- 01/01/2006 08:06:36 PM (3 years ago)
- Files:
-
- trunk/Source/AIContactController.h (modified) (3 diffs)
- trunk/Source/AIContactController.m (modified) (11 diffs)
- trunk/Source/AIOfflineContactHidingPlugin.h (modified) (1 diff)
- trunk/Source/AIOfflineContactHidingPlugin.m (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Source/AIContactController.h
r13820 r14701 75 75 @end 76 76 77 @interface AIContactController : AIObject <AIController > {77 @interface AIContactController : AIObject <AIController, AIListObjectObserver> { 78 78 //Contacts and metaContacts 79 79 NSMutableDictionary *contactDict; … … 84 84 AIListGroup *contactList; 85 85 NSMutableDictionary *groupDict; 86 AIListGroup *strangerGroup;87 86 BOOL useContactListGroups; 88 NSMenuItem *showGroupsMenuItem; 87 NSMenuItem *menuItem_showGroups; 88 BOOL useOfflineGroup; 89 NSMenuItem *menuItem_useOfflineGroup; 89 90 90 91 //Status and Attribute updates … … 125 126 - (NSMenu *)menuOfAllGroupsInGroup:(AIListGroup *)inGroup withTarget:(id)target; 126 127 - (NSSet *)allContactsWithService:(AIService *)service UID:(NSString *)inUID existingOnly:(BOOL)existingOnly; 128 - (AIListGroup *)offlineGroup; 127 129 128 130 - (AIMetaContact *)groupUIDs:(NSArray *)UIDsArray forServices:(NSArray *)servicesArray; trunk/Source/AIContactController.m
r14428 r14701 77 77 78 78 #define KEY_HIDE_CONTACT_LIST_GROUPS @"Hide Contact List Groups" 79 #define KEY_USE_OFFLINE_GROUP @"Use Offline Group" 80 #define KEY_SHOW_OFFLINE_CONTACTS @"Show Offline Contacts" 81 79 82 #define PREF_GROUP_CONTACT_LIST_DISPLAY @"Contact List Display" 80 83 … … 121 124 122 125 - (void)_addMenuItemsFromArray:(NSArray *)contactArray toMenu:(NSMenu *)contactMenu target:(id)target offlineContacts:(BOOL)offlineContacts; 126 127 - (void)_performChangeOfUseOfflineGroup; 128 123 129 @end 124 130 … … 175 181 [self loadContactList]; 176 182 [self sortContactList]; 183 184 [[adium preferenceController] registerPreferenceObserver:self forGroup:PREF_GROUP_CONTACT_LIST_DISPLAY]; 177 185 } 178 186 … … 186 194 - (void)dealloc 187 195 { 196 [[adium preferenceController] unregisterPreferenceObserver:self]; 197 188 198 [contactList release]; 189 199 [contactObservers release]; contactObservers = nil; … … 496 506 AIListGroup *targetGroup; 497 507 498 targetGroup = (useContactListGroups ? [self groupWithUID:remoteGroupName] : contactList); 508 targetGroup = (useContactListGroups ? 509 ((useOfflineGroup && ![inContact online]) ? [self offlineGroup] : [self groupWithUID:remoteGroupName]) : 510 contactList); 499 511 500 512 [targetGroup addObject:containingObject]; … … 507 519 AIListGroup *localGroup; 508 520 509 localGroup = (useContactListGroups ? [self groupWithUID:remoteGroupName] : contactList); 521 localGroup = (useContactListGroups ? 522 ((useOfflineGroup && ![inContact online]) ? [self offlineGroup] : [self groupWithUID:remoteGroupName]) : 523 contactList); 524 510 525 [self _moveContactLocally:inContact 511 526 toGroup:localGroup]; … … 617 632 { 618 633 if (inFlag != useContactListGroups) { 619 620 634 useContactListGroups = inFlag; 621 635 … … 682 696 683 697 //Show offline contacts menu item 684 showGroupsMenuItem= [[NSMenuItem alloc] initWithTitle:SHOW_GROUPS_MENU_TITLE698 menuItem_showGroups = [[NSMenuItem alloc] initWithTitle:SHOW_GROUPS_MENU_TITLE 685 699 target:self 686 700 action:@selector(toggleShowGroups:) 687 701 keyEquivalent:@""]; 688 [ showGroupsMenuItemsetState:useContactListGroups];689 [[adium menuController] addMenuItem: showGroupsMenuItemtoLocation:LOC_View_Toggles];702 [menuItem_showGroups setState:useContactListGroups]; 703 [[adium menuController] addMenuItem:menuItem_showGroups toLocation:LOC_View_Toggles]; 690 704 691 705 //Toolbar … … 710 724 //Flip-flop. 711 725 useContactListGroups = !useContactListGroups; 712 [ showGroupsMenuItemsetState:useContactListGroups];726 [menuItem_showGroups setState:useContactListGroups]; 713 727 714 728 //Update the contact list. Do it on the next run loop for better menu responsiveness, as it may be a lengthy procedure. … … 726 740 @"togglegroups") 727 741 forClass:[self class]]]; 742 } 743 744 - (BOOL)useOfflineGroup 745 { 746 return useOfflineGroup; 747 } 748 749 - (void)setUseOfflineGroup:(BOOL)inFlag 750 { 751 if (inFlag != useOfflineGroup) { 752 useOfflineGroup = inFlag; 753 754 if (useOfflineGroup) { 755 [self registerListObjectObserver:self]; 756 } else { 757 [self updateAllListObjectsForObserver:self]; 758 [self unregisterListObjectObserver:self]; 759 } 760 } 761 } 762 763 - (AIListGroup *)offlineGroup 764 { 765 return [self groupWithUID:AILocalizedString(@"Offline", "Name of offline group")]; 728 766 } 729 767 … … 1232 1270 return listObject; 1233 1271 } 1272 1273 #pragma mark Preference observing 1274 /*! 1275 * @brief Preferences changed 1276 */ 1277 - (void)preferencesChangedForGroup:(NSString *)group key:(NSString *)key 1278 object:(AIListObject *)object preferenceDict:(NSDictionary *)prefDict firstTime:(BOOL)firstTime 1279 { 1280 if (firstTime || 1281 [key isEqualToString:KEY_USE_OFFLINE_GROUP]) { 1282 1283 [self setUseOfflineGroup:[[prefDict objectForKey:KEY_USE_OFFLINE_GROUP] boolValue]]; 1284 } 1285 } 1286 1287 - (NSSet *)updateListObject:(AIListObject *)inObject keys:(NSSet *)inModifiedKeys silent:(BOOL)silent 1288 { 1289 if (!inModifiedKeys || 1290 [inModifiedKeys containsObject:@"Online"]) { 1291 1292 if ([inObject isKindOfClass:[AIListContact class]]) { 1293 //If this contact is not its own parent contact, don't bother since we'll get an update for the parent if appropriate 1294 if (inObject == [(AIListContact *)inObject parentContact]) { 1295 if (useOfflineGroup) { 1296 AIListObject *containingObject = [inObject containingObject]; 1297 1298 if ([inObject online] && 1299 (containingObject == [self offlineGroup])) { 1300 [inObject restoreGrouping]; 1301 1302 } else if (![inObject online] && 1303 containingObject && 1304 (containingObject != [self offlineGroup])) { 1305 [self _moveContactLocally:inObject 1306 toGroup:[self offlineGroup]]; 1307 } 1308 1309 } else { 1310 if ([inObject containingObject] == [self offlineGroup]) { 1311 [inObject restoreGrouping]; 1312 } 1313 } 1314 } 1315 } 1316 } 1317 1318 return nil; 1319 } 1320 1234 1321 //Contact Info -------------------------------------------------------------------------------- 1235 1322 #pragma mark Contact Info trunk/Source/AIOfflineContactHidingPlugin.h
r9828 r14701 20 20 21 21 @interface AIOfflineContactHidingPlugin : AIPlugin <AIListObjectObserver> { 22 NSMenuItem *showOfflineMenuItem; 22 NSMenuItem *menuItem_showOffline; 23 NSMenuItem *menuItem_useOfflineGroup; 24 23 25 BOOL showOfflineContacts; 24 26 BOOL useContactListGroups; 25 27 BOOL useOfflineGroup; 26 28 } 27 29 trunk/Source/AIOfflineContactHidingPlugin.m
r13563 r14701 30 30 #define SHOW_OFFLINE_MENU_TITLE AILocalizedString(@"Show Offline Contacts",nil) 31 31 #define KEY_SHOW_OFFLINE_CONTACTS @"Show Offline Contacts" 32 33 #define USE_OFFLINE_GROUP_MENU_TITLE AILocalizedString(@"Show Offline Group",nil) 34 #define KEY_USE_OFFLINE_GROUP @"Use Offline Group" 35 32 36 #define OFFLINE_CONTACTS_IDENTIFER @"OfflineContacts" 33 37 #define KEY_HIDE_CONTACT_LIST_GROUPS @"Hide Contact List Groups" … … 50 54 { 51 55 //Show offline contacts menu item 52 showOfflineMenuItem= [[NSMenuItem alloc] initWithTitle:SHOW_OFFLINE_MENU_TITLE56 menuItem_showOffline = [[NSMenuItem alloc] initWithTitle:SHOW_OFFLINE_MENU_TITLE 53 57 target:self 54 58 action:@selector(toggleOfflineContactsMenu:) 55 59 keyEquivalent:@"H"]; 56 [[adium menuController] addMenuItem:showOfflineMenuItem toLocation:LOC_View_Toggles]; 57 60 [[adium menuController] addMenuItem:menuItem_showOffline toLocation:LOC_View_Toggles]; 61 62 menuItem_useOfflineGroup = [[NSMenuItem alloc] initWithTitle:USE_OFFLINE_GROUP_MENU_TITLE 63 target:self 64 action:@selector(toggleUseOfflineGroup:) 65 keyEquivalent:@""]; 66 [[adium menuController] addMenuItem:menuItem_useOfflineGroup toLocation:LOC_View_Toggles]; 67 58 68 //Register preference observer first so values will be correct for the following calls 59 69 [[adium preferenceController] registerPreferenceObserver:self forGroup:PREF_GROUP_CONTACT_LIST_DISPLAY]; … … 94 104 - (void)dealloc 95 105 { 96 [ showOfflineMenuItem release]; showOfflineMenuItem= nil;106 [menuItem_showOffline release]; menuItem_showOffline = nil; 97 107 [[NSNotificationCenter defaultCenter] removeObserver:self]; 98 108 … … 108 118 showOfflineContacts = [[prefDict objectForKey:KEY_SHOW_OFFLINE_CONTACTS] boolValue]; 109 119 useContactListGroups = ![[prefDict objectForKey:KEY_HIDE_CONTACT_LIST_GROUPS] boolValue]; 120 useOfflineGroup = [[prefDict objectForKey:KEY_USE_OFFLINE_GROUP] boolValue]; 110 121 111 122 if (firstTime) { … … 122 133 123 134 //Update our menu to reflect the current preferences 124 [showOfflineMenuItem setState:showOfflineContacts]; 135 [menuItem_showOffline setState:showOfflineContacts]; 136 [menuItem_useOfflineGroup setState:useOfflineGroup]; 125 137 } 126 138 … … 164 176 */ 165 177 - (NSSet *)updateListObject:(AIListObject *)inObject keys:(NSSet *)inModifiedKeys silent:(BOOL)silent 166 { 178 { 167 179 if (inModifiedKeys == nil || 168 180 [inModifiedKeys containsObject:@"Online"] || … … 190 202 191 203 [inObject setVisible:((useContactListGroups) && 192 ([(AIListGroup *)inObject visibleCount] > 0 || newObject))]; 204 ([(AIListGroup *)inObject visibleCount] > 0 || newObject) && 205 (useOfflineGroup || ((AIListGroup *)inObject != [[adium contactController] offlineGroup])))]; 193 206 } 194 207 } … … 197 210 } 198 211 212 #pragma mark Offline group 213 214 - (IBAction)toggleUseOfflineGroup:(id)sender 215 { 216 //Store the preference 217 [[adium preferenceController] setPreference:[NSNumber numberWithBool:!useOfflineGroup] 218 forKey:KEY_USE_OFFLINE_GROUP 219 group:PREF_GROUP_CONTACT_LIST_DISPLAY]; 220 } 221 222 - (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem 223 { 224 if (menuItem == menuItem_useOfflineGroup) { 225 return (useContactListGroups && showOfflineContacts); 226 } 227 228 return YES; 229 } 199 230 @end