| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" | 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" |
| 6 | 6 |
| 7 #include "base/mac/mac_util.h" | 7 #include "base/mac/mac_util.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_editor.h" | 10 #include "chrome/browser/bookmarks/bookmark_editor.h" |
| (...skipping 1375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1386 [noItemTextfield setHidden:NO]; | 1386 [noItemTextfield setHidden:NO]; |
| 1387 NSButton* importBookmarksButton = [buttonView_ importBookmarksButton]; | 1387 NSButton* importBookmarksButton = [buttonView_ importBookmarksButton]; |
| 1388 [importBookmarksButton setFrame:originalImportBookmarksRect_]; | 1388 [importBookmarksButton setFrame:originalImportBookmarksRect_]; |
| 1389 [importBookmarksButton setHidden:NO]; | 1389 [importBookmarksButton setHidden:NO]; |
| 1390 // Check each to see if they need to be shrunk or hidden. | 1390 // Check each to see if they need to be shrunk or hidden. |
| 1391 if ([self shrinkOrHideView:importBookmarksButton forMaxX:maxViewX]) | 1391 if ([self shrinkOrHideView:importBookmarksButton forMaxX:maxViewX]) |
| 1392 [self shrinkOrHideView:noItemTextfield forMaxX:maxViewX]; | 1392 [self shrinkOrHideView:noItemTextfield forMaxX:maxViewX]; |
| 1393 } | 1393 } |
| 1394 } | 1394 } |
| 1395 | 1395 |
| 1396 // Scans through all buttons from left to right, calculating from scratch where |
| 1397 // they should be based on the preceding widths, until it finds the one |
| 1398 // requested. |
| 1399 // Returns NSZeroRect if there is no such button in the bookmark bar. |
| 1400 // Enables you to work out where a button will end up when it is done animating. |
| 1401 - (NSRect)finalRectOfButton:(BookmarkButton*)wantedButton { |
| 1402 CGFloat left = bookmarks::kBookmarkHorizontalPadding; |
| 1403 NSRect buttonFrame = NSZeroRect; |
| 1404 |
| 1405 for (NSButton* button in buttons_.get()) { |
| 1406 // Hidden buttons get no space. |
| 1407 if ([button isHidden]) |
| 1408 continue; |
| 1409 buttonFrame = [button frame]; |
| 1410 buttonFrame.origin.x = left; |
| 1411 left += buttonFrame.size.width + bookmarks::kBookmarkHorizontalPadding; |
| 1412 if (button == wantedButton) |
| 1413 return buttonFrame; |
| 1414 } |
| 1415 return NSZeroRect; |
| 1416 } |
| 1417 |
| 1418 // Calculates the final position of the last button in the bar. |
| 1419 // We can't just use [[self buttons] lastObject] frame] because the button |
| 1420 // may be animating currently. |
| 1421 - (NSRect)finalRectOfLastButton { |
| 1422 return [self finalRectOfButton:[[self buttons] lastObject]]; |
| 1423 } |
| 1424 |
| 1396 - (void)redistributeButtonsOnBarAsNeeded { | 1425 - (void)redistributeButtonsOnBarAsNeeded { |
| 1397 const BookmarkNode* node = bookmarkModel_->GetBookmarkBarNode(); | 1426 const BookmarkNode* node = bookmarkModel_->GetBookmarkBarNode(); |
| 1398 NSInteger barCount = node->GetChildCount(); | 1427 NSInteger barCount = node->GetChildCount(); |
| 1399 | 1428 |
| 1400 // Determine the current maximum extent of the visible buttons. | 1429 // Determine the current maximum extent of the visible buttons. |
| 1401 CGFloat maxViewX = NSMaxX([[self view] bounds]); | 1430 CGFloat maxViewX = NSMaxX([[self view] bounds]); |
| 1402 NSButton* otherBookmarksButton = otherBookmarksButton_.get(); | 1431 NSButton* otherBookmarksButton = otherBookmarksButton_.get(); |
| 1403 // If necessary, pull in the width to account for the Other Bookmarks button. | 1432 // If necessary, pull in the width to account for the Other Bookmarks button. |
| 1404 if (otherBookmarksButton_) | 1433 if (otherBookmarksButton_) |
| 1405 maxViewX = [otherBookmarksButton frame].origin.x - | 1434 maxViewX = [otherBookmarksButton frame].origin.x - |
| 1406 bookmarks::kBookmarkHorizontalPadding; | 1435 bookmarks::kBookmarkHorizontalPadding; |
| 1407 // If we're already overflowing, then we need to account for the chevron. | 1436 // If we're already overflowing, then we need to account for the chevron. |
| 1408 if (barCount > displayedButtonCount_) | 1437 if (barCount > displayedButtonCount_) |
| 1409 maxViewX = [offTheSideButton_ frame].origin.x - | 1438 maxViewX = [offTheSideButton_ frame].origin.x - |
| 1410 bookmarks::kBookmarkHorizontalPadding; | 1439 bookmarks::kBookmarkHorizontalPadding; |
| 1411 | 1440 |
| 1412 // As a result of pasting or dragging, the bar may now have more buttons | 1441 // As a result of pasting or dragging, the bar may now have more buttons |
| 1413 // than will fit so remove any which overflow. They will be shown in | 1442 // than will fit so remove any which overflow. They will be shown in |
| 1414 // the off-the-side folder. | 1443 // the off-the-side folder. |
| 1415 while (displayedButtonCount_ > 0) { | 1444 while (displayedButtonCount_ > 0) { |
| 1416 BookmarkButton* button = [buttons_ lastObject]; | 1445 BookmarkButton* button = [buttons_ lastObject]; |
| 1417 if (NSMaxX([button frame]) < maxViewX) | 1446 if (NSMaxX([self finalRectOfLastButton]) < maxViewX) |
| 1418 break; | 1447 break; |
| 1419 [buttons_ removeLastObject]; | 1448 [buttons_ removeLastObject]; |
| 1420 [button setDelegate:nil]; | 1449 [button setDelegate:nil]; |
| 1421 [button removeFromSuperview]; | 1450 [button removeFromSuperview]; |
| 1422 --displayedButtonCount_; | 1451 --displayedButtonCount_; |
| 1423 } | 1452 } |
| 1424 | 1453 |
| 1425 // As a result of cutting, deleting and dragging, the bar may now have room | 1454 // As a result of cutting, deleting and dragging, the bar may now have room |
| 1426 // for more buttons. | 1455 // for more buttons. |
| 1427 int xOffset = displayedButtonCount_ > 0 ? | 1456 int xOffset = displayedButtonCount_ > 0 ? |
| 1428 NSMaxX([[buttons_ lastObject] frame]) + | 1457 NSMaxX([self finalRectOfLastButton]) + |
| 1429 bookmarks::kBookmarkHorizontalPadding : 0; | 1458 bookmarks::kBookmarkHorizontalPadding : 0; |
| 1430 for (int i = displayedButtonCount_; i < barCount; ++i) { | 1459 for (int i = displayedButtonCount_; i < barCount; ++i) { |
| 1431 const BookmarkNode* child = node->GetChild(i); | 1460 const BookmarkNode* child = node->GetChild(i); |
| 1432 BookmarkButton* button = [self buttonForNode:child xOffset:&xOffset]; | 1461 BookmarkButton* button = [self buttonForNode:child xOffset:&xOffset]; |
| 1433 // If we're testing against the last possible button then account | 1462 // If we're testing against the last possible button then account |
| 1434 // for the chevron no longer needing to be shown. | 1463 // for the chevron no longer needing to be shown. |
| 1435 if (i == barCount + 1) | 1464 if (i == barCount + 1) |
| 1436 maxViewX += NSWidth([offTheSideButton_ frame]) + | 1465 maxViewX += NSWidth([offTheSideButton_ frame]) + |
| 1437 bookmarks::kBookmarkHorizontalPadding; | 1466 bookmarks::kBookmarkHorizontalPadding; |
| 1438 if (NSMaxX([button frame]) >= maxViewX) | 1467 if (NSMaxX([button frame]) >= maxViewX) |
| (...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2494 // to minimize touching the object passed in (likely a mock). | 2523 // to minimize touching the object passed in (likely a mock). |
| 2495 - (void)setButtonContextMenu:(id)menu { | 2524 - (void)setButtonContextMenu:(id)menu { |
| 2496 buttonContextMenu_ = menu; | 2525 buttonContextMenu_ = menu; |
| 2497 } | 2526 } |
| 2498 | 2527 |
| 2499 - (void)setIgnoreAnimations:(BOOL)ignore { | 2528 - (void)setIgnoreAnimations:(BOOL)ignore { |
| 2500 ignoreAnimations_ = ignore; | 2529 ignoreAnimations_ = ignore; |
| 2501 } | 2530 } |
| 2502 | 2531 |
| 2503 @end | 2532 @end |
| OLD | NEW |