diff options
Diffstat (limited to 'odk/examples/DevelopersGuide/BasicAndDialogs')
16 files changed, 1325 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/CreatingDialogs.odt b/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/CreatingDialogs.odt Binary files differnew file mode 100644 index 000000000..dd55f9076 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/CreatingDialogs.odt diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/Makefile b/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/Makefile new file mode 100644 index 000000000..3af249f9d --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/Makefile @@ -0,0 +1,138 @@ +#************************************************************************* +# +# 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 CreatingDialogs example of the Developers Guide. + +PRJ=../../../.. +SETTINGS=$(PRJ)/settings + +include $(SETTINGS)/settings.mk +include $(SETTINGS)/std.mk + +# Define non-platform/compiler specific settings +EXAMPLE_NAME=BaDCreatingDialogsExample +OUT_COMP_CLASS = $(OUT_CLASS)/$(EXAMPLE_NAME) + +COMPONENT_NAME=SampleDialog +COMPONENT_PACKAGE = $(OUT_BIN)/$(COMPONENT_NAME).$(UNOOXT_EXT) +COMPONENT_PACKAGE_URL = $(subst \\,\,"$(COMP_PACKAGE_DIR)$(PS)$(COMPONENT_NAME).$(UNOOXT_EXT)") +COMPONENT_JAR_NAME = $(COMPONENT_NAME).uno.jar +COMPONENT_JAR = $(OUT_CLASS)/$(COMPONENT_JAR_NAME) +COMPONENT_MANIFESTFILE = $(OUT_COMP_CLASS)/$(COMPONENT_NAME).uno.Manifest +COMPONENT_UNOPKG_MANIFEST = $(OUT_COMP_CLASS)/$(COMPONENT_NAME)/META-INF/manifest.xml +REGISTERFLAG = $(OUT_MISC)/devguide_basicanddialogs_creatingdialogs_register_component.flag + +# often the java files are structured in a hierarchy similar to the package, +# for the example we know the package +PACKAGE = com.sun.star.comp.sdk.examples + +JAVAFILES = \ + SampleDialog.java + +CLASSFILES = $(patsubst %.java,$(OUT_COMP_CLASS)/%.class,$(JAVAFILES)) + +$(COMPONENT_NAME)_CLASSFILES = SampleDialog.class \ + +SDK_CLASSPATH = $(subst $(EMPTYSTRING) $(PATH_SEPARATOR),$(PATH_SEPARATOR),$(CLASSPATH)\ + $(PATH_SEPARATOR)$(OUT_COMP_CLASS)) + + +# Targets +.PHONY: ALL +ALL: $(EXAMPLE_NAME) + +include $(SETTINGS)/stdtarget.mk + +$(OUT_COMP_CLASS)/%.Manifest : + -$(MKDIR) $(subst /,$(PS),$(@D)) + @echo RegistrationClassName: $(PACKAGE).$(basename $(basename $(@F)))> $@ + +$(OUT_COMP_CLASS)/%.class : %.java + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(SDK_JAVAC) $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(OUT_COMP_CLASS) $< + +# rule for component jar file +$(COMPONENT_JAR) : $(COMPONENT_MANIFESTFILE) $(CLASSFILES) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(SDK_JAR) cvfm $@ $< -C $(OUT_COMP_CLASS) . + +# rule for component package manifest +$(OUT_COMP_CLASS)/%/manifest.xml : + -$(MKDIR) $(subst /,$(PS),$(@D)) + @echo $(OSEP)?xml version="$(QM)1.0$(QM)" encoding="$(QM)UTF-8$(QM)"?$(CSEP) > $@ + @echo $(OSEP)!DOCTYPE manifest:manifest PUBLIC "$(QM)-//OpenOffice.org//DTD Manifest 1.0//EN$(QM)" "$(QM)Manifest.dtd$(QM)"$(CSEP) >> $@ + @echo $(OSEP)manifest:manifest xmlns:manifest="$(QM)http://openoffice.org/2001/manifest$(QM)"$(CSEP) >> $@ + @echo $(SQM) $(SQM)$(OSEP)manifest:file-entry manifest:media-type="$(QM)application/vnd.sun.star.uno-component;type=Java$(QM)" >> $@ + @echo $(SQM) $(SQM)manifest:full-path="$(QM)$(subst /META-INF,,$(subst $(OUT_COMP_CLASS)/,,$(@D))).uno.jar$(QM)"/$(CSEP) >> $@ + @echo $(OSEP)/manifest:manifest$(CSEP) >> $@ + +# rule for component package file +$(COMPONENT_PACKAGE) : $(COMPONENT_JAR) $(COMPONENT_UNOPKG_MANIFEST) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) + -$(MKDIR) $(subst /,$(PS),$(@D)) + cd $(subst /,$(PS),$(OUT_CLASS)) && $(SDK_ZIP) ../bin/$(@F) $(<F) + cd $(subst /,$(PS),$(OUT_COMP_CLASS)/$(subst .$(UNOOXT_EXT),,$(@F))) && $(SDK_ZIP) -u ../../../bin/$(@F) META-INF/manifest.xml + +$(REGISTERFLAG) : $(COMPONENT_PACKAGE) +ifeq "$(SDK_AUTO_DEPLOYMENT)" "YES" + -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(DEPLOYTOOL) $(COMPONENT_PACKAGE_URL) + @echo flagged > $(subst /,$(PS),$@) +else + @echo -------------------------------------------------------------------------------- + @echo If you want to install your component automatically, please set the environment + @echo variable SDK_AUTO_DEPLOYMENT = YES. But note that auto deployment is only + @echo possible if no office instance is running. + @echo -------------------------------------------------------------------------------- +endif + +$(EXAMPLE_NAME) : $(REGISTERFLAG) + @echo -------------------------------------------------------------------------------- + @echo The SampleDialog Java component was installed if SDK_AUTO_DEPLOYMENT = YES. + @echo Please load the "$(QM)CreatingDialogs.odt$(QM)" document to use the component or use it + @echo by yourself in your office installation, see the example description. + @echo - + @echo $(MAKE) CreatingDialogs.odt.load + @echo -------------------------------------------------------------------------------- + +CreatingDialogs.odt.load : $(REGISTERFLAG) + "$(OFFICE_PROGRAM_PATH)$(PS)soffice" $(basename $@) + +.PHONY: clean +clean : + -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_CLASS)) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$(COMPONENT_PACKAGE_URL))) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$(REGISTERFLAG))) diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/SampleDialog.java b/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/SampleDialog.java new file mode 100644 index 000000000..d5a976c59 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/CreatingDialogs/SampleDialog.java @@ -0,0 +1,278 @@ +/* -*- 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. + * + *************************************************************************/ + +package com.sun.star.comp.sdk.examples; + +import com.sun.star.awt.ActionEvent; +import com.sun.star.awt.XActionListener; +import com.sun.star.awt.XButton; +import com.sun.star.lang.XComponent; +import com.sun.star.awt.XControl; +import com.sun.star.awt.XControlModel; +import com.sun.star.awt.XControlContainer; +import com.sun.star.awt.XDialog; +import com.sun.star.awt.XFixedText; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XWindow; +import com.sun.star.beans.XPropertySet; +import com.sun.star.comp.loader.FactoryHelper; +import com.sun.star.container.XNameContainer; +import com.sun.star.lang.EventObject; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.lang.XTypeProvider; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.registry.XRegistryKey; +import com.sun.star.task.XJobExecutor; +import com.sun.star.uno.Type; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + + +/** example of a Java component which creates a dialog at runtime + + This component can be tested by the following StarOffice Basic code: + Sub Main + Dim oJobExecutor + oJobExecutor = CreateUnoService( "com.sun.star.examples.SampleDialog" ) + oJobExecutor.trigger( "execute" ) + End Sub +*/ + +public class SampleDialog extends WeakBase implements XServiceInfo, XJobExecutor { + + static final String __serviceName = "com.sun.star.examples.SampleDialog"; + + private static final String _buttonName = "Button1"; + private static final String _cancelButtonName = "CancelButton"; + private static final String _labelName = "Label1"; + private static final String _labelPrefix = "Number of button clicks: "; + + private XComponentContext _xComponentContext; + + public SampleDialog( XComponentContext xComponentContext ) { + _xComponentContext = xComponentContext; + } + + // static component operations + public static XSingleServiceFactory __getServiceFactory( String implName, + XMultiServiceFactory multiFactory, + XRegistryKey regKey ) { + XSingleServiceFactory xSingleServiceFactory = null; + if ( implName.equals( SampleDialog.class.getName() ) ) { + xSingleServiceFactory = FactoryHelper.getServiceFactory( + SampleDialog.class, SampleDialog.__serviceName, multiFactory, regKey ); + } + return xSingleServiceFactory; + } + + public static boolean __writeRegistryServiceInfo( XRegistryKey regKey ) { + return FactoryHelper.writeRegistryServiceInfo( + SampleDialog.class.getName(), SampleDialog.__serviceName, regKey ); + } + + // XServiceInfo + public String getImplementationName( ) { + return getClass().getName(); + } + + // XServiceInfo + public boolean supportsService( /*IN*/String serviceName ) { + if ( serviceName.equals( __serviceName)) + return true; + return false; + } + + // XServiceInfo + public String[] getSupportedServiceNames( ) { + String[] retValue= new String[0]; + retValue[0] = __serviceName; + return retValue; + } + + // XJobExecutor + public void trigger(String sEvent) { + if ( sEvent.equals( "execute" ) ) { + try { + createDialog(); + } + catch ( Exception e ) { + throw new com.sun.star.lang.WrappedTargetRuntimeException( e, e.getMessage(), this, e ); + } + } + } + + /** method for creating a dialog at runtime + */ + private void createDialog() throws com.sun.star.uno.Exception { + + // get the service manager from the component context + XMultiComponentFactory xMultiComponentFactory = _xComponentContext.getServiceManager(); + + // create the dialog model and set the properties + Object dialogModel = xMultiComponentFactory.createInstanceWithContext( + "com.sun.star.awt.UnoControlDialogModel", _xComponentContext ); + XPropertySet xPSetDialog = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, dialogModel ); + xPSetDialog.setPropertyValue( "PositionX", Integer.valueOf( 100 ) ); + xPSetDialog.setPropertyValue( "PositionY", Integer.valueOf( 100 ) ); + xPSetDialog.setPropertyValue( "Width", Integer.valueOf( 150 ) ); + xPSetDialog.setPropertyValue( "Height", Integer.valueOf( 100 ) ); + xPSetDialog.setPropertyValue( "Title", "Runtime Dialog Demo" ); + + // get the service manager from the dialog model + XMultiServiceFactory xMultiServiceFactory = ( XMultiServiceFactory )UnoRuntime.queryInterface( + XMultiServiceFactory.class, dialogModel ); + + // create the button model and set the properties + Object buttonModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlButtonModel" ); + XPropertySet xPSetButton = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, buttonModel ); + xPSetButton.setPropertyValue( "PositionX", Integer.valueOf( 20 ) ); + xPSetButton.setPropertyValue( "PositionY", Integer.valueOf( 70 ) ); + xPSetButton.setPropertyValue( "Width", Integer.valueOf( 50 ) ); + xPSetButton.setPropertyValue( "Height", Integer.valueOf( 14 ) ); + xPSetButton.setPropertyValue( "Name", _buttonName ); + xPSetButton.setPropertyValue( "TabIndex", Short.valueOf( (short)0 ) ); + xPSetButton.setPropertyValue( "Label", "Click Me" ); + + // create the label model and set the properties + Object labelModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlFixedTextModel" ); + XPropertySet xPSetLabel = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, labelModel ); + xPSetLabel.setPropertyValue( "PositionX", Integer.valueOf( 40 ) ); + xPSetLabel.setPropertyValue( "PositionY", Integer.valueOf( 30 ) ); + xPSetLabel.setPropertyValue( "Width", Integer.valueOf( 100 ) ); + xPSetLabel.setPropertyValue( "Height", Integer.valueOf( 14 ) ); + xPSetLabel.setPropertyValue( "Name", _labelName ); + xPSetLabel.setPropertyValue( "TabIndex", Short.valueOf( (short)1 ) ); + xPSetLabel.setPropertyValue( "Label", _labelPrefix ); + + // create a Cancel button model and set the properties + Object cancelButtonModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlButtonModel" ); + XPropertySet xPSetCancelButton = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, cancelButtonModel ); + xPSetCancelButton.setPropertyValue( "PositionX", Integer.valueOf( 80 ) ); + xPSetCancelButton.setPropertyValue( "PositionY", Integer.valueOf( 70 ) ); + xPSetCancelButton.setPropertyValue( "Width", Integer.valueOf( 50 ) ); + xPSetCancelButton.setPropertyValue( "Height", Integer.valueOf( 14 ) ); + xPSetCancelButton.setPropertyValue( "Name", _cancelButtonName ); + xPSetCancelButton.setPropertyValue( "TabIndex", Short.valueOf( (short)2 ) ); + xPSetCancelButton.setPropertyValue( "PushButtonType", Short.valueOf( (short)2 ) ); + xPSetCancelButton.setPropertyValue( "Label", "Cancel" ); + + // insert the control models into the dialog model + XNameContainer xNameCont = ( XNameContainer )UnoRuntime.queryInterface( + XNameContainer.class, dialogModel ); + xNameCont.insertByName( _buttonName, buttonModel ); + xNameCont.insertByName( _labelName, labelModel ); + xNameCont.insertByName( _cancelButtonName, cancelButtonModel ); + + // create the dialog control and set the model + Object dialog = xMultiComponentFactory.createInstanceWithContext( + "com.sun.star.awt.UnoControlDialog", _xComponentContext ); + XControl xControl = ( XControl )UnoRuntime.queryInterface( + XControl.class, dialog ); + XControlModel xControlModel = ( XControlModel )UnoRuntime.queryInterface( + XControlModel.class, dialogModel ); + xControl.setModel( xControlModel ); + + // add an action listener to the button control + XControlContainer xControlCont = ( XControlContainer )UnoRuntime.queryInterface( + XControlContainer.class, dialog ); + Object objectButton = xControlCont.getControl( "Button1" ); + XButton xButton = ( XButton )UnoRuntime.queryInterface( + XButton.class, objectButton ); + xButton.addActionListener( new ActionListenerImpl( xControlCont ) ); + + // create a peer + Object toolkit = xMultiComponentFactory.createInstanceWithContext( + "com.sun.star.awt.ExtToolkit", _xComponentContext ); + XToolkit xToolkit = ( XToolkit )UnoRuntime.queryInterface( + XToolkit.class, toolkit ); + XWindow xWindow = ( XWindow )UnoRuntime.queryInterface( + XWindow.class, xControl ); + xWindow.setVisible( false ); + xControl.createPeer( xToolkit, null ); + + // execute the dialog + XDialog xDialog = ( XDialog )UnoRuntime.queryInterface( + XDialog.class, dialog ); + xDialog.execute(); + + // dispose the dialog + XComponent xComponent = ( XComponent )UnoRuntime.queryInterface( + XComponent.class, dialog ); + xComponent.dispose(); + } + + /** action listener + */ + public class ActionListenerImpl implements com.sun.star.awt.XActionListener { + + private int _nCounts = 0; + + private XControlContainer _xControlCont; + + public ActionListenerImpl( XControlContainer xControlCont ) { + _xControlCont = xControlCont; + } + + // XEventListener + public void disposing( EventObject eventObject ) { + _xControlCont = null; + } + + // XActionListener + public void actionPerformed( ActionEvent actionEvent ) { + + // increase click counter + _nCounts++; + + // set label text + Object label = _xControlCont.getControl( "Label1" ); + XFixedText xLabel = ( XFixedText )UnoRuntime.queryInterface( + XFixedText.class, label ); + xLabel.setText( _labelPrefix + _nCounts ); + } + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/FirstStepsBasic.odt b/odk/examples/DevelopersGuide/BasicAndDialogs/FirstStepsBasic.odt Binary files differnew file mode 100644 index 000000000..4024740f1 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/FirstStepsBasic.odt diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/Makefile b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/Makefile new file mode 100644 index 000000000..bd3a43444 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/Makefile @@ -0,0 +1,125 @@ +#************************************************************************* +# +# 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 CreatingDialogs example of the Developers Guide. + +PRJ=../../../.. +SETTINGS=$(PRJ)/settings + +include $(SETTINGS)/settings.mk +include $(SETTINGS)/std.mk + +# Define non-platform/compiler specific settings +SAMPLE_NAME=BaDToolkitControls +SAMPLE_GEN_OUT=$(OUT_MISC)/$(SAMPLE_NAME) + +COMP_NAME=ToolkitControls +COMP_GEN_OUT=$(SAMPLE_GEN_OUT)/$(COMP_NAME) +COMP_PACKAGE = $(OUT_BIN)/$(COMP_NAME).$(UNOOXT_EXT) +COMP_PACKAGE_URL = $(subst \\,\,"$(COMP_PACKAGE_DIR)$(PS)$(COMP_NAME).$(UNOOXT_EXT)") +COMP_UNOPKG_MANIFEST = $(COMP_GEN_OUT)/META-INF/manifest.xml +COMP_REGISTERFLAG=$(COMP_GEN_OUT)$(PS)devguide_basic_$(COMP_NAME)_register_component.flag + +COMP_LIBRARY_FILES=\ + ToolkitControls/dialog.xlb\ + ToolkitControls/FileDialog.xba\ + ToolkitControls/FileDialogDlg.xdl\ + ToolkitControls/MultiPage.xba\ + ToolkitControls/MultiPageDlg.xdl\ + ToolkitControls/ProgressBar.xba\ + ToolkitControls/ProgressBarDlg.xdl\ + ToolkitControls/script.xlb\ + ToolkitControls/ScrollBar.xba\ + ToolkitControls/ScrollBarDlg.xdl + +# Targets +.PHONY: ALL +ALL : $(SAMPLE_NAME) + +include $(SETTINGS)/stdtarget.mk + +# rule for component package manifest +$(COMP_GEN_OUT)/%/manifest.xml : + -$(MKDIR) $(subst /,$(PS),$(@D)) + @echo $(OSEP)?xml version="$(QM)1.0$(QM)" encoding="$(QM)UTF-8$(QM)"?$(CSEP) > $@ + @echo $(OSEP)!DOCTYPE manifest:manifest PUBLIC "$(QM)-//OpenOffice.org//DTD Manifest 1.0//EN$(QM)" "$(QM)Manifest.dtd$(QM)"$(CSEP) >> $@ + @echo $(OSEP)manifest:manifest xmlns:manifest="$(QM)http://openoffice.org/2001/manifest$(QM)"$(CSEP) >> $@ + @echo $(SQM) $(SQM)$(OSEP)manifest:file-entry manifest:media-type="$(QM)application/vnd.sun.star.basic-library$(QM)" >> $@ + @echo $(SQM) $(SQM)manifest:full-path="$(QM)$(COMP_NAME)$(QM)"/$(CSEP) >> $@ + @echo $(OSEP)/manifest:manifest$(CSEP) >> $@ + +# rule for component package file +$(COMP_PACKAGE) : $(COMP_UNOPKG_MANIFEST) $(COMP_LIBRARY_FILES) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(SDK_ZIP) $@ ToolkitControls/dialog.xlb \ + ToolkitControls/FileDialog.xba ToolkitControls/FileDialogDlg.xdl \ + ToolkitControls/MultiPage.xba ToolkitControls/MultiPageDlg.xdl \ + ToolkitControls/ProgressBar.xba ToolkitControls/ProgressBarDlg.xdl \ + ToolkitControls/script.xlb ToolkitControls/ScrollBar.xba \ + ToolkitControls/ScrollBarDlg.xdl + cd $(subst /,$(PS),$(COMP_GEN_OUT)) && $(SDK_ZIP) -u ../../../bin/$(@F) META-INF/manifest.xml + +$(COMP_REGISTERFLAG) : $(COMP_PACKAGE) +ifeq "$(SDK_AUTO_DEPLOYMENT)" "YES" + -$(DEL) $(subst \\,\,$(subst /,$(PS),$@)) + -$(MKDIR) $(subst /,$(PS),$(@D)) + $(DEPLOYTOOL) $(COMP_PACKAGE_URL) + @echo flagged > $(subst /,$(PS),$@) +else + @echo -------------------------------------------------------------------------------- + @echo If you want to install your component automatically, please set the environment + @echo variable SDK_AUTO_DEPLOYMENT = YES. But note that auto deployment is only + @echo possible if no office instance is running. + @echo -------------------------------------------------------------------------------- +endif + +$(SAMPLE_NAME) : $(COMP_REGISTERFLAG) + @echo -------------------------------------------------------------------------------- + @echo The "$(QM)ToolkitControls$(QM)" library was installed in your office installation + @echo if SDK_AUTO_DEPLOYMENT = YES. You can use it in the BASIC IDE as a normal + @echo Basic library. + @echo You can also load the document "$(QM)$(COMP_NAME).odt$(QM)" and press a button + @echo to run one of the example macros. + @echo - + @echo $(MAKE) $(COMP_NAME).odt.load + @echo -------------------------------------------------------------------------------- + +$(COMP_NAME).odt.load : $(COMP_REGISTERFLAG) + "$(OFFICE_PROGRAM_PATH)$(PS)soffice" $(basename $@) + +.PHONY: clean +clean : + -$(DELRECURSIVE) $(subst /,$(PS),$(COMP_GEN_OUT)) + -$(DEL) $(subst \\,\,$(subst /,$(PS),$(COMP_PACKAGE_URL))) diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls.odt b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls.odt Binary files differnew file mode 100644 index 000000000..ffedaa756 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls.odt diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialog.xba b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialog.xba new file mode 100644 index 000000000..60f6a491f --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialog.xba @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> +<script:module xmlns:script="http://openoffice.org/2000/script" script:name="FileDialog" script:language="StarBasic">REM ***** BASIC ***** + +Dim oDialog As Object + +Sub Main() + + Dim oLibContainer As Object, oLib As Object + Dim oInputStreamProvider As Object + + Const sLibName = "ToolkitControls" + Const sDialogName = "FileDialogDlg" + + REM load/get library and input stream provider + oLibContainer = DialogLibraries + oLibContainer.loadLibrary( sLibName ) + oLib = oLibContainer.getByName( sLibName ) + oInputStreamProvider = oLib.getByName( sDialogName ) + + REM create dialog control + oDialog = CreateUnoDialog( oInputStreamProvider ) + + REM show the dialog + oDialog.execute() + +End Sub + +Sub OpenFileDialog() + + Dim oFilePicker As Object, oSimpleFileAccess As Object + Dim oPathSettings As Object + Dim oTextField As Object, oTextFieldModel As Object + Dim sFileURL As String + Dim sFiles As Variant + + REM file dialog + oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" ) + + REM set filter + oFilePicker.AppendFilter( "All files", "*.*" ) + oFilePicker.AppendFilter( "StarOffice 6.0 Text Text Document", "*.sxw" ) + oFilePicker.AppendFilter( "StarOffice 6.0 Spreadsheet", "*.sxc" ) + oFilePicker.SetCurrentFilter( "All files" ) + + REM if no file URL is set, get path settings from configuration + oTextFieldModel = oDialog.Model.TextField1 + sFileURL = ConvertToURL( oTextFieldModel.Text ) + If sFileURL = "" Then + oSettings = CreateUnoService( "com.sun.star.frame.Settings" ) + oPathSettings = CreateUnoService( "com.sun.star.util.PathSettings" ) + sFileURL = oPathSettings.getPropertyValue( "Work" ) + End If + + REM set display directory + oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) + If oSimpleFileAccess.exists( sFileURL ) And oSimpleFileAccess.isFolder( sFileURL ) Then + oFilePicker.setDisplayDirectory( sFileURL ) + End If + + REM execute file dialog + If oFilePicker.execute() Then + sFiles = oFilePicker.getFiles() + sFileURL = sFiles(0) + If oSimpleFileAccess.exists( sFileURL ) Then + REM set file path in text field + oTextField = oDialog.GetControl("TextField1") + oTextField.SetText( ConvertFromURL( sFileURL ) ) + End If + End If + +End Sub +</script:module>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialogDlg.xdl b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialogDlg.xdl new file mode 100644 index 000000000..ec99f7b48 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/FileDialogDlg.xdl @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> +<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="FileDialogDlg" dlg:title="File Dialog Demo" dlg:left="138" dlg:top="80" dlg:width="203" dlg:height="157"> + <dlg:bulletinboard> + <dlg:textfield dlg:id="TextField1" dlg:tab-index="0" dlg:left="6" dlg:top="35" dlg:width="168" dlg:height="12"/> + <dlg:button dlg:id="CommandButton1" dlg:tab-index="1" dlg:left="180" dlg:top="35" dlg:width="14" dlg:height="14" dlg:value="..."> + <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ToolkitControls.FileDialog.OpenFileDialog" script:language="StarBasic"/> + </dlg:button> + <dlg:text dlg:id="Label1" dlg:tab-index="2" dlg:left="6" dlg:top="20" dlg:width="80" dlg:height="10" dlg:value="Enter File Path"/> + <dlg:button dlg:id="CommandButton2" dlg:tab-index="3" dlg:left="8" dlg:top="116" dlg:width="44" dlg:height="16" dlg:value="Cancel" dlg:button-type="cancel"/> + </dlg:bulletinboard> +</dlg:window>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPage.xba b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPage.xba new file mode 100644 index 000000000..65f160614 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPage.xba @@ -0,0 +1,303 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> +<script:module xmlns:script="http://openoffice.org/2000/script" script:name="MultiPage" script:language="StarBasic">REM ***** BASIC ***** + +Dim oDialog As Object + +Sub Main() + + Dim oLibContainer As Object, oLib As Object + Dim oInputStreamProvider As Object + Dim oDialogModel As Object + + Const sLibName = "ToolkitControls" + Const sDialogName = "MultiPageDlg" + + REM load/get library and input stream provider + oLibContainer = DialogLibraries + oLibContainer.loadLibrary( sLibName ) + oLib = oLibContainer.getByName( sLibName ) + oInputStreamProvider = oLib.getByName( sDialogName ) + + REM create dialog control + oDialog = CreateUnoDialog( oInputStreamProvider ) + + REM initialize dialog and controls + Initialize() + + REM show the dialog + oDialog.execute() + +End Sub + + +Sub Initialize() + + Dim oDialogModel As Object + Dim oNextButton As Object, oNextButtonModel As Object + Dim oListBox As Object + Dim oCheckBoxModel As Object + Dim oOptionButtonModel As Object + Dim oCurrencyFieldModel As Object + Dim oNumericFieldModel As Object + Dim oComboBox As Object, oComboBoxModel As Object + Dim i As Integer + Dim sName As String + Dim sPizzas As Variant, sToppings As Variant + Dim sCreditCards As Variant + Dim sMonths As Variant + Dim iCount As Integer + + REM dialog properties + oDialogModel = oDialog.Model + oDialogModel.Step = 1 + + REM next button properties + oNextButtonModel = oDialogModel.NextButton + oNextButtonModel.DefaultButton = True + oNextButton = oDialog.getControl("NextButton") + oNextButton.setFocus() + + REM enable/disable back button, set label of next button + PageChanged() + + REM set control properties on dialog page 1 + + REM pizzas in list box + oListBox = oDialog.getControl("ListBox1") + sPizzas = Array("Margarita","Vegetarian","Ham & Pineapple","Mexican","Seafood") + oListBox.addItems( sPizzas, 0 ) + oListBox.selectItem( sPizzas(0), True ) + + REM extra toppings + sToppings = Array("Extra Cheese","Corn","Onions","Olives") + For i = 0 To 3 + sName = "CheckBox" + i + oCheckBoxModel = oDialogModel.getByName( sName ) + oCheckBoxModel.Label = sToppings( i ) + Next i + + REM default pizza size + oOptionButtonModel = oDialogModel.OptionButton2 + oOptionButtonModel.State = True + + REM currency field properties + oCurrencyFieldModel = oDialogModel.CurrencyField1 + oCurrencyFieldModel.ReadOnly = True + oCurrencyFieldModel.DecimalAccuracy = 2 + oCurrencyFieldModel.CurrencySymbol = "€" + oCurrencyFieldModel.PrependCurrencySymbol = True + + REM calculate prize for default settings + CalculatePrize() + + REM set control properties on dialog page 2 + + REM numeric field properties + oNumericFieldModel = oDialogModel.NumericField1 + oNumericFieldModel.DecimalAccuracy = 0 + + REM set control properties on dialog page 3 + + REM default payment method + oOptionButtonModel = oDialogModel.OptionButton4 + oOptionButtonModel.State = True + + REM credit cards in combo box + oComboBox = oDialog.getControl("ComboBox1") + sCreditCards = Array("Visa","Master/EuroCard","American Express") + oComboBox.addItems( sCreditCards, 0 ) + oComboBoxModel = oDialogModel.ComboBox1 + oComboBoxModel.Text = sCreditCards(0) + + REM expiration month + oListBox = oDialog.getControl("ListBox2") + sMonths = Array("01","02","03","04","05","06","07","08","09","10","11","12") + oListBox.addItems( sMonths, 0 ) + oListBox.selectItemPos( Month(Date())-1, True ) + + REM expiration year + oListBox = oDialog.getControl("ListBox3") + For i = Year(Date()) To Year(Date()) + 4 + iCount = oListBox.getItemCount() + oListBox.addItem( Str( i ), iCount ) + Next i + oListBox.selectItemPos( 0, True ) + +End Sub + + +Sub CalculatePrize() + + Dim oDialogModel As Object + Dim oListBox As Object + Dim oCheckBoxModel As Object + Dim oCurrencyFieldModel As Object + Dim Position As Integer + Dim sName As String + Dim i As Integer, nChecked As Integer + Dim Prizes As Variant + Dim Prize As Double + + REM prizes for medium size pizzas + Prizes = Array( 4, 5, 6, 6, 7 ) + + REM get the position of the currently selected pizza + oListBox = oDialog.getControl("ListBox1") + Position = oListBox.getSelectedItemPos() + Prize = Prizes( Position ) + + REM small pizzas are 1€ cheaper, large pizzas are 1€ more expensive + oDialogModel = oDialog.Model + If oDialogModel.OptionButton1.State = 1 Then + Prize = Prize - 1 + ElseIf oDialogModel.OptionButton3.State = 1 Then + Prize = Prize + 1 + End If + + REM get the number of extra toppings (0.5€ per extra topping) + For i = 0 To 3 + sName = "CheckBox" + i + oCheckBoxModel = oDialogModel.getByName( sName ) + If oCheckBoxModel.State = 1 Then + nChecked = nChecked + 1 + End If + Next i + Prize = Prize + nChecked * 0.5 + + REM set the value of the currency field + oCurrencyFieldModel = oDialogModel.CurrencyField1 + oCurrencyFieldModel.Value = Prize + +End Sub + + +Sub PaymentMethodChanged() + + Dim oDialogModel As Object + Dim bEnabled As Boolean + + REM get dialog model + oDialogModel = oDialog.getModel() + + If oDialogModel.OptionButton4.State = 1 Then + REM enable controls for payment by credit card + bEnabled = True + ElseIf oDialogModel.OptionButton5.State = 1 Then + REM disable controls for payment by check + bEnabled = False + End If + + REM enable/disable controls + With oDialogModel + .Label11.Enabled = bEnabled + .Label12.Enabled = bEnabled + .Label13.Enabled = bEnabled + .ComboBox1.Enabled = bEnabled + .TextField6.Enabled = bEnabled + .ListBox2.Enabled = bEnabled + .ListBox3.Enabled = bEnabled + .TextField7.Enabled = bEnabled + End With + +End Sub + + +Sub NextPage() + + Dim oDialogModel As Object + + REM get dialog model + oDialogModel = oDialog.getModel() + + If oDialogModel.Step < 3 Then + REM next page + oDialogModel.Step = oDialogModel.Step + 1 + REM enable/disable back button, set label of next button + PageChanged() + ElseIf oDialogModel.Step = 3 Then + REM submit order + SubmitOrder() + REM hide dialog + oDialog.endExecute() + End If + +End Sub + + +Sub PreviousPage() + + Dim oDialogModel As Object + + REM get dialog model + oDialogModel = oDialog.getModel() + + If oDialogModel.Step > 1 Then + REM previous page + oDialogModel.Step = oDialogModel.Step - 1 + REM enable/disable back button, set label of next button + PageChanged() + End If + +End Sub + + +Sub PageChanged() + + Dim oDialogModel As Object + Dim oBackButtonModel As Object + Dim oNextButtonModel As Object + + Const sLabelNext = "Next >>" + Const sLabelSubmit = "Submit" + + REM get dialog model + oDialogModel = oDialog.getModel() + + REM get back button model + oBackButtonModel = oDialogModel.getByName("BackButton") + + REM enable/disable back button + If oDialogModel.Step = 1 Then + oBackButtonModel.Enabled = False + Else + oBackButtonModel.Enabled = True + End If + + REM get next button model + oNextButtonModel = oDialogModel.getByName("NextButton") + + REM set label of next button + If oDialogModel.Step = 3 Then + oNextButtonModel.Label = sLabelSubmit + Else + oNextButtonModel.Label = sLabelNext + End If + +End Sub + + +Sub SubmitOrder() + + MsgBox "Your pizza will be delivered in 45 minutes." + +End Sub + +</script:module> diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPageDlg.xdl b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPageDlg.xdl new file mode 100644 index 000000000..f7b28aa33 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/MultiPageDlg.xdl @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> +<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="MultiPageDlg" dlg:title="Multi Page Dialog Demo" dlg:left="138" dlg:top="80" dlg:width="203" dlg:height="157" dlg:page="1"> + <dlg:bulletinboard> + <dlg:button dlg:id="CancelButton" dlg:tab-index="0" dlg:left="6" dlg:top="135" dlg:width="50" dlg:height="14" dlg:value="Cancel" dlg:button-type="cancel"/> + <dlg:button dlg:id="BackButton" dlg:tab-index="1" dlg:left="76" dlg:top="135" dlg:width="50" dlg:height="14" dlg:value="< Back"> + <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ToolkitControls.MultiPage.PreviousPage" script:language="StarBasic"/> + </dlg:button> + <dlg:button dlg:id="NextButton" dlg:tab-index="2" dlg:left="147" dlg:top="135" dlg:width="50" dlg:height="14" dlg:value="Next >"> + <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ToolkitControls.MultiPage.NextPage" script:language="StarBasic"/> + </dlg:button> + <dlg:fixedline dlg:id="FixedLine1" dlg:tab-index="3" dlg:left="6" dlg:top="6" dlg:width="185" dlg:height="9" dlg:page="1" dlg:value="Select a Pizza"/> + <dlg:text dlg:id="Label1" dlg:tab-index="4" dlg:left="11" dlg:top="22" dlg:width="57" dlg:height="9" dlg:page="1" dlg:value="~Pizza"/> + <dlg:menulist dlg:id="ListBox1" dlg:tab-index="5" dlg:left="11" dlg:top="35" dlg:width="60" dlg:height="12" dlg:page="1" dlg:spin="true"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:menulist> + <dlg:text dlg:id="Label2" dlg:tab-index="6" dlg:left="11" dlg:top="61" dlg:width="60" dlg:height="11" dlg:page="1" dlg:value="Extra Toppings"/> + <dlg:checkbox dlg:id="CheckBox0" dlg:tab-index="7" dlg:left="11" dlg:top="75" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="CheckBox0" dlg:checked="false"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:checkbox> + <dlg:checkbox dlg:id="CheckBox1" dlg:tab-index="8" dlg:left="11" dlg:top="88" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="CheckBox1" dlg:checked="false"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:checkbox> + <dlg:checkbox dlg:id="CheckBox2" dlg:tab-index="9" dlg:left="11" dlg:top="101" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="CheckBox2" dlg:checked="false"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:checkbox> + <dlg:checkbox dlg:id="CheckBox3" dlg:tab-index="10" dlg:left="11" dlg:top="114" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="CheckBox3" dlg:checked="false"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:checkbox> + <dlg:fixedline dlg:id="FixedLine2" dlg:tab-index="11" dlg:left="96" dlg:top="22" dlg:width="9" dlg:height="106" dlg:page="1" dlg:align="vertical"/> + <dlg:text dlg:id="Label3" dlg:tab-index="12" dlg:left="120" dlg:top="22" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="Size"/> + <dlg:radiogroup> + <dlg:radio dlg:id="OptionButton1" dlg:tab-index="13" dlg:left="120" dlg:top="36" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="Small"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:radio> + <dlg:radio dlg:id="OptionButton2" dlg:tab-index="14" dlg:left="120" dlg:top="49" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="Medium"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:radio> + <dlg:radio dlg:id="OptionButton3" dlg:tab-index="15" dlg:left="120" dlg:top="62" dlg:width="60" dlg:height="9" dlg:page="1" dlg:value="Large"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.CalculatePrize" script:language="StarBasic"/> + </dlg:radio> + </dlg:radiogroup> + <dlg:text dlg:id="Label4" dlg:tab-index="16" dlg:left="120" dlg:top="114" dlg:width="25" dlg:height="9" dlg:page="1" dlg:value="Prize"/> + <dlg:currencyfield dlg:id="CurrencyField1" dlg:tab-index="17" dlg:left="150" dlg:top="113" dlg:width="30" dlg:height="12" dlg:page="1"/> + <dlg:fixedline dlg:id="FixedLine3" dlg:tab-index="18" dlg:left="6" dlg:top="6" dlg:width="185" dlg:height="9" dlg:page="2" dlg:value="Enter the Delivery Address"/> + <dlg:text dlg:id="Label5" dlg:tab-index="19" dlg:left="11" dlg:top="27" dlg:width="50" dlg:height="9" dlg:page="2" dlg:value="Full Name"/> + <dlg:textfield dlg:id="TextField2" dlg:tab-index="20" dlg:left="70" dlg:top="25" dlg:width="110" dlg:height="12" dlg:page="2"/> + <dlg:text dlg:id="Label6" dlg:tab-index="21" dlg:left="11" dlg:top="47" dlg:width="50" dlg:height="9" dlg:page="2" dlg:value="Address"/> + <dlg:textfield dlg:id="TextField3" dlg:tab-index="22" dlg:left="70" dlg:top="45" dlg:width="110" dlg:height="12" dlg:page="2"/> + <dlg:text dlg:id="Label7" dlg:tab-index="23" dlg:left="11" dlg:top="67" dlg:width="50" dlg:height="9" dlg:page="2" dlg:value="City"/> + <dlg:textfield dlg:id="TextField4" dlg:tab-index="24" dlg:left="70" dlg:top="65" dlg:width="80" dlg:height="12" dlg:page="2"/> + <dlg:text dlg:id="Label8" dlg:tab-index="25" dlg:left="11" dlg:top="87" dlg:width="50" dlg:height="9" dlg:page="2" dlg:value="ZIP / Postal Code"/> + <dlg:numericfield dlg:id="NumericField1" dlg:tab-index="26" dlg:left="70" dlg:top="85" dlg:width="50" dlg:height="12" dlg:page="2"/> + <dlg:text dlg:id="Label9" dlg:tab-index="27" dlg:left="11" dlg:top="107" dlg:width="50" dlg:height="9" dlg:page="2" dlg:value="Phone Number"/> + <dlg:textfield dlg:id="TextField5" dlg:tab-index="28" dlg:left="70" dlg:top="105" dlg:width="80" dlg:height="12" dlg:page="2"/> + <dlg:fixedline dlg:id="FixedLine4" dlg:tab-index="29" dlg:left="6" dlg:top="6" dlg:width="185" dlg:height="9" dlg:page="3" dlg:value="Select a Payment Method"/> + <dlg:radiogroup> + <dlg:radio dlg:id="OptionButton4" dlg:tab-index="30" dlg:left="12" dlg:top="26" dlg:width="40" dlg:height="9" dlg:page="3" dlg:value="Credit Card"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.PaymentMethodChanged" script:language="StarBasic"/> + </dlg:radio> + <dlg:radio dlg:id="OptionButton5" dlg:tab-index="31" dlg:left="12" dlg:top="110" dlg:width="40" dlg:height="9" dlg:page="3" dlg:value="Check"> + <script:event script:event-name="on-itemstatechange" script:location="application" script:macro-name="ToolkitControls.MultiPage.PaymentMethodChanged" script:language="StarBasic"/> + </dlg:radio> + </dlg:radiogroup> + <dlg:combobox dlg:id="ComboBox1" dlg:tab-index="32" dlg:left="76" dlg:top="25" dlg:width="70" dlg:height="12" dlg:page="3" dlg:spin="true"/> + <dlg:text dlg:id="Label11" dlg:tab-index="33" dlg:left="21" dlg:top="46" dlg:width="50" dlg:height="9" dlg:page="3" dlg:value="Credit Card No."/> + <dlg:textfield dlg:id="TextField6" dlg:tab-index="34" dlg:left="76" dlg:top="45" dlg:width="70" dlg:height="12" dlg:page="3"/> + <dlg:text dlg:id="Label12" dlg:tab-index="35" dlg:left="21" dlg:top="66" dlg:width="50" dlg:height="9" dlg:page="3" dlg:value="Expiration Date"/> + <dlg:menulist dlg:id="ListBox2" dlg:tab-index="36" dlg:left="76" dlg:top="65" dlg:width="20" dlg:height="12" dlg:page="3" dlg:spin="true"/> + <dlg:menulist dlg:id="ListBox3" dlg:tab-index="37" dlg:left="100" dlg:top="65" dlg:width="27" dlg:height="12" dlg:page="3" dlg:spin="true"/> + <dlg:text dlg:id="Label13" dlg:tab-index="38" dlg:left="21" dlg:top="86" dlg:width="50" dlg:height="9" dlg:page="3" dlg:value="Cardholder's Name"/> + <dlg:textfield dlg:id="TextField7" dlg:tab-index="39" dlg:left="76" dlg:top="85" dlg:width="70" dlg:height="12" dlg:page="3"/> + <dlg:textfield dlg:id="TextField1" dlg:tab-index="40" dlg:left="-47" dlg:top="46" dlg:width="0" dlg:height="2" dlg:page="3"/> + </dlg:bulletinboard> +</dlg:window> diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBar.xba b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBar.xba new file mode 100644 index 000000000..8b34f0cc3 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBar.xba @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> +<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ProgressBar" script:language="StarBasic">REM ***** BASIC ***** + +Dim oDialog As Object + +Sub Main() + + Dim oLibContainer As Object, oLib As Object + Dim oInputStreamProvider As Object + Dim oProgressBar As Object + + Const sLibName = "ToolkitControls" + Const sDialogName = "ProgressBarDlg" + + REM load/get library and input stream provider + oLibContainer = DialogLibraries + oLibContainer.loadLibrary( sLibName ) + oLib = oLibContainer.getByName( sLibName ) + oInputStreamProvider = oLib.getByName( sDialogName ) + + REM create dialog control + oDialog = CreateUnoDialog( oInputStreamProvider ) + + REM hide progress bar + oProgressBar = oDialog.getControl("ProgressBar1") + oProgressBar.setVisible( False ) + + REM show the dialog + oDialog.execute() + +End Sub + +Sub ProgressBarDemo() + + Dim oProgressBar As Object, oProgressBarModel As Object + Dim oCancelButtonModel As Object + Dim oStartButtonModel As Object + Dim ProgressValue As Long + + REM progress bar settings + Const ProgressValueMin = 0 + Const ProgressValueMax = 50 + Const ProgressStep = 1 + + REM set minimum and maximum progress value + oProgressBarModel = oDialog.Model.ProgressBar1 + oProgressBarModel.ProgressValueMin = ProgressValueMin + oProgressBarModel.ProgressValueMax = ProgressValueMax + + REM disable cancel and start button + oCancelButtonModel = oDialog.Model.CommandButton1 + oCancelButtonModel.Enabled = False + oStartButtonModel = oDialog.Model.CommandButton2 + oStartButtonModel.Enabled = False + + REM show progress bar + oProgressBar = oDialog.getControl("ProgressBar1") + oProgressBar.setVisible( True ) + + REM increase progress value every second + For ProgressValue = ProgressValueMin To ProgressValueMax Step ProgressStep + oProgressBarModel.ProgressValue = ProgressValue + Wait 40 + Next ProgressValue + + REM hide progress bar + oProgressBar.setVisible( False ) + + REM enable cancel and start button + oCancelButtonModel.Enabled = True + oStartButtonModel.Enabled = True + +End Sub + +</script:module>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBarDlg.xdl b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBarDlg.xdl new file mode 100644 index 000000000..4a5803273 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ProgressBarDlg.xdl @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> +<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="ProgressBarDlg" dlg:title="Progress Bar Demo" dlg:left="138" dlg:top="80" dlg:width="203" dlg:height="157"> + <dlg:bulletinboard> + <dlg:progressmeter dlg:id="ProgressBar1" dlg:tab-index="0" dlg:left="6" dlg:top="70" dlg:width="190" dlg:height="9" dlg:value="0"/> + <dlg:button dlg:id="CommandButton1" dlg:tab-index="1" dlg:left="6" dlg:top="135" dlg:width="50" dlg:height="14" dlg:value="Cancel" dlg:button-type="cancel"/> + <dlg:button dlg:id="CommandButton2" dlg:tab-index="2" dlg:left="147" dlg:top="135" dlg:width="50" dlg:height="14" dlg:value="Start Demo"> + <script:event script:event-name="on-performaction" script:location="application" script:macro-name="ToolkitControls.ProgressBar.ProgressBarDemo" script:language="StarBasic"/> + </dlg:button> + </dlg:bulletinboard> +</dlg:window>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBar.xba b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBar.xba new file mode 100644 index 000000000..db2dd7cdd --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBar.xba @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> +<script:module xmlns:script="http://openoffice.org/2000/script" script:name="ScrollBar" script:language="StarBasic">REM ***** BASIC ***** + +Dim oDialog As Object +Const Border = 5 + +Sub Main() + + Dim oLibContainer As Object, oLib As Object + Dim oInputStreamProvider As Object + Dim oDialogModel As Object + Dim oScrollBarModel As Object + Dim oLabelModel As Object + Dim sLabel As String + Dim VisibleSize As Double + + Const sLibName = "ToolkitControls" + Const sDialogName = "ScrollBarDlg" + + REM load/get library and input stream provider + oLibContainer = DialogLibraries + oLibContainer.loadLibrary( sLibName ) + oLib = oLibContainer.getByName( sLibName ) + oInputStreamProvider = oLib.getByName( sDialogName ) + + REM create dialog control + oDialog = CreateUnoDialog( oInputStreamProvider ) + + REM set the label + sLabel = "This Text exceeds the visible area of the dialog and can be" + sLabel = sLabel + " scrolled horizontally by clicking on the scroll bar." + oDialogModel = oDialog.Model + oLabelModel = oDialogModel.Label1 + oLabelModel.Label = sLabel + + REM scroll bar settings + oScrollBarModel = oDialog.Model.ScrollBar1 + oScrollBarModel.ScrollValueMax = 100 + VisibleSize = (oDialogModel.Width - Border - oLabelModel.PositionX) / oLabelModel.Width + VisibleSize = VisibleSize * oScrollBarModel.ScrollValueMax + oScrollBarModel.VisibleSize = VisibleSize + oScrollBarModel.BlockIncrement = oScrollBarModel.VisibleSize + oScrollBarModel.LineIncrement = oScrollBarModel.BlockIncrement / 20 + + REM show the dialog + oDialog.execute() + +End Sub + +Sub AdjustmentHandler() + + Dim oLabelModel As Object + Dim oScrollBarModel As Object + Dim ScrollValue As Long, ScrollValueMax As Long + Dim VisibleSize As Long + Dim Factor As Double + + Static bInit As Boolean + Static PositionX0 As Long + Static Offset As Long + + REM get the model of the label control + oLabelModel = oDialog.Model.Label1 + + REM on initialization remember the position of the label control and calculate offset + If bInit = False Then + bInit = True + PositionX0 = oLabelModel.PositionX + OffSet = PositionX0 + oLabelModel.Width - (oDialog.Model.Width - Border) + End If + + REM get the model of the scroll bar control + oScrollBarModel = oDialog.Model.ScrollBar1 + + REM get the actual scroll value + ScrollValue = oScrollBarModel.ScrollValue + + REM calculate and set new position of the label control + ScrollValueMax = oScrollBarModel.ScrollValueMax + VisibleSize = oScrollBarModel.VisibleSize + Factor = Offset / (ScrollValueMax - VisibleSize) + oLabelModel.PositionX = PositionX0 - Factor * ScrollValue + +End Sub +</script:module>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBarDlg.xdl b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBarDlg.xdl new file mode 100644 index 000000000..ae36d0000 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/ScrollBarDlg.xdl @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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 . +--> +<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> +<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="ScrollBarDlg" dlg:title="Scroll Bar Demo" dlg:left="138" dlg:top="80" dlg:width="200" dlg:height="157"> + <dlg:styles> + <dlg:style dlg:style-id="0" dlg:font-height="18"/> + </dlg:styles> + <dlg:bulletinboard> + <dlg:scrollbar dlg:id="ScrollBar1" dlg:tab-index="0" dlg:left="5" dlg:top="137" dlg:width="190" dlg:height="15"> + <script:event script:event-name="on-adjustmentvaluechange" script:location="application" script:macro-name="ToolkitControls.ScrollBar.AdjustmentHandler" script:language="StarBasic"/> + </dlg:scrollbar> + <dlg:text dlg:style-id="0" dlg:id="Label1" dlg:tab-index="1" dlg:left="5" dlg:top="39" dlg:width="600" dlg:height="17" dlg:value="Label1"/> + </dlg:bulletinboard> +</dlg:window>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/dialog.xlb b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/dialog.xlb new file mode 100644 index 000000000..a74e020a1 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/dialog.xlb @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd"> +<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ToolkitControls" library:readonly="false" library:passwordprotected="false"> + <library:element library:name="FileDialogDlg"/> + <library:element library:name="ProgressBarDlg"/> + <library:element library:name="ScrollBarDlg"/> + <library:element library:name="MultiPageDlg"/> +</library:library>
\ No newline at end of file diff --git a/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/script.xlb b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/script.xlb new file mode 100644 index 000000000..03741ae35 --- /dev/null +++ b/odk/examples/DevelopersGuide/BasicAndDialogs/ToolkitControls/ToolkitControls/script.xlb @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd"> +<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ToolkitControls" library:readonly="false" library:passwordprotected="false"> + <library:element library:name="FileDialog"/> + <library:element library:name="ProgressBar"/> + <library:element library:name="ScrollBar"/> + <library:element library:name="MultiPage"/> +</library:library>
\ No newline at end of file |