InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ScriptData.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Jonathan W. Brown
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 __ScriptData__
25 #define __ScriptData__
26 
27 #include "KeyValuePair.h"
28 #include "K2TypeTraits.h"
29 #include "RequestContext.h"
30 #include <adobe/any_regular.hpp>
31 #include <adobe/vector.hpp>
32 
33 class IScript;
34 class IUnitOfMeasure;
35 class IPMStream;
36 class IScriptCoreFunctor;
37 class ScriptData;
38 
39 typedef adobe::vector< InterfacePtr<IScript> > ScriptList ;
40 typedef adobe::vector<ScriptData> ScriptListData ;
42 typedef adobe::vector<ScriptIDValuePair> ScriptRecordData ;
43 
44 // Traits used by K2Vector
45 DECLARE_OBJECT_TYPE(ScriptList);
46 DECLARE_OBJECT_TYPE(ScriptListData);
47 DECLARE_OBJECT_TYPE(ScriptRecordData);
48 
49 using namespace ScriptInfo ;
50 
56 {
57 public:
58  typedef object_type data_type ;
59 
60  ScriptData() : fDataType( s_empty ), fValue()
61  { }
62  virtual ~ScriptData(){}
63  ScriptData(const ScriptData& other) : fDataType( other.fDataType ), fValue( other.fValue )
64  { }
65  explicit ScriptData(int16 integer, bool16 isBoolean = kFalse);
66  explicit ScriptData(int32 integer);
67  explicit ScriptData(int64 integer);
68  explicit ScriptData(ScriptID enumerator);
69  explicit ScriptData(PMReal real);
70  explicit ScriptData(const PMString& string);
71  explicit ScriptData(const WideString& string);
72  explicit ScriptData(IScript* object);
73  explicit ScriptData(IPMStream* stream);
74  explicit ScriptData(const ScriptList& objectList);
75  explicit ScriptData(const ScriptListData& list);
76  explicit ScriptData(const ScriptRecordData& record);
77  explicit ScriptData(uint64 date);
78  explicit ScriptData(const IDFile& file);
79 
80  enum ScriptDataType {
81  s_empty, // nothing
82  s_boolean, // bool16
83  s_string, // PMString
84  s_shortint, // int16
85  s_longint, // int32
86  s_longlongint, // int64
87  s_double, // PMReal
88  s_object, // IScript
89  s_objectlist, // ScriptList (may contain 0, 1, or more Script objects)
90  s_list, // ScriptListData
91  s_date, // uint64
92  s_file, // IDFile
93  s_enumeration, // int32
94  s_unit, // PMReal in points
95  s_record, // ScriptRecordData
96  s_stream, // IPMStream
97  s_function // IScriptFunctor
98  };
99 
100  virtual ScriptData::ScriptDataType GetType() const { return fDataType; }
101  virtual bool16 IsEmpty() const { return fDataType == s_empty ; }
102 
103  void SetBoolean(bool16 boolean);
104  ErrorCode GetBoolean(bool16* const boolean) const;
105 
106  void SetInt16(int16 integer);
107  ErrorCode GetInt16(int16* const integer) const;
108 
109  void SetInt32(int32 integer);
110  ErrorCode GetInt32(int32* const integer) const;
111 
112  void SetInt64(int64 integer);
113  ErrorCode GetInt64(int64* const integer) const;
114 
115  void SetEnumeration(ScriptID enumeration ) ;
116  ErrorCode GetEnumeration(ScriptID* const enumeration) const;
117 
118  void SetPMReal(PMReal real);
119  ErrorCode GetPMReal(PMReal* const real) const;
120 
121  void SetPMString(const PMString& string);
122  ErrorCode GetPMString(PMString& string) const;
123 
127  virtual void SetWideString(const WideString& string);
128 
134  virtual ErrorCode GetWideString(WideString& string) const;
135 
136  void SetObject( IScript* object ) ;
137  IScript* QueryObject() const ;
138 
139  void SetObjectList( const ScriptList& objectList ) ;
140  ErrorCode GetObjectList( ScriptList& objectList ) const ;
141  //Note: Will convert a single script object or a ScriptListData of objects into an object list
142 
143  void SetStream( IPMStream* stream ) ;
144  IPMStream* QueryStream() const ;
145 
146  void SetFunction( IScriptCoreFunctor* func ) ;
147  IScriptCoreFunctor* QueryFunction() const ;
148 
149  void SetList( const ScriptListData& list );
150  ErrorCode GetList( ScriptListData& list ) const ;
151 
152  void SetRecord( const ScriptRecordData& record );
153  ErrorCode GetRecord( ScriptRecordData& record ) const ;
154 
155  void SetDate(uint64 date);
156  ErrorCode GetDate(uint64* const date) const;
157 
158  void SetFile( const IDFile& file ) ;
168  ErrorCode GetFile( IDFile* const file, const RequestContext& context, bool16 validateFolder = kTrue ) const ;
175  ErrorCode GetFileIfFile( IDFile& file, bool16 validateFolder = kTrue ) const ;
176 
199  enum UnitType
200  {
201  kXCoordinate, // Value is in XUnitOfMeasure
202  kYCoordinate, // Value is in YUnitOfMeasure
203  kPoints, // Value is in points
204  kTextUnits, // Value is in TextUnitUnitOfMeasure
205  kTextSizeUnits, // Value is in TextSizeUnitOfMeasure
206  kLineUnits // Value is in LineUnitOfMeasure
207  };
208 
216  void SetUnit ( const PMReal& unit, UnitType unitType, const IScript* script, const EngineContext& context ) ;
218  void SetUnit ( const PMReal& unit, IUnitOfMeasure* unitOfMeasure ) ;
230  ErrorCode GetUnit ( PMReal* const unit, UnitType unitType, const IScript* script, const EngineContext& context, bool16 allowNaN = kFalse ) const ;
232  ErrorCode RetrieveUnit ( PMReal* const unit ) const ;
234  ErrorCode ParseUnit ( PMReal* const unit, IUnitOfMeasure* unitOfMeasure ) const ;
236  ErrorCode ConvertUnit ( PMReal* const real, const ScriptID& unitType, const RequestContext& context ) const ;
238  ErrorCode ConvertUnit ( PMString& string ) const ;
239 
241  bool16 IsEqual( const ScriptData& scriptData, const RequestContext& context ) const ;
243  bool16 operator==( const ScriptData& scriptData ) const ;
244 
246  friend inline bool16 operator!=( const ScriptData& left, const ScriptData& right )
247  { return !(left == right); }
248 
251  friend inline void swap( ScriptData& left, ScriptData& right )
252  {
253  using namespace std;
254  swap(left.fValue, right.fValue);
255  swap(left.fDataType, right.fDataType);
256  }
257 
260  ScriptData(adobe::move_from<ScriptData> other) : fValue(adobe::move(other.source.fValue)), fDataType(adobe::move(other.source.fDataType))
261  { }
262 
265  ScriptData& operator=(ScriptData other)
266  { swap(*this, other); return *this; }
267 
269  virtual void Reset();
270 
272  virtual void ReadWrite( IPMStream* s, bool16 doPlatformReadWrite = kTrue ) ;
273 
279  PMString GetTypeAsString( const RequestContext& context ) const ;
280 
286  PMString GetValueAsString( const RequestContext& context ) const ;
287 
293  adobe::vector<PMString> GetValueAsVectorOfString( const RequestContext& context ) const;
294 
295 private:
296 
298  bool16 IsNaN(const PMReal* real) const;
299 
300  ScriptDataType fDataType;
301 
302  adobe::any_regular_t fValue;
303 };
304 
305 // specialize adobe::type_info<> to avoid typeid problems across DLL boundaries
306 ADOBE_NAME_TYPE_0("scriptid:indesign:adobe",ScriptID)
307 ADOBE_NAME_TYPE_0("scriptdata:indesign:adobe",ScriptData)
308 
309 DEFINEK2READWRITE( ScriptData ) ;
310 
311 #endif