diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/ui/event/UnoDataAware.java')
-rw-r--r-- | wizards/com/sun/star/wizards/ui/event/UnoDataAware.java | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/ui/event/UnoDataAware.java b/wizards/com/sun/star/wizards/ui/event/UnoDataAware.java new file mode 100644 index 000000000000..632609d85f05 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/UnoDataAware.java @@ -0,0 +1,265 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +package com.sun.star.wizards.ui.event; + +import com.sun.star.awt.*; +import com.sun.star.lang.EventObject; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.wizards.common.Helper; + +/** + * @author rpiterman + * + * This class suppoprts imple cases where a UI control can + * be directly synchronized with a data property. + * Such controls are: the different text controls + * (synchronizing the "Text" , "Value", "Date", "Time" property), + * Checkbox controls, Dropdown listbox controls (synchronizing the + * SelectedItems[] property. + * For those controls, static convenience methods are offered, to simplify use. + */ +public class UnoDataAware extends DataAware +{ + + protected Object unoControl; + protected Object unoModel; + protected String unoPropName; + protected Object[] disableObjects = new Object[0]; + protected boolean inverse = false; + + protected UnoDataAware(Object dataObject, Value value, Object unoObject_, String unoPropName_) + { + super(dataObject, value); + unoControl = unoObject_; + unoModel = getModel(unoControl); + unoPropName = unoPropName_; + } + + public void setInverse(boolean i) + { + inverse = i; + } + + protected void enableControls(Object value) + { + Boolean b = getBoolean(value); + if (inverse) + { + b = b.booleanValue() ? Boolean.FALSE : Boolean.TRUE; + } + for (int i = 0; i < disableObjects.length; i++) + { + setEnabled(disableObjects[i], b); + } + } + + protected void setToUI(Object value) + { + //System.out.println("Settings uno property : "+ Helper.getUnoPropertyValue(this.unoModel,"Name") + "<-" +stringof(value)); + Helper.setUnoPropertyValue(unoModel, unoPropName, value); + } + + private String stringof(Object value) + { + if (value.getClass().isArray()) + { + StringBuffer sb = new StringBuffer("["); + for (int i = 0; i < ((short[]) value).length; i++) + { + sb.append(((short[]) value)[i]).append(" , "); + } + sb.append("]"); + return sb.toString(); + } + else + { + return value.toString(); + } + } + + /** + * Try to get from an arbitrary object a boolean value. + * Null returns Boolean.FALSE; + * A Boolean object returns itself. + * An Array returns true if it not empty. + * An Empty String returns Boolean.FALSE. + * everything else returns a Boolean.TRUE. + * @param value + * @return + */ + protected Boolean getBoolean(Object value) + { + if (value == null) + { + return Boolean.FALSE; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + else if (value.getClass().isArray()) + { + return ((short[]) value).length != 0 ? Boolean.TRUE : Boolean.FALSE; + } + else if (value.equals("")) + { + return Boolean.FALSE; + } + else if (value instanceof Number) + { + return ((Number) value).intValue() == 0 ? Boolean.TRUE : Boolean.FALSE; + } + else + { + return Boolean.TRUE; + } + } + + public void disableControls(Object[] controls) + { + disableObjects = controls; + } + + protected Object getFromUI() + { + return Helper.getUnoPropertyValue(unoModel, unoPropName); + } + + private static UnoDataAware attachTextControl(Object data, String prop, Object unoText, final Listener listener, String unoProperty, boolean field, Object value) + { + XTextComponent text = (XTextComponent) UnoRuntime.queryInterface(XTextComponent.class, unoText); + final UnoDataAware uda = new UnoDataAware(data, + field + ? DataAwareFields.getFieldValueFor(data, prop, value) + : new DataAware.PropertyValue(prop, data), + text, unoProperty); + text.addTextListener(new XTextListener() + { + + public void textChanged(TextEvent te) + { + uda.updateData(); + if (listener != null) + { + listener.eventPerformed(te); + } + } + + public void disposing(EventObject eo) + { + } + }); + return uda; + } + + public static UnoDataAware attachEditControl(Object data, String prop, Object unoControl, Listener listener, boolean field) + { + return attachTextControl(data, prop, unoControl, listener, "Text", field, ""); + } + + public static UnoDataAware attachDateControl(Object data, String prop, Object unoControl, Listener listener, boolean field) + { + return attachTextControl(data, prop, unoControl, listener, "Date", field, new Integer(0)); + } + + public static UnoDataAware attachTimeControl(Object data, String prop, Object unoControl, Listener listener, boolean field) + { + return attachTextControl(data, prop, unoControl, listener, "Time", field, new Integer(0)); + } + + public static UnoDataAware attachNumericControl(Object data, String prop, Object unoControl, Listener listener, boolean field) + { + return attachTextControl(data, prop, unoControl, listener, "Value", field, new Double(0)); + } + + public static UnoDataAware attachCheckBox(Object data, String prop, Object checkBox, final Listener listener, boolean field) + { + XCheckBox xcheckBox = ((XCheckBox) UnoRuntime.queryInterface(XCheckBox.class, checkBox)); + final UnoDataAware uda = new UnoDataAware(data, + field + ? DataAwareFields.getFieldValueFor(data, prop, new Short((short) 0)) + : new DataAware.PropertyValue(prop, data), + checkBox, "State"); + xcheckBox.addItemListener(itemListener(uda, listener)); + return uda; + } + + static XItemListener itemListener(final DataAware da, final Listener listener) + { + return new XItemListener() + { + + public void itemStateChanged(ItemEvent ie) + { + da.updateData(); + if (listener != null) + { + listener.eventPerformed(ie); + } + } + + public void disposing(EventObject eo) + { + } + }; + } + + public static UnoDataAware attachLabel(Object data, String prop, Object label, final Listener listener, boolean field) + { + return new UnoDataAware(data, + field ? DataAwareFields.getFieldValueFor(data, prop, "") + : new DataAware.PropertyValue(prop, data), + label, "Label"); + } + + public static UnoDataAware attachListBox(Object data, String prop, Object listBox, final Listener listener, boolean field) + { + XListBox xListBox = (XListBox) UnoRuntime.queryInterface(XListBox.class, listBox); + final UnoDataAware uda = new UnoDataAware(data, + field + ? DataAwareFields.getFieldValueFor(data, prop, new short[0]) + : new DataAware.PropertyValue(prop, data), + listBox, "SelectedItems"); + xListBox.addItemListener(itemListener(uda, listener)); + return uda; + } + + public static Object getModel(Object control) + { + return ((XControl) UnoRuntime.queryInterface(XControl.class, control)).getModel(); + } + + public static void setEnabled(Object control, boolean enabled) + { + setEnabled(control, enabled ? Boolean.TRUE : Boolean.FALSE); + } + + public static void setEnabled(Object control, Boolean enabled) + { + Helper.setUnoPropertyValue(getModel(control), "Enabled", enabled); + } +} |