diff options
-rw-r--r-- | chrome/app/nibs/BookmarkEditor.xib | 25 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_editor_controller.h | 2 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_editor_controller.mm | 50 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_editor_controller_unittest.mm | 21 |
4 files changed, 82 insertions, 16 deletions
diff --git a/chrome/app/nibs/BookmarkEditor.xib b/chrome/app/nibs/BookmarkEditor.xib index d574a2e..deb0835 100644 --- a/chrome/app/nibs/BookmarkEditor.xib +++ b/chrome/app/nibs/BookmarkEditor.xib @@ -80,7 +80,7 @@ <reference key="NSSuperview" ref="1006"/> <bool key="NSEnabled">YES</bool> <object class="NSButtonCell" key="NSCell" id="137649770"> - <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags">604110336</int> <int key="NSCellFlags2">134217728</int> <string key="NSContents">OK</string> <reference key="NSSupport" ref="899171858"/> @@ -316,6 +316,14 @@ </object> <int key="connectionID">30</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">okButton_</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="983581711"/> + </object> + <int key="connectionID">31</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -515,9 +523,9 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{609, 978}, {480, 270}}</string> + <string>{{555, 472}, {480, 270}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{609, 978}, {480, 270}}</string> + <string>{{555, 472}, {480, 270}}</string> <boolean value="NO" id="6"/> <string>{196, 240}</string> <string>{{357, 418}, {480, 270}}</string> @@ -563,7 +571,7 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">30</int> + <int key="maxID">31</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -593,6 +601,7 @@ <string>browser_</string> <string>nameField_</string> <string>newFolderButton_</string> + <string>okButton_</string> <string>urlField_</string> </object> <object class="NSMutableArray" key="dict.values"> @@ -600,6 +609,7 @@ <string>NSBrowser</string> <string>NSTextField</string> <string>NSButton</string> + <string>NSButton</string> <string>NSTextField</string> </object> </object> @@ -612,6 +622,13 @@ <string key="className">NSObject</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> <string key="majorKey">IBProjectSource</string> + <string key="minorKey">browser/cocoa/status_bubble_mac.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> <string key="minorKey">browser/cocoa/tab_strip_model_observer_bridge.h</string> </object> </object> diff --git a/chrome/browser/cocoa/bookmark_editor_controller.h b/chrome/browser/cocoa/bookmark_editor_controller.h index e297ea3..742fbd1 100644 --- a/chrome/browser/cocoa/bookmark_editor_controller.h +++ b/chrome/browser/cocoa/bookmark_editor_controller.h @@ -18,6 +18,7 @@ IBOutlet NSTextField* nameField_; IBOutlet NSTextField* urlField_; IBOutlet NSBrowser* browser_; + IBOutlet NSButton* okButton_; IBOutlet NSButton* newFolderButton_; NSWindow* parentWindow_; @@ -47,6 +48,7 @@ @interface BookmarkEditorController(TestingAPI) @property (assign) NSString* displayName; @property (assign) NSString* displayURL; +@property (readonly) BOOL okButtonEnabled; @end diff --git a/chrome/browser/cocoa/bookmark_editor_controller.mm b/chrome/browser/cocoa/bookmark_editor_controller.mm index 704c56e..4ba0ab39 100644 --- a/chrome/browser/cocoa/bookmark_editor_controller.mm +++ b/chrome/browser/cocoa/bookmark_editor_controller.mm @@ -72,6 +72,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd, [nameField_ setStringValue:initialName_]; [urlField_ setStringValue:initialUrl_]; + // Get a ping when the URL text changes; + // trigger an initial ping to set things up. + [urlField_ setDelegate:self]; + [self controlTextDidChange:nil]; + if (configuration_ == BookmarkEditor::SHOW_TREE) { // build the tree et al NOTIMPLEMENTED(); @@ -119,6 +124,30 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd, [NSApp endSheet:[self window]]; } +// If possible, return a valid GURL from the URL text field. +- (GURL)GURLFromUrlField { + NSString *url = [urlField_ stringValue]; + GURL newURL = GURL([url UTF8String]); + if (!newURL.is_valid()) { + // Mimic observed friendliness from Windows + newURL = GURL([[NSString stringWithFormat:@"http://%@", url] UTF8String]); + } + return newURL; +} + +// When the URL changes we may enable or disable the OK button. +// We set ourselves as the delegate of urlField_ so this gets called. +// (Yes, setting ourself as a delegate automatically registers us for +// the notification.) +- (void)controlTextDidChange:(NSNotification *)aNotification { + GURL newURL = [self GURLFromUrlField]; + if (newURL.is_valid()) { + [okButton_ setEnabled:YES]; + } else { + [okButton_ setEnabled:NO]; + } +} + // TODO(jrg): Once the tree is available edits may be more extensive // than just name/url. - (IBAction)ok:(id)sender { @@ -128,14 +157,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd, if ((![name isEqual:initialName_]) || (![url isEqual:initialUrl_])) { std::wstring newTitle = base::SysNSStringToWide(name); - GURL newURL = GURL([url UTF8String]); - if (!newURL.is_valid()) { - // Mimic observed friendliness from Windows - newURL = GURL([[NSString stringWithFormat:@"http://%@", url] UTF8String]); - } + GURL newURL = [self GURLFromUrlField]; if (!newURL.is_valid()) { - // Silently ignoring a bad URL is unfriendly. - newURL = GURL(); + // Shouldn't be reached -- OK button disabled if not valid! + NOTREACHED(); + return; } int index = 0; BookmarkModel* model = profile_->GetBookmarkModel(); @@ -158,6 +184,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd, - (void)didEndSheet:(NSWindow*)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo { + // This is probably unnecessary but it feels cleaner since the + // delegate of a text field can be automatically registered for + // notifications. + [urlField_ setDelegate:nil]; + [[self window] orderOut:self]; // BookmarkEditor::Show() will create us then run away. Unusually @@ -180,6 +211,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd, - (void)setDisplayURL:(NSString*)name { [urlField_ setStringValue:name]; + [self controlTextDidChange:nil]; +} + +- (BOOL)okButtonEnabled { + return [okButton_ isEnabled]; } @end // BookmarkEditorController diff --git a/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm b/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm index 8400b9c..7303f34 100644 --- a/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm +++ b/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm @@ -90,14 +90,25 @@ TEST_F(BookmarkEditorControllerTest, UserEditsStuff) { EXPECT_EQ(child->GetURL(), GURL(url_name)); // Change just the URL + EXPECT_TRUE([controller okButtonEnabled]); [controller setDisplayURL:@"http://yellow-sneakers.com/"]; + EXPECT_TRUE([controller okButtonEnabled]); [controller ok:nil]; child = parent->GetChild(0); EXPECT_EQ(child->GetTitle(), L"whamma jamma bamma"); EXPECT_EQ(child->GetURL(), GURL("http://yellow-sneakers.com/")); -} - - - - + // Give it a URL which needs fixen up to be valid + // (e.g. http:// prefix added) + [controller setDisplayURL:@"x"]; + [controller ok:nil]; + child = parent->GetChild(0); + EXPECT_TRUE(child->GetURL().is_valid()); + + // Confirm OK button enabled/disabled as appropriate. + EXPECT_TRUE([controller okButtonEnabled]); + [controller setDisplayURL:@""]; + EXPECT_FALSE([controller okButtonEnabled]); + [controller setDisplayURL:@"http://www.cnn.com"]; + EXPECT_TRUE([controller okButtonEnabled]); +} |