14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef UI_V2_PUBLIC_VIEW_OBSERVER_H_
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define UI_V2_PUBLIC_VIEW_OBSERVER_H_
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/v2/public/v2_export.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace gfx {
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Rect;
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace v2 {
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class View;
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Observe View disposition changes. -ing methods are called before the change
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// is committed, -ed methods are called after.
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class V2_EXPORT ViewObserver {
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Whether a notification is being sent before or after some property has
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // changed.
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  enum DispositionChangePhase {
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    DISPOSITION_CHANGING,
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    DISPOSITION_CHANGED
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  };
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Tree.
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  struct TreeChangeParams {
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    TreeChangeParams();
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    View* target;
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    View* old_parent;
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    View* new_parent;
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    View* receiver;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    DispositionChangePhase phase;
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  };
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Called when a node is added or removed. Notifications are sent to the
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // following hierarchies in this order:
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // 1. |target|.
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // 2. |target|'s child hierarchy.
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // 3. |target|'s parent hierarchy in its |old_parent|
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  //        (only for Changing notifications).
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // 3. |target|'s parent hierarchy in its |new_parent|.
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  //        (only for Changed notifications).
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // This sequence is performed via the OnTreeChange notification below before
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // and after the change is committed.
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnViewTreeChange(const TreeChangeParams& params) {}
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Disposition.
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnViewDestroy(View* view, DispositionChangePhase phase) {}
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnViewBoundsChanged(View* view,
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                   const gfx::Rect& old_bounds,
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                   const gfx::Rect& new_bounds) {}
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnViewVisibilityChange(View* view,
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      DispositionChangePhase phase) {}
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected:
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~ViewObserver() {}
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace v2
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // UI_V2_PUBLIC_VIEW_OBSERVER_H_
66