/* * 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 integration.forms;
/**************************************************************************/ /** provides a small wrapper around a document
*/ publicclass DocumentHelper
{ privatefinal XMultiServiceFactory m_orb; private XComponent m_documentComponent;
/* ------------------------------------------------------------------ */ /** retrieves the current view of the document @return the view component, queried for the interface described by aInterfaceClass
*/ public DocumentViewHelper getCurrentView( )
{ // get the model interface for the document
XModel xDocModel = UnoRuntime.queryInterface(XModel.class, m_documentComponent ); // get the current controller for the document - as a controller is tied to a view, // this gives us the currently active view for the document.
XController xController = xDocModel.getCurrentController();
/* ------------------------------------------------------------------ */ /** reloads the document * * The reload is done by dispatching the respective URL at a frame of the document. * As a consequence, if you have references to a view of the document, or any interface * of the document, they will become invalid. * The Model instance itself, at which you called reload, will still be valid, it will * automatically update its internal state after the reload. * * Another consequence is that if the document does not have a view at all, it cannot * be reloaded.
*/ publicvoid reload() throws Exception
{
DocumentViewHelper view = getCurrentView();
XFrame frame = view.getController().getFrame();
XModel oldModel = frame.getController().getModel();
/* ------------------------------------------------------------------ */ /** creates a new form which is a child of the given form components container
@param xParentContainer The parent container for the new form @param sInitialName The initial name of the form. May be null, in this case the default (which is an implementation detail) applies.
*/ private XIndexContainer createSubForm( XIndexContainer xParentContainer, String sInitialName ) throws com.sun.star.uno.Exception
{ // create a new form
Object xNewForm = m_orb.createInstance( "com.sun.star.form.component.DataForm" );
// set the name if necessary if ( null != sInitialName )
{
XPropertySet xFormProps = dbfTools.queryPropertySet( xNewForm );
xFormProps.setPropertyValue( "Name", sInitialName );
}
// outta here return UnoRuntime.queryInterface( XIndexContainer.class, xNewForm );
}
/* ------------------------------------------------------------------ */ /** creates a new form which is a child of the given form components container
@param aParentContainer The parent container for the new form @param sInitialName The initial name of the form. May be null, in this case the default (which is an implementation detail) applies.
*/ public XIndexContainer createSubForm( Object aParentContainer, String sInitialName ) throws com.sun.star.uno.Exception
{
XIndexContainer xParentContainer = UnoRuntime.queryInterface(
XIndexContainer.class, aParentContainer ); return createSubForm( xParentContainer, sInitialName );
}
/* ------------------------------------------------------------------ */ /** creates a form which is a sibling of the given form @param aForm A sinbling of the to be created form.
@param sInitialName The initial name of the form. May be null, in this case the default (which is an implementation detail) applies.
*/ public XIndexContainer createSiblingForm( Object aForm, String sInitialName ) throws com.sun.star.uno.Exception
{ // get the parent
XIndexContainer xContainer = (XIndexContainer)dbfTools.getParent(
aForm, XIndexContainer.class ); // append a new form to this parent container return createSubForm( xContainer, sInitialName );
}
/* ------------------------------------------------------------------ */ /** returns a URL which can be used to create a document of a certain type
*/ publicstatic String getDocumentFactoryURL( DocumentType eType )
{ if ( eType == DocumentType.WRITER ) return"private:factory/swriter"; if ( eType == DocumentType.CALC ) return"private:factory/scalc"; if ( eType == DocumentType.DRAWING ) return"private:factory/sdraw"; if ( eType == DocumentType.XMLFORM ) return"private:factory/swriter?slot=21053"; return"private:factory/swriter";
}
/* ------------------------------------------------------------------ */ /** retrieves a com.sun.star.drawing.DrawPage of the document, denoted by index * @param index * the index of the draw page * @throws * com.sun.star.lang.IndexOutOfBoundsException * com.sun.star.lang.WrappedTargetException
*/ protected XDrawPage getDrawPage( int index ) throws com.sun.star.lang.IndexOutOfBoundsException, com.sun.star.lang.WrappedTargetException
{
XDrawPagesSupplier xSuppPages = UnoRuntime.queryInterface(
XDrawPagesSupplier.class, getDocument() );
XDrawPages xPages = xSuppPages.getDrawPages();
return UnoRuntime.queryInterface( XDrawPage.class, xPages.getByIndex( index ) );
}
/* ------------------------------------------------------------------ */ /** retrieves the <type scope="com.sun.star.drawing">DrawPage</type> of the document
*/ protected XDrawPage getMainDrawPage( ) throws com.sun.star.uno.Exception
{
XDrawPage xReturn;
// in case of a Writer document, this is rather easy: simply ask the XDrawPageSupplier
XDrawPageSupplier xSuppPage = UnoRuntime.queryInterface(
XDrawPageSupplier.class, getDocument() ); if ( null != xSuppPage )
xReturn = xSuppPage.getDrawPage(); else
{ // the model itself is no draw page supplier - okay, it may be a Writer or Calc document // (or any other multi-page document)
XDrawPagesSupplier xSuppPages = UnoRuntime.queryInterface(
XDrawPagesSupplier.class, getDocument() );
XDrawPages xPages = xSuppPages.getDrawPages();
// Note that this is no really error-proof code: If the document model does not support the // XDrawPagesSupplier interface, or if the pages collection returned is empty, this will break.
}
return xReturn;
}
/* ------------------------------------------------------------------ */ /** retrieves the root of the hierarchy of form components
*/ protected XNameContainer getFormComponentTreeRoot( ) throws com.sun.star.uno.Exception
{
XFormsSupplier xSuppForms = UnoRuntime.queryInterface(
XFormsSupplier.class, getMainDrawPage( ) );
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.