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

Unified Diff: ui/views/controls/combobox/combobox.h

Issue 1310903004: Use a ui::MenuModel in views::Combobox (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: +curlies Created 5 years, 3 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
« no previous file with comments | « chrome/browser/ui/views/translate/translate_bubble_view.cc ('k') | ui/views/controls/combobox/combobox.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/combobox/combobox.h
diff --git a/ui/views/controls/combobox/combobox.h b/ui/views/controls/combobox/combobox.h
index 55087645ba72ffa1e7671e8dd17721c4263e2c55..e07e70ff9d29036e6ffd78eb44bcd437205c260d 100644
--- a/ui/views/controls/combobox/combobox.h
+++ b/ui/views/controls/combobox/combobox.h
@@ -5,34 +5,29 @@
#ifndef UI_VIEWS_CONTROLS_COMBOBOX_COMBOBOX_H_
#define UI_VIEWS_CONTROLS_COMBOBOX_COMBOBOX_H_
-#include <string>
-
#include "base/memory/weak_ptr.h"
+#include "base/strings/string16.h"
#include "base/time/time.h"
-#include "ui/base/models/combobox_model_observer.h"
-#include "ui/gfx/animation/animation_delegate.h"
-#include "ui/gfx/native_widget_types.h"
#include "ui/views/controls/button/button.h"
-#include "ui/views/controls/menu/menu_delegate.h"
#include "ui/views/controls/prefix_delegate.h"
namespace gfx {
class FontList;
-class SlideAnimation;
}
namespace ui {
class ComboboxModel;
+class MenuModel;
}
namespace views {
+namespace test {
+class ComboboxTestApi;
+}
class ComboboxListener;
-class ComboboxMenuRunner;
class CustomButton;
-class FocusableBorder;
class MenuRunner;
-class MenuRunnerHandler;
class Painter;
class PrefixSelector;
@@ -45,10 +40,7 @@ class PrefixSelector;
// * STYLE_ACTION: clicking on the text notifies the listener. The menu can be
// shown only by clicking on the arrow. The selected index is always reverted to
// 0 after the listener is notified.
-class VIEWS_EXPORT Combobox : public MenuDelegate,
- public PrefixDelegate,
- public ui::ComboboxModelObserver,
- public ButtonListener {
+class VIEWS_EXPORT Combobox : public PrefixDelegate, public ButtonListener {
public:
// The style of the combobox.
enum Style {
@@ -104,32 +96,19 @@ class VIEWS_EXPORT Combobox : public MenuDelegate,
void GetAccessibleState(ui::AXViewState* state) override;
void Layout() override;
- // Overridden from MenuDelegate:
- bool IsItemChecked(int id) const override;
- bool IsCommandEnabled(int id) const override;
- void ExecuteCommand(int id) override;
- bool GetAccelerator(int id, ui::Accelerator* accelerator) const override;
-
// Overridden from PrefixDelegate:
int GetRowCount() override;
int GetSelectedRow() override;
void SetSelectedRow(int row) override;
base::string16 GetTextForRow(int row) override;
- // Overriden from ComboboxModelObserver:
- void OnComboboxModelChanged(ui::ComboboxModel* model) override;
-
// Overriden from ButtonListener:
void ButtonPressed(Button* sender, const ui::Event& event) override;
private:
- FRIEND_TEST_ALL_PREFIXES(ComboboxTest, Click);
- FRIEND_TEST_ALL_PREFIXES(ComboboxTest, ClickButDisabled);
- FRIEND_TEST_ALL_PREFIXES(ComboboxTest, NotifyOnClickWithMouse);
- FRIEND_TEST_ALL_PREFIXES(ComboboxTest, ContentWidth);
+ friend class test::ComboboxTestApi;
- // Updates the combobox's content from its model.
- void UpdateFromModel();
+ class ComboboxMenuModelAdapter;
// Updates the border according to the current state.
void UpdateBorder();
@@ -148,11 +127,6 @@ class VIEWS_EXPORT Combobox : public MenuDelegate,
// Called when the selection is changed by the user.
void OnPerformAction();
- void NotifyPerformAction();
- void AfterPerformAction();
-
- // Converts a menu command ID to a menu item index.
- int MenuCommandToIndex(int menu_command_id) const;
int GetDisclosureArrowLeftPadding() const;
int GetDisclosureArrowRightPadding() const;
@@ -160,6 +134,10 @@ class VIEWS_EXPORT Combobox : public MenuDelegate,
// Returns the size of the disclosure arrow.
gfx::Size ArrowSize() const;
+ // Finds the size of the largest menu label or, for STYLE_ACTION, the size of
+ // the selected label.
+ gfx::Size GetContentSize() const;
+
// Handles the clicking event.
void HandleClickEvent();
@@ -186,14 +164,8 @@ class VIEWS_EXPORT Combobox : public MenuDelegate,
// A helper used to select entries by keyboard input.
scoped_ptr<PrefixSelector> selector_;
- // Responsible for showing the context menu.
- scoped_ptr<MenuRunner> dropdown_list_menu_runner_;
-
- // Weak. Owned by dropdown_list_menu_runner_.
- MenuItemView* menu_;
-
- // Is the drop down list showing
- bool dropdown_open_;
+ // Adapts a ComboboxModel for use by a views MenuRunner.
+ scoped_ptr<ui::MenuModel> menu_model_adapter_;
// Like MenuButton, we use a time object in order to keep track of when the
// combobox was closed. The time is used for simulating menu behavior; that
@@ -203,8 +175,8 @@ class VIEWS_EXPORT Combobox : public MenuDelegate,
// the button is not part of the displayed menu.
base::Time closed_time_;
- // The maximum dimensions of the content in the dropdown
- mutable gfx::Size content_size_;
+ // The maximum dimensions of the content in the dropdown.
+ gfx::Size content_size_;
// The painters or images that are used when |style_| is STYLE_BUTTONS. The
// first index means the state of unfocused or focused.
@@ -222,6 +194,10 @@ class VIEWS_EXPORT Combobox : public MenuDelegate,
CustomButton* text_button_;
CustomButton* arrow_button_;
+ // Set while the dropdown is showing. Ensures the menu is closed if |this| is
+ // destroyed.
+ scoped_ptr<views::MenuRunner> menu_runner_;
+
// Used for making calbacks.
base::WeakPtrFactory<Combobox> weak_ptr_factory_;
« no previous file with comments | « chrome/browser/ui/views/translate/translate_bubble_view.cc ('k') | ui/views/controls/combobox/combobox.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698