summaryrefslogtreecommitdiffstats
path: root/odk/examples/DevelopersGuide/GUI
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /odk/examples/DevelopersGuide/GUI
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'odk/examples/DevelopersGuide/GUI')
-rw-r--r--odk/examples/DevelopersGuide/GUI/DialogDocument.java146
-rw-r--r--odk/examples/DevelopersGuide/GUI/ImageControlSample.java166
-rw-r--r--odk/examples/DevelopersGuide/GUI/Makefile141
-rw-r--r--odk/examples/DevelopersGuide/GUI/MessageBox.java237
-rw-r--r--odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java69
-rw-r--r--odk/examples/DevelopersGuide/GUI/SystemDialog.java188
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoDialogSample.java1373
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java263
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoMenu.java186
-rw-r--r--odk/examples/DevelopersGuide/GUI/UnoMenu2.java120
-rw-r--r--odk/examples/DevelopersGuide/GUI/oologo.gifbin0 -> 2563 bytes
11 files changed, 2889 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/GUI/DialogDocument.java b/odk/examples/DevelopersGuide/GUI/DialogDocument.java
new file mode 100644
index 000000000..4b535534d
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/DialogDocument.java
@@ -0,0 +1,146 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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[] { Integer.valueOf(400), Boolean.TRUE, "Dialog1", Integer.valueOf(102),Integer.valueOf(41), Integer.valueOf(1), Short.valueOf((short) 0), "Document-Dialog", Integer.valueOf(300)});
+ oDialogDocument.createWindowPeer();
+ Object oFTHeaderModel = oDialogDocument.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel");
+ XMultiPropertySet xFTHeaderModelMPSet = UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel);
+ xFTHeaderModelMPSet.setPropertyValues(
+ new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"},
+ new Object[] { Integer.valueOf(8), "This code-sample demonstrates how to display an office document in a dialog window", "HeaderLabel", Integer.valueOf(6), Integer.valueOf(6), Integer.valueOf(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.err);
+ } 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 = 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 = UnoRuntime.queryInterface(XWindow.class, xWindowPeer);
+ 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 = UnoRuntime.queryInterface(XFrame.class, oFrame);
+ m_xFrame.initialize(xWindow);
+
+ // load the document and open it in preview mode
+ 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) {
+ throw new java.lang.RuntimeException("cannot happen...", ex);
+ } catch (com.sun.star.uno.Exception ex) {
+ throw new java.lang.RuntimeException("cannot happen...", ex);
+ }
+ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/ImageControlSample.java b/odk/examples/DevelopersGuide/GUI/ImageControlSample.java
new file mode 100644
index 000000000..060b5e681
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/ImageControlSample.java
@@ -0,0 +1,166 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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[] { Integer.valueOf(100), Boolean.TRUE, "MyTestDialog", Integer.valueOf(102),Integer.valueOf(41), Integer.valueOf(0), Short.valueOf((short) 0), "OpenOffice", Integer.valueOf(230)});
+ Object oFTHeaderModel = oImageControlSample.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel");
+ XMultiPropertySet xFTHeaderModelMPSet = UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel);
+ xFTHeaderModelMPSet.setPropertyValues(
+ new String[] {"Height", "Label", "MultiLine", "Name", "PositionX", "PositionY", "Width"},
+ new Object[] { Integer.valueOf(16), "This code-sample demonstrates how to create an ImageControlSample within a dialog", Boolean.TRUE, "HeaderLabel", Integer.valueOf(6), Integer.valueOf(6), Integer.valueOf(210)});
+ // add the model to the NameContainer of the dialog model
+ oImageControlSample.m_xDlgModelNameContainer.insertByName("Headerlabel", oFTHeaderModel);
+ XPropertySet xICModelPropertySet = oImageControlSample.insertImageControl(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 = 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(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 = UnoRuntime.queryInterface(XMultiPropertySet.class, oICModel);
+ xICModelPropertySet =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[] { Short.valueOf((short) 1), Integer.valueOf(_nHeight), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Boolean.FALSE, Integer.valueOf(_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.err);
+ }
+ 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 = 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 = 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...", ex);
+ }}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/Makefile b/odk/examples/DevelopersGuide/GUI/Makefile
new file mode 100644
index 000000000..6eb18efdc
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/Makefile
@@ -0,0 +1,141 @@
+#*************************************************************************
+#
+# 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
+
+# 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 000000000..cff15262d
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/MessageBox.java
@@ -0,0 +1,237 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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.MessageBoxType;
+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.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 = 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 = 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 active frame
+ // which is potentially dangerous
+ public XWindowPeer getWindowPeerOfFrame(XComponent xComp) {
+ try {
+ XFrame xFrame = null;
+
+ if (xComp != null) {
+ 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 = UnoRuntime.queryInterface(XFramesSupplier.class, oDesktop);
+ xFrame = xFramesSupplier.getActiveFrame();
+ }
+
+ if (xFrame != null){
+ XWindow xWindow = xFrame.getContainerWindow();
+ if (xWindow != null){
+ 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 =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 = 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 = UnoRuntime.queryInterface(XMessageBoxFactory.class, oToolkit);
+ XMessageBox xMessageBox = xMessageBoxFactory.createMessageBox(_xParentWindowPeer, MessageBoxType.ERRORBOX, com.sun.star.awt.MessageBoxButtons.BUTTONS_OK, _sTitle, _sMessage);
+ xComponent = UnoRuntime.queryInterface(XComponent.class, xMessageBox);
+ if (xMessageBox != null){
+ xMessageBox.execute();
+ }
+ } catch (com.sun.star.uno.Exception ex) {
+ ex.printStackTrace(System.err);
+ } 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.err);
+ }
+ return bIsActivated;
+ }
+
+ public static int getRedColorShare(int _nColor) {
+ int nRed = _nColor/65536;
+ return nRed;
+ }
+
+ public static int getGreenColorShare(int _nColor) {
+ int nRedModulo = _nColor % 65536;
+ int nGreen = nRedModulo / 256;
+ return nGreen;
+ }
+
+ public static int getBlueColorShare(int _nColor) {
+ int nRedModulo = _nColor % 65536;
+ int nGreenModulo = (nRedModulo % 256);
+ int nBlue = nGreenModulo;
+ return nBlue;
+ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java b/odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java
new file mode 100644
index 000000000..9a9db63cd
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/RoadmapItemStateChangeListener.java
@@ -0,0 +1,69 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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.XItemListener;
+import com.sun.star.lang.EventObject;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.uno.UnoRuntime;
+
+
+public class RoadmapItemStateChangeListener implements XItemListener {
+ private final 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 = 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 denote the same
+ if (nNewID != nOldStep){
+ xDialogModelPropertySet.setPropertyValue("Step", Integer.valueOf(nNewID));
+ }
+ } catch (com.sun.star.uno.Exception exception) {
+ exception.printStackTrace(System.err);
+ }
+ }
+
+ public void disposing(EventObject eventObject) {
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/SystemDialog.java b/odk/examples/DevelopersGuide/GUI/SystemDialog.java
new file mode 100644
index 000000000..62c6e3e03
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/SystemDialog.java
@@ -0,0 +1,188 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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.XFolderPicker2;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.util.thePathSettings;
+
+
+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 = 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 = thePathSettings.get(m_xContext);
+ 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.openoffice.org/wiki/Framework/Article/Filter
+ 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 = UnoRuntime.queryInterface(XInitialization.class, xFilePicker);
+ short[] listAny = 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 = UnoRuntime.queryInterface(XFilePickerControlAccess.class, xFilePicker);
+ xFilePickerControlAccess.setValue(com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION, (short) 0, Boolean.TRUE);
+
+ xComponent = UnoRuntime.queryInterface(XComponent.class, xFilePicker);
+
+ // execute the dialog...
+ XExecutableDialog xExecutable = 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 = thePathSettings.get(m_xContext);
+ 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);
+ XFolderPicker2 xFolderPicker = UnoRuntime.queryInterface(XFolderPicker2.class, oFolderPicker);
+ XExecutableDialog xExecutable = UnoRuntime.queryInterface(XExecutableDialog.class, oFolderPicker);
+ 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.err);
+ } 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;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/UnoDialogSample.java b/odk/examples/DevelopersGuide/GUI/UnoDialogSample.java
new file mode 100644
index 000000000..c49dbfd77
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/UnoDialogSample.java
@@ -0,0 +1,1373 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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.PushButtonType;
+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.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.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.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.XNumberFormats;
+import com.sun.star.util.XNumberFormatsSupplier;
+import com.sun.star.util.Date;
+import com.sun.star.util.Time;
+import com.sun.star.util.thePathSettings;
+
+
+// Suggestion: hand the position and width over as parameters
+
+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;
+ private XModel m_xModel;
+ protected XNameContainer m_xDlgModelNameContainer;
+ protected XControlContainer m_xDlgContainer;
+// protected XNameAccess m_xDlgModelNameAccess;
+ protected XControl m_xDialogControl;
+ protected XDialog xDialog;
+
+ protected XWindowPeer m_xWindowPeer = 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[] { Integer.valueOf(380), Boolean.TRUE, "MyTestDialog", Integer.valueOf(102),Integer.valueOf(41), Integer.valueOf(0), Short.valueOf((short) 0), "OpenOffice", Integer.valueOf(380)});
+ Object oFTHeaderModel = oUnoDialogSample.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel");
+ XMultiPropertySet xFTHeaderModelMPSet = UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel);
+ xFTHeaderModelMPSet.setPropertyValues(
+ new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"},
+ new Object[] { Integer.valueOf(8), "This code-sample demonstrates how to create various controls in a dialog", "HeaderLabel", Integer.valueOf(106), Integer.valueOf(6), Integer.valueOf(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, new Time(0,(short)0,(short)0,(short)10,false), new Time((short)0,(short)0,(short)0,(short)0,false), new Time((short)0,(short)0,(short)0,(short)17,false));
+ 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.insertRoadmapItem(0, true, "Introduction", 1);
+ oUnoDialogSample.insertRoadmapItem(1, true, "Documents", 2);
+ oUnoDialogSample.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 );
+ }
+
+
+ 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 = UnoRuntime.queryInterface(XMultiServiceFactory.class, oDialogModel);
+
+ // The named container is used to insert the created controls into...
+ m_xDlgModelNameContainer = UnoRuntime.queryInterface(XNameContainer.class, oDialogModel);
+
+ // create the dialog...
+ Object oUnoDialog = _xMCF.createInstanceWithContext("com.sun.star.awt.UnoControlDialog", m_xContext);
+ m_xDialogControl = UnoRuntime.queryInterface(XControl.class, oUnoDialog);
+
+ // The scope of the control container is public...
+ m_xDlgContainer = UnoRuntime.queryInterface(XControlContainer.class, oUnoDialog);
+
+ UnoRuntime.queryInterface(XTopWindow.class, m_xDlgContainer);
+
+ // link the dialog and its model...
+ XControlModel xControlModel = UnoRuntime.queryInterface(XControlModel.class, oDialogModel);
+ m_xDialogControl.setModel(xControlModel);
+ } catch (com.sun.star.uno.Exception exception) {
+ exception.printStackTrace(System.err);
+ }
+ }
+
+
+
+
+
+
+ public short executeDialog() {
+ if (m_xWindowPeer == null) {
+ createWindowPeer();
+ }
+ xDialog = UnoRuntime.queryInterface(XDialog.class, m_xDialogControl);
+ m_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) {
+ try{
+ XMultiPropertySet xMultiPropertySet = UnoRuntime.queryInterface(XMultiPropertySet.class, m_xDlgModelNameContainer);
+ xMultiPropertySet.setPropertyValues(PropertyNames, PropertyValues);
+ } catch (com.sun.star.uno.Exception ex) {
+ ex.printStackTrace(System.err);
+ }}
+
+
+
+ /**
+ * create a peer for this
+ * dialog, using the given
+ * peer as a parent.
+ */
+ private XWindowPeer createWindowPeer(XWindowPeer _xWindowParentPeer) {
+ try{
+ if (_xWindowParentPeer == null){
+ 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 = UnoRuntime.queryInterface(XToolkit.class, tk);
+ 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.err);
+ }
+ return null;
+ }
+
+
+
+
+
+
+ /**
+ * Creates a peer for this
+ * dialog, using the active OO frame
+ * as the parent window.
+ */
+ public XWindowPeer createWindowPeer() {
+ return createWindowPeer(null);
+ }
+
+
+
+
+
+
+
+ private 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 = 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[] { Integer.valueOf(8), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nStep), Integer.valueOf(_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 = UnoRuntime.queryInterface(XPropertySet.class, oFTModel);
+ xFTPSet.setPropertyValue("Label", _sLabel);
+
+ // reference the control by the Name
+ XControl xFTControl = m_xDlgContainer.getControl(sName);
+ xFixedText = UnoRuntime.queryInterface(XFixedText.class, xFTControl);
+ 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.err);
+ }
+ return xFixedText;
+ }
+
+
+ private 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 = 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[] { Integer.valueOf(12), sName, Integer.valueOf(_nPositionX), Integer.valueOf(_nPositionY), Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oCFModel);
+ XPropertySet xCFModelPSet = 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 = 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.err);
+ }
+ return xTextComponent;
+ }
+
+
+
+ private 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 = 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[] { Integer.valueOf(8), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oPBModel);
+ xPBModelPSet = 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", Integer.valueOf(0));
+ xPBModelPSet.setPropertyValue("ProgressValueMax", Integer.valueOf(_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.err);
+ }
+ 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 = 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[] { Integer.valueOf(8), sName, Integer.valueOf(0), Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_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 = 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.err);
+ }
+ }
+
+
+
+ private 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 = 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[] { Integer.valueOf(_nHeight), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_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 = 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.err);
+ }
+ }
+
+
+
+ private 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 = 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[] { Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), "MyText", Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oTFModel);
+ XPropertySet xTFModelPSet = 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", Short.valueOf((short) '*'));
+ XControl xTFControl = m_xDlgContainer.getControl(sName);
+
+ // add a textlistener that is notified on each change of the controlvalue...
+ xTextComponent = UnoRuntime.queryInterface(XTextComponent.class, xTFControl);
+ XWindow xTFWindow = 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.err);
+ }
+ return xTextComponent;
+ }
+
+ private XPropertySet insertTimeField(int _nPosX, int _nPosY, int _nWidth, Time _aTime, Time _aTimeMin, Time _aTimeMax){
+ 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 = 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[] { Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Boolean.TRUE, Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oTFModel);
+ xTFModelPSet = 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", Short.valueOf((short) 5));
+ xTFModelPSet.setPropertyValue("TimeMin", _aTimeMin);
+ xTFModelPSet.setPropertyValue("TimeMax", _aTimeMax);
+ xTFModelPSet.setPropertyValue("Time", _aTime);
+ } 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.err);
+ }
+ return xTFModelPSet;
+ }
+
+
+
+ private 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 = 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, Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oDFModel);
+ xDFModelPSet = 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", Short.valueOf((short) 7));
+ xDFModelPSet.setPropertyValue("DateMin", new Date((short)1, (short)4, (short)2007));
+ xDFModelPSet.setPropertyValue("DateMax", new Date((short)1, (short)5, (short)2007));
+ xDFModelPSet.setPropertyValue("Date", new Date((short)15, (short)4, (short)2000));
+ Object oDFControl = m_xDlgContainer.getControl(sName);
+
+ // add a SpinListener that is notified on each change of the controlvalue...
+ 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.err);
+ }
+ return xDFModelPSet;
+ }
+
+
+ private 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 = 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[] { Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oPFModel);
+ xPFModelPSet = 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.err);
+ }
+ return xPFModelPSet;
+ }
+
+
+ private 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 = 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[] { Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Boolean.TRUE, Boolean.TRUE, Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oNFModel);
+ xNFModelPSet = 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", Short.valueOf(_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.err);
+ }
+ return xNFModelPSet;
+ }
+
+
+
+ private 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 = Integer.valueOf(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 = 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[] { Integer.valueOf(_nHeight), sName, NOrientation, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(8)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oSBModel);
+
+ xSBModelPSet = 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", Integer.valueOf(0));
+ xSBModelPSet.setPropertyValue("ScrollValueMax", Integer.valueOf(100));
+ xSBModelPSet.setPropertyValue("ScrollValue", Integer.valueOf(5));
+ xSBModelPSet.setPropertyValue("LineIncrement", Integer.valueOf(2));
+ xSBModelPSet.setPropertyValue("BlockIncrement", Integer.valueOf(10));
+
+ // Add an Adjustment that will listen to changes of the scrollbar...
+ XControl xSBControl = m_xDlgContainer.getControl(sName);
+ 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.err);
+ }
+ 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 BaseName = _sElementName;
+ while (bElementexists) {
+ bElementexists = _xElementContainer.hasByName(_sElementName);
+ if (bElementexists) {
+ i += 1;
+ _sElementName = BaseName + Integer.toString(i);
+ }
+ }
+ return _sElementName;
+ }
+
+
+ private 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 = UnoRuntime.queryInterface(XMultiPropertySet.class, oCBModel);
+ xCBMPSet.setPropertyValues(
+ new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width" } ,
+ new Object[] {Integer.valueOf(8), "~Include page number", sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nWidth)});
+
+ // The following property may also be set with XMultiPropertySet but we
+ // use the XPropertySet interface merely for reasons of demonstration
+ XPropertySet xCBModelPSet = UnoRuntime.queryInterface(XPropertySet.class, xCBMPSet);
+ xCBModelPSet.setPropertyValue("TriState", Boolean.TRUE);
+ xCBModelPSet.setPropertyValue("State", Short.valueOf((short) 1));
+
+ // add the model to the NameContainer of the dialog model
+ m_xDlgModelNameContainer.insertByName(sName, oCBModel);
+ XControl xCBControl = m_xDlgContainer.getControl(sName);
+ 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.err);
+ }
+ return xCheckBox;
+ }
+
+
+
+
+ private 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 = 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[] {Integer.valueOf(8), "~First Option", sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Short.valueOf((short) 1), Short.valueOf(_nTabIndex++),Integer.valueOf(_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 = 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[] {Integer.valueOf(8), "~Second Option", sName, Integer.valueOf(130), Integer.valueOf(214), Short.valueOf(_nTabIndex), Integer.valueOf(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.err);
+ }
+ }
+
+
+ private 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 = 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, Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nStep), _sStringItemList, Integer.valueOf(_nWidth)});
+ // The following property may also be set with XMultiPropertySet but we
+ // use the XPropertySet interface merely for reasons of demonstration
+ XPropertySet xLBModelPSet = 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 = 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.err);
+ }
+ return xListBox;
+ }
+
+
+ private 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 = 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, Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), sStringItemList, Integer.valueOf(_nWidth)});
+
+ // The following property may also be set with XMultiPropertySet but we
+ // use the XPropertySet interface merely for reasons of demonstration
+ XPropertySet xCbBModelPSet = UnoRuntime.queryInterface(XPropertySet.class, xCbBModelMPSet);
+ xCbBModelPSet.setPropertyValue("MaxTextLen", Short.valueOf((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 = 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.err);
+ }
+ return xComboBox;
+ }
+
+
+
+ private 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 = 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), Integer.valueOf(12), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Boolean.TRUE, Boolean.TRUE, Integer.valueOf(_nWidth)});
+
+ xFFModelPSet = 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 = 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", Integer.valueOf(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 = 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.err);
+ }
+ return xFFModelPSet;
+ }
+
+
+
+
+ private 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 = thePathSettings.get(m_xContext);
+ 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 = 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 = UnoRuntime.queryInterface(XMultiPropertySet.class, oFCModel);
+ xFCModelMPSet.setPropertyValues(
+ new String[] {"Height", "Name", "PositionX", "PositionY", "Text", "Width"},
+ new Object[] { Integer.valueOf(14), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), sSystemWorkPath, Integer.valueOf(_nWidth)});
+
+ // The controlmodel is not really available until inserted to the Dialog container
+ m_xDlgModelNameContainer.insertByName(sName, oFCModel);
+ XPropertySet xFCModelPSet = UnoRuntime.queryInterface(XPropertySet.class, oFCModel);
+
+ // add a textlistener that is notified on each change of the controlvalue...
+ XControl xFCControl = m_xDlgContainer.getControl(sName);
+ xTextComponent = UnoRuntime.queryInterface(XTextComponent.class, xFCControl);
+ XWindow xFCWindow = 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.err);
+ }
+ 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 = 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[] {Integer.valueOf(14), _sLabel, sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Short.valueOf(_nPushButtonType), Integer.valueOf(_nWidth)});
+
+ // add the model to the NameContainer of the dialog model
+ m_xDlgModelNameContainer.insertByName(sName, oButtonModel);
+ XControl xButtonControl = m_xDlgContainer.getControl(sName);
+ 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.err);
+ }
+ return xButton;
+ }
+
+
+
+ public XFrame getCurrentFrame(){
+ XFrame xRetFrame = null;
+ try {
+ Object oDesktop = m_xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", m_xContext);
+ 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 = UnoRuntime.queryInterface(XControl.class, textEvent.Source);
+ XControlModel xControlModel = xControl.getModel();
+ XPropertySet xPSet = 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.err);
+ }
+ }
+
+
+
+ public void up(SpinEvent spinEvent) {
+ try {
+ // get the control that has fired the event,
+ XControl xControl = UnoRuntime.queryInterface(XControl.class, spinEvent.Source);
+ XControlModel xControlModel = xControl.getModel();
+ XPropertySet xPSet = 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.err);
+ }
+ }
+
+
+ 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 = UnoRuntime.queryInterface(XControl.class, rEvent.Source);
+ XControlModel xControlModel = xControl.getModel();
+ XPropertySet xPSet = 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.err);
+ }
+ }
+
+
+ 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 = 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 = UnoRuntime.queryInterface(XControl.class, _mouseEvent.Source);
+ Object tk = m_xMCF.createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext);
+ 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 = 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...", ex);
+ }
+ }
+
+
+
+ public void itemStateChanged(ItemEvent itemEvent) {
+ try{
+ // retrieve the control that the event has been invoked at...
+ XCheckBox xCheckBox = UnoRuntime.queryInterface(XCheckBox.class, itemEvent.Source);
+ // retrieve the control that we want to disable or enable
+ XControl xControl = UnoRuntime.queryInterface(XControl.class, m_xDlgContainer.getControl("CommandButton1"));
+ XPropertySet xModelPropertySet = 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", Boolean.valueOf(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.err);
+ }
+ }
+
+
+ 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;
+ private XSingleServiceFactory m_xSSFRoadmap;
+ private XIndexContainer m_xRMIndexCont;
+
+ public void addRoadmap() {
+ XPropertySet xDialogModelPropertySet = null;
+ try {
+ // create a unique name by means of an own implementation...
+ String sRoadmapName = createUniqueName(m_xDlgModelNameContainer, "Roadmap");
+
+ xDialogModelPropertySet = 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 = UnoRuntime.queryInterface(XMultiPropertySet.class, oRoadmapModel);
+ xRMMPSet.setPropertyValues( new String[] {"Complete", "Height", "Name", "PositionX", "PositionY", "Text", "Width" },
+ new Object[] {Boolean.FALSE, Integer.valueOf(nDialogHeight - 26), sRoadmapName, Integer.valueOf(0), Integer.valueOf(0), "Steps", Integer.valueOf(85)});
+ m_xRMPSet = 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 = UnoRuntime.queryInterface(XSingleServiceFactory.class, oRoadmapModel);
+ m_xRMIndexCont = UnoRuntime.queryInterface(XIndexContainer.class, oRoadmapModel);
+
+ // add the itemlistener to the control...
+ XControl xRMControl = this.m_xDlgContainer.getControl(sRoadmapName);
+ XItemEventBroadcaster xRMBroadcaster = UnoRuntime.queryInterface(XItemEventBroadcaster.class, xRMControl);
+ xRMBroadcaster.addItemListener( getRoadmapItemStateChangeListener() );
+ } catch (java.lang.Exception jexception) {
+ jexception.printStackTrace(System.err);
+ }
+ }
+
+ /*
+ * 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??? directly 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 = 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", Boolean.valueOf(_bEnabled));
+ // in this context the "ID" is meant to refer to a step of the dialog
+ xRMItemPSet.setPropertyValue("ID", Integer.valueOf(_ID));
+ m_xRMIndexCont.insertByIndex(Index, oRoadmapItem);
+ } catch (com.sun.star.uno.Exception exception) {
+ exception.printStackTrace(System.err);
+ }
+ }
+
+
+ public void keyReleased(KeyEvent keyEvent) {
+ }
+
+ public void keyPressed(KeyEvent keyEvent) {
+ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java b/odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java
new file mode 100644
index 000000000..3e38886a1
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/UnoDialogSample2.java
@@ -0,0 +1,263 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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.awt.XListBox;
+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.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
+ static final int nFixedTextHeight = 8;
+ static final int nControlMargin = 6;
+ static final int nDialogWidth = 250;
+ static final int nDialogHeight = 140;
+ // the default roadmap width == 80 MAPs
+ static final int nRoadmapWidth = 80;
+ static final int nButtonHeight = 14;
+ static final 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 xIntrospection = UnoRuntime.queryInterface(XIntrospection.class, o );
+ // the variable m_xIntrospectionAccess offers functionality to access all methods and properties
+ // of a variable
+ m_xIntrospectionAccess = 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 = 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 = (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[] { Integer.valueOf(nDialogHeight), Boolean.TRUE, "Dialog1", Integer.valueOf(102),Integer.valueOf(41), Integer.valueOf(1), Short.valueOf((short) 0), "Inspect a Uno-Object", Integer.valueOf(nDialogWidth)});
+ String sIntroLabel = "This Dialog lists information about a given Uno-Object.\nIt offers a view to inspect all supported 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.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", Short.valueOf((short) 1));
+ oUnoDialogSample2.m_xRMPSet.setPropertyValue("Complete", Boolean.TRUE);
+ oUnoDialogSample2.xDialog = UnoRuntime.queryInterface(XDialog.class, oUnoDialogSample2.m_xDialogControl);
+ oUnoDialogSample2.xDialog.execute();
+ }catch( Exception ex ) {
+ ex.printStackTrace(System.err);
+ }
+ 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 = 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 = 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 = 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, Integer.valueOf(_nHeight), sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Boolean.TRUE, Integer.valueOf(_nStep), _sStringItemList, Integer.valueOf(_nWidth)});
+ m_xDlgModelNameContainer.insertByName(sName, xLBModelMPSet);
+ }catch (com.sun.star.uno.Exception ex) {
+ throw new java.lang.RuntimeException("cannot happen...", ex);
+ }
+ 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 = 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[] { Integer.valueOf(nHeight), _sLabel, Boolean.TRUE, sName, Integer.valueOf(_nPosX), Integer.valueOf(_nPosY), Integer.valueOf(_nStep), Integer.valueOf(_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.err);
+ }
+ }
+
+}// end of class
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/UnoMenu.java b/odk/examples/DevelopersGuide/GUI/UnoMenu.java
new file mode 100644
index 000000000..10d89c837
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/UnoMenu.java
@@ -0,0 +1,186 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+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.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;
+ 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.err);
+ }
+ }
+
+
+ public XPopupMenu getPopupMenu(){
+ XPopupMenu xPopupMenu = null;
+ try{
+ // create a popup menu
+ Object oPopupMenu = m_xMCF.createInstanceWithContext("com.sun.star.awt.PopupMenu", m_xContext);
+ xPopupMenu = UnoRuntime.queryInterface(XPopupMenu.class, oPopupMenu);
+
+ // ID must start be > 0
+ short nId = 1;
+ short nPos = 0;
+
+ xPopupMenu.insertItem(nId++, "First Entry", MenuItemStyle.AUTOCHECK, nPos++);
+ xPopupMenu.insertItem(nId++, "First Radio Entry", (short) (MenuItemStyle.RADIOCHECK + MenuItemStyle.AUTOCHECK), nPos++);
+ xPopupMenu.insertItem(nId++, "Second Radio Entry", (short) (MenuItemStyle.RADIOCHECK + MenuItemStyle.AUTOCHECK), nPos++);
+ xPopupMenu.insertItem(nId++, "Third RadioEntry",(short) (MenuItemStyle.RADIOCHECK + MenuItemStyle.AUTOCHECK), nPos++);
+ xPopupMenu.insertSeparator(nPos++);
+ xPopupMenu.insertItem(nId++, "Fifth Entry", (short) (MenuItemStyle.CHECKABLE + MenuItemStyle.AUTOCHECK), nPos++);
+ xPopupMenu.insertItem(nId++, "Fourth Entry", (short) (MenuItemStyle.CHECKABLE + MenuItemStyle.AUTOCHECK), nPos++);
+ xPopupMenu.insertItem(nId++, "Sixth Entry", (short) 0, nPos++);
+ xPopupMenu.insertItem(nId++, "Close Dialog", (short) 0, nPos++);
+
+ xPopupMenu.enableItem((short) 2, false);
+ xPopupMenu.checkItem((short) 3, true);
+
+ xPopupMenu.addMenuListener(this);
+ }catch( Exception e ) {
+ throw new java.lang.RuntimeException("cannot happen...", e);
+ }
+ return xPopupMenu;
+ }
+
+
+ private void addMenuBar(XTopWindow _xTopWindow, XMenuListener _xMenuListener){
+ try{
+ // create a menubar at the global MultiComponentFactory...
+ Object oMenuBar = m_xMCF.createInstanceWithContext("com.sun.star.awt.MenuBar", m_xContext);
+ // add the menu items...
+ XMenuBar xMenuBar = UnoRuntime.queryInterface(XMenuBar.class, oMenuBar);
+ xMenuBar.insertItem((short) 1, "~First MenuBar Item", com.sun.star.awt.MenuItemStyle.AUTOCHECK, (short) 0);
+ xMenuBar.insertItem((short) 2, "~Second MenuBar Item", com.sun.star.awt.MenuItemStyle.AUTOCHECK, (short) 1);
+ xMenuBar.setPopupMenu((short) 1, getPopupMenu());
+ xMenuBar.addMenuListener(_xMenuListener);
+ _xTopWindow.setMenuBar(xMenuBar);
+ }catch( Exception e ) {
+ throw new java.lang.RuntimeException("cannot happen...", e);
+ }}
+
+ protected void closeDialog(){
+ XComponent xComponent = UnoRuntime.queryInterface(XComponent.class, mxTopWindow);
+ if (xComponent != null){
+ xComponent.dispose();
+ }
+
+ // to ensure that the Java application terminates
+ System.exit( 0 );
+ }
+
+ private 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 = 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 include 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 = 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 = UnoRuntime.queryInterface(XFrame.class, oFrame);
+
+ Object oDesktop = m_xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", m_xContext);
+ XFramesSupplier xFramesSupplier = UnoRuntime.queryInterface(XFramesSupplier.class, oDesktop);
+ m_xFrame.setCreator(xFramesSupplier);
+ // get the XTopWindow interface...
+ 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 itemSelected(MenuEvent menuEvent){
+ // find out which menu item has been triggered,
+ // by getting the menu-id...
+ switch (menuEvent.MenuId){
+ case 1:
+ // add your menu-item-specific code here:
+ break;
+ case 2:
+ // add your menu-item-specific code here:
+ break;
+ case 8:
+ closeDialog();
+ default:
+
+ }
+ }
+
+ public void itemHighlighted(MenuEvent menuEvent) {
+ }
+
+ public void itemDeactivated(MenuEvent menuEvent) {
+ }
+
+ public void itemActivated(MenuEvent menuEvent) {
+ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/UnoMenu2.java b/odk/examples/DevelopersGuide/GUI/UnoMenu2.java
new file mode 100644
index 000000000..8658fb66a
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/UnoMenu2.java
@@ -0,0 +1,120 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+import com.sun.star.awt.MouseEvent;
+import com.sun.star.awt.Rectangle;
+import com.sun.star.awt.XControl;
+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 {
+
+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[] { Integer.valueOf(140), Boolean.TRUE, "Dialog1", Integer.valueOf(102),Integer.valueOf(41), Integer.valueOf(1), Short.valueOf((short) 0), "Menu-Dialog", Integer.valueOf(200)});
+
+ Object oFTHeaderModel = oUnoMenu2.m_xMSFDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel");
+ XMultiPropertySet xFTHeaderModelMPSet = UnoRuntime.queryInterface(XMultiPropertySet.class, oFTHeaderModel);
+ xFTHeaderModelMPSet.setPropertyValues(
+ new String[] {"Height", "Label", "Name", "PositionX", "PositionY", "Width"},
+ new Object[] { Integer.valueOf(8), "This code-sample demonstrates the creation of a popup-menu", "HeaderLabel", Integer.valueOf(6), Integer.valueOf(6), Integer.valueOf(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.err);
+ }
+ 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 = 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[] { Integer.valueOf(8), "Right-click here", sName, Integer.valueOf(50), Integer.valueOf(50), Integer.valueOf(100)});
+ // add the model to the NameContainer of the dialog model
+ m_xDlgModelNameContainer.insertByName(sName, oFTModel);
+ XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, m_xDlgContainer.getControl(sName));
+ xWindow.addMouseListener(this);
+ }catch( Exception e ) {
+ System.err.println( e + e.getMessage());
+ e.printStackTrace();
+ }}
+
+ @Override
+ protected void closeDialog(){
+ xDialog.endExecute();
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent mouseEvent) {
+ }
+
+ @Override
+ public void mousePressed(MouseEvent mouseEvent) {
+ if (mouseEvent.PopupTrigger){
+ Rectangle aPos = new Rectangle(mouseEvent.X, mouseEvent.Y, 0, 0);
+ XControl xControl = UnoRuntime.queryInterface(XControl.class, mouseEvent.Source);
+ getPopupMenu().execute( xControl.getPeer(), aPos, com.sun.star.awt.PopupMenuDirection.EXECUTE_DEFAULT);
+ }
+ }
+
+ @Override
+ public void mouseExited(MouseEvent mouseEvent) {
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent mouseEvent) {
+ }
+
+ @Override
+ public void disposing(EventObject eventObject) {
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/odk/examples/DevelopersGuide/GUI/oologo.gif b/odk/examples/DevelopersGuide/GUI/oologo.gif
new file mode 100644
index 000000000..eb5e679c0
--- /dev/null
+++ b/odk/examples/DevelopersGuide/GUI/oologo.gif
Binary files differ