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
|
// Copyright 2014 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/ui/cocoa/website_settings/permission_selector_button.h"
#include "base/strings/sys_string_conversions.h"
#include "chrome/browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h"
#include "chrome/browser/ui/website_settings/website_settings_ui.h"
#include "chrome/browser/ui/website_settings/website_settings_utils.h"
#import "ui/base/cocoa/menu_controller.h"
@implementation PermissionSelectorButton
- (id)initWithPermissionInfo:
(const WebsiteSettingsUI::PermissionInfo&)permissionInfo
forURL:(const GURL&)url
withCallback:(PermissionMenuModel::ChangeCallback)callback {
if (self = [super initWithFrame:NSMakeRect(0, 0, 1, 1) pullsDown:NO]) {
[self setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
[self setBordered:NO];
[[self cell] setControlSize:NSSmallControlSize];
menuModel_.reset(new PermissionMenuModel(url, permissionInfo, callback));
menuController_.reset([[MenuController alloc] initWithModel:menuModel_.get()
useWithPopUpButtonCell:NO]);
[self setMenu:[menuController_ menu]];
[self selectItemWithTag:permissionInfo.setting];
// Set the button title.
base::scoped_nsobject<NSMenuItem> titleItem([[NSMenuItem alloc] init]);
base::string16 buttonTitle = WebsiteSettingsUI::PermissionActionToUIString(
permissionInfo.type, permissionInfo.setting,
permissionInfo.default_setting, permissionInfo.source);
[titleItem setTitle:base::SysUTF16ToNSString(buttonTitle)];
[[self cell] setUsesItemFromMenu:NO];
[[self cell] setMenuItem:titleItem.get()];
// Although the frame is reset, below, this sizes the cell properly.
[self sizeToFit];
// Size the button to just fit the visible title - not all of its items.
[self setFrameSize:SizeForWebsiteSettingsButtonTitle(self, [self title])];
}
return self;
}
- (CGFloat)maxTitleWidthForContentSettingsType:(ContentSettingsType)type
withDefaultSetting:(ContentSetting)defaultSetting {
// Determine the largest possible size for this button.
CGFloat maxTitleWidth = 0;
for (NSMenuItem* item in [self itemArray]) {
NSString* title =
base::SysUTF16ToNSString(WebsiteSettingsUI::PermissionActionToUIString(
type, static_cast<ContentSetting>([item tag]), defaultSetting,
content_settings::SETTING_SOURCE_USER));
NSSize size = SizeForWebsiteSettingsButtonTitle(self, title);
maxTitleWidth = std::max(maxTitleWidth, size.width);
}
return maxTitleWidth;
}
// Accessor function for testing only.
- (NSMenu*)permissionMenu {
return [menuController_ menu];
}
@end
|