diff options
Diffstat (limited to 'odk/examples/DevelopersGuide/GUI')
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/DialogDocument.java | 145 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/ImageControlSample.java | 163 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/Makefile | 142 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/MessageBox.java | 245 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java | 68 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/SystemDialog.java | 186 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/UnoDialogSample.java | 1482 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java | 264 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/UnoMenu.java | 167 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/UnoMenu2.java | 95 | ||||
-rw-r--r-- | odk/examples/DevelopersGuide/GUI/oologo.gif | bin | 0 -> 2563 bytes |
11 files changed, 2957 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/GUI/DialogDocument.java b/odk/examples/DevelopersGuide/GUI/DialogDocument.java new file mode 100644 index 000000000000..5edefb8b118e --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/DialogDocument.java @@ -0,0 +1,145 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +import com.sun.star.awt.PushButtonType; +import com.sun.star.awt.Rectangle; +import com.sun.star.awt.VclWindowPeerAttribute; +import com.sun.star.awt.WindowAttribute; +import com.sun.star.awt.WindowClass; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XView; +import com.sun.star.awt.XWindow; +import com.sun.star.awt.XWindowPeer; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XMultiPropertySet; +import com.sun.star.frame.XComponentLoader; +import com.sun.star.frame.XFrame; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + + +public class DialogDocument extends UnoDialogSample { + + public DialogDocument(XComponentContext _xContext, XMultiComponentFactory _xMCF) { + super(_xContext, _xMCF); + } + + public static void main(String args[]){ + DialogDocument oDialogDocument = null; + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + oDialogDocument = new DialogDocument(xContext, xMCF); + oDialogDocument.initialize( new String[] {"Height", "Moveable", "Name","PositionX","PositionY", "Step", "TabIndex","Title","Width"}, + new Object[] { new Integer(400), Boolean.TRUE, "Dialog1", new Integer(102),new Integer(41), new Integer(1), new Short((short) 0), "Document-Dialog", new Integer(300)}); + oDialogDocument.createWindowPeer(); + Object oFTHeaderModel = oDialogDocument.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTHeaderModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel); + xFTHeaderModelMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(8), "This code-sample demonstrates how to display an office document in a dialog window", "HeaderLabel", new Integer(6), new Integer(6), new Integer(300)}); + // add the model to the NameContainer of the dialog model + oDialogDocument.m_xDlgModelNameContainer.insertByName("Headerlabel", oFTHeaderModel); + oDialogDocument.showDocumentinDialogWindow(oDialogDocument.m_xWindowPeer, new Rectangle(40, 50, 420, 550), "private:factory/swriter"); + + oDialogDocument.insertButton(oDialogDocument, 126, 370, 50, "~Close dialog", (short) PushButtonType.OK_value); + oDialogDocument.executeDialog(); + }catch( Exception ex ) { + ex.printStackTrace(System.out); + } finally{ + //make sure always to dispose the component and free the memory! + if (oDialogDocument != null){ + if (oDialogDocument.m_xComponent != null) { + oDialogDocument.m_xComponent.dispose(); + } + } + } + + System.exit( 0 ); + } + + public void showDocumentinDialogWindow(XWindowPeer _xParentWindowPeer, Rectangle _aRectangle, String _sUrl){ + try { + // The Toolkit is the creator of all windows... + Object oToolkit = m_xMCF.createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext); + XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, oToolkit); + + // set up a window description and create the window. A parent window is always necessary for this... + com.sun.star.awt.WindowDescriptor aWindowDescriptor = new com.sun.star.awt.WindowDescriptor(); + // a simple window is enough for this purpose... + aWindowDescriptor.Type = WindowClass.SIMPLE; + aWindowDescriptor.WindowServiceName = "dockingwindow"; + // assign the parent window peer as described in the idl description... + aWindowDescriptor.Parent = _xParentWindowPeer; + aWindowDescriptor.ParentIndex = 1; + aWindowDescriptor.Bounds = _aRectangle; + + // set the window attributes... + // The attribute CLIPCHILDREN causes the parent to not repaint the areas of the children... + aWindowDescriptor.WindowAttributes = VclWindowPeerAttribute.CLIPCHILDREN + WindowAttribute.BORDER + WindowAttribute.SHOW; + XWindowPeer xWindowPeer = xToolkit.createWindow(aWindowDescriptor); + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xWindowPeer); + XView xView = (XView) UnoRuntime.queryInterface(XView.class, xWindow); + + // create a frame and initialize it with the created window... + Object oFrame = m_xMCF.createInstanceWithContext("com.sun.star.frame.Frame", m_xContext); + // The frame should be of global scope because it's within the responsibility to dispose it after usage + m_xFrame = (XFrame) UnoRuntime.queryInterface(XFrame.class, oFrame); + m_xFrame.initialize(xWindow); + + // load the document and open it in preview mode + XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, m_xFrame); + PropertyValue[] aPropertyValues = new PropertyValue[2]; + PropertyValue aPropertyValue = new PropertyValue(); + aPropertyValue.Name = "Preview"; + aPropertyValue.Value = Boolean.TRUE; + aPropertyValues[0] = aPropertyValue; + aPropertyValue = new PropertyValue(); + aPropertyValue.Name = "ReadOnly"; + aPropertyValue.Value = Boolean.TRUE; + aPropertyValues[1] = aPropertyValue; + xComponentLoader.loadComponentFromURL(_sUrl, "_self", 0, aPropertyValues); + } catch (com.sun.star.lang.IllegalArgumentException ex) { + ex.printStackTrace(); + throw new java.lang.RuntimeException("cannot happen..."); + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(); + throw new java.lang.RuntimeException("cannot happen..."); + } + } + +} diff --git a/odk/examples/DevelopersGuide/GUI/ImageControlSample.java b/odk/examples/DevelopersGuide/GUI/ImageControlSample.java new file mode 100644 index 000000000000..024894ae840b --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/ImageControlSample.java @@ -0,0 +1,163 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +import com.sun.star.awt.PushButtonType; +import com.sun.star.awt.XDialog; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XMultiPropertySet; +import com.sun.star.beans.XPropertySet; +import com.sun.star.graphic.XGraphic; +import com.sun.star.graphic.XGraphicProvider; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.ucb.XFileIdentifierConverter; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + + +public class ImageControlSample extends UnoDialogSample{ + /** + * Creates a new instance of ImageControlSample + */ + public ImageControlSample(XComponentContext _xContext, XMultiComponentFactory _xMCF){ + super(_xContext, _xMCF); + super.createDialog(_xMCF); + } + + // to start this script pass a parameter denoting the system path to a graphic to be displayed + public static void main(String args[]) { + ImageControlSample oImageControlSample = null; + try { + if (args.length == 0) { + System.out.println("Please pass a parameter denoting the system path to your graphic!"); + return; + } + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ){ + System.out.println("Connected to a running office ..."); + } + XMultiComponentFactory xMCF = xContext.getServiceManager(); + oImageControlSample = new ImageControlSample(xContext, xMCF); + oImageControlSample.initialize( new String[] {"Height", "Moveable", "Name","PositionX","PositionY", "Step", "TabIndex","Title","Width"}, + new Object[] { new Integer(100), Boolean.TRUE, "MyTestDialog", new Integer(102),new Integer(41), new Integer(0), new Short((short) 0), "OpenOffice", new Integer(230)}); + Object oFTHeaderModel = oImageControlSample.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTHeaderModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel); + xFTHeaderModelMPSet.setPropertyValues( + new String[] {"Height", "Label", "MultiLine", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(16), "This code-sample demonstrates how to create an ImageControlSample within a dialog", Boolean.TRUE, "HeaderLabel", new Integer(6), new Integer(6), new Integer(210)}); + // add the model to the NameContainer of the dialog model + oImageControlSample.m_xDlgModelNameContainer.insertByName("Headerlabel", oFTHeaderModel); + XPropertySet xICModelPropertySet = oImageControlSample.insertImageControl(xMCF, 68, 30, 32, 90); + oImageControlSample.insertButton(oImageControlSample, 90, 75, 50, "~Close dialog", (short) PushButtonType.OK_value); + oImageControlSample.createWindowPeer(); + // note: due to issue i76718 ("Setting graphic at a controlmodel required dialog peer") the graphic of the image control + // may not be set before the peer of the dialog has been created. + XGraphic xGraphic = oImageControlSample.getGraphic(oImageControlSample.m_xMCF, args[0]); + xICModelPropertySet.setPropertyValue("Graphic", xGraphic); + oImageControlSample.xDialog = (XDialog) UnoRuntime.queryInterface(XDialog.class, oImageControlSample.m_xDialogControl); + oImageControlSample.executeDialog(); + }catch( Exception e ) { + System.err.println( e + e.getMessage()); + e.printStackTrace(); + } finally{ + //make sure always to dispose the component and free the memory! + if (oImageControlSample != null){ + if (oImageControlSample.m_xComponent != null){ + oImageControlSample.m_xComponent.dispose(); + } + } + } + System.exit( 0 ); + } + + + public XPropertySet insertImageControl(XMultiComponentFactory _xMCF, int _nPosX, int _nPosY, int _nHeight, int _nWidth){ + XPropertySet xICModelPropertySet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "ImageControl"); + // convert the system path to the image to a FileUrl + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oICModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlImageControlModel"); + XMultiPropertySet xICModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oICModel); + xICModelPropertySet =(XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oICModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + // The image is not scaled + xICModelMPSet.setPropertyValues( + new String[] {"Border", "Height", "Name", "PositionX", "PositionY", "ScaleImage", "Width"}, + new Object[] { new Short((short) 1), new Integer(_nHeight), sName, new Integer(_nPosX), new Integer(_nPosY), Boolean.FALSE, new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oICModel); + }catch (com.sun.star.uno.Exception ex){ + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xICModelPropertySet; + } + + +// creates a UNO graphic object that can be used to be assigned +// to the property "Graphic" of a controlmodel + public XGraphic getGraphic(XMultiComponentFactory _xMCF, String _sImageSystemPath){ + XGraphic xGraphic = null; + try{ + java.io.File oFile = new java.io.File(_sImageSystemPath); + Object oFCProvider = _xMCF.createInstanceWithContext("com.sun.star.ucb.FileContentProvider", this.m_xContext); + XFileIdentifierConverter xFileIdentifierConverter = (XFileIdentifierConverter) UnoRuntime.queryInterface(XFileIdentifierConverter.class, oFCProvider); + String sImageUrl = xFileIdentifierConverter.getFileURLFromSystemPath(_sImageSystemPath, oFile.getAbsolutePath()); + + // create a GraphicProvider at the global service manager... + Object oGraphicProvider = m_xMCF.createInstanceWithContext("com.sun.star.graphic.GraphicProvider", m_xContext); + XGraphicProvider xGraphicProvider = (XGraphicProvider) UnoRuntime.queryInterface(XGraphicProvider.class, oGraphicProvider); + // create the graphic object + PropertyValue[] aPropertyValues = new PropertyValue[1]; + PropertyValue aPropertyValue = new PropertyValue(); + aPropertyValue.Name = "URL"; + aPropertyValue.Value = sImageUrl; + aPropertyValues[0] = aPropertyValue; + xGraphic = xGraphicProvider.queryGraphic(aPropertyValues); + return xGraphic; + }catch (com.sun.star.uno.Exception ex){ + throw new java.lang.RuntimeException("cannot happen..."); + }} +} diff --git a/odk/examples/DevelopersGuide/GUI/Makefile b/odk/examples/DevelopersGuide/GUI/Makefile new file mode 100644 index 000000000000..4ec70489cedf --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/Makefile @@ -0,0 +1,142 @@ +#************************************************************************* +# +# The Contents of this file are made available subject to the terms of +# the BSD license. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of Sun Microsystems, Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +#************************************************************************** + +# Builds the GUI examples of the Developers Guide. + +PRJ=../../.. +SETTINGS=$(PRJ)/settings + +include $(SETTINGS)/settings.mk +include $(SETTINGS)/std.mk +include $(SETTINGS)/dk.mk + +# Define non-platform/compiler specific settings +SAMPLE_NAME=GUIExamples +SAMPLE_CLASS_OUT = $(OUT_CLASS)/$(SAMPLE_NAME) +SAMPLE_GEN_OUT = $(OUT_MISC)/$(SAMPLE_NAME) + + +APP1_NAME=DialogDocument +APP1_JAR=$(SAMPLE_CLASS_OUT)/$(APP1_NAME).jar +APP2_NAME=MessageBox +APP2_JAR=$(SAMPLE_CLASS_OUT)/$(APP2_NAME).jar +APP3_NAME=UnoDialogSample +APP3_JAR=$(SAMPLE_CLASS_OUT)/$(APP3_NAME).jar +APP4_NAME=UnoDialogSample2 +APP4_JAR=$(SAMPLE_CLASS_OUT)/$(APP4_NAME).jar +APP5_NAME=UnoMenu +APP5_JAR=$(SAMPLE_CLASS_OUT)/$(APP5_NAME).jar +APP6_NAME=UnoMenu2 +APP6_JAR=$(SAMPLE_CLASS_OUT)/$(APP6_NAME).jar +APP7_NAME=ImageControlSample +APP7_JAR=$(SAMPLE_CLASS_OUT)/$(APP7_NAME).jar + +APP_JAVAFILES = \ + RoadmapItemStateChangeListener.java \ + UnoDialogSample.java \ + UnoMenu.java + +APP_CLASSFILES = $(patsubst %.java,$(SAMPLE_CLASS_OUT)/%.class,$(APP_JAVAFILES)) +# $(SAMPLE_CLASS_OUT)/UnoDialogSample\&RoadmapItemStateChangeListener.class + +APP_CLASSNAMES = $(patsubst %.java,%.class,$(APP_JAVAFILES)) +#APP_CLASSNAMES = $(patsubst $(SAMPLE_CLASS_OUT)/%.class,%.class,$(APP_CLASSFILES)) + + +SDK_CLASSPATH = $(subst $(EMPTYSTRING) $(PATH_SEPARATOR),$(PATH_SEPARATOR),$(CLASSPATH)\ + $(PATH_SEPARATOR)$(SAMPLE_CLASS_OUT)) + + +# Targets +.PHONY: ALL +ALL : \ + GUIExamples + + +include $(SETTINGS)/stdtarget.mk + + +$(APP_CLASSFILES) : $(APP_JAVAFILES) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(SDK_JAVAC) $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(SAMPLE_CLASS_OUT) $(APP_JAVAFILES) + +$(SAMPLE_CLASS_OUT)/%.class : %.java $(APP_CLASSFILES) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(SDK_JAVAC) $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(SAMPLE_CLASS_OUT) $< + +$(SAMPLE_CLASS_OUT)/%.mf : + -$(MKDIR) $(subst /,$(PS),$(@D)) + @echo Main-Class: com.sun.star.lib.loader.Loader> $@ + $(ECHOLINE)>> $@ + @echo Name: com/sun/star/lib/loader/Loader.class>> $@ + @echo Application-Class: $*>> $@ + +$(SAMPLE_CLASS_OUT)/%.jar : $(SAMPLE_CLASS_OUT)/%.mf $(SAMPLE_CLASS_OUT)/%.class $(APP_CLASSFILES) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) + -$(MKDIR) $(subst /,$(PS),$(@D)) + +cd $(subst /,$(PS),$(SAMPLE_CLASS_OUT)) && $(SDK_JAR) cvfm $(@F) $*.mf $*.class $(APP_CLASSNAMES) + +$(SDK_JAR) uvf $@ $(SDK_JAVA_UNO_BOOTSTRAP_FILES) + +$(APP1_JAR) : $(SAMPLE_CLASS_OUT)/$(APP1_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP1_NAME).class +$(APP2_JAR) : $(SAMPLE_CLASS_OUT)/$(APP2_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP2_NAME).class +$(APP3_JAR) : $(SAMPLE_CLASS_OUT)/$(APP3_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP3_NAME).class +$(APP4_JAR) : $(SAMPLE_CLASS_OUT)/$(APP4_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP4_NAME).class +$(APP5_JAR) : $(SAMPLE_CLASS_OUT)/$(APP5_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP5_NAME).class +$(APP6_JAR) : $(SAMPLE_CLASS_OUT)/$(APP6_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP6_NAME).class +$(APP7_JAR) : $(SAMPLE_CLASS_OUT)/$(APP7_NAME).mf $(SAMPLE_CLASS_OUT)/$(APP7_NAME).class + +GUIExamples : $(APP1_JAR) $(APP2_JAR) $(APP3_JAR) $(APP4_JAR) $(APP5_JAR) $(APP6_JAR) $(APP7_JAR) + @echo -------------------------------------------------------------------------------- + @echo Please use one of the following commands to execute the examples! + @echo - + @echo $(MAKE) $(APP1_NAME).run + @echo $(MAKE) $(APP2_NAME).run + @echo $(MAKE) $(APP3_NAME).run + @echo $(MAKE) $(APP4_NAME).run + @echo $(MAKE) $(APP5_NAME).run + @echo $(MAKE) $(APP6_NAME).run + @echo $(MAKE) $(APP7_NAME).run + @echo -------- + +%.run: $(SAMPLE_CLASS_OUT)/%.jar + $(SDK_JAVA) -Dcom.sun.star.lib.loader.unopath="$(OFFICE_PROGRAM_PATH)" -jar $< + +$(APP7_NAME).run: $(SAMPLE_CLASS_OUT)/$(APP7_NAME).jar + $(SDK_JAVA) -Dcom.sun.star.lib.loader.unopath="$(OFFICE_PROGRAM_PATH)" -jar $< .$(PS)oologo.gif + + +.PHONY: clean +clean : + -$(DELRECURSIVE) $(subst /,$(PS),$(SAMPLE_CLASS_OUT)) + -$(DELRECURSIVE) $(subst /,$(PS),$(SAMPLE_GEN_OUT)) diff --git a/odk/examples/DevelopersGuide/GUI/MessageBox.java b/odk/examples/DevelopersGuide/GUI/MessageBox.java new file mode 100644 index 000000000000..745b25951cd5 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/MessageBox.java @@ -0,0 +1,245 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +import com.sun.star.awt.Rectangle; +import com.sun.star.awt.XMessageBox; +import com.sun.star.awt.XMessageBoxFactory; +import com.sun.star.awt.XVclWindowPeer; +import com.sun.star.awt.XWindow; +import com.sun.star.awt.XWindowPeer; +import com.sun.star.beans.PropertyValue; +import com.sun.star.frame.XFrame; +import com.sun.star.frame.XModel; +import com.sun.star.util.XCloseable; +import com.sun.star.frame.XFramesSupplier; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + + + +public class MessageBox { + + protected XComponentContext m_xContext = null; + protected com.sun.star.lang.XMultiComponentFactory m_xMCF; + + /** Creates a new instance of MessageBox */ + public MessageBox(XComponentContext _xContext, XMultiComponentFactory _xMCF){ + m_xContext = _xContext; + m_xMCF = _xMCF; + } + + public static void main(String args[]) { + XComponent xComp = null; + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + + MessageBox oMessageBox = new MessageBox(xContext, xMCF); + + //load default text document to get an active frame + xComp = oMessageBox.createDefaultTextDocument(); + + XWindowPeer xWindowPeer = oMessageBox.getWindowPeerOfFrame(xComp); + if (xWindowPeer != null) { + XVclWindowPeer xVclWindowPeer = (XVclWindowPeer) UnoRuntime.queryInterface(XVclWindowPeer.class, xWindowPeer); + boolean bisHighContrast = oMessageBox.isHighContrastModeActivated(xVclWindowPeer); + oMessageBox.showErrorMessageBox(xWindowPeer, "My Sampletitle", "HighContrastMode is enabled: " + bisHighContrast); + } else{ + System.out.println("Could not retrieve current frame"); + } + + } catch( Exception e ) { + System.err.println( e + e.getMessage()); + e.printStackTrace(); + } finally { + if (xComp != null) { + try { + XCloseable xClose = (XCloseable)UnoRuntime.queryInterface(XCloseable.class, xComp); + if (xClose != null) { + xClose.close(false); + } else { + xComp.dispose(); + } + } catch (com.sun.star.util.CloseVetoException e) { + System.err.println( e + e.getMessage()); + e.printStackTrace(); + } + } + } + + System.exit( 0 ); + } + + // helper method to get the window peer of a document or if no + // document is specified it tries to get the avtive frame + // which is potentially dangerous + public XWindowPeer getWindowPeerOfFrame(XComponent xComp) { + try { + XFrame xFrame = null; + + if (xComp != null) { + XModel xModel = (XModel)UnoRuntime.queryInterface(XModel.class, xComp); + xFrame = xModel.getCurrentController().getFrame(); + + } else { + // Note: This method is potentially dangerous and should only be used for debugging + // purposes as it relies on the platform dependent window handler.. + Object oDesktop = m_xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", m_xContext); + XFramesSupplier xFramesSupplier = (XFramesSupplier) UnoRuntime.queryInterface(XFramesSupplier.class, oDesktop); + xFrame = xFramesSupplier.getActiveFrame(); + } + + if (xFrame != null){ + XWindow xWindow = xFrame.getContainerWindow(); + if (xWindow != null){ + XWindowPeer xWindowPeer = (XWindowPeer) UnoRuntime.queryInterface(XWindowPeer.class, xWindow); + return xWindowPeer; + } + } + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(); + } + return null; + } + + XComponent createDefaultTextDocument() { + + XComponent xComp = null; + try { + Object oDesktop = m_xMCF.createInstanceWithContext( + "com.sun.star.frame.Desktop", m_xContext); + + // get the component laoder from the desktop to create a new + // text document + com.sun.star.frame.XComponentLoader xCLoader =(com.sun.star.frame.XComponentLoader) + UnoRuntime.queryInterface(com.sun.star.frame.XComponentLoader.class,oDesktop); + + com.sun.star.beans.PropertyValue[] args = new com.sun.star.beans.PropertyValue [1]; + args[0] = new com.sun.star.beans.PropertyValue(); + args[0].Name = "Hidden"; + args[0].Value = new Boolean(true); + String strDoc = "private:factory/swriter"; + + xComp = xCLoader.loadComponentFromURL(strDoc, "_blank", 0, args); + + } catch(com.sun.star.uno.Exception ex) { + ex.printStackTrace(); + } + return xComp; + } + + /** shows an error messagebox + * @param _xParentWindowPeer the windowpeer of the parent window + * @param _sTitle the title of the messagebox + * @param _sMessage the message of the messagebox + */ + public void showErrorMessageBox(XWindowPeer _xParentWindowPeer, String _sTitle, String _sMessage) { + XComponent xComponent = null; + try { + Object oToolkit = m_xMCF.createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext); + XMessageBoxFactory xMessageBoxFactory = (XMessageBoxFactory) UnoRuntime.queryInterface(XMessageBoxFactory.class, oToolkit); + // rectangle may be empty if position is in the center of the parent peer + Rectangle aRectangle = new Rectangle(); + XMessageBox xMessageBox = xMessageBoxFactory.createMessageBox(_xParentWindowPeer, aRectangle, "errorbox", com.sun.star.awt.MessageBoxButtons.BUTTONS_OK, _sTitle, _sMessage); + xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, xMessageBox); + if (xMessageBox != null){ + short nResult = xMessageBox.execute(); + } + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(System.out); + } finally{ + //make sure always to dispose the component and free the memory! + if (xComponent != null){ + xComponent.dispose(); + } + } + } + + + /** @param _xVclWindowPeer the windowpeer of a dialog control or the dialog itself + * @return true if HighContrastMode is activated or false if HighContrastMode is deactivated + */ + public boolean isHighContrastModeActivated(XVclWindowPeer _xVclWindowPeer) { + boolean bIsActivated = false; + + try { + if (_xVclWindowPeer != null){ + int nUIColor = AnyConverter.toInt(_xVclWindowPeer.getProperty("DisplayBackgroundColor")); + int nRed = getRedColorShare(nUIColor); + int nGreen = getGreenColorShare(nUIColor); + int nBlue = getBlueColorShare(nUIColor); + int nLuminance = (( nBlue*28 + nGreen*151 + nRed*77 ) / 256 ); + boolean bisactivated = (nLuminance <= 25); + return bisactivated; + } else{ + return false; + } + } catch (IllegalArgumentException e) { + e.printStackTrace(System.out); + } + return bIsActivated; + } + + public static int getRedColorShare(int _nColor) { + int nRed = (int) _nColor/65536; + int nRedModulo = _nColor % 65536; + int nGreen = (int) (nRedModulo / 256); + int nGreenModulo = (nRedModulo % 256); + int nBlue = nGreenModulo; + return nRed; + } + + public static int getGreenColorShare(int _nColor) { + int nRed = (int) _nColor/65536; + int nRedModulo = _nColor % 65536; + int nGreen = (int) (nRedModulo / 256); + return nGreen; + } + + public static int getBlueColorShare(int _nColor) { + int nRed = (int) _nColor/65536; + int nRedModulo = _nColor % 65536; + int nGreen = (int) (nRedModulo / 256); + int nGreenModulo = (nRedModulo % 256); + int nBlue = nGreenModulo; + return nBlue; + } + +} diff --git a/odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java b/odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java new file mode 100644 index 000000000000..a52928cb4be0 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java @@ -0,0 +1,68 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +import com.sun.star.awt.ItemEvent; +import com.sun.star.awt.XItemListener; +import com.sun.star.lang.EventObject; +import com.sun.star.beans.XPropertySet; +import com.sun.star.uno.UnoRuntime; + + +public class RoadmapItemStateChangeListener implements XItemListener { + protected com.sun.star.lang.XMultiServiceFactory m_xMSFDialogModel; + + public RoadmapItemStateChangeListener(com.sun.star.lang.XMultiServiceFactory xMSFDialogModel) { + m_xMSFDialogModel = xMSFDialogModel; + } + + public void itemStateChanged(com.sun.star.awt.ItemEvent itemEvent) { + try { + // get the new ID of the roadmap that is supposed to refer to the new step of the dialogmodel + int nNewID = itemEvent.ItemId; + XPropertySet xDialogModelPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, m_xMSFDialogModel); + int nOldStep = ((Integer) xDialogModelPropertySet.getPropertyValue("Step")).intValue(); + // in the following line "ID" and "Step" are mixed together. + // In fact in this case they denot the same + if (nNewID != nOldStep){ + xDialogModelPropertySet.setPropertyValue("Step", new Integer(nNewID)); + } + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(System.out); + } + } + + public void disposing(EventObject eventObject) { + } +} + diff --git a/odk/examples/DevelopersGuide/GUI/SystemDialog.java b/odk/examples/DevelopersGuide/GUI/SystemDialog.java new file mode 100644 index 000000000000..00aa44162442 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/SystemDialog.java @@ -0,0 +1,186 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ +import com.sun.star.beans.XPropertySet; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.ui.dialogs.XExecutableDialog; +import com.sun.star.ui.dialogs.XFilePicker; +import com.sun.star.ui.dialogs.XFilePickerControlAccess; +import com.sun.star.ui.dialogs.XFilterManager; +import com.sun.star.ui.dialogs.XFolderPicker; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + + + +public class SystemDialog { + + protected XComponentContext m_xContext = null; + protected com.sun.star.lang.XMultiComponentFactory m_xMCF; + + /** Creates a new instance of MessageBox */ + public SystemDialog(XComponentContext _xContext, XMultiComponentFactory _xMCF){ + m_xContext = _xContext; + m_xMCF = _xMCF; + } + + public static void main(String args[]){ + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + SystemDialog oSystemDialog = new SystemDialog(xContext, xMCF); + oSystemDialog.raiseSaveAsDialog(); + oSystemDialog.raiseFolderPicker(oSystemDialog.getWorkPath(), "My Title"); + }catch( Exception e ) { + System.err.println( e + e.getMessage()); + e.printStackTrace(); + } + + System.exit( 0 ); + } + + + public String raiseSaveAsDialog() { + String sStorePath = ""; + XComponent xComponent = null; + try { + // the filepicker is instantiated with the global Multicomponentfactory... + Object oFilePicker = m_xMCF.createInstanceWithContext("com.sun.star.ui.dialogs.FilePicker", m_xContext); + XFilePicker xFilePicker = (XFilePicker) UnoRuntime.queryInterface(XFilePicker.class, oFilePicker); + + // the defaultname is the initially proposed filename.. + xFilePicker.setDefaultName("MyExampleDocument"); + + // set the initial displaydirectory. In this example the user template directory is used + Object oPathSettings = m_xMCF.createInstanceWithContext("com.sun.star.util.PathSettings",m_xContext); + XPropertySet xPropertySet = (XPropertySet) com.sun.star.uno.UnoRuntime.queryInterface(XPropertySet.class, oPathSettings); + String sTemplateUrl = (String) xPropertySet.getPropertyValue("Template_writable"); + xFilePicker.setDisplayDirectory(sTemplateUrl); + + // set the filters of the dialog. The filternames may be retrieved from + // http://wiki.services.openoffice.org/wiki/Framework/Article/Filter + XFilterManager xFilterManager = (XFilterManager) UnoRuntime.queryInterface(XFilterManager.class, xFilePicker); + xFilterManager.appendFilter("OpenDocument Text Template", "writer8_template"); + xFilterManager.appendFilter("OpenDocument Text", "writer8"); + + // choose the template that defines the capabilities of the filepicker dialog + XInitialization xInitialize = (XInitialization) UnoRuntime.queryInterface(XInitialization.class, xFilePicker); + Short[] listAny = new Short[] { new Short(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION)}; + xInitialize.initialize(listAny); + + // add a control to the dialog to add the extension automatically to the filename... + XFilePickerControlAccess xFilePickerControlAccess = (XFilePickerControlAccess) UnoRuntime.queryInterface(XFilePickerControlAccess.class, xFilePicker); + xFilePickerControlAccess.setValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION, (short) 0, new Boolean(true)); + + xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, xFilePicker); + + // execute the dialog... + XExecutableDialog xExecutable = (XExecutableDialog) UnoRuntime.queryInterface(XExecutableDialog.class, xFilePicker); + short nResult = xExecutable.execute(); + + // query the resulting path of the dialog... + if (nResult == com.sun.star.ui.dialogs.ExecutableDialogResults.OK){ + String[] sPathList = xFilePicker.getFiles(); + if (sPathList.length > 0){ + sStorePath = sPathList[0]; + } + } + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(); + } finally{ + //make sure always to dispose the component and free the memory! + if (xComponent != null){ + xComponent.dispose(); + } + } + return sStorePath; + } + + public String getWorkPath(){ + String sWorkUrl = ""; + try{ + // retrieve the configured Work path... + Object oPathSettings = m_xMCF.createInstanceWithContext("com.sun.star.util.PathSettings",m_xContext); + XPropertySet xPropertySet = (XPropertySet) com.sun.star.uno.UnoRuntime.queryInterface(XPropertySet.class, oPathSettings); + sWorkUrl = (String) xPropertySet.getPropertyValue("Work"); + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(); + } + return sWorkUrl; + } + + /** raises a folderpicker in which the user can browse and select a path + * @param _sDisplayDirectory the path to the directory that is initially displayed + * @param _sTitle the title of the folderpicker + * @return the path to the folder that the user has selected. if the user has closed + * the folderpicker by clicking the "Cancel" button + * an empty string is returned + * @see com.sun.star.ui.dialogs.FolderPicker + */ + public String raiseFolderPicker(String _sDisplayDirectory, String _sTitle) { + String sReturnFolder = ""; + XComponent xComponent = null; + try { + // instantiate the folder picker and retrieve the necessary interfaces... + Object oFolderPicker = m_xMCF.createInstanceWithContext("com.sun.star.ui.dialogs.FolderPicker", m_xContext); + XFolderPicker xFolderPicker = (XFolderPicker) UnoRuntime.queryInterface(XFolderPicker.class, oFolderPicker); + XExecutableDialog xExecutable = (XExecutableDialog) UnoRuntime.queryInterface(XExecutableDialog.class, oFolderPicker); + xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, oFolderPicker); + xFolderPicker.setDisplayDirectory(_sDisplayDirectory); + // set the dialog title... + xFolderPicker.setTitle(_sTitle); + // show the dialog... + short nResult = xExecutable.execute(); + + // User has clicked "Select" button... + if (nResult == com.sun.star.ui.dialogs.ExecutableDialogResults.OK){ + sReturnFolder = xFolderPicker.getDirectory(); + } + + }catch( Exception exception ) { + exception.printStackTrace(System.out); + } finally{ + //make sure always to dispose the component and free the memory! + if (xComponent != null){ + xComponent.dispose(); + } + } + // return the selected path. If the user has clicked cancel an empty string is + return sReturnFolder; + } +} + diff --git a/odk/examples/DevelopersGuide/GUI/UnoDialogSample.java b/odk/examples/DevelopersGuide/GUI/UnoDialogSample.java new file mode 100644 index 000000000000..4013dbb79e66 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/UnoDialogSample.java @@ -0,0 +1,1482 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +import com.sun.star.awt.ActionEvent; +import com.sun.star.awt.AdjustmentEvent; +import com.sun.star.awt.AdjustmentType; +import com.sun.star.awt.FocusChangeReason; +import com.sun.star.awt.FocusEvent; +import com.sun.star.awt.ItemEvent; +import com.sun.star.awt.KeyEvent; +import com.sun.star.awt.MouseEvent; +import com.sun.star.awt.PosSize; +import com.sun.star.awt.PushButtonType; +import com.sun.star.awt.Rectangle; +import com.sun.star.awt.SpinEvent; +import com.sun.star.awt.TextEvent; +import com.sun.star.awt.XActionListener; +import com.sun.star.awt.XAdjustmentListener; +import com.sun.star.awt.XButton; +import com.sun.star.awt.XCheckBox; +import com.sun.star.awt.XComboBox; +import com.sun.star.awt.XControl; +import com.sun.star.awt.XControlContainer; +import com.sun.star.awt.XControlModel; +import com.sun.star.awt.XDialog; +import com.sun.star.awt.XFixedText; +import com.sun.star.awt.XFocusListener; +import com.sun.star.awt.XItemEventBroadcaster; +import com.sun.star.awt.XItemListener; +import com.sun.star.awt.XKeyListener; +import com.sun.star.awt.XListBox; +//import com.sun.star.awt.XMessageBoxFactory; +import com.sun.star.awt.XMouseListener; +import com.sun.star.awt.XPointer; +import com.sun.star.awt.XReschedule; +import com.sun.star.awt.XScrollBar; +import com.sun.star.awt.XSpinField; +import com.sun.star.awt.XSpinListener; +import com.sun.star.awt.XTextComponent; +import com.sun.star.awt.XTextListener; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XTopWindow; +import com.sun.star.awt.XWindow; +import com.sun.star.awt.XWindowPeer; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XMultiPropertySet; +import com.sun.star.beans.XPropertySet; +import com.sun.star.container.XIndexContainer; +import com.sun.star.container.XNameAccess; +import com.sun.star.container.XNameContainer; +import com.sun.star.frame.XDesktop; +import com.sun.star.frame.XFrame; +import com.sun.star.frame.XModel; +import com.sun.star.lang.EventObject; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.text.XTextDocument; +import com.sun.star.ucb.XFileIdentifierConverter; +import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; +import com.sun.star.util.XMacroExpander; +import com.sun.star.util.XNumberFormats; +import com.sun.star.util.XNumberFormatsSupplier; + + +// Anregung von DV: +// Position und Weite als Parameter uebergeben + +public class UnoDialogSample implements XTextListener, XSpinListener, XActionListener, XFocusListener, XMouseListener, XItemListener, XAdjustmentListener, XKeyListener { + protected XComponentContext m_xContext = null; + protected com.sun.star.lang.XMultiComponentFactory m_xMCF; + protected XMultiServiceFactory m_xMSFDialogModel; + protected XModel m_xModel; + protected XNameContainer m_xDlgModelNameContainer; + protected XControlContainer m_xDlgContainer; +// protected XNameAccess m_xDlgModelNameAccess; + protected XControl m_xDialogControl; + protected XDialog xDialog; + protected XReschedule mxReschedule; + protected XWindowPeer m_xWindowPeer = null; + protected XTopWindow m_xTopWindow = null; + protected XFrame m_xFrame = null; + protected XComponent m_xComponent = null; + + + /** + * Creates a new instance of UnoDialogSample + */ + public UnoDialogSample(XComponentContext _xContext, XMultiComponentFactory _xMCF) { + m_xContext = _xContext; + m_xMCF = _xMCF; + createDialog(m_xMCF); + } + + + public static void main(String args[]) { + UnoDialogSample oUnoDialogSample = null; + + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + oUnoDialogSample = new UnoDialogSample(xContext, xMCF); + oUnoDialogSample.initialize( new String[] {"Height", "Moveable", "Name","PositionX","PositionY", "Step", "TabIndex","Title","Width"}, + new Object[] { new Integer(380), Boolean.TRUE, "MyTestDialog", new Integer(102),new Integer(41), new Integer(0), new Short((short) 0), "OpenOffice", new Integer(380)}); + Object oFTHeaderModel = oUnoDialogSample.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTHeaderModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel); + xFTHeaderModelMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(8), "This code-sample demonstrates how to create various controls in a dialog", "HeaderLabel", new Integer(106), new Integer(6), new Integer(300)}); + // add the model to the NameContainer of the dialog model + oUnoDialogSample.m_xDlgModelNameContainer.insertByName("Headerlabel", oFTHeaderModel); + oUnoDialogSample.insertFixedText(oUnoDialogSample, 106, 18, 100, 0, "My ~Label"); + oUnoDialogSample.insertCurrencyField(oUnoDialogSample, 106, 30, 60); + oUnoDialogSample.insertProgressBar(106, 44, 100, 100); + oUnoDialogSample.insertHorizontalFixedLine(106, 58, 100, "My FixedLine"); + oUnoDialogSample.insertEditField(oUnoDialogSample, oUnoDialogSample, 106, 72, 60); + oUnoDialogSample.insertTimeField(106, 96, 50, 0, 170000, 1000); + oUnoDialogSample.insertDateField(oUnoDialogSample, 166, 96, 50); + oUnoDialogSample.insertGroupBox(102, 124, 70, 100); + oUnoDialogSample.insertPatternField(106, 136, 50); + oUnoDialogSample.insertNumericField(106, 152, 50, 0.0, 1000.0, 500.0, 100.0, (short) 1); + oUnoDialogSample.insertCheckBox(oUnoDialogSample, 106, 168, 150); + oUnoDialogSample.insertRadioButtonGroup((short) 50, 130, 200, 150); + oUnoDialogSample.insertListBox(106, 230, 50, 0, new String[]{"First Item", "Second Item"}); + oUnoDialogSample.insertComboBox(106, 250, 50); + oUnoDialogSample.insertFormattedField(oUnoDialogSample, 106, 270, 100); + oUnoDialogSample.insertVerticalScrollBar(oUnoDialogSample, 230, 230, 52); + oUnoDialogSample.insertFileControl(oUnoDialogSample, 106, 290, 200 ); + oUnoDialogSample.insertButton(oUnoDialogSample, 106, 320, 50, "~Close dialog", (short) PushButtonType.OK_value); + oUnoDialogSample.createWindowPeer(); + oUnoDialogSample.addRoadmap(oUnoDialogSample.getRoadmapItemStateChangeListener()); + oUnoDialogSample.insertRoadmapItem(0, true, "Introduction", 1); + oUnoDialogSample.insertRoadmapItem(1, true, "Documents", 2); + oUnoDialogSample.xDialog = (XDialog) UnoRuntime.queryInterface(XDialog.class, oUnoDialogSample.m_xDialogControl); + oUnoDialogSample.executeDialog(); + }catch( Exception e ) { + System.err.println( e + e.getMessage()); + e.printStackTrace(); + } finally{ + //make sure always to dispose the component and free the memory! + if (oUnoDialogSample != null){ + if (oUnoDialogSample.m_xComponent != null){ + oUnoDialogSample.m_xComponent.dispose(); + } + } + } + + System.exit( 0 ); + } + + + /** + * @param _sKeyName + * @return + */ + public XNameAccess getRegistryKeyContent(String _sKeyName){ + try { + Object oConfigProvider; + PropertyValue[] aNodePath = new PropertyValue[1]; + oConfigProvider = m_xMCF.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", this.m_xContext); + aNodePath[0] = new PropertyValue(); + aNodePath[0].Name = "nodepath"; + aNodePath[0].Value = _sKeyName; + XMultiServiceFactory xMSFConfig = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oConfigProvider); + Object oNode = xMSFConfig.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", aNodePath); + XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oNode); + return xNameAccess; + } catch (Exception exception) { + exception.printStackTrace(System.out); + return null; + } + } + + + /** + * @param _sRegistryPath the path a registryNode + * @param _sImageName the name of the image + */ + public String getImageUrl(String _sRegistryPath, String _sImageName) { + String sImageUrl = ""; + try { + // retrive the configuration node of the extension + XNameAccess xNameAccess = getRegistryKeyContent(_sRegistryPath); + if (xNameAccess != null){ + if (xNameAccess.hasByName(_sImageName)){ + // get the Image Url and process the Url by the macroexpander... + sImageUrl = (String) xNameAccess.getByName(_sImageName); + Object oMacroExpander = this.m_xContext.getValueByName("/singletons/com.sun.star.util.theMacroExpander"); + XMacroExpander xMacroExpander = (XMacroExpander) UnoRuntime.queryInterface(XMacroExpander.class, oMacroExpander); + sImageUrl = xMacroExpander.expandMacros(sImageUrl); + sImageUrl = sImageUrl.substring(new String("vnd.sun.star.expand:").length(), sImageUrl.length()); + sImageUrl = sImageUrl.trim(); + sImageUrl += "/" + _sImageName; + } + } + } catch (Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + */ + ex.printStackTrace(System.out); + } + return sImageUrl; + } + + protected void createDialog(XMultiComponentFactory _xMCF) { + try { + Object oDialogModel = _xMCF.createInstanceWithContext("com.sun.star.awt.UnoControlDialogModel", m_xContext); + + // The XMultiServiceFactory of the dialogmodel is needed to instantiate the controls... + m_xMSFDialogModel = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDialogModel); + + // The named container is used to insert the created controls into... + m_xDlgModelNameContainer = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, oDialogModel); + + // create the dialog... + Object oUnoDialog = _xMCF.createInstanceWithContext("com.sun.star.awt.UnoControlDialog", m_xContext); + m_xDialogControl = (XControl) UnoRuntime.queryInterface(XControl.class, oUnoDialog); + + // The scope of the control container is public... + m_xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class, oUnoDialog); + + m_xTopWindow = (XTopWindow) UnoRuntime.queryInterface(XTopWindow.class, m_xDlgContainer); + + // link the dialog and its model... + XControlModel xControlModel = (XControlModel) UnoRuntime.queryInterface(XControlModel.class, oDialogModel); + m_xDialogControl.setModel(xControlModel); + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(System.out); + } + } + + + + public short executeDialogWithembeddedExampleSnippets() throws com.sun.star.script.BasicErrorException { + if (m_xWindowPeer == null){ + createWindowPeer(); + } + addRoadmap(getRoadmapItemStateChangeListener()); + insertRoadmapItem(0, true, "Introduction", 1); + insertRoadmapItem(1, true, "Documents", 2); + xDialog = (XDialog) UnoRuntime.queryInterface(XDialog.class, m_xDialogControl); + return xDialog.execute(); + } + + + public short executeDialog() throws com.sun.star.script.BasicErrorException { + if (m_xWindowPeer == null) { + createWindowPeer(); + } + xDialog = (XDialog) UnoRuntime.queryInterface(XDialog.class, m_xDialogControl); + m_xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, m_xDialogControl); + return xDialog.execute(); + } + + + + + public XItemListener getRoadmapItemStateChangeListener(){ + return new RoadmapItemStateChangeListener(m_xMSFDialogModel); + } + + + public void initialize(String[] PropertyNames, Object[] PropertyValues) throws com.sun.star.script.BasicErrorException{ + try{ + XMultiPropertySet xMultiPropertySet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, m_xDlgModelNameContainer); + xMultiPropertySet.setPropertyValues(PropertyNames, PropertyValues); + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(System.out); + }} + + + + /** + * create a peer for this + * dialog, using the given + * peer as a parent. + * @param parentPeer + * @return + * @throws java.lang.Exception + */ + public XWindowPeer createWindowPeer(XWindowPeer _xWindowParentPeer) throws com.sun.star.script.BasicErrorException{ + try{ + if (_xWindowParentPeer == null){ + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, m_xDlgContainer); + xWindow.setVisible(false); + Object tk = m_xMCF.createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext); + XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, tk); + mxReschedule = (XReschedule) UnoRuntime.queryInterface(XReschedule.class, xToolkit); + m_xDialogControl.createPeer(xToolkit, _xWindowParentPeer); + m_xWindowPeer = m_xDialogControl.getPeer(); + return m_xWindowPeer; + } + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(System.out); + } + return null; + } + + + public void calculateDialogPosition(XWindow _xWindow) { + Rectangle aFramePosSize = m_xModel.getCurrentController().getFrame().getComponentWindow().getPosSize(); + Rectangle CurPosSize = _xWindow.getPosSize(); + int WindowHeight = aFramePosSize.Height; + int WindowWidth = aFramePosSize.Width; + int DialogWidth = CurPosSize.Width; + int DialogHeight = CurPosSize.Height; + int iXPos = ((WindowWidth / 2) - (DialogWidth / 2)); + int iYPos = ((WindowHeight / 2) - (DialogHeight / 2)); + _xWindow.setPosSize(iXPos, iYPos, DialogWidth, DialogHeight, PosSize.POS); + } + + + + /** + * Creates a peer for this + * dialog, using the active OO frame + * as the parent window. + * @return + * @throws java.lang.Exception + */ + public XWindowPeer createWindowPeer() throws com.sun.star.script.BasicErrorException{ + return createWindowPeer(null); + } + + public void endExecute() { + xDialog.endExecute(); + } + + + public Object insertControlModel(String ServiceName, String sName, String[] sProperties, Object[] sValues) throws com.sun.star.script.BasicErrorException{ + try { + Object oControlModel = m_xMSFDialogModel.createInstance(ServiceName); + XMultiPropertySet xControlMultiPropertySet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oControlModel); + xControlMultiPropertySet.setPropertyValues(sProperties, sValues); + m_xDlgModelNameContainer.insertByName(sName, oControlModel); + return oControlModel; + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(System.out); + return null; + } + } + + + public XFixedText insertFixedText(XMouseListener _xMouseListener, int _nPosX, int _nPosY, int _nWidth, int _nStep, String _sLabel){ + XFixedText xFixedText = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "Label"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oFTModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + + xFTModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Step", "Width"}, + new Object[] { new Integer(8), sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nStep), new Integer(_nWidth)}); + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oFTModel); + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + XPropertySet xFTPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oFTModel); + xFTPSet.setPropertyValue("Label", _sLabel); + + // reference the control by the Name + XControl xFTControl = m_xDlgContainer.getControl(sName); + xFixedText = (XFixedText) UnoRuntime.queryInterface(XFixedText.class, xFTControl); + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xFTControl); + xWindow.addMouseListener(_xMouseListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xFixedText; + } + + + public XTextComponent insertCurrencyField(XTextListener _xTextListener, int _nPositionX, int _nPositionY, int _nWidth){ + XTextComponent xTextComponent = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "CurrencyField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oCFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlCurrencyFieldModel"); + XMultiPropertySet xCFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oCFModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xCFModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(12), sName, new Integer(_nPositionX), new Integer(_nPositionY), new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oCFModel); + XPropertySet xCFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oCFModel); + + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xCFModelPSet.setPropertyValue("PrependCurrencySymbol", Boolean.TRUE); + xCFModelPSet.setPropertyValue("CurrencySymbol", "$"); + xCFModelPSet.setPropertyValue("Value", new Double(2.93)); + + // add a textlistener that is notified on each change of the controlvalue... + Object oCFControl = m_xDlgContainer.getControl(sName); + xTextComponent = (XTextComponent) UnoRuntime.queryInterface(XTextComponent.class, oCFControl); + xTextComponent.addTextListener(_xTextListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xTextComponent; + } + + + + public XPropertySet insertProgressBar(int _nPosX, int _nPosY, int _nWidth, int _nProgressMax){ + XPropertySet xPBModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "ProgressBar"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oPBModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlProgressBarModel"); + + XMultiPropertySet xPBModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oPBModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xPBModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(8), sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oPBModel); + xPBModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oPBModel); + + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xPBModelPSet.setPropertyValue("ProgressValueMin", new Integer(0)); + xPBModelPSet.setPropertyValue("ProgressValueMax", new Integer(_nProgressMax)); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xPBModelPSet; + } + + + + public void insertHorizontalFixedLine(int _nPosX, int _nPosY, int _nWidth, String _sLabel){ + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "FixedLine"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oFLModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedLineModel"); + XMultiPropertySet xFLModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFLModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xFLModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "Orientation", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(8), sName, new Integer(0), new Integer(_nPosX), new Integer(_nPosY), new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oFLModel); + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + XPropertySet xFLPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oFLModel); + xFLPSet.setPropertyValue("Label", _sLabel); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + + public void insertGroupBox(int _nPosX, int _nPosY, int _nHeight, int _nWidth){ + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "FrameControl"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oGBModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlGroupBoxModel"); + XMultiPropertySet xGBModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oGBModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xGBModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(_nHeight), sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oGBModel); + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + XPropertySet xGBPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oGBModel); + xGBPSet.setPropertyValue("Label", "~My GroupBox"); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + + public XTextComponent insertEditField(XTextListener _xTextListener, XFocusListener _xFocusListener, int _nPosX, int _nPosY, int _nWidth){ + XTextComponent xTextComponent = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "TextField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oTFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlEditModel"); + XMultiPropertySet xTFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oTFModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xTFModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Text", "Width"}, + new Object[] { new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), "MyText", new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oTFModel); + XPropertySet xTFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oTFModel); + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xTFModelPSet.setPropertyValue("EchoChar", new Short((short) '*')); + XControl xTFControl = m_xDlgContainer.getControl(sName); + + // add a textlistener that is notified on each change of the controlvalue... + xTextComponent = (XTextComponent) UnoRuntime.queryInterface(XTextComponent.class, xTFControl); + XWindow xTFWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xTFControl); + xTFWindow.addFocusListener(_xFocusListener); + xTextComponent.addTextListener(_xTextListener); + xTFWindow.addKeyListener(this); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xTextComponent; + } + + public XPropertySet insertTimeField(int _nPosX, int _nPosY, int _nWidth, int _nTime, int _nTimeMin, int _nTimeMax){ + XPropertySet xTFModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "TimeField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oTFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlTimeFieldModel"); + XMultiPropertySet xTFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oTFModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xTFModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Spin", "Width"}, + new Object[] { new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), Boolean.TRUE, new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oTFModel); + xTFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oTFModel); + + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xTFModelPSet.setPropertyValue("TimeFormat", new Short((short) 5)); + xTFModelPSet.setPropertyValue("TimeMin", new Integer(_nTimeMin)); + xTFModelPSet.setPropertyValue("TimeMax", new Integer(_nTimeMax)); + xTFModelPSet.setPropertyValue("Time", new Integer(_nTime)); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xTFModelPSet; + } + + + + public XPropertySet insertDateField(XSpinListener _xSpinListener, int _nPosX, int _nPosY, int _nWidth){ + XPropertySet xDFModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "DateField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oDFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlDateFieldModel"); + XMultiPropertySet xDFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oDFModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xDFModelMPSet.setPropertyValues( + new String[] {"Dropdown", "Height", "Name", "PositionX", "PositionY", "Width"}, + new Object[] {Boolean.TRUE, new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oDFModel); + xDFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oDFModel); + + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xDFModelPSet.setPropertyValue("DateFormat", new Short((short) 7)); + xDFModelPSet.setPropertyValue("DateMin", new Integer(20070401)); + xDFModelPSet.setPropertyValue("DateMax", new Integer(20070501)); + xDFModelPSet.setPropertyValue("Date", new Integer(20000415)); + Object oDFControl = m_xDlgContainer.getControl(sName); + + // add a SpinListener that is notified on each change of the controlvalue... + XSpinField xSpinField = (XSpinField) UnoRuntime.queryInterface(XSpinField.class, oDFControl); + xSpinField.addSpinListener(_xSpinListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xDFModelPSet; + } + + + public XPropertySet insertPatternField(int _nPosX, int _nPosY, int _nWidth){ + XPropertySet xPFModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "PatternField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oPFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlPatternFieldModel"); + XMultiPropertySet xPFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oPFModel); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xPFModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oPFModel); + xPFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oPFModel); + + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xPFModelPSet.setPropertyValue("LiteralMask", "__.05.2007"); + // Allow only numbers for the first two digits... + xPFModelPSet.setPropertyValue("EditMask", "NNLLLLLLLL"); + // verify the user input immediately... + xPFModelPSet.setPropertyValue("StrictFormat", Boolean.TRUE); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xPFModelPSet; + } + + + public XPropertySet insertNumericField( int _nPosX, int _nPosY, int _nWidth, + double _fValueMin, double _fValueMax, double _fValue, + double _fValueStep, short _nDecimalAccuracy){ + XPropertySet xNFModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "NumericField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oNFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlNumericFieldModel"); + XMultiPropertySet xNFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oNFModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xNFModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Spin", "StrictFormat", "Width"}, + new Object[] { new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), Boolean.TRUE, Boolean.TRUE, new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oNFModel); + xNFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oNFModel); + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xNFModelPSet.setPropertyValue("ValueMin", new Double(_fValueMin)); + xNFModelPSet.setPropertyValue("ValueMax", new Double(_fValueMax)); + xNFModelPSet.setPropertyValue("Value", new Double(_fValue)); + xNFModelPSet.setPropertyValue("ValueStep", new Double(_fValueStep)); + xNFModelPSet.setPropertyValue("ShowThousandsSeparator", Boolean.TRUE); + xNFModelPSet.setPropertyValue("DecimalAccuracy", new Short(_nDecimalAccuracy)); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xNFModelPSet; + } + + + + public XPropertySet insertVerticalScrollBar(XAdjustmentListener _xAdjustmentListener, int _nPosX, int _nPosY, int _nHeight){ + XPropertySet xSBModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "ScrollBar"); + + Integer NOrientation = new Integer(com.sun.star.awt.ScrollBarOrientation.VERTICAL); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oSBModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlScrollBarModel"); + XMultiPropertySet xSBModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oSBModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xSBModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "Orientation", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(_nHeight), sName, NOrientation, new Integer(_nPosX), new Integer(_nPosY), new Integer(8)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oSBModel); + + xSBModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oSBModel); + // The following properties may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xSBModelPSet.setPropertyValue("ScrollValueMin", new Integer(0)); + xSBModelPSet.setPropertyValue("ScrollValueMax", new Integer(100)); + xSBModelPSet.setPropertyValue("ScrollValue", new Integer(5)); + xSBModelPSet.setPropertyValue("LineIncrement", new Integer(2)); + xSBModelPSet.setPropertyValue("BlockIncrement", new Integer(10)); + + // Add an Adjustment that will listen to changes of the scrollbar... + XControl xSBControl = m_xDlgContainer.getControl(sName); + XScrollBar xScrollBar = (XScrollBar) UnoRuntime.queryInterface(XScrollBar.class, xSBControl); + xScrollBar.addAdjustmentListener(_xAdjustmentListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xSBModelPSet; + } + + + /** makes a String unique by appending a numerical suffix + * @param _xElementContainer the com.sun.star.container.XNameAccess container + * that the new Element is going to be inserted to + * @param _sElementName the StemName of the Element + */ + public static String createUniqueName(XNameAccess _xElementContainer, String _sElementName) { + boolean bElementexists = true; + int i = 1; + String sIncSuffix = ""; + String BaseName = _sElementName; + while (bElementexists) { + bElementexists = _xElementContainer.hasByName(_sElementName); + if (bElementexists) { + i += 1; + _sElementName = BaseName + Integer.toString(i); + } + } + return _sElementName; + } + + + public XCheckBox insertCheckBox(XItemListener _xItemListener, int _nPosX, int _nPosY, int _nWidth){ + XCheckBox xCheckBox = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "CheckBox"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oCBModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlCheckBoxModel"); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + XMultiPropertySet xCBMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oCBModel); + xCBMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width" } , + new Object[] {new Integer(8), "~Include page number", sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nWidth)}); + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + XPropertySet xCBModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xCBMPSet); + xCBModelPSet.setPropertyValue("TriState", Boolean.TRUE); + xCBModelPSet.setPropertyValue("State", new Short((short) 1)); + + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oCBModel); + XControl xCBControl = m_xDlgContainer.getControl(sName); + xCheckBox = (XCheckBox) UnoRuntime.queryInterface(XCheckBox.class, xCBControl); + // An ActionListener will be notified on the activation of the button... + xCheckBox.addItemListener(_xItemListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xCheckBox; + } + + + + + public void insertRadioButtonGroup(short _nTabIndex, int _nPosX, int _nPosY, int _nWidth){ + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "OptionButton"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oRBModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlRadioButtonModel"); + XMultiPropertySet xRBMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oRBModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xRBMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "State", "TabIndex", "Width" } , + new Object[] {new Integer(8), "~First Option", sName, new Integer(_nPosX), new Integer(_nPosY), new Short((short) 1), new Short(_nTabIndex++),new Integer(_nWidth)}); + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oRBModel); + + // create a unique name by means of an own implementation... + sName = createUniqueName(m_xDlgModelNameContainer, "OptionButton"); + + oRBModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlRadioButtonModel"); + xRBMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oRBModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xRBMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "TabIndex", "Width" } , + new Object[] {new Integer(8), "~Second Option", sName, new Integer(130), new Integer(214), new Short(_nTabIndex), new Integer(150)}); + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oRBModel); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + public XListBox insertListBox(int _nPosX, int _nPosY, int _nWidth, int _nStep, String[] _sStringItemList){ + XListBox xListBox = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "ListBox"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oListBoxModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlListBoxModel"); + XMultiPropertySet xLBModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oListBoxModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xLBModelMPSet.setPropertyValues( + new String[] {"Dropdown", "Height", "Name", "PositionX", "PositionY", "Step", "StringItemList", "Width" } , + new Object[] {Boolean.TRUE, new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nStep), _sStringItemList, new Integer(_nWidth)}); + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + XPropertySet xLBModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xLBModelMPSet); + xLBModelPSet.setPropertyValue("MultiSelection", Boolean.TRUE); + short[] nSelItems = new short[] {(short) 1, (short) 3}; + xLBModelPSet.setPropertyValue("SelectedItems", nSelItems); + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, xLBModelMPSet); + XControl xControl = m_xDlgContainer.getControl(sName); + // retrieve a ListBox that is more convenient to work with than the Model of the ListBox... + xListBox = (XListBox) UnoRuntime.queryInterface(XListBox.class, xControl); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xListBox; + } + + + public XComboBox insertComboBox(int _nPosX, int _nPosY, int _nWidth){ + XComboBox xComboBox = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "ComboBox"); + + String[] sStringItemList = new String[]{"First Entry", "Second Entry", "Third Entry", "Fourth Entry"}; + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oComboBoxModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlComboBoxModel"); + XMultiPropertySet xCbBModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oComboBoxModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xCbBModelMPSet.setPropertyValues( + new String[] {"Dropdown", "Height", "Name", "PositionX", "PositionY", "StringItemList", "Width" } , + new Object[] {Boolean.TRUE, new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), sStringItemList, new Integer(_nWidth)}); + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + XPropertySet xCbBModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xCbBModelMPSet); + xCbBModelPSet.setPropertyValue("MaxTextLen", new Short((short) 10)); + xCbBModelPSet.setPropertyValue("ReadOnly", Boolean.FALSE); + + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, xCbBModelMPSet); + XControl xControl = m_xDlgContainer.getControl(sName); + + // retrieve a ListBox that is more convenient to work with than the Model of the ListBox... + xComboBox = (XComboBox) UnoRuntime.queryInterface(XComboBox.class, xControl); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xComboBox; + } + + + + public XPropertySet insertFormattedField(XSpinListener _xSpinListener, int _nPosX, int _nPosY, int _nWidth){ + XPropertySet xFFModelPSet = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "FormattedField"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oFFModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFormattedFieldModel"); + XMultiPropertySet xFFModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFFModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xFFModelMPSet.setPropertyValues( + new String[] {"EffectiveValue", "Height", "Name", "PositionX", "PositionY", "StrictFormat", "Spin", "Width"}, + new Object[] { new Double(12348), new Integer(12), sName, new Integer(_nPosX), new Integer(_nPosY), Boolean.TRUE, Boolean.TRUE, new Integer(_nWidth)}); + + xFFModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oFFModel); + // to define a numberformat you always need a locale... + com.sun.star.lang.Locale aLocale = new com.sun.star.lang.Locale(); + aLocale.Country = "US"; + aLocale.Language = "en"; + // this Format is only compliant to the english locale! + String sFormatString = "NNNNMMMM DD, YYYY"; + + // a NumberFormatsSupplier has to be created first "in the open countryside"... + Object oNumberFormatsSupplier = m_xMCF.createInstanceWithContext("com.sun.star.util.NumberFormatsSupplier", m_xContext); + XNumberFormatsSupplier xNumberFormatsSupplier = (XNumberFormatsSupplier) UnoRuntime.queryInterface(XNumberFormatsSupplier.class, oNumberFormatsSupplier); + XNumberFormats xNumberFormats = xNumberFormatsSupplier.getNumberFormats(); + // is the numberformat already defined? + int nFormatKey = xNumberFormats.queryKey(sFormatString, aLocale, true); + if (nFormatKey == -1){ + // if not then add it to the NumberFormatsSupplier + nFormatKey = xNumberFormats.addNew(sFormatString, aLocale); + } + + // The following property may also be set with XMultiPropertySet but we + // use the XPropertySet interface merely for reasons of demonstration + xFFModelPSet.setPropertyValue("FormatsSupplier", xNumberFormatsSupplier); + xFFModelPSet.setPropertyValue("FormatKey", new Integer(nFormatKey)); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oFFModel); + + // finally we add a Spin-Listener to the control + XControl xFFControl = m_xDlgContainer.getControl(sName); + // add a SpinListener that is notified on each change of the controlvalue... + XSpinField xSpinField = (XSpinField) UnoRuntime.queryInterface(XSpinField.class, xFFControl); + xSpinField.addSpinListener(_xSpinListener); + + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xFFModelPSet; + } + + public void convertUnits(){ + // iXPixelFactor = (int) (100000/xDevice.getInfo().PixelPerMeterX); + } + + + public XTextComponent insertFileControl(XTextListener _xTextListener, int _nPosX, int _nPosY, int _nWidth){ + XTextComponent xTextComponent = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "FileControl"); + + // retrieve the configured Work path... + Object oPathSettings = m_xMCF.createInstanceWithContext("com.sun.star.util.PathSettings",m_xContext); + XPropertySet xPropertySet = (XPropertySet) com.sun.star.uno.UnoRuntime.queryInterface(XPropertySet.class, oPathSettings); + String sWorkUrl = (String) xPropertySet.getPropertyValue("Work"); + + // convert the Url to a system path that is "human readable"... + Object oFCProvider = m_xMCF.createInstanceWithContext("com.sun.star.ucb.FileContentProvider", m_xContext); + XFileIdentifierConverter xFileIdentifierConverter = (XFileIdentifierConverter) UnoRuntime.queryInterface(XFileIdentifierConverter.class, oFCProvider); + String sSystemWorkPath = xFileIdentifierConverter.getSystemPathFromFileURL(sWorkUrl); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oFCModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFileControlModel"); + + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + XMultiPropertySet xFCModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFCModel); + xFCModelMPSet.setPropertyValues( + new String[] {"Height", "Name", "PositionX", "PositionY", "Text", "Width"}, + new Object[] { new Integer(14), sName, new Integer(_nPosX), new Integer(_nPosY), sSystemWorkPath, new Integer(_nWidth)}); + + // The controlmodel is not really available until inserted to the Dialog container + m_xDlgModelNameContainer.insertByName(sName, oFCModel); + XPropertySet xFCModelPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oFCModel); + + // add a textlistener that is notified on each change of the controlvalue... + XControl xFCControl = m_xDlgContainer.getControl(sName); + xTextComponent = (XTextComponent) UnoRuntime.queryInterface(XTextComponent.class, xFCControl); + XWindow xFCWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xFCControl); + xTextComponent.addTextListener(_xTextListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xTextComponent; + } + + + public XButton insertButton(XActionListener _xActionListener, int _nPosX, int _nPosY, int _nWidth, String _sLabel, short _nPushButtonType){ + XButton xButton = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "CommandButton"); + + // create a controlmodel at the multiservicefactory of the dialog model... + Object oButtonModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlButtonModel"); + XMultiPropertySet xButtonMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oButtonModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xButtonMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "PushButtonType", "Width" } , + new Object[] {new Integer(14), _sLabel, sName, new Integer(_nPosX), new Integer(_nPosY), new Short(_nPushButtonType), new Integer(_nWidth)}); + + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oButtonModel); + XControl xButtonControl = m_xDlgContainer.getControl(sName); + xButton = (XButton) UnoRuntime.queryInterface(XButton.class, xButtonControl); + // An ActionListener will be notified on the activation of the button... + xButton.addActionListener(_xActionListener); + } catch (com.sun.star.uno.Exception ex) { + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + return xButton; + } + + /** gets the WindowPeer of a frame + * @param _XTextDocument the instance of a textdocument + * @return the windowpeer of the frame + */ + public XWindowPeer getWindowPeer(XTextDocument _xTextDocument){ + XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, _xTextDocument); + XFrame xFrame = xModel.getCurrentController().getFrame(); + XWindow xWindow = xFrame.getContainerWindow(); + XWindowPeer xWindowPeer = (XWindowPeer) UnoRuntime.queryInterface(XWindowPeer.class, xWindow); + return xWindowPeer; + } + + public XFrame getCurrentFrame(){ + XFrame xRetFrame = null; + try { + Object oDesktop = m_xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", m_xContext); + XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, oDesktop); + xRetFrame = xDesktop.getCurrentFrame(); + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(); + } + return xRetFrame; + } + + + public void textChanged(TextEvent textEvent) { + try { + // get the control that has fired the event, + XControl xControl = (XControl) UnoRuntime.queryInterface(XControl.class, textEvent.Source); + XControlModel xControlModel = xControl.getModel(); + XPropertySet xPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xControlModel); + String sName = (String) xPSet.getPropertyValue("Name"); + // just in case the listener has been added to several controls, + // we make sure we refer to the right one + if (sName.equals("TextField1")){ + String sText = (String) xPSet.getPropertyValue("Text"); + System.out.println(sText); + // insert your code here to validate the text of the control... + } + }catch (com.sun.star.uno.Exception ex){ + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + + public void up(SpinEvent spinEvent) { + try { + // get the control that has fired the event, + XControl xControl = (XControl) UnoRuntime.queryInterface(XControl.class, spinEvent.Source); + XControlModel xControlModel = xControl.getModel(); + XPropertySet xPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xControlModel); + String sName = (String) xPSet.getPropertyValue("Name"); + // just in case the listener has been added to several controls, + // we make sure we refer to the right one + if (sName.equals("FormattedField1")){ + double fvalue = AnyConverter.toDouble(xPSet.getPropertyValue("EffectiveValue")); + System.out.println("Controlvalue: " + fvalue); + // insert your code here to validate the value of the control... + } + }catch (com.sun.star.uno.Exception ex){ + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + public void down(SpinEvent spinEvent) { + } + + public void last(SpinEvent spinEvent) { + } + + public void first(SpinEvent spinEvent) { + } + + public void disposing(EventObject rEventObject) { + } + + + public void actionPerformed(ActionEvent rEvent) { + try{ + // get the control that has fired the event, + XControl xControl = (XControl) UnoRuntime.queryInterface(XControl.class, rEvent.Source); + XControlModel xControlModel = xControl.getModel(); + XPropertySet xPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xControlModel); + String sName = (String) xPSet.getPropertyValue("Name"); + // just in case the listener has been added to several controls, + // we make sure we refer to the right one + if (sName.equals("CommandButton1")) { + //... + } + }catch (com.sun.star.uno.Exception ex){ + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + public void focusLost(FocusEvent _focusEvent) { + short nFocusFlags = _focusEvent.FocusFlags; + int nFocusChangeReason = nFocusFlags & FocusChangeReason.TAB; + if (nFocusChangeReason == FocusChangeReason.TAB) { + // get the window of the Window that has gained the Focus... + // Note that the xWindow is just a representation of the controlwindow + // but not of the control itself + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, _focusEvent.NextFocus); + } + } + + + public void focusGained(FocusEvent focusEvent) { + } + + public void mouseReleased(MouseEvent mouseEvent) { + } + + public void mousePressed(MouseEvent mouseEvent) { + } + + public void mouseExited(MouseEvent mouseEvent) { + } + + public void mouseEntered(MouseEvent _mouseEvent) { + try { + // retrieve the control that the event has been invoked at... + XControl xControl = (XControl) UnoRuntime.queryInterface(XControl.class, _mouseEvent.Source); + Object tk = m_xMCF.createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext); + XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, tk); + // create the peer of the control by passing the windowpeer of the parent + // in this case the windowpeer of the control + xControl.createPeer(xToolkit, m_xWindowPeer); + // create a pointer object "in the open countryside" and set the type accordingly... + Object oPointer = this.m_xMCF.createInstanceWithContext("com.sun.star.awt.Pointer", this.m_xContext); + XPointer xPointer = (XPointer) UnoRuntime.queryInterface(XPointer.class, oPointer); + xPointer.setType(com.sun.star.awt.SystemPointer.REFHAND); + // finally set the created pointer at the windowpeer of the control + xControl.getPeer().setPointer(xPointer); + } catch (com.sun.star.uno.Exception ex) { + throw new java.lang.RuntimeException("cannot happen..."); + } + } + + + + public void itemStateChanged(ItemEvent itemEvent) { + try{ + // retrieve the control that the event has been invoked at... + XCheckBox xCheckBox = (XCheckBox) UnoRuntime.queryInterface(XCheckBox.class, itemEvent.Source); + // retrieve the control that we want to disable or enable + XControl xControl = (XControl) UnoRuntime.queryInterface(XControl.class, m_xDlgContainer.getControl("CommandButton1")); + XPropertySet xModelPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xControl.getModel()); + short nState = xCheckBox.getState(); + boolean bdoEnable = true; + switch (nState){ + case 1: // checked + bdoEnable = true; + break; + case 0: // not checked + case 2: // don't know + bdoEnable = false; + break; + } + // Alternatively we could have done it also this way: + // bdoEnable = (nState == 1); + xModelPropertySet.setPropertyValue("Enabled", new Boolean(bdoEnable)); + }catch (com.sun.star.uno.Exception ex){ + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.beans.PropertyVetoException + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + + + public void adjustmentValueChanged(AdjustmentEvent _adjustmentEvent) { + switch (_adjustmentEvent.Type.getValue()){ + case AdjustmentType.ADJUST_ABS_value: + System.out.println( "The event has been triggered by dragging the thumb..." ); + break; + case AdjustmentType.ADJUST_LINE_value: + System.out.println( "The event has been triggered by a single line move.." ); + break; + case AdjustmentType.ADJUST_PAGE_value: + System.out.println( "The event has been triggered by a block move..." ); + break; + } + System.out.println( "The value of the scrollbar is: " + _adjustmentEvent.Value); + } + + + +// Globally available object variables of the roadmapmodel + XPropertySet m_xRMPSet; + XSingleServiceFactory m_xSSFRoadmap; + XIndexContainer m_xRMIndexCont; + + public void addRoadmap(XItemListener _xItemListener) { + XPropertySet xDialogModelPropertySet = null; + try { + // create a unique name by means of an own implementation... + String sRoadmapName = createUniqueName(m_xDlgModelNameContainer, "Roadmap"); + + xDialogModelPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, m_xMSFDialogModel); + // Similar to the office assistants the roadmap is adjusted to the height of the dialog + // where a certain space is left at the bottom for the buttons... + int nDialogHeight = ((Integer) xDialogModelPropertySet.getPropertyValue("Height")).intValue(); + + // instantiate the roadmapmodel... + Object oRoadmapModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlRoadmapModel"); + + // define the properties of the roadmapmodel + XMultiPropertySet xRMMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oRoadmapModel); + xRMMPSet.setPropertyValues( new String[] {"Complete", "Height", "Name", "PositionX", "PositionY", "Text", "Width" }, + new Object[] {Boolean.FALSE, new Integer(nDialogHeight - 26), sRoadmapName, new Integer(0), new Integer(0), "Steps", new Integer(85)}); + m_xRMPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oRoadmapModel); + + // add the roadmapmodel to the dialog container.. + m_xDlgModelNameContainer.insertByName(sRoadmapName, oRoadmapModel); + + // the roadmapmodel is a SingleServiceFactory to instantiate the roadmapitems... + m_xSSFRoadmap = (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, oRoadmapModel); + m_xRMIndexCont = (XIndexContainer) UnoRuntime.queryInterface(XIndexContainer.class, oRoadmapModel); + + // add the itemlistener to the control... + XControl xRMControl = this.m_xDlgContainer.getControl(sRoadmapName); + XItemEventBroadcaster xRMBroadcaster = (XItemEventBroadcaster) UnoRuntime.queryInterface(XItemEventBroadcaster.class, xRMControl); + xRMBroadcaster.addItemListener( getRoadmapItemStateChangeListener() ); + } catch (java.lang.Exception jexception) { + jexception.printStackTrace(System.out); + } + } + + /** + *To fully understand the example one has to be aware that the passed ???Index??? parameter + * refers to the position of the roadmap item in the roadmapmodel container + * whereas the variable ???_ID??? directyl references to a certain step of dialog. + */ + public void insertRoadmapItem(int Index, boolean _bEnabled, String _sLabel, int _ID) { + try { + // a roadmap is a SingleServiceFactory that can only create roadmapitems that are the only possible + // element types of the container + Object oRoadmapItem = m_xSSFRoadmap.createInstance(); + XPropertySet xRMItemPSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oRoadmapItem); + xRMItemPSet.setPropertyValue("Label", _sLabel); + // sometimes steps are supposed to be set disabled depending on the program logic... + xRMItemPSet.setPropertyValue("Enabled", new Boolean(_bEnabled)); + // in this context the "ID" is meant to refer to a step of the dialog + xRMItemPSet.setPropertyValue("ID", new Integer(_ID)); + m_xRMIndexCont.insertByIndex(Index, oRoadmapItem); + } catch (com.sun.star.uno.Exception exception) { + exception.printStackTrace(System.out); + } + } + + + public void keyReleased(KeyEvent keyEvent) { + int i = keyEvent.KeyChar; + int n = keyEvent.KeyCode; + int m = keyEvent.KeyFunc; + } + + public void keyPressed(KeyEvent keyEvent) { + } + +} diff --git a/odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java b/odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java new file mode 100644 index 000000000000..3b85eb57d306 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java @@ -0,0 +1,264 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ +import com.sun.star.awt.PushButtonType; +import com.sun.star.awt.XControl; +import com.sun.star.awt.XDialog; +import com.sun.star.awt.XFixedText; +import com.sun.star.awt.XListBox; +import com.sun.star.awt.XWindow; +import com.sun.star.beans.MethodConcept; +import com.sun.star.beans.Property; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XIntrospection; +import com.sun.star.beans.XIntrospectionAccess; +import com.sun.star.beans.XMultiPropertySet; +import com.sun.star.beans.XPropertySet; +import com.sun.star.frame.XComponentLoader; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lang.XTypeProvider; +import com.sun.star.reflection.XIdlMethod; +import com.sun.star.uno.Type; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +public class UnoDialogSample2 extends UnoDialogSample { + XIntrospectionAccess m_xIntrospectionAccess = null; + Object m_oUnoObject = null; + // define some constants used to set positions and sizes + // of controls. For further information see + // http://ui.openoffice.org/knowledge/DialogSpecificationandGuidelines.odt + final static int nFixedTextHeight = 8; + final static int nControlMargin = 6; + final static int nDialogWidth = 250; + final static int nDialogHeight = 140; + // the default roadmap width == 80 MAPs + final static int nRoadmapWidth = 80; + final static int nButtonHeight = 14; + final static int nButtonWidth = 50; + + + public UnoDialogSample2(XComponentContext _xContext, XMultiComponentFactory _xMCF, Object _oUnoObject) { + super(_xContext, _xMCF); + try { + m_oUnoObject = _oUnoObject; + Object o = m_xMCF.createInstanceWithContext("com.sun.star.beans.Introspection", m_xContext); + XIntrospection m_xIntrospection = ( XIntrospection ) UnoRuntime.queryInterface(XIntrospection.class, o ); + // the variable m_xIntrospectionAccess offers functionality to access all methods and properties + // of a variable + m_xIntrospectionAccess = m_xIntrospection.inspect(_oUnoObject); + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(); + } + } + + public static void main(String args[]) { + UnoDialogSample2 oUnoDialogSample2 = null; + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + PropertyValue[] aPropertyValues = new PropertyValue[]{}; + // create an arbitrary Uno-Object - in this case an empty writer document.. + Object oDesktop =xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); + XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, oDesktop); + Object oUnoObject = xComponentLoader.loadComponentFromURL("private:factory/swriter", "_default", 0, aPropertyValues); + + // define some coordinates where to position the controls + final int nButtonPosX = (int)((nDialogWidth/2) - (nButtonWidth/2)); + final int nButtonPosY = nDialogHeight - nButtonHeight - nControlMargin; + final int nControlPosX = nRoadmapWidth + 2*nControlMargin; + final int nControlWidth = nDialogWidth - 3*nControlMargin - nRoadmapWidth; + final int nListBoxHeight = nDialogHeight - 4*nControlMargin - nButtonHeight; + oUnoDialogSample2 = new UnoDialogSample2(xContext, xMCF, oUnoObject); + oUnoDialogSample2.initialize( new String[] {"Height", "Moveable", "Name","PositionX","PositionY", "Step", "TabIndex","Title","Width"}, + new Object[] { new Integer(nDialogHeight), Boolean.TRUE, "Dialog1", new Integer(102),new Integer(41), new Integer(1), new Short((short) 0), "Inspect a Uno-Object", new Integer(nDialogWidth)}); + String sIntroLabel = "This Dialog lists information about a given Uno-Object.\nIt offers a view to inspect all suppported servicenames, exported interfaces, methods and properties."; + oUnoDialogSample2.insertMultiLineFixedText(nControlPosX, 27, nControlWidth, 4, 1, sIntroLabel); + // get the data from the UNO object... + String[] sSupportedServiceNames = oUnoDialogSample2.getSupportedServiceNames(); + String[] sInterfaceNames = oUnoDialogSample2.getExportedInterfaceNames(); + String[] sMethodNames = oUnoDialogSample2.getMethodNames(); + String[] sPropertyNames = oUnoDialogSample2.getPropertyNames(); + // add controls to the dialog... + oUnoDialogSample2.insertListBox(nControlPosX, nControlMargin, nListBoxHeight, nControlWidth, 2, sSupportedServiceNames); + oUnoDialogSample2.insertListBox(nControlPosX, nControlMargin, nListBoxHeight, nControlWidth, 3, sInterfaceNames); + oUnoDialogSample2.insertListBox(nControlPosX, nControlMargin, nListBoxHeight, nControlWidth, 4, sMethodNames); + oUnoDialogSample2.insertListBox(nControlPosX, nControlMargin, nListBoxHeight, nControlWidth, 5, sPropertyNames); + oUnoDialogSample2.insertButton(oUnoDialogSample2, nButtonPosX, nButtonPosY, nButtonWidth, "~Close", (short) PushButtonType.OK_value); + oUnoDialogSample2.insertHorizontalFixedLine(0, nButtonPosY - nControlMargin - 4, nDialogWidth, ""); + // create the windowpeer; + // it must be kept in mind that it must be created after the insertion of the controls + // (see http://qa.openoffice.org/issues/show_bug.cgi?id=75129) + oUnoDialogSample2.createWindowPeer(); + // add the roadmap control. Note that the roadmap may not be created before the windowpeer of the dialog exists + // (see http://qa.openoffice.org/issues/show_bug.cgi?id=67369) + oUnoDialogSample2.addRoadmap(oUnoDialogSample2.getRoadmapItemStateChangeListener()); + oUnoDialogSample2.insertRoadmapItem(0, true, "Introduction", 1); + oUnoDialogSample2.insertRoadmapItem(1, true, "Supported Services", 2); + oUnoDialogSample2.insertRoadmapItem(2, true, "Interfaces", 3); + oUnoDialogSample2.insertRoadmapItem(3, true, "Methods", 4); + oUnoDialogSample2.insertRoadmapItem(4, true, "Properties", 5); + oUnoDialogSample2.m_xRMPSet.setPropertyValue("CurrentItemID", new Short((short) 1)); + oUnoDialogSample2.m_xRMPSet.setPropertyValue("Complete", Boolean.TRUE); + oUnoDialogSample2.xDialog = (XDialog) UnoRuntime.queryInterface(XDialog.class, oUnoDialogSample2.m_xDialogControl); + oUnoDialogSample2.xDialog.execute(); + }catch( Exception ex ) { + ex.printStackTrace(System.out); + } + finally{ + //make sure always to dispose the component and free the memory! + if (oUnoDialogSample2 != null){ + if (oUnoDialogSample2.m_xComponent != null){ + oUnoDialogSample2.m_xComponent.dispose(); + } + } + } + + System.exit( 0 ); + } + + + public String[] getMethodNames() { + String[] sMethodNames = new String[]{}; + try { + XIdlMethod[] xIdlMethods = m_xIntrospectionAccess.getMethods(MethodConcept.ALL); + sMethodNames = new String[xIdlMethods.length]; + for (int i = 0; i < xIdlMethods.length; i++){ + sMethodNames[i] = xIdlMethods[i].getName(); + } + } + catch( Exception e ) { + System.err.println( e ); + } + return sMethodNames; + } + + // returns the names of all supported servicenames of a UNO object + public String[] getSupportedServiceNames() { + String[] sSupportedServiceNames = new String[]{}; + // If the Uno-Object supports "com.sun.star.lang.XServiceInfo" + // this will give access to all supported servicenames + XServiceInfo xServiceInfo = ( XServiceInfo ) UnoRuntime.queryInterface( XServiceInfo.class, m_oUnoObject); + if ( xServiceInfo != null ) { + sSupportedServiceNames = xServiceInfo.getSupportedServiceNames(); + } + return sSupportedServiceNames; + } + + // returns the names of all properties of a UNO object + protected String[] getPropertyNames() { + String[] sPropertyNames = new String[]{}; + try { + Property[] aProperties = m_xIntrospectionAccess.getProperties(com.sun.star.beans.PropertyConcept.ATTRIBUTES + com.sun.star.beans.PropertyConcept.PROPERTYSET); + sPropertyNames = new String[aProperties.length]; + for (int i = 0; i < aProperties.length; i++){ + sPropertyNames[i] = aProperties[i].Name; + } + } + catch( Exception e ) { + System.err.println( e ); + } + return sPropertyNames; + } + + + // returns the names of all exported interfaces of a UNO object + protected String[] getExportedInterfaceNames(){ + Type[] aTypes = new Type[]{}; + String[] sTypeNames = new String[]{}; + // The XTypeProvider interfaces offers access to all exported interfaces + XTypeProvider xTypeProvider = ( XTypeProvider ) UnoRuntime.queryInterface( XTypeProvider.class, m_oUnoObject); + if ( xTypeProvider != null ) { + aTypes = xTypeProvider.getTypes(); + sTypeNames = new String[aTypes.length]; + for (int i = 0; i < aTypes.length - 1; i++){ + sTypeNames[i] = aTypes[i].getTypeName(); + } + } + return sTypeNames; + } + + + + public XListBox insertListBox(int _nPosX, int _nPosY, int _nHeight, int _nWidth, int _nStep, String[] _sStringItemList) { + XListBox xListBox = null; + try{ + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "ListBox"); + // create a controlmodel at the multiservicefactory of the dialog model... + Object oListBoxModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlListBoxModel"); + XMultiPropertySet xLBModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oListBoxModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xLBModelMPSet.setPropertyValues( + new String[] {"Dropdown", "Height", "Name", "PositionX", "PositionY", "ReadOnly", "Step", "StringItemList", "Width" } , + new Object[] {Boolean.FALSE, new Integer(_nHeight), sName, new Integer(_nPosX), new Integer(_nPosY), Boolean.TRUE, new Integer(_nStep), _sStringItemList, new Integer(_nWidth)}); + m_xDlgModelNameContainer.insertByName(sName, xLBModelMPSet); + }catch (com.sun.star.uno.Exception ex) { + throw new java.lang.RuntimeException("cannot happen..."); + } + return xListBox; + } + + + public void insertMultiLineFixedText(int _nPosX, int _nPosY, int _nWidth, int _nLineCount, int _nStep, String _sLabel) { + try { + // create a unique name by means of an own implementation... + String sName = createUniqueName(m_xDlgModelNameContainer, "Label"); + int nHeight = _nLineCount * nFixedTextHeight; + // create a controlmodel at the multiservicefactory of the dialog model... + Object oFTModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xFTModelMPSet.setPropertyValues( + new String[] {"Height", "Label", "MultiLine", "Name", "PositionX", "PositionY", "Step", "Width"}, + new Object[] { new Integer(nHeight), _sLabel, Boolean.TRUE, sName, new Integer(_nPosX), new Integer(_nPosY), new Integer(_nStep), new Integer(_nWidth)}); + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oFTModel); + }catch (com.sun.star.uno.Exception ex){ + /* perform individual exception handling here. + * Possible exception types are: + * com.sun.star.lang.IllegalArgumentException, + * com.sun.star.lang.WrappedTargetException, + * com.sun.star.container.ElementExistException, + * com.sun.star.beans.PropertyVetoException, + * com.sun.star.beans.UnknownPropertyException, + * com.sun.star.uno.Exception + */ + ex.printStackTrace(System.out); + } + } + +}// end of class diff --git a/odk/examples/DevelopersGuide/GUI/UnoMenu.java b/odk/examples/DevelopersGuide/GUI/UnoMenu.java new file mode 100644 index 000000000000..2fba20245d57 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/UnoMenu.java @@ -0,0 +1,167 @@ +import com.sun.star.awt.MenuEvent; +import com.sun.star.awt.MenuItemStyle; +import com.sun.star.awt.Rectangle; +import com.sun.star.awt.WindowAttribute; +import com.sun.star.awt.WindowClass; +import com.sun.star.awt.XMenuBar; +import com.sun.star.awt.XMenuExtended; +import com.sun.star.awt.XMenuListener; +import com.sun.star.awt.XPopupMenu; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XTopWindow; +import com.sun.star.awt.XWindow; +import com.sun.star.awt.XWindowPeer; +import com.sun.star.frame.XFrame; +import com.sun.star.frame.XFramesSupplier; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +public class UnoMenu extends UnoDialogSample implements XMenuListener { +private XTopWindow mxTopWindow = null; + +public UnoMenu(XComponentContext _xContext, XMultiComponentFactory _xMCF) { + super(_xContext, _xMCF); +} + + public static void main(String args[]){ + UnoMenu oUnoMenu = null; + XComponent xComponent = null; + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + oUnoMenu = new UnoMenu(xContext, xMCF); + oUnoMenu.mxTopWindow = oUnoMenu.showTopWindow( new Rectangle(100, 100, 500, 500)); //oUnoDialogSample.m_xWindowPeer, + oUnoMenu.addMenuBar(oUnoMenu.mxTopWindow, oUnoMenu); + }catch( Exception ex ) { + ex.printStackTrace(System.out); + } + } + + + public XPopupMenu getPopupMenu(){ + XPopupMenu xPopupMenu = null; + try{ + // create a popup menu + Object oPopupMenu = m_xMCF.createInstanceWithContext("stardiv.Toolkit.VCLXPopupMenu", m_xContext); + xPopupMenu = (XPopupMenu) UnoRuntime.queryInterface(XPopupMenu.class, oPopupMenu); + XMenuExtended xMenuExtended = (XMenuExtended) UnoRuntime.queryInterface(XMenuExtended.class, xPopupMenu); + + xPopupMenu.insertItem((short) 0, "~First Entry", MenuItemStyle.AUTOCHECK, (short) 0); + xPopupMenu.insertItem((short) 1, "First ~Radio Entry", (short) (MenuItemStyle.RADIOCHECK + MenuItemStyle.AUTOCHECK), (short) 1); + xPopupMenu.insertItem((short) 2, "~Second Radio Entry", (short) (MenuItemStyle.RADIOCHECK + MenuItemStyle.AUTOCHECK), (short) 2); + xPopupMenu.insertItem((short) 3, "~Third RadioEntry",(short) (MenuItemStyle.RADIOCHECK + MenuItemStyle.AUTOCHECK), (short) 3); + xPopupMenu.insertSeparator((short)4); + xPopupMenu.insertItem((short) 4, "F~ifth Entry", (short) (MenuItemStyle.CHECKABLE + MenuItemStyle.AUTOCHECK), (short) 5); + xPopupMenu.insertItem((short) 5, "~Fourth Entry", (short) (MenuItemStyle.CHECKABLE + MenuItemStyle.AUTOCHECK), (short) 6); + xPopupMenu.enableItem((short) 1, false); + xPopupMenu.insertItem((short) 6, "~Sixth Entry", (short) 0, (short) 7); + xPopupMenu.insertItem((short) 7, "~Close Dialog", (short) 0, (short) 8); + xPopupMenu.checkItem((short) 2, true); + xPopupMenu.addMenuListener(this); + }catch( Exception e ) { + throw new java.lang.RuntimeException("cannot happen..."); + } + return xPopupMenu; + } + + + public void addMenuBar(XTopWindow _xTopWindow, XMenuListener _xMenuListener){ + try{ + // create a menubar at the global MultiComponentFactory... + Object oMenuBar = m_xMCF.createInstanceWithContext("stardiv.Toolkit.VCLXMenuBar", m_xContext); + // add the menu items... + XMenuBar xMenuBar = (XMenuBar) UnoRuntime.queryInterface(XMenuBar.class, oMenuBar); + xMenuBar.insertItem((short) 0, "~First MenuBar Item", com.sun.star.awt.MenuItemStyle.AUTOCHECK, (short) 0); + xMenuBar.insertItem((short) 1, "~Second MenuBar Item", com.sun.star.awt.MenuItemStyle.AUTOCHECK, (short) 1); + xMenuBar.setPopupMenu((short) 0, getPopupMenu()); + xMenuBar.addMenuListener(_xMenuListener); + _xTopWindow.setMenuBar(xMenuBar); + }catch( Exception e ) { + throw new java.lang.RuntimeException("cannot happen..."); + }} + + protected void closeDialog(){ + XComponent xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, mxTopWindow); + if (xComponent != null){ + xComponent.dispose(); + } + + // to ensure that the Java application terminates + System.exit( 0 ); + } + + public XTopWindow showTopWindow( Rectangle _aRectangle){ + XTopWindow xTopWindow = null; + try { + // The Toolkit is the creator of all windows... + Object oToolkit = m_xMCF.createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext); + XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, oToolkit); + + // set up a window description and create the window. A parent window is always necessary for this... + com.sun.star.awt.WindowDescriptor aWindowDescriptor = new com.sun.star.awt.WindowDescriptor(); + // a TopWindow is contains a title bar and is able to inlude menus... + aWindowDescriptor.Type = WindowClass.TOP; + // specify the position and height of the window on the parent window + aWindowDescriptor.Bounds = _aRectangle; + // set the window attributes... + aWindowDescriptor.WindowAttributes = WindowAttribute.SHOW + WindowAttribute.MOVEABLE + WindowAttribute.SIZEABLE + WindowAttribute.CLOSEABLE; + + // create the window... + XWindowPeer xWindowPeer = xToolkit.createWindow(aWindowDescriptor); + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xWindowPeer); + + // create a frame and initialize it with the created window... + Object oFrame = m_xMCF.createInstanceWithContext("com.sun.star.frame.Frame", m_xContext); + m_xFrame = (XFrame) UnoRuntime.queryInterface(XFrame.class, oFrame); + + Object oDesktop = m_xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", m_xContext); + XFramesSupplier xFramesSupplier = (XFramesSupplier) UnoRuntime.queryInterface(XFramesSupplier.class, oDesktop); + m_xFrame.setCreator(xFramesSupplier); + // get the XTopWindow interface.. + xTopWindow = (XTopWindow) UnoRuntime.queryInterface(XTopWindow.class, xWindow); + } catch (com.sun.star.lang.IllegalArgumentException ex) { + ex.printStackTrace(); + } catch (com.sun.star.uno.Exception ex) { + ex.printStackTrace(); + } + return xTopWindow; + } + + public void addMenuBar(XWindow _xWindow){ + XTopWindow xTopWindow = (XTopWindow) UnoRuntime.queryInterface(XTopWindow.class, _xWindow); + addMenuBar(xTopWindow, this); + } + + public void select(MenuEvent menuEvent){ + // find out which menu item has been triggered, + // by getting the menu-id... + switch (menuEvent.MenuId){ + case 0: + // add your menu-item-specific code here: + break; + case 1: + // add your menu-item-specific code here: + break; + case 7: + closeDialog(); + default: + //.. + } + } + + public void highlight(MenuEvent menuEvent) { + int i = 0; + } + + public void deactivate(MenuEvent menuEvent) { + int i = 0; } + + public void activate(MenuEvent menuEvent) { + int i = 0; + } + +} diff --git a/odk/examples/DevelopersGuide/GUI/UnoMenu2.java b/odk/examples/DevelopersGuide/GUI/UnoMenu2.java new file mode 100644 index 000000000000..d9f9ed92c741 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/UnoMenu2.java @@ -0,0 +1,95 @@ +import com.sun.star.awt.MouseEvent; +import com.sun.star.awt.Rectangle; +import com.sun.star.awt.XControl; +import com.sun.star.awt.XMouseListener; +import com.sun.star.awt.XTopWindow; +import com.sun.star.awt.XWindow; +import com.sun.star.beans.XMultiPropertySet; +import com.sun.star.lang.EventObject; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + + +public class UnoMenu2 extends UnoMenu implements XMouseListener{ + +public UnoMenu2(XComponentContext _xContext, XMultiComponentFactory _xMCF) { + super(_xContext, _xMCF); +} + + public static void main(String args[]){ + UnoMenu2 oUnoMenu2 = null; + try { + XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + if(xContext != null ) + System.out.println("Connected to a running office ..."); + XMultiComponentFactory xMCF = xContext.getServiceManager(); + oUnoMenu2 = new UnoMenu2(xContext, xMCF); + oUnoMenu2.initialize( new String[] {"Height", "Moveable", "Name","PositionX","PositionY", "Step", "TabIndex","Title","Width"}, + new Object[] { new Integer(140), Boolean.TRUE, "Dialog1", new Integer(102),new Integer(41), new Integer(1), new Short((short) 0), "Menu-Dialog", new Integer(200)}); + + Object oFTHeaderModel = oUnoMenu2.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTHeaderModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel); + xFTHeaderModelMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(8), "This code-sample demonstrates the creation of a popup-menu", "HeaderLabel", new Integer(6), new Integer(6), new Integer(200)}); + // add the model to the NameContainer of the dialog model + oUnoMenu2.m_xDlgModelNameContainer.insertByName("Headerlabel", oFTHeaderModel); + oUnoMenu2.addLabelForPopupMenu(); + oUnoMenu2.executeDialog(); + }catch( Exception ex ) { + ex.printStackTrace(System.out); + } + finally{ + //make sure always to dispose the component and free the memory! + if (oUnoMenu2 != null) { + if (oUnoMenu2.m_xComponent != null){ + oUnoMenu2.m_xComponent.dispose(); + } + } + System.exit( 0 ); + }} + + + public void addLabelForPopupMenu(){ + try{ + String sName = "lblPopup"; + Object oFTModel = m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel"); + XMultiPropertySet xFTModelMPSet = (XMultiPropertySet) UnoRuntime.queryInterface(XMultiPropertySet.class, oFTModel); + // Set the properties at the model - keep in mind to pass the property names in alphabetical order! + xFTModelMPSet.setPropertyValues( + new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"}, + new Object[] { new Integer(8), "Right-click here", sName, new Integer(50), new Integer(50), new Integer(100)}); + // add the model to the NameContainer of the dialog model + m_xDlgModelNameContainer.insertByName(sName, oFTModel); + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, m_xDlgContainer.getControl(sName)); + xWindow.addMouseListener(this); + }catch( Exception e ) { + System.err.println( e + e.getMessage()); + e.printStackTrace(); + }} + + protected void closeDialog(){ + xDialog.endExecute(); + } + + public void mouseReleased(MouseEvent mouseEvent) { + } + + public void mousePressed(MouseEvent mouseEvent) { + if (mouseEvent.PopupTrigger){ + Rectangle aRectangle = new Rectangle(mouseEvent.X, mouseEvent.Y, 0, 0); + XControl xControl = (XControl) UnoRuntime.queryInterface(XControl.class, mouseEvent.Source); + getPopupMenu().execute( xControl.getPeer(), aRectangle, com.sun.star.awt.PopupMenuDirection.DEFAULT); + } + } + + public void mouseExited(MouseEvent mouseEvent) { + } + + public void mouseEntered(MouseEvent mouseEvent) { + } + + public void disposing(EventObject eventObject) { + } +} diff --git a/odk/examples/DevelopersGuide/GUI/oologo.gif b/odk/examples/DevelopersGuide/GUI/oologo.gif Binary files differnew file mode 100644 index 000000000000..eb5e679c0f34 --- /dev/null +++ b/odk/examples/DevelopersGuide/GUI/oologo.gif |