// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_VIEWS_VIEW_MODEL_H_ #define UI_VIEWS_VIEW_MODEL_H_ #include <optional> #include <vector> #include "base/check_op.h" #include "base/memory/raw_ptr.h" #include "ui/gfx/geometry/rect.h" #include "ui/views/views_export.h" namespace views { class View; class ViewModelUtils; // Internal implementation of the templated ViewModelT class. Provides // non-templated "unsafe" methods for ViewModelT to wrap around. Any methods // that allow insertion of or access to a View* should be protected, and have a // public method in the ViewModelT subclass that provides type-safe access to // the correct View subclass. class VIEWS_EXPORT ViewModelBase { … }; // ViewModelT is used to track an 'interesting' set of a views. Often times // during animations views are removed after a delay, which makes for tricky // coordinate conversion as you have to account for the possibility of the // indices from the model not lining up with those you expect. This class lets // you define the 'interesting' views and operate on those views. template <class T> class ViewModelT : public ViewModelBase { … }; // ViewModel is a collection of views with no specfic type. If all views have // the same type, the use of ViewModelT is preferred so that the views can be // retrieved without potentially unsafe downcasts. ViewModel; } // namespace views #endif // UI_VIEWS_VIEW_MODEL_H_