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
|
// 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.
#include "chrome/browser/views/bookmark_bar_instructions_view.h"
#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "chrome/browser/browser_theme_provider.h"
#include "chrome/browser/defaults.h"
#include "grit/generated_resources.h"
#include "views/controls/label.h"
using views::View;
// Horizontal padding, in pixels, between the link and label.
static const int kViewPadding = 6;
BookmarkBarInstructionsView::BookmarkBarInstructionsView(Delegate* delegate)
: delegate_(delegate),
instructions_(NULL),
import_link_(NULL),
baseline_(-1),
updated_colors_(false) {
instructions_ = new views::Label(
l10n_util::GetString(IDS_BOOKMARKS_NO_ITEMS));
AddChildView(instructions_);
if (browser_defaults::kShowImportOnBookmarkBar) {
import_link_ = new views::Link(
l10n_util::GetString(IDS_BOOKMARK_BAR_IMPORT_LINK));
// We don't want the link to alter tab navigation.
import_link_->SetFocusable(false);
import_link_->SetController(this);
AddChildView(import_link_);
}
}
gfx::Size BookmarkBarInstructionsView::GetPreferredSize() {
int ascent = 0, descent = 0, height = 0, width = 0;
for (int i = 0; i < GetChildViewCount(); ++i) {
View* view = GetChildViewAt(i);
gfx::Size pref = view->GetPreferredSize();
int baseline = view->GetBaseline();
if (baseline != -1) {
ascent = std::max(ascent, baseline);
descent = std::max(descent, pref.height() - baseline);
} else {
height = std::max(pref.height(), height);
}
width += pref.width();
}
width += (GetChildViewCount() - 1) * kViewPadding;
if (ascent != 0)
height = std::max(ascent + descent, height);
return gfx::Size(width, height);
}
void BookmarkBarInstructionsView::Layout() {
int remaining_width = width();
int x = 0;
for (int i = 0; i < GetChildViewCount(); ++i) {
View* view = GetChildViewAt(i);
gfx::Size pref = view->GetPreferredSize();
int baseline = view->GetBaseline();
int y;
if (baseline != -1 && baseline_ != -1)
y = baseline_ - baseline;
else
y = (height() - pref.height()) / 2;
int view_width = std::min(remaining_width, pref.width());
view->SetBounds(x, y, view_width, pref.height());
x += view_width + kViewPadding;
remaining_width = std::max(0, width() - x);
}
}
void BookmarkBarInstructionsView::ThemeChanged() {
UpdateColors();
}
void BookmarkBarInstructionsView::ViewHierarchyChanged(bool is_add,
View* parent,
View* child) {
if (!updated_colors_ && is_add && GetWidget())
UpdateColors();
}
bool BookmarkBarInstructionsView::GetAccessibleRole(
AccessibilityTypes::Role* role) {
DCHECK(role);
if (!role)
return false;
*role = AccessibilityTypes::ROLE_GROUPING;
return true;
}
void BookmarkBarInstructionsView::LinkActivated(views::Link* source,
int event_flags) {
delegate_->ShowImportDialog();
}
void BookmarkBarInstructionsView::UpdateColors() {
// We don't always have a theme provider (ui tests, for example).
const ThemeProvider* theme_provider = GetThemeProvider();
if (!theme_provider)
return;
updated_colors_ = true;
SkColor text_color =
theme_provider->GetColor(BrowserThemeProvider::COLOR_BOOKMARK_TEXT);
instructions_->SetColor(text_color);
if (import_link_)
import_link_->SetColor(text_color);
}
|