Add example dialog

This commit is contained in:
Samuel Mehrbrodt 2016-04-07 11:55:05 +02:00
parent ba11b410e0
commit 59f8cd34c2
6 changed files with 258 additions and 3 deletions

View file

@ -1,17 +1,156 @@
package org.libreoffice.example.helper;
import java.io.File;
import com.sun.star.awt.MessageBoxType;
import com.sun.star.awt.Point;
import com.sun.star.awt.XButton;
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.XDialogEventHandler;
import com.sun.star.awt.XDialogProvider2;
import com.sun.star.awt.XFixedText;
import com.sun.star.awt.XListBox;
import com.sun.star.awt.XMessageBox;
import com.sun.star.awt.XMessageBoxFactory;
import com.sun.star.awt.XTextComponent;
import com.sun.star.awt.XToolkit;
import com.sun.star.awt.XWindow;
import com.sun.star.awt.XWindowPeer;
import com.sun.star.beans.PropertyVetoException;
import com.sun.star.beans.UnknownPropertyException;
import com.sun.star.beans.XPropertySet;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
public class DialogHelper {
/**
* Create a dialog from an xdl file.
*
* @param xdlFile
* The filename in the `dialog` folder
* @param context
* @return XDialog
*/
public static XDialog createDialog(String xdlFile, XComponentContext context, XDialogEventHandler handler) {
Object oDialogProvider;
try {
oDialogProvider = context.getServiceManager().createInstanceWithContext("com.sun.star.awt.DialogProvider2",
context);
XDialogProvider2 xDialogProv = (XDialogProvider2) UnoRuntime.queryInterface(XDialogProvider2.class,
oDialogProvider);
File dialogFile = FileHelper.getDialogFilePath(xdlFile, context);
return xDialogProv.createDialogWithHandler(convertToURL(context, dialogFile), handler);
} catch (Exception e) {
return null;
}
}
/** Returns a URL to be used with XDialogProvider to create a dialog */
public static String convertToURL(XComponentContext xContext, File dialogFile) {
String sURL = null;
try {
com.sun.star.ucb.XFileIdentifierConverter xFileConverter = (com.sun.star.ucb.XFileIdentifierConverter) UnoRuntime
.queryInterface(com.sun.star.ucb.XFileIdentifierConverter.class, xContext.getServiceManager()
.createInstanceWithContext("com.sun.star.ucb.FileContentProvider", xContext));
sURL = xFileConverter.getFileURLFromSystemPath("", dialogFile.getAbsolutePath());
} catch (com.sun.star.uno.Exception ex) {
return null;
}
return sURL;
}
/** Returns a button (XButton) from a dialog */
public static XButton getButton(XDialog dialog, String componentId) {
XControlContainer xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class,
dialog);
Object control = xDlgContainer.getControl(componentId);
return (XButton) UnoRuntime.queryInterface(XButton.class, control);
}
/** Returns a text field (XTextComponent) from a dialog */
public static XTextComponent getEditField(XDialog dialog, String componentId) {
XControlContainer xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class,
dialog);
Object control = xDlgContainer.getControl(componentId);
return (XTextComponent) UnoRuntime.queryInterface(XTextComponent.class, control);
}
/** Returns a Combo box (XComboBox) from a dialog */
public static XComboBox getCombobox(XDialog dialog, String componentId) {
XControlContainer xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class,
dialog);
Object control = xDlgContainer.getControl(componentId);
return (XComboBox) UnoRuntime.queryInterface(XComboBox.class, control);
}
/** Returns a List box (XListBox) from a dialog */
public static XListBox getListBox(XDialog dialog, String componentId) {
XControlContainer xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class,
dialog);
Object control = xDlgContainer.getControl(componentId);
return (XListBox) UnoRuntime.queryInterface(XListBox.class, control);
}
/** Returns a label (XFixedText) from a dialog */
public static XFixedText getLabel(XDialog dialog, String componentId) {
XControlContainer xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class,
dialog);
Object control = xDlgContainer.getControl(componentId);
return (XFixedText) UnoRuntime.queryInterface(XFixedText.class, control);
}
public static void EnableButton(XDialog dialog, String componentId, boolean enable) {
XControlContainer xDlgContainer = (XControlContainer) UnoRuntime.queryInterface(XControlContainer.class,
dialog);
// retrieve the control that we want to disable or enable
XControl xControl = UnoRuntime.queryInterface(XControl.class, xDlgContainer.getControl(componentId));
XPropertySet xModelPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xControl.getModel());
try {
xModelPropertySet.setPropertyValue("Enabled", Boolean.valueOf(enable));
} catch (IllegalArgumentException | UnknownPropertyException | PropertyVetoException
| WrappedTargetException e) {
return;
}
}
/** Set the focus to an input field */
public static void SetFocus(XTextComponent editField) {
XWindow xControlWindow = UnoRuntime.queryInterface(XWindow.class, editField);
xControlWindow.setFocus();
}
public static void setPosition(XDialog dialog, int posX, int posY) {
XControlModel xDialogModel = UnoRuntime.queryInterface(XControl.class, dialog).getModel();
XPropertySet xPropSet = UnoRuntime.queryInterface(XPropertySet.class, xDialogModel);
try {
xPropSet.setPropertyValue("PositionX", posX);
xPropSet.setPropertyValue("PositionY", posY);
} catch (com.sun.star.lang.IllegalArgumentException | UnknownPropertyException | PropertyVetoException
| WrappedTargetException e) {
return;
}
}
public static Point getPosition(XDialog dialog) {
int posX = 0;
int posY = 0;
XControlModel xDialogModel = UnoRuntime.queryInterface(XControl.class, dialog).getModel();
XPropertySet xPropSet = UnoRuntime.queryInterface(XPropertySet.class, xDialogModel);
try {
posX = (int) xPropSet.getPropertyValue("PositionX");
posY = (int) xPropSet.getPropertyValue("PositionY");
} catch (UnknownPropertyException | WrappedTargetException e) {
}
return new Point(posX, posY);
}
public static void showInfoMessage(XComponentContext context, XDialog dialog, String message) {
showMessageBox(context, dialog, MessageBoxType.INFOBOX, "Info", message);
}

View file

@ -0,0 +1,59 @@
package org.libreoffice.example.helper;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import com.sun.star.deployment.PackageInformationProvider;
import com.sun.star.deployment.XPackageInformationProvider;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.util.XURLTransformer;
public class FileHelper {
final static String DIALOG_RESOURCES = "dialog/";
/**
* Returns a path to a dialog file
*/
public static File getDialogFilePath(String xdlFile, XComponentContext xContext) {
return getFilePath(DIALOG_RESOURCES + xdlFile, xContext);
}
/**
* Returns a file path for a file in the installed extension, or null on failure.
*/
public static File getFilePath(String file, XComponentContext xContext) {
XPackageInformationProvider xPackageInformationProvider = PackageInformationProvider.get(xContext);
String location = xPackageInformationProvider.getPackageLocation("org.libreoffice.example.starterproject");
Object oTransformer;
try {
oTransformer = xContext.getServiceManager().createInstanceWithContext("com.sun.star.util.URLTransformer", xContext);
} catch (Exception e) {
e.printStackTrace();
return null;
}
XURLTransformer xTransformer = (XURLTransformer)UnoRuntime.queryInterface(XURLTransformer.class, oTransformer);
com.sun.star.util.URL[] oURL = new com.sun.star.util.URL[1];
oURL[0] = new com.sun.star.util.URL();
oURL[0].Complete = location + "/" + file;
xTransformer.parseStrict(oURL);
URL url;
try {
url = new URL(oURL[0].Complete);
} catch (MalformedURLException e1) {
return null;
}
File f;
try {
f = new File(url.toURI());
} catch (URISyntaxException e1) {
return null;
}
return f;
}
}