1- import { toArray } from 'util'
21import { DefinedPropertiesKey , WrappedObject } from '../WrappedObject'
32import { Types } from '../enums'
43import { Factory } from '../Factory'
54import { ImageData } from './ImageData'
65import { wrapNativeObject } from '../wrapNativeObject'
76import { Rectangle } from './Rectangle'
87
9- /**
10- * An MSAvailableOverride. This is not exposed, only used by SymbolInstance
11- */
128export class Override extends WrappedObject {
13- _findRepresentation ( ) {
9+ // Returns any override directly set on the symbol instance or null if none is set or this is an override point on a symbol source
10+ getValueSetOnInstance ( ) {
1411 if ( ! this . __symbolInstance ) {
15- return undefined
12+ return null
13+ }
14+ var overrideValues = this . __symbolInstance . sketchObject . overrideValues ( )
15+ for ( var i = 0 ; i < overrideValues . length ; i ++ ) {
16+ if (
17+ overrideValues [ i ] . overridePath ( ) . isEqual ( this . _object . overridePath ( ) )
18+ ) {
19+ return overrideValues [ i ] . value ( )
20+ }
1621 }
17- this . __symbolInstance . sketchObject . ensureDetachHasUpdated ( )
18- return toArray (
19- this . __symbolInstance . sketchObject . overrideContainer ( ) . flattenedChildren ( )
20- ) . find ( ( x ) => x . availableOverride ( ) . overridePoint ( ) . fullPath ( ) . isEqual ( this . sketchObject . overridePoint ( ) . fullPath ( ) ) )
22+ return null
2123 }
2224
23- getFrame ( ) {
24- const representation = this . _findRepresentation ( )
25- if ( ! representation ) {
26- return undefined
25+ // Returns the current value of the override point. This is the value set on the layer in the detached version of the symbol. It may be
26+ // out-of-date if the detached symbol hasn't yet updated.
27+ getResolvedValueOnDetachedSymbol ( ) {
28+ return this . affectedLayer . sketchObject . valueForOverrideAttribute (
29+ this . property
30+ )
31+ }
32+
33+ // Returns the value the override point will have if there is no override set on this instance.
34+ getDefaultValue ( ) {
35+ if ( ! this . __symbolInstance ) {
36+ return this . getResolvedValueOnDetachedSymbol ( )
2737 }
28- const path = representation . pathInInstance ( )
29- return new Rectangle ( CGPathGetBoundingBox ( path ) )
38+ return this . __symbolInstance . sketchObject . defaultValueForOverridePoint (
39+ this . _object
40+ )
41+ }
42+
43+ // Returns a SelectionItem representing this override point
44+ selectionItem ( ) {
45+ if ( this . __symbolInstance ) {
46+ return this . __symbolInstance . sketchObject . selectionItemForOverridePoint (
47+ this . sketchObject
48+ )
49+ }
50+ if ( this . __symbolMaster ) {
51+ return this . __symbolMaster . sketchObject . selectionItemForOverridePoint (
52+ this . sketchObject
53+ )
54+ }
55+ return null
3056 }
31- }
3257
58+ getOwningPage ( ) {
59+ if ( this . __symbolInstance ) {
60+ return this . __symbolInstance . sketchObject . parentPage ( )
61+ }
62+ if ( this . __symbolMaster ) {
63+ return this . __symbolMaster . sketchObject . parentPage ( )
64+ }
65+ return null
66+ }
67+
68+ getFrame ( ) {
69+ return new Rectangle ( this . _object . layer ( ) . frame ( ) . rect ( ) )
70+ }
71+ }
3372Override . type = Types . Override
3473Override [ DefinedPropertiesKey ] = { ...WrappedObject [ DefinedPropertiesKey ] }
35- Factory . registerClass ( Override , MSAvailableOverride )
74+ Factory . registerClass ( Override , MSOverridePoint )
3675
3776Override . define ( 'path' , {
3877 get ( ) {
39- return String ( this . _object . overridePoint ( ) . path ( ) )
78+ return String ( this . _object . path ( ) )
4079 } ,
4180} )
4281
4382Override . define ( 'property' , {
4483 get ( ) {
45- return String ( this . _object . overridePoint ( ) . attributeName ( ) )
84+ return String ( this . _object . attributeName ( ) )
4685 } ,
4786} )
4887
4988Override . define ( 'affectedLayer' , {
5089 get ( ) {
51- return wrapNativeObject ( this . _object . affectedLayer ( ) )
90+ var layer = this . _object . layer ( )
91+ if ( layer . instance ) {
92+ layer = layer . instance ( )
93+ }
94+ return wrapNativeObject ( layer )
5295 } ,
5396} )
5497
5598Override . define ( 'id' , {
5699 exportable : true ,
57100 importable : false ,
58101 get ( ) {
59- return String ( this . _object . overridePoint ( ) . name ( ) )
102+ return String ( this . _object . name ( ) )
60103 } ,
61104} )
62105
63106Override . define ( 'symbolOverride' , {
64107 get ( ) {
65- return Boolean ( this . _object . overridePoint ( ) . isSymbolOverride ( ) )
108+ return Boolean ( this . _object . isSymbolOverride ( ) )
66109 } ,
67110} )
68111
69112Override . define ( 'value' , {
70113 get ( ) {
71- const value = this . _object . currentValue ( )
114+ var value = this . getValueSetOnInstance ( )
115+ if ( ! value ) {
116+ value = this . getResolvedValueOnDetachedSymbol ( )
117+ }
72118 if ( this . property === 'image' ) {
73119 return ImageData . fromNative ( value )
74120 }
@@ -78,9 +124,9 @@ Override.define('value', {
78124 Object . keys ( value ) . forEach ( ( name ) => {
79125 map [ name ] = value [ name ]
80126 } )
81- return map
127+ return map
82128 }
83- return String ( this . _object . currentValue ( ) )
129+ return String ( value )
84130 } ,
85131 set ( value ) {
86132 // __symbolInstance is set when building the Override
@@ -93,45 +139,30 @@ Override.define('value', {
93139
94140Override . define ( 'isDefault' , {
95141 get ( ) {
96- return ! this . _object . hasOverride ( )
142+ return this . getValueSetOnInstance ( ) == null
97143 } ,
98144} )
99145
100146Override . define ( 'editable' , {
101147 get ( ) {
102- var overrides
103148 var master
104149 if ( typeof this . __symbolMaster !== 'undefined' ) {
105150 master = this . __symbolMaster . sketchObject
106- overrides = master . overridePoints
107151 } else if ( typeof this . __symbolInstance !== 'undefined' ) {
108152 var masterGetter = this . __symbolInstance . sketchObject . symbolMaster
109153 if ( masterGetter !== 'undefined' ) {
110154 master = masterGetter ( )
111155 }
112- overrides = this . __symbolInstance . sketchObject . overridePoints
113- }
114-
115- if ( typeof overrides == 'undefined' ) {
116- // Can't get the override points - maybe this is an immutable?
117- return false
118156 }
157+
119158 if ( typeof master == 'undefined' ) {
120159 throw new Error ( 'Unable to find the symbol source for this override' )
121160 }
122-
123- var point
124- overrides ( ) . forEach ( ( o ) => {
125- if ( o . fullPath ( ) . isEqual ( this . _object . overridePoint ( ) . fullPath ( ) ) ) {
126- point = o
127- }
128- } )
129-
130- if ( typeof point == 'undefined' ) {
131- return false
132- }
133-
134- if ( master . allowsOverrides ( ) && master . isOverridePointEditable ( point ) && point . isConfigurable ( ) ) {
161+ if (
162+ master . allowsOverrides ( ) &&
163+ master . isOverridePointEditable ( this . _object ) &&
164+ this . _object . isConfigurable ( )
165+ ) {
135166 return true
136167 } else {
137168 return false
@@ -143,60 +174,33 @@ Override.define('editable', {
143174 throw new Error ( 'Can only set `editable` for a symbol master' )
144175 }
145176 this . __symbolMaster . sketchObject . setOverridePoint_editable (
146- this . _object . overridePoint ( ) ,
177+ this . _object ,
147178 editable
148179 )
149180 } ,
150181} )
151182
152183Override . define ( 'selected' , {
153184 get ( ) {
154- // __symbolInstance is set when building the Override
155- if ( ! this . __symbolInstance ) {
156- return undefined
157- }
158-
159- const representation = this . _findRepresentation ( )
160-
161- if ( ! representation ) {
162- return false
185+ let item = this . selectionItem ( )
186+ if ( this . getOwningPage ( ) . selection ( ) . isItemSelected ( item ) ) {
187+ return true
163188 }
164-
165- return Boolean ( Number ( representation . isSelected ( ) ) )
189+ return false
166190 } ,
167191 set ( selected ) {
168- // __symbolInstance is set when building the Override
169- if ( ! this . __symbolInstance ) {
170- throw new Error ( 'Can only set `selected` for a symbol instance' )
171- }
172-
173- const documentData =
174- this . __symbolInstance . sketchObject . documentData &&
175- this . __symbolInstance . sketchObject . documentData ( )
176- if ( ! documentData ) {
177- return
178- }
179-
180- const representation = this . _findRepresentation ( )
181-
182- if ( ! representation ) {
183- return
184- }
185-
186- var selectionItem = representation . selectionItem ( )
187- if ( ! selectionItem ) {
192+ let item = this . selectionItem ( )
193+ if ( ! item ) {
188194 return
189195 }
190-
191- var page = this . __symbolInstance . sketchObject . parentPage ( )
196+ let page = this . getOwningPage ( )
192197 if ( ! page ) {
193198 return
194199 }
195-
196200 if ( selected ) {
197- page . changeSelectionByAddingItems_extendExisting ( [ selectionItem ] , true )
201+ page . changeSelectionByAddingItems_extendExisting ( [ item ] , true )
198202 } else {
199- page . changeSelectionByRemovingItems ( [ selectionItem ] )
203+ page . changeSelectionByRemovingItems ( [ item ] )
200204 }
201205 } ,
202206} )
0 commit comments