Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(615)

Unified Diff: views/controls/menu/menu_item_view.cc

Issue 2741004: Makes it so child views of menuitemview can be traversed with the (Closed)
Patch Set: Tweaks Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: views/controls/menu/menu_item_view.cc
diff --git a/views/controls/menu/menu_item_view.cc b/views/controls/menu/menu_item_view.cc
index 29864b2abc9e4a676fc2a768bcaf4a37f0dab070..f2e269d5766ab3a6dfe9310a917fbcbe4092858f 100644
--- a/views/controls/menu/menu_item_view.cc
+++ b/views/controls/menu/menu_item_view.cc
@@ -38,9 +38,12 @@ class EmptyMenuMenuItem : public MenuItemView {
} // namespace
+// Padding between child views.
+static const int kChildXPadding = 8;
+
// MenuItemView ---------------------------------------------------------------
-// static
+// static
const int MenuItemView::kMenuItemViewID = 1001;
// static
@@ -164,6 +167,28 @@ void MenuItemView::Cancel() {
}
}
+MenuItemView* MenuItemView::AppendMenuItemImpl(int item_id,
+ const std::wstring& label,
+ const SkBitmap& icon,
+ Type type) {
+ if (!submenu_)
+ CreateSubmenu();
+ if (type == SEPARATOR) {
+ submenu_->AddChildView(new MenuSeparator());
+ return NULL;
+ }
+ MenuItemView* item = new MenuItemView(this, item_id, type);
+ if (label.empty() && GetDelegate())
+ item->SetTitle(GetDelegate()->GetLabel(item_id));
+ else
+ item->SetTitle(label);
+ item->SetIcon(icon);
+ if (type == SUBMENU)
+ item->CreateSubmenu();
+ submenu_->AddChildView(item);
+ return item;
+}
+
SubmenuView* MenuItemView::CreateSubmenu() {
if (!submenu_)
submenu_ = new SubmenuView(this);
@@ -272,6 +297,21 @@ void MenuItemView::ChildrenChanged() {
}
}
+void MenuItemView::Layout() {
+ int child_count = GetChildViewCount();
+ if (child_count == 0)
+ return;
+
+ // Child views are layed out right aligned and given the full height. To right
+ // align start with the last view and progress to the first.
+ for (int i = child_count - 1, x = width() - item_right_margin_; i >= 0; --i) {
+ View* child = GetChildViewAt(i);
+ int width = child->GetPreferredSize().width();
+ child->SetBounds(x - width, 0, width, height());
+ x -= width - kChildXPadding;
+ }
+}
+
MenuItemView::MenuItemView(MenuItemView* parent,
int command,
MenuItemView::Type type) {
@@ -325,28 +365,6 @@ void MenuItemView::Init(MenuItemView* parent,
SetEnabled(root_delegate->IsCommandEnabled(command));
}
-MenuItemView* MenuItemView::AppendMenuItemInternal(int item_id,
- const std::wstring& label,
- const SkBitmap& icon,
- Type type) {
- if (!submenu_)
- CreateSubmenu();
- if (type == SEPARATOR) {
- submenu_->AddChildView(new MenuSeparator());
- return NULL;
- }
- MenuItemView* item = new MenuItemView(this, item_id, type);
- if (label.empty() && GetDelegate())
- item->SetTitle(GetDelegate()->GetLabel(item_id));
- else
- item->SetTitle(label);
- item->SetIcon(icon);
- if (type == SUBMENU)
- item->CreateSubmenu();
- submenu_->AddChildView(item);
- return item;
-}
-
void MenuItemView::DropMenuClosed(bool notify_delegate) {
DCHECK(controller_);
DCHECK(!controller_->IsBlockingRun());
@@ -434,7 +452,6 @@ void MenuItemView::AdjustBoundsForRTLUI(gfx::Rect* rect) const {
rect->set_x(MirroredLeftPointForRect(*rect));
}
-
void MenuItemView::DestroyAllMenuHosts() {
if (!HasSubmenu())
return;
@@ -460,4 +477,18 @@ int MenuItemView::GetBottomMargin() {
MenuConfig::instance().item_no_icon_bottom_margin;
}
+int MenuItemView::GetChildPreferredWidth() {
+ int child_count = GetChildViewCount();
+ if (child_count == 0)
+ return 0;
+
+ int width = 0;
+ for (int i = 0; i < child_count; ++i) {
+ if (i)
+ width += kChildXPadding;
+ width += GetChildViewAt(i)->GetPreferredSize().width();
+ }
+ return width;
+}
+
} // namespace views

Powered by Google App Engine
This is Rietveld 408576698