InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
IObjectModel.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Robin_Briggs
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 __IOBJECTMODEL__
25 #define __IOBJECTMODEL__
26 
27 
28 #include "IPMUnknown.h"
29 #include "ShuksanID.h"
30 #include "InterfaceTrackingUtils.h"
31 
32 class IClassInfo;
34 class ITagRegistry;
35 class IInterfaceRegistry;
36 class InterfaceProxyRegistry;
37 class ReadWriteObject;
38 class ObjectModel;
39 class BossConstructorList;
40 
41 
48 class IObjectModel : public IPMUnknown {
49 public:
50  enum { kDefaultIID = IID_IOBJECTMODEL };
51 
52  //-------------------------------------------------------------------------------
54 
55 
59  virtual uint32 CountClasses() const = 0;
60 
64  virtual ClassID GetClassID(uint32 indexCount) const = 0;
65 
70  virtual IClassInfo *QueryClassInfo(ClassID theClass) const = 0;
71 
76  virtual IObjectModelIterator * NewObjectModelIterator(PMIID iid) const = 0;
78 
79  //-------------------------------------------------------------------------------
81 
82 
88  virtual const char* GetIDName(int32 idSpace, int32 id) const = 0;
89 
94  virtual const char* GetIDName(ClassID id) const = 0;
95 
100  virtual const char* GetIDName(PMIID id) const = 0;
101 
106  virtual const char* GetIDName(ImplementationID id) const = 0;
107 
112  virtual const char* GetIDName(PluginID id) const = 0;
113 
118  virtual const char* GetIDName(ServiceID id) const = 0;
119 
124  virtual const char* GetIDName(WidgetID id) const = 0;
125 
130  virtual const char* GetIDName(ActionID id) const = 0;
132 
138  virtual IPMUnknown *ConstructObject(ClassID theClass, PMIID iid) const = 0;
139 
150  virtual ReadWriteObject QueryReadWrite(ImplementationID faceID) const = 0;
151 
155  virtual void ReleaseReadWrite(const ReadWriteObject& releaseThis) const = 0;
156 
157  virtual ReadWriteObject QueryInterfaceSnapshotReadWrite(ImplementationID faceID) const = 0;
158 
159  virtual InterfaceResetViewFun QueryInterfaceResetViewFun(ImplementationID prop) const = 0;
160 
161  virtual void ReleaseInterfaceResetViewFun (ImplementationID prop) const = 0;
162 
163  //-------------------------------------------------------------------------------
165 
166 
167  // Register a new ID.
168  virtual void RegisterID(PluginID ownerComponent, int32 IDSpaceID, const char* name, int32 id) = 0;
169 
170  // Tells the object model how to create an instance of the class.
171  virtual void AddClassFactory(PluginID ownerComponent, ClassID id, BossConstructor construct) = 0;
172  // Tells the object model how to create a given interface implementation. Factoryname is the name
173  // of the implementation class.
174  virtual void RegisterInterfaceFactory(PluginID ownerComponent, ImplementationID faceID) = 0;
175  virtual void FillOutInterfaceFactory(PluginID ownerComponent, ImplementationID faceID, InterfaceConstructor construct, InterfaceDestructor destroyer, InterfaceSizeOf sizeofFunc, InterfaceReadWrite readWriter, InterfaceReadWrite snapshotReadWriter, InterfaceResetViewFun resetViewFun) = 0;
176  virtual void AddImplementationAlias(PluginID ownerComponent, ImplementationID implID, ImplementationID basedOn) = 0;
177 
178  // Return a pointer to the tags registry.
179  virtual ITagRegistry *GetTagRegistry() = 0;
180 
181  // Return the ID of the plugin that supplies the implementation.
182  virtual PluginID GetOwner(ImplementationID implID) const = 0;
183  // Return the ID of the plugin that supplies the aliased implementation.
184  virtual PluginID GetOwnerAlias(ImplementationID implID) const = 0;
185 
186  virtual IInterfaceRegistry *GetInterfaceRegistry() const = 0;
187 
188  virtual BossConstructor GetClassConstructor(const ClassID theClass) const = 0;
189 
190 
191 #ifdef INTERFACEPROXIES_SUPPORTED
192  virtual IPMUnknown* CreateProxyObject ( const PMIID faceID,
193  IPMUnknown *ptheInterfaceImpl,
194  const int32 proxyID,
195  IPMUnknown *boss) = 0;
196 
197  virtual InterfaceReadWrite GetNonProxyReadWriter(ImplementationID faceID) const = 0;
198  virtual InterfaceReadWrite GetNonProxySnapshotReadWriter(ImplementationID faceID) const = 0;
199  virtual InterfaceResetViewFun GetNonProxyInterfaceResetViewFun(ImplementationID faceID) const = 0;
200 
201  virtual bool16 InterfaceIsTracked(const PMIID faceID) const = 0;
202  virtual void TrackInterface(const PMIID interfaceID, const ClassID clsid) = 0;
203  virtual bool16 BossIsTracked(const ClassID id) const = 0;
204  virtual void TrackBoss(const ClassID id) = 0;
205 #endif
206 
207 #ifdef DEBUG
208 #ifdef INTERFACEPROXIES_SUPPORTED
209  virtual bool16 IsBossTrackingOn(void) const = 0;
210 #endif
211  virtual void XferSavedDataStuff(IPMStream*) = 0;
212 #endif
213 
215 
216 };
217 
221  public:
222 
223 #ifdef DEBUG
224  ReadWriteObject(InterfaceReadWrite readWrite, ImplementationID implID = kInvalidImpl) :
225  fImplID(implID),
226 #else
227  ReadWriteObject(InterfaceReadWrite readWrite) :
228 #endif
229  fReadWrite(readWrite)
230  {}
231  InterfaceReadWrite GetReadWrite() const { return fReadWrite; }
232  private:
233  InterfaceReadWrite fReadWrite;
234 #ifdef DEBUG
235  public:
236  ImplementationID GetImplementationID() const
237  { return fImplID; }
238  private:
239  ImplementationID fImplID;
240 #endif
241 };
242 
243 
247 {
248 public:
250  fObjectModel(om),
251  fSnapshotReadWrite(om->QueryInterfaceSnapshotReadWrite(implID))
252  {}
253 
255  {
256  fObjectModel->ReleaseReadWrite(fSnapshotReadWrite);
257  }
258 
259  operator InterfaceReadWrite() const
260  { return fSnapshotReadWrite.GetReadWrite(); }
261  InterfaceReadWrite GetSnapshotReadWrite() const
262  { return fSnapshotReadWrite.GetReadWrite(); }
263 
264 private:
265  ReadWriteObject fSnapshotReadWrite;
266  const IObjectModel *fObjectModel;
267 };
268 
272 {
273 public:
275  fObjectModel(om),
276  fReadWrite(om->QueryReadWrite(implID))
277  {}
278 
280  {
281  fObjectModel->ReleaseReadWrite(fReadWrite);
282  }
283 
284  operator InterfaceReadWrite() const
285  { return fReadWrite.GetReadWrite(); }
286  InterfaceReadWrite GetReadWrite() const
287  { return fReadWrite.GetReadWrite(); }
288 
289 private:
290  ReadWriteObject fReadWrite;
291  const IObjectModel *fObjectModel;
292 };
293 
298  IObjectModel* GetObjectModelInstance();
299 
300 
301 
302 #endif // __IOBJECTMODEL__