InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TextAttrScriptUtility.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 // ADOBE CONFIDENTIAL
16 //
17 // Copyright 1997-2010 Adobe Systems Incorporated. All rights reserved.
18 //
19 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance
20 // with the terms of the Adobe license agreement accompanying it. If you have received
21 // this file from a source other than Adobe, then your use, modification, or
22 // distribution of it requires the prior written permission of Adobe.
23 //
24 //
25 //========================================================================================
26 
27 #ifndef __TextAttrScriptUtility__
28 #define __TextAttrScriptUtility__
29 
30 #include "AttributeBossList.h"
31 #include "K2SmartPtr.h"
32 #include "ScriptData.h"
33 #include "ScriptIDEnumMap.h"
34 
35 #include "IAttrReport.h"
36 #include "IComposeScanner.h"
37 #include "IScript.h"
38 #include "IScriptRequestData.h"
39 #include "IScriptUtils.h"
40 
41 class IAttrReport;
42 class IScript;
43 class IScriptRequestData;
44 class IDataBase;
45 
46 typedef boost::shared_ptr<AttributeBossList> ScopedAttributeList ;
47 typedef ScopedAttributeList AddAttributeList ;
49 
120 {
121 public:
126  TextAttrScriptUtility( IScript* script, const RequestContext& context, IScript *target = nil ) ;
127  TextAttrScriptUtility( const AttributeBossList* attributeBossList, const RequestContext& context ) ;
128 
135  ErrorCode AccessBoolAttribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass);
136 
143  ErrorCode AccessInt16Attribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass);
144 
151  ErrorCode AccessInt32Attribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass);
152 
160  ErrorCode AccessUnitAttribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass, ScriptData::UnitType unitType);
161 
168  ErrorCode AccessRealAttribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass);
169 
176  ErrorCode AccessPercentageAttribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass);
177 
185  ErrorCode AccessColor(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass, const bool16 useTextColor = kTrue);
186 
193  ErrorCode AccessLineTypeAttribute(IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass);
194 
204  ErrorCode AccessFont(IScriptRequestData* data, const ScriptID& propID, const ClassID& fontClass,
205  const ClassID& styleClass, const ClassID& strand = kCharAttrStrandBoss, bool16 returnFontName = kFalse);
206 
215  ErrorCode AccessFontStyle(IScriptRequestData* data, const ScriptID& propID, const ClassID& fontClass,
216  const ClassID& styleClass, const ClassID& strand = kCharAttrStrandBoss);
217 
223  ErrorCode GetAttributeReport(const ClassID& attrClass, InterfacePtr<const IAttrReport>& attrReport);
224 
230  ErrorCode AddAttribute(const IPMUnknown* addAttr, IDataBase* targetDB = nil);
231 
237  ErrorCode AddAttributes( const AddAttributeList& addAttrList, IDataBase* targetDB = nil ) ;
238 
243  ErrorCode RemoveAttribute( const ClassID& removeAttr ) ;
244 
249  ErrorCode RemoveAttributes( const RemoveAttributeList& removeAttrList ) ;
250 
254  ErrorCode ApplyScriptCmd() ;
255 
264  ErrorCode AccessDesignAxes( IScriptRequestData* data, const ScriptID& propID, const ClassID& fontClass, const ClassID& styleClass, const ClassID& strand = kCharAttrStrandBoss );
265 
274  ErrorCode SetNthDesignAxis(IScriptRequestData* data, IScript* script, const ClassID& fontClass, const ClassID& styleClass, const ClassID& strand = kCharAttrStrandBoss );
282  ErrorCode IsNthDesignAxisHidden(IScriptRequestData* data, IScript* script, const ClassID& fontClass,const ClassID& styleClass);
283 protected:
287  IScript* GetScript() const { return fScript ; }
288 
292  IScript* GetTargetScript() const { return fTargetScript ; }
293 
297  const ScriptID& GetObjectType() const { return fObjectType ; }
298 
303  void CacheCurrentAttrs() ;
304 
312  ErrorCode AccessMultiplierAttribute( IScriptRequestData* data, const ScriptID& propID, const ClassID& attrClass, const PMReal& multiplier);
313 
318  bool16 IsFindChangeObject(const ScriptID& objectType);
319 
327 
334  IFontFamily *QueryFontFamilyFromModel(IScriptRequestData* data, const ClassID& fontClass, PMString fontStyle);
335 
336 
337 
338 private:
339  InterfacePtr<IScript> fScript;
340  InterfacePtr<IScript> fTargetScript;
341  const RequestContext fRequestContext;
342  const ScriptID fObjectType;
343  InterfacePtr<IComposeScanner> fComposeScanner; //"get" cache
344  ScopedAttributeList fStyleAttrs; //"get" cache
345  InterfacePtr<IPMUnknown> fAttrInterface; //"get" cache
346  const AttributeBossList* fCurrentAttrs; //"get" cache
347  AddAttributeList fAddAttrList; //"set" cache
348  RemoveAttributeList fRemoveAttrList; //"set" cache
349  IDataBase* fTargetDB; //"set" cache
350  ClassID fTargetStrand; //"set" cache
351 };
352 
355 template<class T, class S> class Accessor
356 {
357 public:
364  Accessor( TextAttrScriptUtility* parent, const ScriptIDEnumMapEntry* map, size_t mapSize, const ClassID& boss ) :
365  fScriptUtils(parent),
366  fMap(map, mapSize),
367  fAttrClass(boss)
368  {}
369 
376  ErrorCode Access( IScriptRequestData* data, IScript* script, const ScriptID& propID ) ;
377 
378 private:
379  TextAttrScriptUtility *fScriptUtils;
380  const ClassID& fAttrClass;
381  ScriptIDEnumMap fMap;
382 };
383 
384 template<class T, class S> ErrorCode Accessor<T,S>::Access( IScriptRequestData* data, IScript* script, const ScriptID& propID )
385 {
386  ErrorCode err;
387  ScriptData scriptData;
388  if (data->IsPropertyGet())
389  {
391  err = fScriptUtils->GetAttributeReport(fAttrClass, attrReport);
392  if (err == kUnSetError)
393  {
394  scriptData.SetEnumeration(en_Nothing);
395  data->AppendReturnData( script, propID, scriptData ) ;
396  return kSuccess;
397  }
398 
399  if (err != kSuccess) return err;
400 
401  InterfacePtr<const T> attr(attrReport, UseDefaultIID());
402  if (!attr) return kFailure;
403 
404  return fMap.GetForGetProperty( script, data, propID, attr->Get() ) ;
405  }
406  else if (data->IsPropertyPut())
407  {
408  err = data->ExtractRequestData(propID, scriptData);
409  if (err != kSuccess) return err;
410 
411  if (Utils<IScriptUtils>()->IsNothing( scriptData )) // removing an attribute
412  {
413  err = fScriptUtils->RemoveAttribute( fAttrClass ) ;
414  }
415  else // adding/modifying an attribute
416  {
417  int32 val(0);
418  err = fMap.GetForSetProperty( script, data, propID, val ) ;
419  if (err != kSuccess) return err;
420 
421  InterfacePtr<T> attrR(::CreateObject2<T>(fAttrClass));
422  if (!attrR) return kFailure;
423 
424  attrR->Set(static_cast<S>(val));
425  err = fScriptUtils->AddAttribute( attrR ) ;
426  }
427 
428  return err ;
429  }
430 
431  return kFailure ;
432 }
433 
434 #endif //__TextAttrScriptUtility__