Added `-[NSArray validateAsPropertyList]` and `-[NSDictionary validateAsPropertyList...
[adiumx.git] / Source / AINewMessagePanelPlugin.m
blobf6c7e54f2af14d4b6d92421d89c031ecb508d3bc
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 "AINewMessagePanelPlugin.h"
18 #import "AINewMessagePromptController.h"
19 #import <Adium/AIAccountControllerProtocol.h>
20 #import <Adium/AIChatControllerProtocol.h>
21 #import <Adium/AIInterfaceControllerProtocol.h>
22 #import <Adium/AIMenuControllerProtocol.h>
23 #import <Adium/AIListObject.h>
24 #import <AIUtilities/AIMenuAdditions.h>
25 #import <AIUtilities/AIStringAdditions.h>
27 /*!
28  * @class AINewMessagePanelPlugin
29  * @brief Component to provide the New Message window, which allows messaging an arbitrary contact.
30  *
31  * Also provides a New Chat contextual menu item for contacts in situations which don't have immediate access
32  * to opening a chat window.
33  */
34 @implementation AINewMessagePanelPlugin
36 /*!
37  * @brief Install
38  */
39 - (void)installPlugin
41         NSMenuItem *newMessageMenuItem = [[[NSMenuItem alloc] initWithTitle:[AILocalizedString(@"New Chat",nil) stringByAppendingEllipsis]
42                                                                                                                                  target:self 
43                                                                                                                                  action:@selector(newMessage:)
44                                                                                                                   keyEquivalent:@"n"] autorelease];
45         [[adium menuController] addMenuItem:newMessageMenuItem toLocation:LOC_File_New];
46         
47         NSMenuItem *openChatMenuItem = [[[NSMenuItem alloc] initWithTitle:AILocalizedString(@"Open Chat",nil)
48                                                                                                                                   target:self 
49                                                                                                                                   action:@selector(contextualOpenChat:)
50                                                                                                                    keyEquivalent:@""] autorelease]; 
51         [[adium menuController] addContextualMenuItem:openChatMenuItem toLocation:Context_Contact_Message];
52         
53 }       
55 /*!
56  * @brief Show the prompt
57  */
58 - (void)newMessage:(id)sender
60         [AINewMessagePromptController showPrompt];
63 - (BOOL)validateMenuItem:(id)menuItem
65         if ([menuItem action] == @selector(newMessage:)) {
66                 return [[adium accountController] oneOrMoreConnectedAccounts];
68         } else if ([menuItem action] == @selector(contextualOpenChat:)) {
69                 NSEnumerator *enumerator = [[[adium accountController] accountsCompatibleWithService:[[[adium menuController] currentContextMenuObject] service]] objectEnumerator];
70                 AIAccount        *account;
71                 BOOL             enable = NO;
73                 while ((account = [enumerator nextObject])) {
74                         if ([account online]) {
75                                 enable = YES;
76                                 break;
77                         }
78                 }
80                 return enable;
81         }
82         
83         return YES;
86 - (void)contextualOpenChat:(id)sender
88         //Open a new message with the contact
89         [[adium interfaceController] setActiveChat:[[adium chatController] openChatWithContact:(AIListContact *)[[adium menuController] currentContextMenuObject]
90                                                                                                                                                 onPreferredAccount:YES]];
93 @end