meine Javaapplikation hat sich an den Toolbar-Button "Öffnen" als Dispatcher regisitriert.
Code: Alles auswählen
private class Interceptor implements XDispatchProviderInterceptor
{
XDispatchProvider master, slave;
OpenHandler openHandler = new OpenHandler();
NewDocHandler newDocHandler = new NewDocHandler();
@Override
public XDispatch queryDispatch(URL arg0, String arg1, int arg2)
{
if (arg0.Complete.equals(".uno:Open"))
return openHandler;
else if (arg0.Complete.equals(".uno:NewDoc"))
return newDocHandler;
else
return slave.queryDispatch(arg0, arg1, arg2);
}
@Override
public XDispatch[] queryDispatches(DispatchDescriptor[] arg0)
{
XDispatch[] ret = new XDispatch[0];
return ret;
}
@Override
public XDispatchProvider getMasterDispatchProvider()
{
return master;
}
@Override
public XDispatchProvider getSlaveDispatchProvider()
{
return slave;
}
@Override
public void setMasterDispatchProvider(XDispatchProvider arg0)
{
master = arg0;
}
@Override
public void setSlaveDispatchProvider(XDispatchProvider arg0)
{
slave = arg0;
}
}
Code: Alles auswählen
private class OpenHandler implements XDispatch
{
FeatureStateEvent event;
XMultiComponentFactory xMCF;
XFilePicker xFilePicker;
OpenHandler()
{
event = new FeatureStateEvent();
event.FeatureDescriptor = "Open";
event.IsEnabled = true;
event.Requery = false;
event.State = new Boolean(false);
try
{
xMCF = oBean.getOOoConnection().getComponentContext().getServiceManager();
// the filepicker is instantiated with the global
// Multicomponentfactory...
Object oFilePicker = xMCF.createInstanceWithContext("com.sun.star.ui.dialogs.FilePicker", oBean.getOOoConnection().getComponentContext());
xFilePicker = (XFilePicker) UnoRuntime.queryInterface(XFilePicker.class, oFilePicker);
XFilterManager xFilterManager = (XFilterManager) UnoRuntime.queryInterface(XFilterManager.class, oFilePicker);
xFilterManager.appendFilter("ODF Textdocumentenvorlage (.ott)", "*.ott");
}
catch (Exception e)
{
logger.error(e);
}
}
@Override
public void addStatusListener(XStatusListener xstatuslistener, URL url)
{
event.FeatureURL = url;
xstatuslistener.statusChanged(event);
}
@Override
public void dispatch(URL url, PropertyValue[] apropertyvalue)
{
short result = xFilePicker.execute();
if (result == com.sun.star.ui.dialogs.ExecutableDialogResults.OK)
{
String[] sPathList = xFilePicker.getFiles();
if (sPathList.length > 0)
{
try
{
File file = new File(new URI(sPathList[0]));
FileInputStream in = new FileInputStream(file);
oBean.loadFromStream(in, null);
XTextDocument xTextDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, oBean.getDocument());
XModifiable xModifiable = (XModifiable) UnoRuntime.queryInterface(XModifiable.class, xTextDocument);
xModifiable.addModifyListener(WriterPanel.this.listener);
GroupTabbedPane tp = (GroupTabbedPane) WriterPanel.this.maintenance.getTabPaneWork().getSelectedComponent();
tp.setTitleAt(tp.getSelectedIndex(), file.getPath());
setApplicationMode(IConstances.APP_MODE_DISPLAY);
KitaMaintenance.getStatusLine().setApplicationMode(applicationMode);
}
catch (Exception e)
{
logger.error(e);
}
}
}
}
@Override
public void removeStatusListener(XStatusListener xstatuslistener, URL url)
{
}
}
Leider wird nicht das Template selbst zum bearbeiten geöffnet, sondern aus dem Template wird ein neues Dokument erzeugt.
Wie bekomme ich es hin, dass das Template zum bearbeiten geöffnet wird?
Gibt es da spezielle PropertyValues die dann dem "loadFromStream" mitgeben kann?
Gruss Carsten