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_; |