tree: 7248bbc311650e5677a8cf936de853affe958195 [path history] [tgz]
  1. action_view_controller.cc
  2. action_view_controller.h
  3. action_view_controller_unittest.cc
  4. action_view_interface.cc
  5. action_view_interface.h
  6. README.md
ui/views/actions/README.md

Integrating Actions and Views

Actions are essentially model objects. Following MVC principles, a view controller should facilitate the interactions between actions and views.

ActionViewController is the main view controller to be instantiated or subclassed. It should outlive all the views it manages. Call ActioinViewController::CreateActionViewRelationship(..) to link a view to an action item.

Many views will work out of the box with ActionViewController. However, we have not completed supporting all basic view types. To allow ActionViewController to support a new view class, simply implement an ActionViewInterface class for the view class (See action_view_interface.h)/ ui/views/controls/button/button.* has a concrete example.

How to create an ActionViewInterface:

Note: Replace ViewType with the type of your View Class

Step 1: Create the ActionViewInterface

Instead of BaseActionViewInterface, subclass the ActionViewInterface subclass associated with the parent view class to get action behaviors of the parent class.

class ViewTypeActionViewInterface : public BaseActionViewInterface {
    public:
    explicit ViewTypeActionViewInterface(ViewType* action_view)
        : BaseActionViewInterface(action_view), action_view_(action_view) {}
    ~ViewTypeActionViewInterface() override = default;

    // optional: override virtual methods. See action_view_interface.h for
    // methods that can be overridden.

    private:
    raw_ptr<ViewType> action_view_;

};

Step 2: Override View::GetActionViewInterface

std::unique_ptr<ActionViewInterface> ViewType::GetActionViewInterface()
override {
   return std::make_unique<ViewTypeActionViewInterface>(this);
}