Package com.sun.star.wizards.document

Source Code of com.sun.star.wizards.document.Control

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: Control.java,v $
* $Revision: 1.7 $
*
* 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.document;
import com.sun.star.awt.Point;
import com.sun.star.awt.Size;
import com.sun.star.awt.XControl;
import com.sun.star.awt.XControlModel;
import com.sun.star.awt.XLayoutConstrains;
import com.sun.star.awt.XWindowPeer;
import com.sun.star.beans.PropertyVetoException;
import com.sun.star.beans.UnknownPropertyException;
import com.sun.star.beans.XPropertySet;
import com.sun.star.container.ElementExistException;
import com.sun.star.container.XNameAccess;
import com.sun.star.container.XNameContainer;
import com.sun.star.container.XNamed;
import com.sun.star.sdbc.DataType;
import com.sun.star.wizards.common.*;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.AnyConverter;
import com.sun.star.drawing.XShape;
import com.sun.star.drawing.XShapes;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.lang.WrappedTargetException;


public class Control extends Shape{
    XControlModel xControlModel;
    XControl xControl;
    public XPropertySet xPropertySet;
    XPropertySet xControlPropertySet;
    XWindowPeer xWindowPeer;
    Object oDefaultValue;
    GridControl oGridControl;  
    String sServiceName;
    XNamed xNamed;
    final int SOMAXTEXTSIZE = 50;
    int icontroltype;
    protected XNameContainer xFormName;
    protected final int IIMGFIELDWIDTH = 2000;
       
       
    public Control(){
    }
       
    public Control(FormHandler _oFormHandler, String _sServiceName, Point _aPoint){
        super(_oFormHandler, _sServiceName, _aPoint, null);
    }

    public Control(FormHandler _oFormHandler, XNameContainer _xFormName, int _icontroltype, String _FieldName, Point _aPoint, Size _aSize){
    super(_oFormHandler, _aPoint, _aSize);
        xFormName = _xFormName;
        createControl(_icontroltype, _aPoint, _aSize, null, _FieldName);
    }


    public Control(FormHandler _oFormHandler, XShapes _xGroupShapes, XNameContainer _xFormName, int _icontroltype, Point _aPoint, Size _aSize){
    super(_oFormHandler, _aPoint, _aSize);
        xFormName = _xFormName;
        createControl(_icontroltype, _aPoint, _aSize, _xGroupShapes, null);
    }


    public Control(FormHandler _oFormHandler, int _icontroltype, Point _aPoint, Size _aSize){
        super(_oFormHandler, _aPoint, _aSize);
        createControl(_icontroltype, _aPoint, _aSize, null, null);
    }



    public void createControl(int _icontroltype, Point _aPoint, Size _aSize, XShapes _xGroupShapes, String _FieldName){
    try {
        this.icontroltype = _icontroltype;
        this.sServiceName = oFormHandler.sModelServices[icontroltype];
        Object oControlModel = oFormHandler.xMSFDoc.createInstance(sServiceName);
        xControlModel = (XControlModel) UnoRuntime.queryInterface(XControlModel.class, oControlModel);
        xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oControlModel);
        insertControlInContainer(_FieldName);      
        xControlShape.setControl(xControlModel);
        if  (_xGroupShapes == null)
            oFormHandler.xDrawPage.add(xShape);
        else
            _xGroupShapes.add(xShape);
        xControl = oFormHandler.xControlAccess.getControl(xControlModel);
        xControlPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xControl);
        xWindowPeer = xControl.getPeer();
    } catch (Exception e) {
        e.printStackTrace(System.out);
    }}


    public void insertControlInContainer(String _fieldname){
    try {
        if (xFormName != null){
            XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, xFormName);
            String sControlName = Desktop.getUniqueName(xNameAccess, getControlName(_fieldname));
            xPropertySet.setPropertyValue("Name", sControlName);
            xFormName.insertByName(sControlName, xControlModel);
        }              
    } catch (Exception e) {
        e.printStackTrace(System.out);
    }}


    public String getControlName(String _fieldname){
        String controlname = "";
        switch (getControlType()){
            case FormHandler.SOLABEL:
                controlname = "lbl" + _fieldname;
                break;
            case FormHandler.SOTEXTBOX:
                controlname = "txt" + _fieldname;
                break;
            case FormHandler.SOCHECKBOX:
                controlname = "chk" + _fieldname;
                break;
            case FormHandler.SODATECONTROL:
                controlname = "dat" + _fieldname;
                break;
            case FormHandler.SOTIMECONTROL:
                controlname = "tim" + _fieldname;
                break;
            case FormHandler.SONUMERICCONTROL:
                controlname = "fmt" + _fieldname;
                break;
            case FormHandler.SOGRIDCONTROL:
                controlname = "grd" + _fieldname;
                break;
            case FormHandler.SOIMAGECONTROL:
                controlname = "img" + _fieldname;
                break;
            default:
                controlname = "ctrl" + _fieldname;
        }
        return controlname;
    }
   

    private void setDefaultValue(Object DatabaseField){
        oDefaultValue = Helper.getUnoPropertyValue(DatabaseField, "DefaultValue");
    }


    public int getPreferredWidth(String sText){
        Size aPeerSize = getPreferredSize(sText);
        return ((aPeerSize.Width + 10) * oFormHandler.getXPixelFactor());
    }


    public int getPreferredHeight(String sText){
        Size aPeerSize = getPreferredSize(sText);
        if (icontroltype == FormHandler.SOCHECKBOX)
            return (aPeerSize.Height * oFormHandler.getXPixelFactor());
        else
            return ((aPeerSize.Height + 2) * oFormHandler.getXPixelFactor());
    }


    public int getPreferredWidth(){
        if (icontroltype == FormHandler.SOIMAGECONTROL)
            return IIMGFIELDWIDTH;
        else{
            Size aPeerSize = getPeerSize();
            // We increase the preferred Width a bit so that the control does not become too small
            // when we change the border from "3D" to "Flat"
            if (icontroltype == FormHandler.SOCHECKBOX)
                return((aPeerSize.Width * oFormHandler.getXPixelFactor()) );           
            else
                return((aPeerSize.Width * oFormHandler.getXPixelFactor()) + 200);
        }
    }


    public int getPreferredHeight(){
        if (this.icontroltype == FormHandler.SOIMAGECONTROL)
            return 2000;
        else{
            Size aPeerSize = getPeerSize();
            int nHeight = aPeerSize.Height;
            // We increase the preferred Height a bit so that the control does not become too small
            // when we change the border from "3D" to "Flat"
            return((nHeight+1) * oFormHandler.getYPixelFactor());
        }
    }


    public Size getPreferredSize(String sText){
    try {
        if (xPropertySet.getPropertySetInfo().hasPropertyByName("Text")){
            xPropertySet.setPropertyValue("Text", sText);
        }
        else if (xPropertySet.getPropertySetInfo().hasPropertyByName("Label"))
            xPropertySet.setPropertyValue("Label", sText);
        else
            throw new IllegalArgumentException();
       
        return getPeer().getPreferredSize();
    } catch (Exception e) {
        e.printStackTrace(System.out);
        return null;
    }}


    public void setPropertyValue(String _sPropertyName, Object _aPropertyValue) throws Exception{
        if (xPropertySet.getPropertySetInfo().hasPropertyByName(_sPropertyName))   
            xPropertySet.setPropertyValue(_sPropertyName, _aPropertyValue);    
    }
   
   
    /** the peer should be retrieved every time before it is used because it
     * might be disposed otherwise
     *
     * @return
     */
    public XLayoutConstrains getPeer(){
         return (XLayoutConstrains) UnoRuntime.queryInterface(XLayoutConstrains.class, xControl.getPeer());
    }

    public Size getPeerSize(){
    try {
        Size aPreferredSize = null;
        double dblEffMax = 0;
        if (xPropertySet.getPropertySetInfo().hasPropertyByName("EffectiveMax")){
            Object oValue = xPropertySet.getPropertyValue("EffectiveMax");
            if (xPropertySet.getPropertyValue("EffectiveMax") != com.sun.star.uno.Any.VOID)
                dblEffMax = AnyConverter.toDouble(xPropertySet.getPropertyValue("EffectiveMax"));
            if (dblEffMax == 0){
                // This is relevant for decimal fields
                xPropertySet.setPropertyValue("EffectiveValue", new Double(99999));
            }
            else{
                xPropertySet.setPropertyValue("EffectiveValue", new Double(dblEffMax)); //new Double(100000.2)); //
            }
            aPreferredSize = getPeer().getPreferredSize();
            xPropertySet.setPropertyValue("EffectiveValue", com.sun.star.uno.Any.VOID);
        }
        else if (this.icontroltype == FormHandler.SOCHECKBOX){
            aPreferredSize = getPeer().getPreferredSize();
        }
        else if (this.icontroltype == FormHandler.SODATECONTROL){
            xPropertySet.setPropertyValue("Date", new Integer(4711));       //TODO find a better date
            aPreferredSize = getPeer().getPreferredSize();
            xPropertySet.setPropertyValue("Date",  com.sun.star.uno.Any.VOID);
        }
        else if (this.icontroltype == FormHandler.SOTIMECONTROL){
            xPropertySet.setPropertyValue("Time", new Integer(47114));      //TODO find a better time
            aPreferredSize = getPeer().getPreferredSize();
            xPropertySet.setPropertyValue("Time",  com.sun.star.uno.Any.VOID);
        }
        else{
            String stext;  
            short iTextLength = AnyConverter.toShort(xPropertySet.getPropertyValue("MaxTextLen"));
            if (iTextLength < this.SOMAXTEXTSIZE)
                stext = FormHandler.SOSIZETEXT.substring(0,this.SOMAXTEXTSIZE);
            else
                stext = FormHandler.SOSIZETEXT.substring(0, iTextLength);  
            xPropertySet.setPropertyValue("Text", stext);
            aPreferredSize = getPeer().getPreferredSize();
            xPropertySet.setPropertyValue("Text", "");
        }
        return aPreferredSize;
    } catch (Exception e) {
        e.printStackTrace(System.out);
        return null;
    }}

   
    /**
     * @return
     */
    public int getControlType() {
        return icontroltype;
    }
}
TOP

Related Classes of com.sun.star.wizards.document.Control

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.