Seite 1 von 1

[gelöst] OooBean Dokumentvorlage zum bearbeiten öffnen

Verfasst: So, 12.08.2012 17:55
von CDSchorsch
Hallo Zusammen,

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;
		}

	}

Hier dann mal der OpenHandler

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)
		{

		}

	}

Ich öffnen dann den FilePicker. An diesem habe ich ein FileFilter gehängt. So das mir nur Textdokumentvorlagen (.ott) angezeigt werden. Das ausgewählte Dokument wird dann geöffnet.
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

Re: OooBean Dokumentvorlage zum bearbeiten öffnen

Verfasst: So, 12.08.2012 22:40
von F3K Total
CDSchorsch hat geschrieben:Gibt es da spezielle PropertyValues die dann dem "loadFromStream" mitgeben kann?
... also in Basic sieht das dann z.B. so aus:

Code: Alles auswählen

Sub Main
Dim args(0) As New com.sun.star.beans.PropertyValue
args(0).name = "AsTemplate"
args(0).value = false
surl = "file:///C:/Users/Load_not_as_template.ott"
odoc = StarDesktop.loadComponentFromURL(surl,"_blank", 0, args)
End Sub
...wobei das PropertyValue "AsTemplate" sicherlich auch mit "loadFromStream" funzt.
Gruß R

Re: OooBean Dokumentvorlage zum bearbeiten öffnen

Verfasst: Mo, 13.08.2012 19:47
von CDSchorsch
Danke. Das wars was ich gesucht habe. Damit der Speicherbutton dann aber richtig funktioniert. Darf die Datei nicht über loadFormStream geladen werden. Sondern über loadFromURL.