William Bowling is sharing code with you
Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.
Don't show this again1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | #import "AINewBookmarkWindowController.h"
#import "AINewGroupWindowController.h"
#import <Adium/AIAccountControllerProtocol.h>
#import <Adium/AIContactControllerProtocol.h>
#import <Adium/AIInterfaceControllerProtocol.h>
#import <Adium/AIListGroup.h>
#import <Adium/AIChat.h>
#import <Adium/AIServiceMenu.h>
#import <AIUtilities/AIMenuAdditions.h>
#import <AIUtilities/AIStringAdditions.h>
#import <AIUtilities/AIPopUpButtonAdditions.h>
#define ADD_BOOKMARK_NIB @"AddBookmark"
#define DEFAULT_GROUP_NAME AILocalizedString(@"Contacts",nil)
@interface AINewBookmarkWindowController ()
- (id)initWithWindowNibName:(NSString *)nibName forChat:(AIChat *)inChat notifyingTarget:(id)inTarget;
- (void)buildGroupMenu;
@end
@implementation AINewBookmarkWindowController
/*!
* @brief Prompt for a new bookmark.
*
* @param inChat The chat to bookmark
* @param parentWindow Window on which to show as a sheet. Pass nil for a panel prompt.
* @param inTarget The target to send createBookmarkForChat:withName:inGroup: upon success
*
* @result An AINewBookmarkWindowController which will manage its own memory
*/
+ (AINewBookmarkWindowController *)promptForNewBookmarkForChat:(AIChat *)inChat onWindow:(NSWindow*)parentWindow notifyingTarget:(id)inTarget
{
AINewBookmarkWindowController *newBookmarkWindowController = [[self alloc] initWithWindowNibName:ADD_BOOKMARK_NIB
forChat:inChat
notifyingTarget:inTarget];
if(parentWindow) {
[NSApp beginSheet:[newBookmarkWindowController window]
modalForWindow:parentWindow
modalDelegate:newBookmarkWindowController
didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo:nil];
} else {
[newBookmarkWindowController showWindow:nil];
[[newBookmarkWindowController window] makeKeyAndOrderFront:nil];
}
return newBookmarkWindowController;
}
- (id)initWithWindowNibName:(NSString *)nibName forChat:(AIChat *)inChat notifyingTarget:(id)inTarget
{
if ((self = [super initWithWindowNibName:nibName])) {
chat = [inChat retain];
target = [inTarget retain];
}
return self;
}
- (void)dealloc
{
[chat release];
[target release];
[super dealloc];
}
/*!
* @brief didEnd selector for the sheet created above, dismisses the sheet
*/
-(void)sheetDidEnd:(NSWindow*)sheet returnCode:(NSInteger)returnCode contextInfo:(void*)contextInfo
{
[sheet orderOut:nil];
}
/*!
* @name windowDidLoad
* @brief the sheet finished loading, populate the group menu with contactlist's groups
*/
-(void)windowDidLoad
{
[self buildGroupMenu];
if (chat) {
[textField_name setStringValue:chat.name];
}
[label_name setLocalizedString:AILocalizedString(@"Name:", nil)];
[label_group setLocalizedString:AILocalizedString(@"Group:", nil)];
[button_add setLocalizedString:AILocalizedStringFromTable(@"Add", @"Buttons", nil)];
[button_cancel setLocalizedString:AILocalizedStringFromTable(@"Cancel", @"Buttons", nil)];
}
/*!
* @name add
* @brief User pressed ok on sheet - Calls createBookmarkWithInfo: on the delegate class AIBookmarkController, which creates
* a new bookmark with the entered name & moves it to the entered group.
*/
- (IBAction)add:(id)sender
{
[target createBookmarkForChat:chat
withName:[textField_name stringValue]
inGroup:[[popUp_group selectedItem] representedObject]];
[self closeWindow:nil];
}
/*!
*@brief user pressed cancel on panel -dismisses the sheet
*/
- (IBAction)cancel:(id)sender
{
[self closeWindow:nil];
}
//Add to Group ---------------------------------------------------------------------------------------------------------
#pragma mark Add to Group
/*!
* @brief Build the menu of available destination groups
*/
- (void)buildGroupMenu
{
NSMenu *menu;
//Rebuild the menu
menu = [adium.contactController groupMenuWithTarget:nil];
//Add a default group name to the menu if there are no groups listed
if ([menu numberOfItems] == 0) {
[menu addItemWithTitle:DEFAULT_GROUP_NAME
target:nil
action:nil
keyEquivalent:@""];
}
[menu addItem:[NSMenuItem separatorItem]];
[menu addItemWithTitle:[AILocalizedString(@"New Group",nil) stringByAppendingEllipsis]
target:self
action:@selector(newGroup:)
keyEquivalent:@""];
[popUp_group setMenu:menu];
[popUp_group selectItemAtIndex:0];
}
/*!
* @brief Prompt the user to add a new group immediately
*/
- (void)newGroup:(id)sender
{
AINewGroupWindowController *newGroupWindowController;
newGroupWindowController = [AINewGroupWindowController promptForNewGroupOnWindow:[self window]];
//Observe for the New Group window to close
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newGroupDidEnd:)
name:@"NewGroupWindowControllerDidEnd"
object:[newGroupWindowController window]];
}
/*!
* @name newGroupDidEnd:
* @brief the New Group sheet has ended, if a new group was created, select it, otherwise
* select the first group.
*/
- (void)newGroupDidEnd:(NSNotification *)inNotification
{
NSWindow *window = [inNotification object];
if ([[window windowController] isKindOfClass:[AINewGroupWindowController class]]) {
AIListGroup *group = [(AINewGroupWindowController *)[window windowController] group];
//Rebuild the group menu
[self buildGroupMenu];
/* Select the new group if it exists; otherwise select the first group (so we don't still have New Group... selected).
* If the user cancelled, group will be nil since the group doesn't exist.
*/
if (![popUp_group selectItemWithRepresentedObject:group]) {
[popUp_group selectItemAtIndex:0];
}
[[self window] performSelector:@selector(makeKeyAndOrderFront:)
withObject:self
afterDelay:0];
}
//Stop observing
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"NewGroupWindowControllerDidEnd"
object:window];
}
@end
|