1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_V2_PUBLIC_VIEW_OBSERVER_H_
6#define UI_V2_PUBLIC_VIEW_OBSERVER_H_
7
8#include "ui/v2/public/v2_export.h"
9
10namespace gfx {
11class Rect;
12}
13
14namespace v2 {
15
16class View;
17
18// Observe View disposition changes. -ing methods are called before the change
19// is committed, -ed methods are called after.
20class V2_EXPORT ViewObserver {
21 public:
22  // Whether a notification is being sent before or after some property has
23  // changed.
24  enum DispositionChangePhase {
25    DISPOSITION_CHANGING,
26    DISPOSITION_CHANGED
27  };
28
29  // Tree.
30  struct TreeChangeParams {
31    TreeChangeParams();
32    View* target;
33    View* old_parent;
34    View* new_parent;
35    View* receiver;
36    DispositionChangePhase phase;
37  };
38
39  // Called when a node is added or removed. Notifications are sent to the
40  // following hierarchies in this order:
41  // 1. |target|.
42  // 2. |target|'s child hierarchy.
43  // 3. |target|'s parent hierarchy in its |old_parent|
44  //        (only for Changing notifications).
45  // 3. |target|'s parent hierarchy in its |new_parent|.
46  //        (only for Changed notifications).
47  // This sequence is performed via the OnTreeChange notification below before
48  // and after the change is committed.
49  virtual void OnViewTreeChange(const TreeChangeParams& params) {}
50
51  // Disposition.
52  virtual void OnViewDestroy(View* view, DispositionChangePhase phase) {}
53  virtual void OnViewBoundsChanged(View* view,
54                                   const gfx::Rect& old_bounds,
55                                   const gfx::Rect& new_bounds) {}
56  virtual void OnViewVisibilityChange(View* view,
57                                      DispositionChangePhase phase) {}
58
59 protected:
60  virtual ~ViewObserver() {}
61};
62
63}  // namespace v2
64
65#endif  // UI_V2_PUBLIC_VIEW_OBSERVER_H_
66