Index: chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm |
diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm |
index 835ba3c004dfc3cca482e2ac7f9f142dc79e1ed1..75c72aef65c71a7903f3a30431670ac49aa9e0a8 100644 |
--- a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm |
+++ b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm |
@@ -15,6 +15,7 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#import "chrome/browser/ui/chrome_style.h" |
+#include "chrome/browser/ui/cocoa/extensions/bundle_util.h" |
#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "chrome/grit/generated_resources.h" |
@@ -102,59 +103,90 @@ NSString* const kCellAttributesKey = @"cellAttributes"; |
NSString* const kPermissionsDetailIndex = @"permissionsDetailIndex"; |
NSString* const kPermissionsDetailType = @"permissionsDetailType"; |
+// Computes the |control|'s desired height to fit its contents, constrained to |
+// be kMaxControlHeight at most. |
+CGFloat ComputeDesiredControlHeight(NSControl* control) { |
+ NSRect rect = [control frame]; |
+ rect.size.height = kMaxControlHeight; |
+ return [[control cell] cellSizeForBounds:rect].height; |
+} |
+ |
// Adjust the |control|'s height so that its content is not clipped. |
-// This also adds the change in height to the |totalOffset| and shifts the |
+// This also adds the change in height to the |total_offset| and shifts the |
// control down by that amount. |
void OffsetControlVerticallyToFitContent(NSControl* control, |
- CGFloat* totalOffset) { |
+ CGFloat* total_offset) { |
// Adjust the control's height so that its content is not clipped. |
- NSRect currentRect = [control frame]; |
- NSRect fitRect = currentRect; |
- fitRect.size.height = kMaxControlHeight; |
- CGFloat desiredHeight = [[control cell] cellSizeForBounds:fitRect].height; |
- CGFloat offset = desiredHeight - NSHeight(currentRect); |
+ NSRect current_rect = [control frame]; |
+ CGFloat desired_height = ComputeDesiredControlHeight(control); |
+ CGFloat offset = desired_height - NSHeight(current_rect); |
- [control setFrameSize:NSMakeSize(NSWidth(currentRect), |
- NSHeight(currentRect) + offset)]; |
+ [control setFrameSize:NSMakeSize(NSWidth(current_rect), |
+ NSHeight(current_rect) + offset)]; |
- *totalOffset += offset; |
+ *total_offset += offset; |
// Move the control vertically by the new total offset. |
NSPoint origin = [control frame].origin; |
- origin.y -= *totalOffset; |
+ origin.y -= *total_offset; |
[control setFrameOrigin:origin]; |
} |
-// Gets the desired height of |outlineView|. Simply using the view's frame |
+// Adjust the |view|'s height so that its subviews are not clipped. |
+// This also adds the change in height to the |total_offset| and shifts the |
+// control down by that amount. |
+void OffsetViewVerticallyToFitContent(NSView* view, CGFloat* total_offset) { |
+ // Adjust the view's height so that its subviews are not clipped. |
+ CGFloat desired_height = 0; |
+ for (NSView* subview in [view subviews]) { |
+ int required_height = NSMaxY([subview frame]); |
+ if (required_height > desired_height) |
+ desired_height = required_height; |
+ } |
+ NSRect current_rect = [view frame]; |
+ CGFloat offset = desired_height - NSHeight(current_rect); |
+ |
+ [view setFrameSize:NSMakeSize(NSWidth(current_rect), |
+ NSHeight(current_rect) + offset)]; |
+ |
+ *total_offset += offset; |
+ |
+ // Move the view vertically by the new total offset. |
+ NSPoint origin = [view frame].origin; |
+ origin.y -= *total_offset; |
+ [view setFrameOrigin:origin]; |
+} |
+ |
+// Gets the desired height of |outline_view|. Simply using the view's frame |
// doesn't work if an animation is pending. |
-CGFloat GetDesiredOutlineViewHeight(NSOutlineView* outlineView) { |
+CGFloat GetDesiredOutlineViewHeight(NSOutlineView* outline_view) { |
CGFloat height = 0; |
- for (NSInteger i = 0; i < [outlineView numberOfRows]; ++i) |
- height += NSHeight([outlineView rectOfRow:i]); |
+ for (NSInteger i = 0; i < [outline_view numberOfRows]; ++i) |
+ height += NSHeight([outline_view rectOfRow:i]); |
return height; |
} |
-void OffsetOutlineViewVerticallyToFitContent(NSOutlineView* outlineView, |
- CGFloat* totalOffset) { |
- NSScrollView* scrollView = [outlineView enclosingScrollView]; |
- NSRect frame = [scrollView frame]; |
- CGFloat desiredHeight = GetDesiredOutlineViewHeight(outlineView); |
- if (desiredHeight > kMaxControlHeight) |
- desiredHeight = kMaxControlHeight; |
- CGFloat offset = desiredHeight - NSHeight(frame); |
+void OffsetOutlineViewVerticallyToFitContent(NSOutlineView* outline_view, |
+ CGFloat* total_offset) { |
+ NSScrollView* scroll_view = [outline_view enclosingScrollView]; |
+ NSRect frame = [scroll_view frame]; |
+ CGFloat desired_height = GetDesiredOutlineViewHeight(outline_view); |
+ if (desired_height > kMaxControlHeight) |
+ desired_height = kMaxControlHeight; |
+ CGFloat offset = desired_height - NSHeight(frame); |
frame.size.height += offset; |
- *totalOffset += offset; |
+ *total_offset += offset; |
// Move the control vertically by the new total offset. |
- frame.origin.y -= *totalOffset; |
- [scrollView setFrame:frame]; |
+ frame.origin.y -= *total_offset; |
+ [scroll_view setFrame:frame]; |
} |
-void AppendRatingStarsShim(const gfx::ImageSkia* skiaImage, void* data) { |
+void AppendRatingStarsShim(const gfx::ImageSkia* skia_image, void* data) { |
ExtensionInstallViewController* controller = |
static_cast<ExtensionInstallViewController*>(data); |
- [controller appendRatingStar:skiaImage]; |
+ [controller appendRatingStar:skia_image]; |
} |
void DrawBulletInFrame(NSRect frame) { |
@@ -270,9 +302,7 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { |
gfx::SkColorToCalibratedNSColor(chrome_style::GetLinkColor())]; |
} |
- // The bundle install dialog has no icon. |
- if (![self isBundleInstall]) |
- [iconView_ setImage:prompt_->icon().ToNSImage()]; |
+ [iconView_ setImage:prompt_->icon().ToNSImage()]; |
// The dialog is laid out in the NIB exactly how we want it assuming that |
// each label fits on one line. However, for each label, we want to allow |
@@ -309,22 +339,12 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { |
} |
if ([self isBundleInstall]) { |
- // We display the list of extension names as a simple text string, seperated |
- // by newlines. |
BundleInstaller::ItemList items = prompt_->bundle()->GetItemsWithState( |
BundleInstaller::Item::STATE_PENDING); |
+ PopulateBundleItemsList(items, itemsField_); |
- NSMutableString* joinedItems = [NSMutableString string]; |
- for (size_t i = 0; i < items.size(); ++i) { |
- if (i > 0) |
- [joinedItems appendString:@"\n"]; |
- [joinedItems appendString:base::SysUTF16ToNSString( |
- items[i].GetNameForDisplay())]; |
- } |
- [itemsField_ setStringValue:joinedItems]; |
- |
- // Adjust the controls to fit the list of extensions. |
- OffsetControlVerticallyToFitContent(itemsField_, &totalOffset); |
+ // Adjust the view to fit the list of extensions. |
+ OffsetViewVerticallyToFitContent(itemsField_, &totalOffset); |
} |
// If there are any warnings, retained devices or retained files, then we |