OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // C++ bridge class to send a selector to a Cocoa object when the | 5 // C++ bridge class to send a selector to a Cocoa object when the |
6 // bookmark model changes. Some Cocoa objects edit the bookmark model | 6 // bookmark model changes. Some Cocoa objects edit the bookmark model |
7 // and temporarily save a copy of the state (e.g. bookmark button | 7 // and temporarily save a copy of the state (e.g. bookmark button |
8 // editor). As a fail-safe, these objects want an easy cancel if the | 8 // editor). As a fail-safe, these objects want an easy cancel if the |
9 // model changes out from under them. For example, if you have the | 9 // model changes out from under them. For example, if you have the |
10 // bookmark button editor sheet open, then edit the bookmark in the | 10 // bookmark button editor sheet open, then edit the bookmark in the |
(...skipping 23 matching lines...) Expand all Loading... |
34 // IBOutlet. The arg passed is nil. | 34 // IBOutlet. The arg passed is nil. |
35 // Many notifications happen independently of node | 35 // Many notifications happen independently of node |
36 // (e.g. BeingDeleted), so |node| can be nil. | 36 // (e.g. BeingDeleted), so |node| can be nil. |
37 // | 37 // |
38 // |object| is NOT retained, since the expected use case is for | 38 // |object| is NOT retained, since the expected use case is for |
39 // ||object| to own the BookmarkModelObserverForCocoa and we don't | 39 // ||object| to own the BookmarkModelObserverForCocoa and we don't |
40 // want a retain cycle. | 40 // want a retain cycle. |
41 BookmarkModelObserverForCocoa(const BookmarkNode* node, | 41 BookmarkModelObserverForCocoa(const BookmarkNode* node, |
42 BookmarkModel* model, | 42 BookmarkModel* model, |
43 NSObject* object, | 43 NSObject* object, |
44 SEL selector) { | 44 SEL selector); |
45 DCHECK(model); | 45 virtual ~BookmarkModelObserverForCocoa(); |
46 node_ = node; | |
47 model_ = model; | |
48 object_ = object; | |
49 selector_ = selector; | |
50 model_->AddObserver(this); | |
51 } | |
52 virtual ~BookmarkModelObserverForCocoa() { | |
53 model_->RemoveObserver(this); | |
54 } | |
55 | 46 |
56 virtual void BookmarkModelBeingDeleted(BookmarkModel* model) { | 47 virtual void BookmarkModelBeingDeleted(BookmarkModel* model); |
57 Notify(); | |
58 } | |
59 virtual void BookmarkNodeMoved(BookmarkModel* model, | 48 virtual void BookmarkNodeMoved(BookmarkModel* model, |
60 const BookmarkNode* old_parent, | 49 const BookmarkNode* old_parent, |
61 int old_index, | 50 int old_index, |
62 const BookmarkNode* new_parent, | 51 const BookmarkNode* new_parent, |
63 int new_index) { | 52 int new_index); |
64 // Editors often have a tree of parents, so movement of folders | |
65 // must cause a cancel. | |
66 Notify(); | |
67 } | |
68 virtual void BookmarkNodeRemoved(BookmarkModel* model, | 53 virtual void BookmarkNodeRemoved(BookmarkModel* model, |
69 const BookmarkNode* parent, | 54 const BookmarkNode* parent, |
70 int old_index, | 55 int old_index, |
71 const BookmarkNode* node) { | 56 const BookmarkNode* node); |
72 // See comment in BookmarkNodeMoved. | |
73 Notify(); | |
74 } | |
75 virtual void BookmarkNodeChanged(BookmarkModel* model, | 57 virtual void BookmarkNodeChanged(BookmarkModel* model, |
76 const BookmarkNode* node) { | 58 const BookmarkNode* node); |
77 if ((node_ == node) || (!node_)) | 59 virtual void BookmarkImportBeginning(BookmarkModel* model); |
78 Notify(); | |
79 } | |
80 virtual void BookmarkImportBeginning(BookmarkModel* model) { | |
81 // Be conservative. | |
82 Notify(); | |
83 } | |
84 | 60 |
85 // Some notifications we don't care about, but by being pure virtual | 61 // Some notifications we don't care about, but by being pure virtual |
86 // in the base class we must implement them. | 62 // in the base class we must implement them. |
87 virtual void Loaded(BookmarkModel* model) { | 63 virtual void Loaded(BookmarkModel* model) { |
88 } | 64 } |
89 virtual void BookmarkNodeAdded(BookmarkModel* model, | 65 virtual void BookmarkNodeAdded(BookmarkModel* model, |
90 const BookmarkNode* parent, | 66 const BookmarkNode* parent, |
91 int index) { | 67 int index) { |
92 } | 68 } |
93 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, | 69 virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, |
94 const BookmarkNode* node) { | 70 const BookmarkNode* node) { |
95 } | 71 } |
96 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, | 72 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, |
97 const BookmarkNode* node) { | 73 const BookmarkNode* node) { |
98 } | 74 } |
99 | 75 |
100 virtual void BookmarkImportEnding(BookmarkModel* model) { | 76 virtual void BookmarkImportEnding(BookmarkModel* model) { |
101 } | 77 } |
102 | 78 |
103 private: | 79 private: |
104 const BookmarkNode* node_; // Weak; owned by a BookmarkModel. | 80 const BookmarkNode* node_; // Weak; owned by a BookmarkModel. |
105 BookmarkModel* model_; // Weak; it is owned by a Profile. | 81 BookmarkModel* model_; // Weak; it is owned by a Profile. |
106 NSObject* object_; // Weak, like a delegate. | 82 NSObject* object_; // Weak, like a delegate. |
107 SEL selector_; | 83 SEL selector_; |
108 | 84 |
109 void Notify() { | 85 void Notify(); |
110 [object_ performSelector:selector_ withObject:nil]; | |
111 } | |
112 | 86 |
113 DISALLOW_COPY_AND_ASSIGN(BookmarkModelObserverForCocoa); | 87 DISALLOW_COPY_AND_ASSIGN(BookmarkModelObserverForCocoa); |
114 }; | 88 }; |
115 | 89 |
116 #endif // CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_MODEL_OBSERVER_FOR_COCOA_H | 90 #endif // CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_MODEL_OBSERVER_FOR_COCOA_H |
OLD | NEW |