1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import "chrome/browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.h" 6 7#include "ui/base/l10n/l10n_util.h" 8#include "base/mac/mac_util.h" 9#include "base/sys_string_conversions.h" 10#include "chrome/browser/profiles/profile.h" 11#include "chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.h" 12#include "grit/generated_resources.h" 13#include "ui/base/l10n/l10n_util_mac.h" 14 15@implementation BookmarkNameFolderController 16 17// Common initializer (private). 18- (id)initWithParentWindow:(NSWindow*)window 19 profile:(Profile*)profile 20 node:(const BookmarkNode*)node 21 parent:(const BookmarkNode*)parent 22 newIndex:(int)newIndex { 23 NSString* nibpath = [base::mac::MainAppBundle() 24 pathForResource:@"BookmarkNameFolder" 25 ofType:@"nib"]; 26 if ((self = [super initWithWindowNibPath:nibpath owner:self])) { 27 parentWindow_ = window; 28 profile_ = profile; 29 node_ = node; 30 parent_ = parent; 31 newIndex_ = newIndex; 32 if (parent) { 33 DCHECK_LE(newIndex, parent->child_count()); 34 } 35 if (node_) { 36 initialName_.reset([base::SysUTF16ToNSString(node_->GetTitle()) retain]); 37 } else { 38 NSString* newString = 39 l10n_util::GetNSStringWithFixup(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME); 40 initialName_.reset([newString retain]); 41 } 42 } 43 return self; 44} 45 46- (id)initWithParentWindow:(NSWindow*)window 47 profile:(Profile*)profile 48 node:(const BookmarkNode*)node { 49 DCHECK(node); 50 return [self initWithParentWindow:window 51 profile:profile 52 node:node 53 parent:nil 54 newIndex:0]; 55} 56 57- (id)initWithParentWindow:(NSWindow*)window 58 profile:(Profile*)profile 59 parent:(const BookmarkNode*)parent 60 newIndex:(int)newIndex { 61 DCHECK(parent); 62 return [self initWithParentWindow:window 63 profile:profile 64 node:nil 65 parent:parent 66 newIndex:newIndex]; 67} 68 69- (void)awakeFromNib { 70 [nameField_ setStringValue:initialName_.get()]; 71} 72 73- (void)runAsModalSheet { 74 // Ping me when things change out from under us. 75 observer_.reset(new BookmarkModelObserverForCocoa( 76 node_, profile_->GetBookmarkModel(), 77 self, 78 @selector(cancel:))); 79 [NSApp beginSheet:[self window] 80 modalForWindow:parentWindow_ 81 modalDelegate:self 82 didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) 83 contextInfo:nil]; 84} 85 86- (IBAction)cancel:(id)sender { 87 [NSApp endSheet:[self window]]; 88} 89 90- (IBAction)ok:(id)sender { 91 NSString* name = [nameField_ stringValue]; 92 BookmarkModel* model = profile_->GetBookmarkModel(); 93 if (node_) { 94 model->SetTitle(node_, base::SysNSStringToUTF16(name)); 95 } else { 96 model->AddFolder(parent_, 97 newIndex_, 98 base::SysNSStringToUTF16(name)); 99 } 100 [NSApp endSheet:[self window]]; 101} 102 103- (void)didEndSheet:(NSWindow*)sheet 104 returnCode:(int)returnCode 105 contextInfo:(void*)contextInfo { 106 [[self window] orderOut:self]; 107 observer_.reset(NULL); 108 [self autorelease]; 109} 110 111- (NSString*)folderName { 112 return [nameField_ stringValue]; 113} 114 115- (void)setFolderName:(NSString*)name { 116 [nameField_ setStringValue:name]; 117} 118 119- (NSButton*)okButton { 120 return okButton_; 121} 122 123@end // BookmarkNameFolderController 124