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 "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>
28 * @class AINewMessagePanelPlugin
29 * @brief Component to provide the New Message window, which allows messaging an arbitrary contact.
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.
34 @implementation AINewMessagePanelPlugin
41 NSMenuItem *newMessageMenuItem = [[[NSMenuItem alloc] initWithTitle:[AILocalizedString(@"New Chat",nil) stringByAppendingEllipsis]
43 action:@selector(newMessage:)
44 keyEquivalent:@"n"] autorelease];
45 [[adium menuController] addMenuItem:newMessageMenuItem toLocation:LOC_File_New];
47 NSMenuItem *openChatMenuItem = [[[NSMenuItem alloc] initWithTitle:AILocalizedString(@"Open Chat",nil)
49 action:@selector(contextualOpenChat:)
50 keyEquivalent:@""] autorelease];
51 [[adium menuController] addContextualMenuItem:openChatMenuItem toLocation:Context_Contact_Message];
56 * @brief Show the prompt
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];
73 while ((account = [enumerator nextObject])) {
74 if ([account online]) {
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]];