blob: 65b28a4d53e445d7d212ee75dd00b5f6ceb6fae3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package groovy.swing.factory
import java.awt.*
class TabbedPaneFactory extends BeanFactory {
public static final String DELEGATE_PROPERTY_TITLE = "_delegateProperty:title";
public static final String DEFAULT_DELEGATE_PROPERTY_TITLE = "title";
public static final String DELEGATE_PROPERTY_TAB_ICON = "_delegateProperty:tabIcon";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_ICON = "tabIcon";
public static final String DELEGATE_PROPERTY_TAB_DISABLED_ICON = "_delegateProperty:tabDisabledIcon";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_DISABLED_ICON = "tabDisabledIcon";
public static final String DELEGATE_PROPERTY_TAB_TOOL_TIP = "_delegateProperty:tabToolTip";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_TOOL_TIP = "tabToolTip";
public static final String DELEGATE_PROPERTY_TAB_FOREGROUND = "_delegateProperty:tabForeground";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_FOREGROUND = "tabForeground";
public static final String DELEGATE_PROPERTY_TAB_BACKGROUND = "_delegateProperty:tabBackground";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_BACKGROUND = "tabBackground";
public static final String DELEGATE_PROPERTY_TAB_ENABLED = "_delegateProperty:tabEnabled";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_ENABLED = "tabEnabled";
public static final String DELEGATE_PROPERTY_TAB_MNEMONIC = "_delegateProperty:tabMnemonic";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_MNEMONIC = "tabMnemonic";
public static final String DELEGATE_PROPERTY_TAB_DISPLAYED_MNEMONIC_INDEX = "_delegateProperty:tabDisplayedMnemonicIndex";
public static final String DEFAULT_DELEGATE_PROPERTY_TAB_DISPLAYED_MNEMONIC_INDEX = "tabDisplayedMnemonicIndex";
public static final String CONTEXT_DATA_KEY = "TabbdePaneFactoryData";
public TabbedPaneFactory(Class beanClass) {
super(beanClass, false)
}
public Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes) throws InstantiationException, IllegalAccessException {
def newChild = super.newInstance(builder, name, value, attributes)
builder.context.tabbedPaneFactoryClosure =
{ FactoryBuilderSupport cBuilder, Object cNode, Map cAttributes ->
if (builder.current == newChild) inspectChild(cBuilder, cNode, cAttributes)
}
builder.addAttributeDelegate(builder.context.tabbedPaneFactoryClosure)
builder.context.selectedIndex = attributes.remove('selectedIndex')
builder.context.selectedComponent = attributes.remove('selectedComponent')
builder.context[DELEGATE_PROPERTY_TITLE] = attributes.remove("titleProperty") ?: DEFAULT_DELEGATE_PROPERTY_TITLE
builder.context[DELEGATE_PROPERTY_TAB_ICON] = attributes.remove("tabIconProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_ICON
builder.context[DELEGATE_PROPERTY_TAB_DISABLED_ICON] = attributes.remove("tabDisabledIconProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_DISABLED_ICON
builder.context[DELEGATE_PROPERTY_TAB_TOOL_TIP] = attributes.remove("tabToolTipProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_TOOL_TIP
builder.context[DELEGATE_PROPERTY_TAB_BACKGROUND] = attributes.remove("tabBackgroundProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_BACKGROUND
builder.context[DELEGATE_PROPERTY_TAB_FOREGROUND] = attributes.remove("tabForegroundProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_FOREGROUND
builder.context[DELEGATE_PROPERTY_TAB_ENABLED] = attributes.remove("tabEnabledProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_ENABLED
builder.context[DELEGATE_PROPERTY_TAB_MNEMONIC] = attributes.remove("tabMnemonicProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_MNEMONIC
builder.context[DELEGATE_PROPERTY_TAB_DISPLAYED_MNEMONIC_INDEX] = attributes.remove("tabDisplayedMnemonicIndexProperty") ?: DEFAULT_DELEGATE_PROPERTY_TAB_DISPLAYED_MNEMONIC_INDEX
return newChild;
}
public static void inspectChild(FactoryBuilderSupport builder, Object node, Map attributes) {
if (!(node instanceof Component) || (node instanceof Window)) {
return;
}
def name = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TITLE) ?: DEFAULT_DELEGATE_PROPERTY_TITLE)
def icon = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_ICON) ?: DEFAULT_DELEGATE_PROPERTY_TAB_ICON)
def disabledIcon = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_DISABLED_ICON) ?: DEFAULT_DELEGATE_PROPERTY_TAB_DISABLED_ICON)
def toolTip = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_TOOL_TIP) ?: DEFAULT_DELEGATE_PROPERTY_TAB_TOOL_TIP)
def background = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_BACKGROUND) ?: DEFAULT_DELEGATE_PROPERTY_TAB_BACKGROUND)
def foreground = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_FOREGROUND) ?: DEFAULT_DELEGATE_PROPERTY_TAB_FOREGROUND)
def enabled = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_ENABLED) ?: DEFAULT_DELEGATE_PROPERTY_TAB_ENABLED)
def mnemonic = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_MNEMONIC) ?: DEFAULT_DELEGATE_PROPERTY_TAB_MNEMONIC)
def displayedMnemonicIndex = attributes.remove(builder?.parentContext?.getAt(DELEGATE_PROPERTY_TAB_DISPLAYED_MNEMONIC_INDEX) ?: DEFAULT_DELEGATE_PROPERTY_TAB_DISPLAYED_MNEMONIC_INDEX)
def tabbedPaneContext = builder.context.get(CONTEXT_DATA_KEY) ?: [:];
if (tabbedPaneContext.isEmpty()) {
builder.context.put(CONTEXT_DATA_KEY, tabbedPaneContext)
}
tabbedPaneContext.put(node, [name, icon, disabledIcon, toolTip, background, foreground, enabled, mnemonic, displayedMnemonicIndex])
}
public void setChild(FactoryBuilderSupport builder, Object parent, Object child) {
if (!(child instanceof Component) || (child instanceof Window)) {
return;
}
try {
def title = builder.context[CONTEXT_DATA_KEY]?.get(child) ?: [null, null, null, null, null, null, null, null, null]
if (title[0] == null) {
title[0] = child.name
}
parent.addTab(title[0], title[1], child, title[3])
int index = parent.indexOfComponent(child)
if (title[2]) {
parent.setDisabledIconAt(index, title[2])
}
if (title[4]) {
parent.setBackgroundAt(index, title[4])
}
if (title[5]) {
parent.setForegroundAt(index, title[5])
}
if (title[6] != null) {
parent.setEnabledAt(index, title[6])
}
if (title[7]) {
def mnemonic = title[7]
if ((mnemonic instanceof String) || (mnemonic instanceof GString)) {
parent.setMnemonicAt(index, mnemonic.charAt(0) as int)
} else {
parent.setMnemonicAt(index, mnemonic as int)
}
}
if (title[8]) {
parent.setDisplayedMnemonicIndexAt(index, title[8])
}
} catch (MissingPropertyException mpe) {
parent.add(child)
}
}
public void onNodeCompleted( FactoryBuilderSupport builder, Object parent, Object node ) {
super.onNodeCompleted (builder, parent, node)
builder.removeAttributeDelegate(builder.context.tabbedPaneFactoryClosure)
if (builder.context.selectedComponent != null) {
node.selectedComponent = builder.context.selectedComponent
}
if (builder.context.selectedIndex != null) {
node.selectedIndex = builder.context.selectedIndex
}
}
}