77# ' @export
88# ' @param layer Character string naming the ggplot2 layer function (e.g., 'geom_point')
99# ' @param presets List of preset configurations
10- # ' @param preset_default Character string naming the default preset
1110# ' @param value The value of the layer entity
1211# ' @param ... Additional parameters passed to entity constructor
1312# ' @return A layer_entity object
1918# ' default = list(color = 'red'),
2019# ' blue = list(color = 'blue')
2120# ' ),
22- # ' preset_default = 'default',
2321# ' value = preset('default')
2422# ' )
2523# ' @rdname layer_entity
2624# ' @include entity_class.R struct_preset_class.R
27- layer_entity = function (layer = ' geom_point' , presets = list (), preset_default = ' default ' , value = preset(' default' ), ... ) {
28-
25+ layer_entity = function (layer = ' geom_point' , presets = list (), value = preset(' default' ), ... ) {
26+
2927 # If value is a character string, convert it to a preset
3028 if (is.character(value ) && length(value ) == 1 ) {
3129 value = preset(value )
3230 }
33-
31+
3432 # NEW: If value is a direct ggplot2 layer object, create a custom preset
3533 if (is(value , ' Layer' ) || is(value , ' theme' ) || is(value , ' Scale' ) || is(value , ' Facet' )) {
3634 # Create a custom preset with the provided layer
3735 custom_presets = list (custom = value )
3836 presets = c(presets , custom_presets )
3937 # Set the value to use the custom preset
4038 value = preset(' custom' )
41- # Update preset_default to use custom if no default specified
42- if (preset_default == ' default' && ! ' default' %in% names(presets )) {
43- preset_default = ' custom'
44- }
4539 }
46-
40+
4741 # new object
4842 out = .layer_entity(
4943 layer = layer ,
5044 presets = presets ,
51- preset_default = preset_default ,
5245 value = value ,
5346 ...
5447 )
@@ -60,8 +53,7 @@ layer_entity = function(layer = 'geom_point', presets = list(), preset_default =
6053 contains = ' entity' ,
6154 slots = c(
6255 layer = ' character' ,
63- presets = ' list' ,
64- preset_default = ' character'
56+ presets = ' list'
6557 ),
6658 prototype = list (
6759 name = ' ggplot2 layer' ,
@@ -70,15 +62,9 @@ layer_entity = function(layer = 'geom_point', presets = list(), preset_default =
7062 value = list (),
7163 layer = ' geom_point' ,
7264 presets = list (),
73- preset_default = ' default' ,
7465 .params = ' layer'
7566 ),
7667 validity = function (object ) {
77- # Check that preset_default exists in presets
78- if (length(object @ preset_default ) > 0 &&
79- ! object @ preset_default %in% c(names(object @ presets ), ' default' )) {
80- return (" preset_default must be 'default' or a name in presets" )
81- }
8268 return (TRUE )
8369 }
8470)
@@ -90,12 +76,12 @@ setGeneric("register_preset<-", function(obj, preset_name, value, force = TRUE)
9076setMethod(f = ' register_preset<-' ,
9177 signature = c(' layer_entity' ,' character' ,' list' ),
9278 definition = function (obj , preset_name , value , force = TRUE ) {
93-
79+
9480 check = preset_name %in% c(names(obj @ presets ), ' default' )
9581 if (check && ! force ) {
9682 stop(' This preset already exists. To replace it use "force = TRUE".' )
9783 }
98-
84+
9985 obj @ presets [[preset_name ]] = value
10086 return (obj )
10187 }
@@ -117,12 +103,12 @@ setMethod(f = 'available_presets',
117103setMethod(f = " value<-" ,
118104 signature = c(" layer_entity" ),
119105 definition = function (obj , value ) {
120-
106+
121107 # If value is a character string, convert it to a preset
122108 if (is.character(value ) && length(value ) == 1 ) {
123109 value = preset(value )
124110 }
125-
111+
126112 # If value is a direct ggplot2 layer object, create a custom preset
127113 if (is(value , ' Layer' ) || is(value , ' theme' ) || is(value , ' Scale' ) || is(value , ' Facet' )) {
128114 # Create a custom preset with the provided layer
@@ -131,25 +117,24 @@ setMethod(f = "value<-",
131117 # Set the value to use the custom preset
132118 value = preset(' custom' )
133119 }
134-
120+
135121 if (is(value , ' struct_preset' )) {
136122 # check for valid preset (local only)
137- local_check = value $ preset %in% c(names(obj @ presets ), ' default ' )
138-
123+ local_check = value $ preset %in% c(names(obj @ presets ))
124+
139125 if (! local_check ) {
140126 available_local = names(obj @ presets )
141- stop(' "' , value $ preset , ' " is not a valid preset for layer_entity "' ,
142- obj @ layer , ' ". Choose one of: ' , paste(available_local , collapse = ' , ' ),
143- ' . The default is "' , obj @ preset_default , ' "' )
127+ stop(' "' , value $ preset , ' " is not a valid preset for layer_entity "' ,
128+ obj @ layer , ' ". Choose one of: ' , paste(available_local , collapse = ' , ' ))
144129 }
145130 }
146-
131+
147132 # standardise names
148133 if (is.list(value )) {
149134 names(value ) = ggplot2 :: standardise_aes_names(names(value ))
150135 }
151136 obj = callNextMethod(obj , value )
152-
137+
153138 return (obj )
154139 }
155140)
@@ -159,29 +144,28 @@ setMethod(f = "value<-",
159144setMethod(f = " $<-" ,
160145 signature = c(" layer_entity" ),
161146 definition = function (x , name , value ) {
162-
147+
163148 # If value is a ggplot2 layer object, store it directly
164149 if (is(value , ' Layer' ) || is(value , ' theme' ) || is(value , ' Scale' ) || is(value , ' Facet' )) {
165150 name = ggplot2 :: standardise_aes_names(name )
166151 x [[name ]] = value
167152 return (x )
168153 }
169-
154+
170155 if (is(value , ' struct_preset' )) {
171156 # check for valid preset (local only)
172- local_check = value $ preset %in% c(names(x @ presets ), ' default ' )
173-
157+ local_check = value $ preset %in% c(names(x @ presets ))
158+
174159 if (! local_check ) {
175160 available_local = names(x @ presets )
176- stop(' "' , value $ preset , ' " is not a valid preset for layer_entity "' ,
177- name , ' ". Choose one of: ' , paste(available_local , collapse = ' , ' ),
178- ' . The default is "' , x @ preset_default , ' "' )
161+ stop(' "' , value $ preset , ' " is not a valid preset for layer_entity "' ,
162+ name , ' ". Choose one of: ' , paste(available_local , collapse = ' , ' ))
179163 }
180164 }
181-
165+
182166 name = ggplot2 :: standardise_aes_names(name )
183167 x [[name ]] = value
184-
168+
185169 return (x )
186170 }
187171)
@@ -193,7 +177,6 @@ setMethod(f = 'show',
193177 definition = function (object ) {
194178 callNextMethod() # force the default output
195179 cat(' layer: ' , object @ layer , ' \n ' , sep = ' ' )
196- cat(' preset default:' , object @ preset_default , ' \n ' , sep = ' ' )
197180 cat(' available presets:' , paste(names(object @ presets ), collapse = ' , ' ), ' \n ' , sep = ' ' )
198181 }
199182)
@@ -205,29 +188,25 @@ setGeneric("as_layer", function(obj, ...) standardGeneric("as_layer"))
205188setMethod (f = 'as_layer ',
206189 signature = c(' layer_entity' ),
207190 definition = function (obj ) {
208-
191+
209192 # If the value is already a ggplot2 layer object, return it directly
210193 if (is(obj @ value , ' Layer' ) || is(obj @ value , ' theme' ) || is(obj @ value , ' Scale' ) || is(obj @ value , ' Facet' )) {
211194 return (obj @ value )
212195 }
213-
196+
214197 # If value is NULL, return NULL
215198 if (is.null(obj @ value )) {
216199 return (NULL )
217200 }
218-
201+
219202 # get preset
220203 check = any(names(obj @ value ) == " preset" )
221204 if (check ) {
222- # substitute default
223- if (obj @ value $ preset == ' default' ) {
224- obj @ value $ preset = obj @ preset_default
225- }
226205 # get preset
227206 P = get_preset(obj , obj @ value $ preset )
228207 # remove preset label
229208 obj @ value $ preset = NULL
230-
209+
231210 if (! is.null(P )) {
232211 # If P is already a ggplot2 layer object, return it directly
233212 if (is(P , ' Layer' ) || is(P , ' theme' ) || is(P , ' Scale' ) || is(P , ' Facet' )) {
@@ -239,16 +218,16 @@ setMethod(f = 'as_layer',
239218 obj @ value = NULL
240219 }
241220 }
242-
221+
243222 # return NULL if specified; this layer not to be plotted
244223 if (is.null(obj @ value )) {
245224 return (NULL )
246225 }
247-
226+
248227 if (length(obj @ value ) > 0 ) {
249-
228+
250229 L = obj @ value
251-
230+
252231 # get mappings
253232 z = which(unlist(lapply(L , is , class2 = ' uneval' )))
254233 # join all mappings
@@ -279,19 +258,18 @@ setMethod(f = "value",
279258setMethod (f = "get_preset ",
280259 signature = c(' layer_entity' ,' character' ,' missing' ),
281260 definition = function (obj , preset_name , slot_name ) {
282-
261+
283262 # Check local presets only
284- check = preset_name %in% c(names(obj @ presets ), ' default ' )
263+ check = preset_name %in% c(names(obj @ presets ))
285264 if (check ) {
286265 return (obj @ presets [[preset_name ]])
287266 }
288-
267+
289268 # If we get here, the preset doesn't exist
290269 available_local = names(obj @ presets )
291-
292- stop(' "' , preset_name , ' " is not a valid preset for layer_entity "' ,
293- obj @ layer , ' ". Choose one of: ' , paste(available_local , collapse = ' , ' ),
294- ' . The default is "' , obj @ preset_default , ' "' )
270+
271+ stop(' "' , preset_name , ' " is not a valid preset for layer_entity "' ,
272+ obj @ layer , ' ". Choose one of: ' , paste(available_local , collapse = ' , ' ))
295273 }
296274)
297275
@@ -300,4 +278,4 @@ setMethod(f = "get_preset",
300278 # This is a simplified version - in practice, this would properly merge ggplot2 aesthetics
301279 # For now, just return the first argument
302280 return (a )
303- }
281+ }
0 commit comments