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.pivot.factory
19
20 import org.apache.pivot.wtk.Button
21 import org.apache.pivot.wtk.ButtonGroup
22 import org.apache.pivot.wtk.RadioButton
23
24 /**
25 * Copied from SwingBuilder to avoid dependency on Swing module.
26 *
27 * @author Danno Ferrin
28 * @author Andres Almiray
29 */
30 class ButtonGroupFactory extends BeanFactory {
31 public static final String DELEGATE_PROPERTY_BUTTON_GROUP = '_delegateProperty:buttonGroup';
32 public static final String DEFAULT_DELEGATE_PROPERTY_BUTTON_GROUP = 'buttonGroup';
33
34 ButtonGroupFactory() {
35 super(ButtonGroup, false)
36 }
37
38 Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes) {
39 builder.context[DELEGATE_PROPERTY_BUTTON_GROUP] = attributes.remove('buttonGroupProperty') ?: DEFAULT_DELEGATE_PROPERTY_BUTTON_GROUP
40 return super.newInstance(builder, name, value, attributes)
41 }
42
43 static buttonGroupAttributeDelegate(FactoryBuilderSupport builder, Object node, Map attributes) {
44 def buttonGroupAttr = builder?.context?.getAt(DELEGATE_PROPERTY_BUTTON_GROUP) ?: DEFAULT_DELEGATE_PROPERTY_BUTTON_GROUP
45 if (attributes.containsKey(buttonGroupAttr)) {
46 def o = attributes.get(buttonGroupAttr)
47 if ((o instanceof ButtonGroup) && (node instanceof Button)) {
48 if (!(node instanceof RadioButton)) node.toggleButton = true
49 node.buttonGroup = o
50 attributes.remove(buttonGroupAttr)
51 }
52 }
53 }
54 }
|