summaryrefslogtreecommitdiffstats
path: root/scripting/java/com/sun/star/script/framework/browse/DialogFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/com/sun/star/script/framework/browse/DialogFactory.java')
-rw-r--r--scripting/java/com/sun/star/script/framework/browse/DialogFactory.java255
1 files changed, 255 insertions, 0 deletions
diff --git a/scripting/java/com/sun/star/script/framework/browse/DialogFactory.java b/scripting/java/com/sun/star/script/framework/browse/DialogFactory.java
new file mode 100644
index 000000000..08cfba4c8
--- /dev/null
+++ b/scripting/java/com/sun/star/script/framework/browse/DialogFactory.java
@@ -0,0 +1,255 @@
+/*
+ * 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 .
+ */
+
+package com.sun.star.script.framework.browse;
+
+import com.sun.star.awt.XButton;
+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.XTextComponent;
+import com.sun.star.awt.XToolkit;
+import com.sun.star.awt.XWindow;
+
+import com.sun.star.beans.XPropertySet;
+
+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.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+
+public class DialogFactory {
+
+ private static DialogFactory factory;
+ private final XComponentContext xComponentContext;
+
+ // singleton
+ private DialogFactory(XComponentContext xComponentContext) {
+ this.xComponentContext = xComponentContext;
+ }
+
+ public static void createDialogFactory(XComponentContext xComponentContext) {
+ synchronized (DialogFactory.class) {
+ if (factory == null) {
+ factory = new DialogFactory(xComponentContext);
+ }
+ }
+ }
+
+ public static DialogFactory getDialogFactory() throws java.lang.Exception {
+ if (factory == null) {
+ throw new java.lang.Exception("DialogFactory not initialized");
+ }
+ return factory;
+ }
+
+ public String showInputDialog(String title, String prompt) {
+ final XDialog xDialog;
+
+ try {
+ xDialog = createInputDialog(title, prompt);
+ } catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+
+ // add an action listener to the button controls
+ XControlContainer controls =
+ UnoRuntime.queryInterface(XControlContainer.class, xDialog);
+
+ XButton okButton =
+ UnoRuntime.queryInterface(XButton.class, controls.getControl("Ok"));
+
+ okButton.setActionCommand("Ok");
+
+ XButton cancelButton =
+ UnoRuntime.queryInterface(XButton.class, controls.getControl("Cancel"));
+
+ cancelButton.setActionCommand("Cancel");
+
+ final XTextComponent textField =
+ UnoRuntime.queryInterface(XTextComponent.class,
+ controls.getControl("NameField"));
+
+ final ResultHolder resultHolder = new ResultHolder();
+
+ com.sun.star.awt.XActionListener listener =
+ new com.sun.star.awt.XActionListener() {
+ public void actionPerformed(com.sun.star.awt.ActionEvent e) {
+ if (e.ActionCommand.equals("Cancel")) {
+ resultHolder.setResult(null);
+ xDialog.endExecute();
+ } else {
+ resultHolder.setResult(textField.getText());
+ xDialog.endExecute();
+ }
+ }
+
+ public void disposing(EventObject o) {
+ // does nothing
+ }
+ };
+
+ okButton.addActionListener(listener);
+ cancelButton.addActionListener(listener);
+
+ xDialog.execute();
+
+ return (String)resultHolder.getResult();
+ }
+
+ private void setDimensions(Object o, int x, int y, int width, int height) throws
+ com.sun.star.uno.Exception {
+
+ XPropertySet props = UnoRuntime.queryInterface(XPropertySet.class, o);
+
+ props.setPropertyValue("PositionX", Integer.valueOf(x));
+ props.setPropertyValue("PositionY", Integer.valueOf(y));
+ props.setPropertyValue("Height", Integer.valueOf(height));
+ props.setPropertyValue("Width", Integer.valueOf(width));
+ }
+
+ private XDialog createInputDialog(String title, String prompt) throws
+ com.sun.star.uno.Exception {
+
+ if (title == null || title.length() == 0) {
+ title = "Scripting Framework";
+ }
+
+ if (prompt == null || prompt.length() == 0) {
+ prompt = "Enter name";
+ }
+
+ // 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);
+
+ setDimensions(dialogModel, 100, 100, 157, 58);
+
+ XPropertySet props =
+ UnoRuntime.queryInterface(XPropertySet.class, dialogModel);
+
+ props.setPropertyValue("Title", title);
+
+ // get the service manager from the dialog model
+ XMultiServiceFactory xMultiServiceFactory =
+ UnoRuntime.queryInterface(XMultiServiceFactory.class, dialogModel);
+
+ // create the label model and set the properties
+ Object label = xMultiServiceFactory.createInstance(
+ "com.sun.star.awt.UnoControlFixedTextModel");
+
+ setDimensions(label, 15, 5, 134, 12);
+
+ XPropertySet labelProps =
+ UnoRuntime.queryInterface(XPropertySet.class, label);
+
+ labelProps.setPropertyValue("Name", "PromptLabel");
+ labelProps.setPropertyValue("Label", prompt);
+
+ // create the text field
+ Object edit = xMultiServiceFactory.createInstance(
+ "com.sun.star.awt.UnoControlEditModel");
+
+ setDimensions(edit, 15, 18, 134, 12);
+
+ XPropertySet editProps =
+ UnoRuntime.queryInterface(XPropertySet.class, edit);
+
+ editProps.setPropertyValue("Name", "NameField");
+
+ // create the OK button
+ Object okButtonModel = xMultiServiceFactory.createInstance(
+ "com.sun.star.awt.UnoControlButtonModel");
+
+ setDimensions(okButtonModel, 40, 39, 38, 15);
+
+ XPropertySet buttonProps =
+ UnoRuntime.queryInterface(XPropertySet.class, okButtonModel);
+
+ buttonProps.setPropertyValue("Name", "Ok");
+ buttonProps.setPropertyValue("Label", "Ok");
+
+ // create the Cancel button
+ Object cancelButtonModel = xMultiServiceFactory.createInstance(
+ "com.sun.star.awt.UnoControlButtonModel");
+
+ setDimensions(cancelButtonModel, 83, 39, 38, 15);
+
+ buttonProps =
+ UnoRuntime.queryInterface(XPropertySet.class, cancelButtonModel);
+
+ buttonProps.setPropertyValue("Name", "Cancel");
+ buttonProps.setPropertyValue("Label", "Cancel");
+
+ // insert the control models into the dialog model
+ XNameContainer xNameCont =
+ UnoRuntime.queryInterface(XNameContainer.class, dialogModel);
+
+ xNameCont.insertByName("PromptLabel", label);
+ xNameCont.insertByName("NameField", edit);
+ xNameCont.insertByName("Ok", okButtonModel);
+ xNameCont.insertByName("Cancel", cancelButtonModel);
+
+ // create the dialog control and set the model
+ Object dialog = xMultiComponentFactory.createInstanceWithContext(
+ "com.sun.star.awt.UnoControlDialog",
+ xComponentContext);
+
+ XControl xControl = UnoRuntime.queryInterface(XControl.class, dialog);
+
+ XControlModel xControlModel =
+ UnoRuntime.queryInterface(XControlModel.class, dialogModel);
+
+ xControl.setModel(xControlModel);
+
+ // create a peer
+ Object toolkit = xMultiComponentFactory.createInstanceWithContext(
+ "com.sun.star.awt.ExtToolkit",
+ xComponentContext);
+
+ XToolkit xToolkit = UnoRuntime.queryInterface(XToolkit.class, toolkit);
+ XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, xControl);
+ xWindow.setVisible(false);
+ xControl.createPeer(xToolkit, null);
+
+ return UnoRuntime.queryInterface(XDialog.class, dialog);
+ }
+
+ private static class ResultHolder {
+
+ private Object result = null;
+
+ public Object getResult() {
+ return result;
+ }
+
+ public void setResult(Object result) {
+ this.result = result;
+ }
+ }
+} \ No newline at end of file