InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
IChangeManager.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Lonnie Millett
6 //
7 // $Author$
8 //
9 // $DateTime$
10 //
11 // $Revision$
12 //
13 // $Change$
14 //
15 // Copyright 1997-2010 Adobe Systems Incorporated. All rights reserved.
16 //
17 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance
18 // with the terms of the Adobe license agreement accompanying it. If you have received
19 // this file from a source other than Adobe, then your use, modification, or
20 // distribution of it requires the prior written permission of Adobe.
21 //
22 //========================================================================================
23 
24 #ifndef __ICHANGEMANAGER__
25 #define __ICHANGEMANAGER__
26 
27 #ifndef __PMTYPES__
28 #include "PMTypes.h"
29 #endif
30 
31 #include "IPMUnknown.h"
32 #include "ShuksanID.h" // IID_ICHANGEMANAGER
33 
34 //----------------------------------------------------------------------------------------
35 // Typedefs
36 //----------------------------------------------------------------------------------------
37 
38 typedef int32 DependencyLabels;
39  // The valid range of labels
40 
41 //----------------------------------------------------------------------------------------
42 // Constants
43 //----------------------------------------------------------------------------------------
44 
45 const DependencyLabels kNoLabel = 0;
46 
47 //----------------------------------------------------------------------------------------
48 // Forward Declarations
49 //----------------------------------------------------------------------------------------
50 class ISubject;
51 class IObserver;
52 class IPMUnknown;
54 //----------------------------------------------------------------------------------------
55 // IChangeManager: Abstract Superclass of change managers
56 //----------------------------------------------------------------------------------------
57 
66 class IChangeManager : public IPMUnknown
67 {
68  public:
69  enum { kDefaultIID = IID_ICHANGEMANAGER };
70 
78  virtual void AddDependency(ISubject* subject, IObserver* observer,
79  const PMIID& observerIID, const PMIID& interestedIn,
80  bool lazy) = 0;
81 
91  virtual void RemoveDependency(ISubject* subject, IObserver* observer,
92  const PMIID& observerIID, const PMIID& interestedIn,
93  bool lazy) = 0;
94 
102  virtual bool16 HasDependency(ISubject* subject, IObserver* observer,
103  const PMIID& observerIID, const PMIID& interestedIn,
104  bool lazy) = 0;
105 
108  virtual void RemoveSubject(ISubject* theSubject) = 0;
109 
114  virtual void RemoveObserver(IObserver* theObserver, const PMIID& observerIID) = 0;
115 
118  virtual void RemoveSubject(const UIDRef& theSubject) = 0;
119 
124  virtual void RemoveObserver(const UIDRef& theObserver, const PMIID& observerIID) = 0;
125 
135  virtual void SubjectChanged(ISubject* subject, ClassID theChange,
136  const PMIID& interestedIn, void* changedBy) = 0;
137 
138  //-------------------------------------------------------------------------------
140 
141 
142  /* Similar to the previous method but this one lets you start the dependency notification
143  part way along the dependecy chain, i.e. with subject's observers but notifying them that
144  it was in fact originalSubject that changed. */
145  virtual void SubjectChanged(ISubject* originalSubject, ISubject* subject,
146  ClassID theChange, const PMIID& interestedIn, void* changedBy) = 0;
147 
148  virtual void SubjectModelChanged(ISubject* subject, IDataBase* model,
149  ClassID theChange, const PMIID& interestedIn,
150  void* changedBy, LazyNotificationData* data) = 0;
151 
152  virtual void SubjectModelChanged(ISubject* originalSubject, ISubject* subject, IDataBase* model,
153  ClassID theChange, const PMIID& interestedIn,
154  void* changedBy, LazyNotificationData* data) = 0;
155 
156  virtual void LazySubjectChanged(ISubject* subject, const PMIID& interestedIn,
157  const LazyNotificationData* data) = 0;
158 
159 #ifdef DEBUG
160  // returns IID that observer is attached to.
161  virtual PMIID IsObserverAttached(IObserver* theObserver, const PMIID& observerIID) = 0;
162  virtual void Dump() = 0;
163 #endif
164 
173  virtual bool16 CanSendMessage() const = 0;
174 
175  protected:
176  IChangeManager();
177 
179 };
180 
181 //----------------------------------------------------------------------------------------
182 // inlines
183 //----------------------------------------------------------------------------------------
184 
185 //----------------------------------------------------------------------------------------
186 // IChangeManager constructor
187 //----------------------------------------------------------------------------------------
188 
189 inline IChangeManager::IChangeManager()
190 {
191 }
192 
193 
194 #endif