Adium

Changeset 14725

Show
Ignore:
Timestamp:
01/02/2006 10:38:47 AM (3 years ago)
Author:
evands
Message:

Added two checkboxes to the advanced Messages preferences to control dock icon badging and animation on new messages.

Fixes #541.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Plugins/Dock Icon Badging/AIDockBadger.h

    r12926 r14725  
    2626        NSImage                                         *badgeOne, *badgeTwo; 
    2727        int                                                     lastUnviewedContentCount; 
     28         
     29        BOOL                                            shouldBadge; 
    2830} 
    2931 
  • trunk/Plugins/Dock Icon Badging/AIDockBadger.m

    r12987 r14725  
    3434 
    3535@interface AIDockBadger (PRIVATE) 
     36- (void)removeOverlay; 
    3637- (void)_setOverlay; 
    3738@end 
     
    4849        overlayState = nil; 
    4950 
    50         //Register as a chat observer (for unviewed content) 
    51         [[adium chatController] registerChatObserver:self]; 
    52          
    53         [[adium notificationCenter] addObserver:self 
    54                                                                    selector:@selector(contentAdded:) 
    55                                                                            name:Content_WillReceiveContent 
    56                                                                          object:nil]; 
    57          
    58         [[adium notificationCenter] addObserver:self 
    59                                                                    selector:@selector(chatClosed:) 
    60                                                                            name:Chat_WillClose 
    61                                                                          object:nil]; 
    62         //Prefs 
    63 //      [[adium preferenceController] registerPreferenceObserver:self forGroup:PREF_GROUP_LIST_THEME]; 
     51        //Register our default preferences 
     52    [preferenceController registerDefaults:[NSDictionary dictionaryNamed:@"BadgerDefaults" 
     53                                                                                                                                forClass:[self class]]  
     54                                      forGroup:PREF_GROUP_APPEARANCE]; 
     55 
     56        //Observe pref changes 
     57        [[adium preferenceController] registerPreferenceObserver:self forGroup:PREF_GROUP_APPEARANCE]; 
    6458} 
    6559 
     
    9488                           afterDelay:0]; 
    9589} 
     90 
     91#pragma mark Preference observing 
     92- (void)preferencesChangedForGroup:(NSString *)group key:(NSString *)key 
     93                                                        object:(AIListObject *)object preferenceDict:(NSDictionary *)prefDict firstTime:(BOOL)firstTime 
     94{ 
     95        if (!key || [key isEqualToString:KEY_BADGE_DOCK_ICON]) { 
     96                BOOL    newShouldBadge = [[prefDict objectForKey:KEY_BADGE_DOCK_ICON] boolValue]; 
     97                if (newShouldBadge != shouldBadge) { 
     98                        shouldBadge = newShouldBadge; 
     99                         
     100                        if (shouldBadge) { 
     101                                //Register as a chat observer (for unviewed content) 
     102                                [[adium chatController] registerChatObserver:self]; 
     103                                 
     104                                [[adium notificationCenter] addObserver:self 
     105                                                                                           selector:@selector(contentAdded:) 
     106                                                                                                   name:Content_WillReceiveContent 
     107                                                                                                 object:nil]; 
     108                                 
     109                                [[adium notificationCenter] addObserver:self 
     110                                                                                           selector:@selector(chatClosed:) 
     111                                                                                                   name:Chat_WillClose 
     112                                                                                                 object:nil]; 
     113                                 
     114                        } else { 
     115                                //Remove any existing overlay 
     116                                [self removeOverlay]; 
     117                                 
     118                                //Stop observing 
     119                                [[adium chatController] unregisterChatObserver:self]; 
     120                                [[adium notificationCenter] removeObserver:self]; 
     121                        } 
     122                } 
     123        } 
     124}        
    96125 
    97126#pragma mark Work methods 
     
    140169} 
    141170 
    142 // 
     171/* 
     172 * @brief Remove any existing dock overlay 
     173 */ 
     174- (void)removeOverlay 
     175
     176        if (overlayState) { 
     177                [[adium dockController] removeIconStateNamed:@"UnviewedContentCount"]; 
     178                [overlayState release]; overlayState = nil; 
     179        } 
     180
     181 
     182/* 
     183 * @brief Update our overlay to the current unviewed content count 
     184 */ 
    143185- (void)_setOverlay 
    144186{ 
     
    147189        if (contentCount != lastUnviewedContentCount) { 
    148190                //Remove & release the current overlay state 
    149                 if (overlayState) { 
    150                         [[adium dockController] removeIconStateNamed:@"UnviewedContentCount"]; 
    151                         [overlayState release]; overlayState = nil; 
    152                 } 
     191                [self removeOverlay]; 
    153192 
    154193                //Create & set the new overlay state 
  • trunk/Plugins/Dual Window Interface/ESDualWindowMessageAdvancedPreferences.h

    r11031 r14725  
    2626 
    2727@interface ESDualWindowMessageAdvancedPreferences : AIPreferencePane { 
     28    IBOutlet    NSButton                *checkBox_animateDockIcon; 
     29    IBOutlet    NSButton                *checkBox_badgeDockIcon; 
     30 
    2831    IBOutlet    NSButton                *autohide_tabBar; 
    2932    IBOutlet    NSButton                *checkBox_allowInactiveClosing; 
  • trunk/Plugins/Dual Window Interface/ESDualWindowMessageAdvancedPreferences.m

    r12821 r14725  
    2323#import <AIUtilities/AIImageAdditions.h> 
    2424 
    25 #warning crosslink 
     25#import "AIDockController.h" 
    2626#import "AIInterfaceController.h" 
    2727#import "AIPreferenceWindowController.h" 
     
    8585                                                                                         forKey:KEY_WEBKIT_TIME_STAMP_FORMAT 
    8686                                                                                          group:PREF_GROUP_WEBKIT_MESSAGE_DISPLAY]; 
     87 
     88        } else if (sender == checkBox_animateDockIcon) { 
     89                [[adium preferenceController] setPreference:[NSNumber numberWithBool:[sender state]] 
     90                                                                                         forKey:KEY_ANIMATE_DOCK_ICON 
     91                                                                                          group:PREF_GROUP_APPEARANCE]; 
     92                 
     93        }  else if (sender == checkBox_badgeDockIcon) { 
     94                [[adium preferenceController] setPreference:[NSNumber numberWithBool:[sender state]] 
     95                                                                                         forKey:KEY_BADGE_DOCK_ICON 
     96                                                                                          group:PREF_GROUP_APPEARANCE]; 
     97                 
    8798        } 
    8899         
     
    105116    NSDictionary        *prefDict; 
    106117        int                             menuIndex; 
     118 
     119        prefDict = [[adium preferenceController] preferencesForGroup:PREF_GROUP_APPEARANCE]; 
     120        [checkBox_animateDockIcon setState:[[prefDict objectForKey:KEY_ANIMATE_DOCK_ICON] boolValue]]; 
     121        [checkBox_badgeDockIcon setState:[[prefDict objectForKey:KEY_BADGE_DOCK_ICON] boolValue]]; 
    107122 
    108123        prefDict = [[adium preferenceController] preferencesForGroup:PREF_GROUP_DUAL_WINDOW_INTERFACE]; 
  • trunk/Resources/English.lproj/DualWindowMessageAdvanced.nib/classes.nib

    r11031 r14725  
    4141                "autohide_tabBar" = NSButton;  
    4242                "checkBox_allowInactiveClosing" = NSButton;  
     43                "checkBox_animateDockIcon" = NSButton;  
     44                "checkBox_badgeDockIcon" = NSButton;  
    4345                "checkBox_customNameFormatting" = NSButton;  
    4446                "checkBox_hide" = NSButton;  
  • trunk/Source/AIDockController.h

    r12834 r14725  
    2020#define Dock_IconDidChange                      @"Dock_IconDidChange" 
    2121 
     22#define PREF_GROUP_APPEARANCE           @"Appearance" 
     23 
    2224#define KEY_ACTIVE_DOCK_ICON            @"Dock Icon" 
    2325#define FOLDER_DOCK_ICONS                       @"Dock Icons" 
     26 
     27#define KEY_ANIMATE_DOCK_ICON   @"Animate Dock Icon on Unread Messages" 
     28#define KEY_BADGE_DOCK_ICON             @"Badge Dock Icon on Unread Messages" 
    2429 
    2530@class AIIconState; 
  • trunk/Source/AIDockController.m

    r13813 r14725  
    1717// $Id$ 
    1818 
    19 #import "AIAppearancePreferencesPlugin.h" 
    2019#import "AIDockController.h" 
    2120#import "AIInterfaceController.h" 
  • trunk/Source/AIDockUnviewedContentPlugin.h

    r13421 r14725  
    2121@interface AIDockUnviewedContentPlugin : AIPlugin <AIChatObserver> { 
    2222    NSMutableArray              *unviewedObjectsArray; 
    23     BOOL                        unviewedState; 
    24  
     23    BOOL                                unviewedState; 
     24         
     25        BOOL                            animateDockIcon; 
    2526} 
    2627 
  • trunk/Source/AIDockUnviewedContentPlugin.m

    r13421 r14725  
    1919#import "AIContentController.h" 
    2020#import "AIDockController.h" 
     21#import "AIPreferenceController.h" 
    2122#import <AIUtilities/AIArrayAdditions.h> 
    2223#import <Adium/AIChat.h> 
     24 
     25@interface AIDockUnviewedContentPlugin (PRIVATE) 
     26- (void)removeAlert; 
     27@end 
    2328 
    2429/* 
     
    3742    unviewedState = NO; 
    3843 
    39     //Register as a chat observer (So we can catch the unviewed content status flag) 
    40     [[adium chatController] registerChatObserver:self]; 
     44        //Register our default preferences 
     45    [preferenceController registerDefaults:[NSDictionary dictionaryNamed:@"DockUnviewedContentDefaults" 
     46                                                                                                                                forClass:[self class]]  
     47                                      forGroup:PREF_GROUP_APPEARANCE]; 
    4148         
    42         [[adium notificationCenter] addObserver:self 
    43                                                                    selector:@selector(chatWillClose:) 
    44                                                                            name:Chat_WillClose object:nil]; 
     49        //Observe pref changes 
     50        [[adium preferenceController] registerPreferenceObserver:self forGroup:PREF_GROUP_APPEARANCE]; 
    4551} 
    4652 
     
    5460} 
    5561 
     62#pragma mark Preference observing 
     63- (void)preferencesChangedForGroup:(NSString *)group key:(NSString *)key 
     64                                                        object:(AIListObject *)object preferenceDict:(NSDictionary *)prefDict firstTime:(BOOL)firstTime 
     65{ 
     66        if (!key || [key isEqualToString:KEY_ANIMATE_DOCK_ICON]) { 
     67                BOOL newAnimateDockIcon = [[prefDict objectForKey:KEY_ANIMATE_DOCK_ICON] boolValue]; 
     68 
     69                if (newAnimateDockIcon != animateDockIcon) { 
     70                        animateDockIcon = newAnimateDockIcon; 
     71                         
     72                        if (animateDockIcon) { 
     73                                //Register as a chat observer (So we can catch the unviewed content status flag) 
     74                                [[adium chatController] registerChatObserver:self]; 
     75                                 
     76                                [[adium notificationCenter] addObserver:self 
     77                                                                                           selector:@selector(chatWillClose:) 
     78                                                                                                   name:Chat_WillClose object:nil]; 
     79                                 
     80                        } else { 
     81                                [self removeAlert]; 
     82 
     83                                [[adium chatController] unregisterChatObserver:self]; 
     84                                [[adium notificationCenter] removeObserver:self]; 
     85                        } 
     86                } 
     87        } 
     88} 
    5689/* 
    5790 * @brief Chat was updated 
     
    81114                //If there are no more contacts with unviewed content, stop animating the dock 
    82115                if ([unviewedObjectsArray count] == 0 && unviewedState) { 
    83                     [[adium dockController] removeIconStateNamed:@"Alert"]; 
    84                     unviewedState = NO; 
     116                                        [self removeAlert]; 
    85117                } 
    86118            } 
     
    89121 
    90122    return nil; 
     123} 
     124 
     125/*! 
     126 * @brief Remove any existing alert state 
     127 */ 
     128- (void)removeAlert 
     129{ 
     130        [[adium dockController] removeIconStateNamed:@"Alert"]; 
     131        unviewedState = NO; 
    91132} 
    92133 
     
    105146                //If there are no more contacts with unviewed content, stop animating the dock 
    106147                if ([unviewedObjectsArray count] == 0 && unviewedState) { 
    107                         [[adium dockController] removeIconStateNamed:@"Alert"]; 
    108                         unviewedState = NO; 
     148                        [self removeAlert]; 
    109149                } 
    110150        }