blob: f471f1fc4a95334126dd297411f25d372b3e8e2e (
plain)
1
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
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "chrome/browser/cocoa/bookmark_editor_controller.h"
#include "app/l10n_util.h"
#include "base/sys_string_conversions.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
@interface BookmarkEditorController (Private)
// Grab the url from the text field and convert.
- (GURL)GURLFromUrlField;
@end
@implementation BookmarkEditorController
@synthesize displayURL = displayURL_;
+ (NSSet*)keyPathsForValuesAffectingOkEnabled {
return [NSSet setWithObject:@"displayURL"];
}
- (id)initWithParentWindow:(NSWindow*)parentWindow
profile:(Profile*)profile
parent:(const BookmarkNode*)parent
node:(const BookmarkNode*)node
configuration:(BookmarkEditor::Configuration)configuration
handler:(BookmarkEditor::Handler*)handler {
if ((self = [super initWithParentWindow:parentWindow
nibName:@"BookmarkEditor"
profile:profile
parent:parent
configuration:configuration
handler:handler])) {
// "Add Page..." has no "node" so this may be NULL.
node_ = node;
}
return self;
}
- (void)dealloc {
[displayURL_ release];
[super dealloc];
}
- (void)awakeFromNib {
// Set text fields to match our bookmark. If the node is NULL we
// arrived here from an "Add Page..." item in a context menu.
if (node_) {
[self setInitialName:base::SysWideToNSString(node_->GetTitle())];
std::string url_string = node_->GetURL().possibly_invalid_spec();
initialUrl_.reset([[NSString stringWithUTF8String:url_string.c_str()]
retain]);
} else {
initialUrl_.reset([@"" retain]);
}
[self setDisplayURL:initialUrl_];
[super awakeFromNib];
}
#pragma mark Bookmark Editing
// If possible, return a valid GURL from the URL text field.
- (GURL)GURLFromUrlField {
NSString* url = [self displayURL];
GURL newURL = GURL([url UTF8String]);
if (!newURL.is_valid()) {
// Mimic observed friendliness from Windows
newURL = GURL([[NSString stringWithFormat:@"http://%@", url] UTF8String]);
}
return newURL;
}
// Enable the OK button if there is a valid URL.
- (BOOL)okEnabled {
BOOL okEnabled = NO;
if ([[self displayURL] length]) {
GURL newURL = [self GURLFromUrlField];
okEnabled = (newURL.is_valid()) ? YES : NO;
}
return okEnabled;
}
// The the bookmark's URL is assumed to be valid (otherwise the OK button
// should not be enabled). If the bookmark previously existed then it is
// removed from its old folder. The bookmark is then added to its new
// folder. If the folder has not changed then the bookmark stays in its
// original position (index) otherwise it is added to the end of the new
// folder. Called by -[BookmarkEditorBaseController ok:].
- (NSNumber*)didCommit {
NSString* name = [[self displayName] stringByTrimmingCharactersInSet:
[NSCharacterSet newlineCharacterSet]];
std::wstring newTitle = base::SysNSStringToWide(name);
const BookmarkNode* newParentNode = [self selectedNode];
BookmarkModel* model = [self bookmarkModel];
int newIndex = newParentNode->GetChildCount();
GURL newURL = [self GURLFromUrlField];
if (!newURL.is_valid()) {
// Shouldn't be reached -- OK button should be disabled if not valid!
NOTREACHED();
return [NSNumber numberWithBool:NO];
}
// Determine where the new/replacement bookmark is to go.
const BookmarkNode* parentNode = [self parentNode];
if (node_ && parentNode) {
// Replace the old bookmark with the updated bookmark.
int oldIndex = parentNode->IndexOfChild(node_);
if (oldIndex >= 0)
model->Remove(parentNode, oldIndex);
if (parentNode == newParentNode)
newIndex = oldIndex;
}
// Add bookmark as new node at the end of the newly selected folder.
const BookmarkNode* node = model->AddURL(newParentNode, newIndex,
newTitle, newURL);
// Honor handler semantics: callback on node creation.
[self notifyHandlerCreatedNode:node];
return [NSNumber numberWithBool:YES];
}
@end // BookmarkEditorController
|