forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 | |
|  *
 | |
|  * This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef nsChangeObserver_h_
 | |
| #define nsChangeObserver_h_
 | |
| 
 | |
| class nsIContent;
 | |
| class nsAtom;
 | |
| namespace mozilla {
 | |
| namespace dom {
 | |
| class Document;
 | |
| }
 | |
| }  // namespace mozilla
 | |
| 
 | |
| #define NS_DECL_CHANGEOBSERVER                                            \
 | |
|   void ObserveAttributeChanged(mozilla::dom::Document* aDocument,         \
 | |
|                                nsIContent* aContent, nsAtom* aAttribute)  \
 | |
|       override;                                                           \
 | |
|   void ObserveContentRemoved(mozilla::dom::Document* aDocument,           \
 | |
|                              nsIContent* aContainer, nsIContent* aChild,  \
 | |
|                              nsIContent* aPreviousChild) override;        \
 | |
|   void ObserveContentInserted(mozilla::dom::Document* aDocument,          \
 | |
|                               nsIContent* aContainer, nsIContent* aChild) \
 | |
|       override;
 | |
| 
 | |
| // Something that wants to be alerted to changes in attributes or changes in
 | |
| // its corresponding content object.
 | |
| //
 | |
| // This interface is used by our menu code so we only have to have one
 | |
| // nsIMutationObserver per menu subtree root (e.g. per menubar).
 | |
| //
 | |
| // Any class that implements this interface must take care to unregister itself
 | |
| // on deletion.
 | |
| //
 | |
| // XXXmstange The methods below use nsIContent*. Eventually, the should be
 | |
| // converted to use mozilla::dom::Element* instead.
 | |
| class nsChangeObserver {
 | |
|  public:
 | |
|   // Called when the attribute aAttribute on the element aContent has changed.
 | |
|   // Only if aContent is being observed by this nsChangeObserver.
 | |
|   virtual void ObserveAttributeChanged(mozilla::dom::Document* aDocument,
 | |
|                                        nsIContent* aContent,
 | |
|                                        nsAtom* aAttribute) = 0;
 | |
| 
 | |
|   // Called when aChild has been removed from its parent aContainer.
 | |
|   // aPreviousSibling is the old previous sibling of aChild.
 | |
|   // aContainer is always the old parent node of aChild and of aPreviousSibling.
 | |
|   // Only called if aContainer or aContainer's parent node are being observed
 | |
|   // by this nsChangeObserver.
 | |
|   // In other words: If you observe an element, ObserveContentRemoved is called
 | |
|   // if that element's children and grandchildren are removed. NOT if the
 | |
|   // observed element itself is removed.
 | |
|   virtual void ObserveContentRemoved(mozilla::dom::Document* aDocument,
 | |
|                                      nsIContent* aContainer, nsIContent* aChild,
 | |
|                                      nsIContent* aPreviousSibling) = 0;
 | |
| 
 | |
|   // Called when aChild has been inserted into its new parent aContainer.
 | |
|   // Only called if aContainer or aContainer's parent node are being observed
 | |
|   // by this nsChangeObserver.
 | |
|   // In other words: If you observe an element, ObserveContentInserted is called
 | |
|   // if that element receives a new child or grandchild. NOT if the observed
 | |
|   // element itself is inserted anywhere.
 | |
|   virtual void ObserveContentInserted(mozilla::dom::Document* aDocument,
 | |
|                                       nsIContent* aContainer,
 | |
|                                       nsIContent* aChild) = 0;
 | |
| };
 | |
| 
 | |
| #endif  // nsChangeObserver_h_
 | 
