ControlFactory.groovy
01 /*
02  * SPDX-License-Identifier: Apache-2.0
03  *
04  * Copyright 2008-2017 the original author or authors.
05  *
06  * Licensed under the Apache License, Version 2.0 (the "License");
07  * you may not use this file except in compliance with the License.
08  * You may obtain a copy of the License at
09  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 package griffon.builder.javafx.factory
19 
20 import griffon.javafx.support.JavaFXAction
21 import javafx.scene.control.ComboBox
22 
23 import static griffon.builder.javafx.factory.ActionFactory.applyAction
24 import static griffon.builder.javafx.factory.ActionFactory.extractActionParams
25 
26 class ControlFactory extends groovyx.javafx.factory.ControlFactory {
27     ControlFactory(Class beanClass) {
28         super(beanClass);
29     }
30 
31     Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributesthrows InstantiationException, IllegalAccessException {
32         JavaFXAction action = null
33         Map actionParams = [:]
34         if (value instanceof JavaFXAction) {
35             action = value
36             value = null
37             actionParams = extractActionParams(attributes)
38         }
39 
40         def control = super.newInstance(builder, name, value, attributes)
41 
42         if (control instanceof ComboBox && action) {
43             applyAction(control, action, actionParams)
44         }
45 
46         control
47     }
48 }