InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
CDataExchangeController.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Dave Burnard
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 __CDataExchangeController__
25 #define __CDataExchangeController__
26 
27 #include "IDataExchangeController.h"
28 #include "ShuksanID.h"
29 #include "HelperInterface.h"
30 
31 #include "K2Vector.h"
32 #include "IDataExchangeHandler.h"
33 #include "DataExchangeHandlerEntry.h"
34 
35 //========================================================================================
36 // Forward declarations
37 //========================================================================================
38 class IDataBase;
39 class ICommand;
40 class IDocument;
41 
42 class DataExchangeTestProvider;
43 
44 
52 {
53  // ----- Constructors/desctructors
54  public:
56  virtual ~CDataExchangeController();
57 
58  virtual void ReadWrite(IPMStream* s, ImplementationID prop);
59 
60  // ----- Scrap handlers
61  public:
62  // ----- Registration
64  virtual void RegisterAllHandlers();
66  virtual bool16 RegisterDataHandler(ClassID dataClass);
68  virtual IDataExchangeHandler* NewDataHandler(ClassID dataClass) const;
69  // ----- Queries
71  virtual IDataExchangeHandler* QueryHandler(const PMFlavor& scrapFlavor) const;
73  virtual IDataExchangeHandler* QueryHandler(const ExternalPMFlavor& fromFlavor, const PMFlavor& toFlavor) const;
74  virtual IDataExchangeHandler* QueryHandlerForInternalize(DataExchangeResponse& response, const PMFlavor& internalizeToThisFlavor = kNoFlavor) const = 0;
75 
77  virtual void GetInternalizeableFlavors(OrderedFlavorList &flavorList) const;
78 
79  // ----- Active handler
80  public:
84  virtual void SetActiveHandler(IDataExchangeHandler* activeHandler);
85 
86  virtual bool16 NeedsToInternalize() const = 0;
87 
88  // ----- Scrap database, Initialization and Cleanup
89  public:
91  virtual IDataBase* GetScrapDataBase() const;
93  virtual ErrorCode Initialize();
95  virtual bool16 IsValid() const;
97  virtual void Cleanup();
98 
99  // ----- Memory purge
100  public:
102  virtual void Purge(int32 level);
104  static void Purge(int32 level, void *refPtr);
105 
106  void AllowPurge()
107  { ++fAllowPurge; }
108  void DisallowPurge()
109  { --fAllowPurge; }
110  bool PurgeIsAllowed() const
111  { return fAllowPurge == 0; }
112 
113  // ----- Support for testing
114  friend class DataExchangeTest;
115 
116  protected:
117  // ----- Internal Queries
125  virtual IDataExchangeHandler* QueryHandlerToInternalizeData(IPMDataObject* whichItem, DataExchangeResponse& response, const PMFlavor& toFlavor) const;
133  virtual IDataExchangeHandler* QueryHandlerToInternalizeData(DataObjectIterator& dataIter, DataExchangeResponse& response, const PMFlavor& toFlavor) const;
134 
135  // ----- Initialization
137  virtual ClassID GetScrapDocBossID() const;
138 
140  virtual PMString GetScrapDBFileName() const = 0;
142  virtual IDataBase* CreateDataBase() const = 0;
144  virtual void ResetMagicBytes() const = 0;
145 
147  virtual ErrorCode InitializeScrap();
149  virtual ErrorCode RevertScrap();
150 
152  virtual void RunNewScrapResponders(); //
153 
154  //this should be called only from clipboard interfaces for Mac and windows
155  virtual bool16 IsClipboardExternal() const{
156  ASSERT_FAIL("CDataExchangeController::IsClipboardExternal: should not be called here");
157  return kFalse;}
158 
159  protected:
160  // ----- Scrap database
161  bool16 fInitialized;
162  ErrorCode fInitializationErrorCode;
163  IDataBase* fScrapDB;
164  UID fScrapDocID;
165  bool16 fScrapDBFailed;
166  IPMUnknown* fRoot;
167  int32 fAllowPurge;
168 
169  // ----- Scrap handlers
170  bool16 fDataHandlersRegistered;
172 
173  // ----- Active handler
174  IDataExchangeHandler* fActiveHandler;
175  IDataExchangeHandler* GetActiveHandler() const {return fActiveHandler;}
176 
177  // ----- cached handler from last query
178  virtual IDataExchangeHandler* QueryCachedHandler() const;
179  virtual void SetCachedHandler(IDataExchangeHandler* handlerToCache);
180  IDataExchangeHandler* fCachedHandler;
181 
182 
183 };
184 
185 
186 
187 #endif