2011-07-13 18 views
6

¿Hay algún ejemplo en la web sobre cómo construir la barra de herramientas de OpenOffice en Java? He encontrado ejemplos en C++, pero no en Java : http://wiki.services.openoffice.org/wiki/Framework/Article/Generic_UNO_Interfaces_for_complex_toolbar_controlsopenoffice Barra de herramientas compleja en java

necesito un artículo o un tutorial sobre cómo construir y complemento OO que utiliza una barra de herramientas complejas en java

me encontré con este artículo http://java.dzone.com/news/lets-extend-openofficeorg-java#comment-53245 que implementa una java PopupMenuController. Intenté hacer el mismo proceso pero usando un XToolbarController en lugar de PopupMenuController. sin embargo, no pude hacer funcionar mi complemento de controlador. a continuación son mi controller.xcu y clase de controlador. ¿Puedes decirme qué estoy haciendo mal? gracias.

mi Controller.xcu:

<?xml version="1.0" encoding="UTF-8"?> 
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Controller" oor:package="org.openoffice.Office.UI"> 
    <node oor:name="Registered"> 
    <node oor:name="ToolBar"> 
     <node oor:name="c10" oor:op="replace"> 
     <prop oor:name="Command"> 
      <value>.uno:CommandLineToolbar</value> 
     </prop> 
     <prop oor:name="Module"> 
      <value></value> 
     </prop> 
     <prop oor:name="Controller"> 
       <value>com.example.toolbar.Toolbar</value> 
     </prop> 
     </node> 
    </node> 
    </node> 
</oor:component-data> 

mi clase de controlador de la barra de herramientas:

public final class Toolbar extends ComponentBase 
    implements com.sun.star.util.XUpdatable, 
       com.sun.star.frame.XToolbarController, 
       com.sun.star.frame.XStatusListener, 
       com.sun.star.lang.XServiceInfo, 
       com.sun.star.lang.XInitialization, 
       com.sun.star.frame.XSubToolbarController 
{ 
    private final XComponentContext m_xContext; 
    private static final String m_implementationName = Toolbar.class.getName(); 
    private static final String[] m_serviceNames = { 
     &quot;com.sun.star.frame.ToolbarController&quot; }; 
private String msInternalName = &quot;i do not now&quot;; 
    private XComponent mxDocument; 
    private XTextComponent fixedText; 
    private XComboBox cBox_xComboBox; 
private XMultiComponentFactory mxMCF; 
    public XMultiServiceFactory mxMSF; 
    public Toolbar(XComponentContext context) 
    { 
     m_xContext = context; 

    }; 

    public static XSingleComponentFactory __getComponentFactory(String sImplementationName) { 
     XSingleComponentFactory xFactory = null; 

     if (sImplementationName.equals(m_implementationName)) 
      xFactory = Factory.createComponentFactory(Toolbar.class, m_serviceNames); 
     return xFactory; 
    } 

    public static boolean __writeRegistryServiceInfo(XRegistryKey xRegistryKey) { 
     return Factory.writeRegistryServiceInfo(m_implementationName, 
               m_serviceNames, 
               xRegistryKey); 
    } 

    // com.sun.star.util.XUpdatable: 
    public void update() 
    { 
     // TODO: Insert your implementation for &quot;update&quot; here. 
    } 

    // com.sun.star.frame.XToolbarController: 
    public void execute(short KeyModifier) 
    { 
     // TODO: Insert your implementation for &quot;execute&quot; here. 
    } 

    public void click() 
    { 
     // TODO: Insert your implementation for &quot;click&quot; here. 
    } 

    public void doubleClick() 
    { 
     // TODO: Insert your implementation for &quot;doubleClick&quot; here. 
    } 

    public com.sun.star.awt.XWindow createPopupWindow() 
    { 
     // TODO: Exchange the default return implementation for &quot;createPopupWindow&quot; !!! 
     // NOTE: Default initialized polymorphic structs can cause problems 
     // because of missing default initialization of primitive types of 
     // some C++ compilers or different Any initialization in Java and C++ 
     // polymorphic structs. 
     return null; 
    } 

    public com.sun.star.awt.XWindow createItemWindow(com.sun.star.awt.XWindow Parent) 
    { 
     System.out.println(&quot;ToolbarCombobox createItemWindow start&quot;); 
     Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); 

// xMSF is set by initialize(Object[]) 
     try { 
// get XWindowPeer 
     XWindowPeer xWinPeer = (XWindowPeer) UnoRuntime.queryInterface(XWindowPeer.class, Parent); 
     Object o = mxMSF.createInstance(&quot;com.sun.star.awt.Toolkit&quot;); 
     XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, o); 
// create WindowDescriptor 
     WindowDescriptor wd = new WindowDescriptor(); 
     wd.Type = WindowClass.SIMPLE; 
     wd.Parent = xWinPeer; 
     wd.Bounds = new Rectangle(0, 0, 230, 23); 
     wd.ParentIndex = (short) -1; 
     wd.WindowAttributes = WindowAttribute.SHOW |VclWindowPeerAttribute .DROPDOWN; 
     wd.WindowServiceName = &quot;combobox&quot;; 
// create ComboBox 
     XWindowPeer cBox_xWinPeer = xToolkit.createWindow(wd); 
     cBox_xComboBox = (XComboBox) UnoRuntime.queryInterface(XComboBox.class, cBox_xWinPeer); 
// Get Interface for manipulating the text in the combobox 
     fixedText = (XTextComponent)UnoRuntime.queryInterface(XTextComponent.class,cBox_xComboBox); 
     fixedText.setText(&quot;Enter Command Here&quot;); 
     XWindow cBox_xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, cBox_xWinPeer); 
// add some elements 
     cBox_xComboBox.addItems(new String[] { &quot;test&quot;, &quot;foo&quot;, &quot;bar&quot;, &quot;test2&quot;, &quot;foo2&quot;, &quot;bar2&quot; }, (short) 0); 
// cBox_xComboBox.addItems(new String[] {&quot;&quot;}, (short) 4); 
     cBox_xComboBox.setDropDownLineCount((short) 6); 
     //cBox_xWindow.addKeyListener(this); 

     System.out.println(&quot;ToolbarCombobox createItemWindow end&quot;); 

     return cBox_xWindow; 

     } catch (com.sun.star.uno.Exception e) { 
     System.out.println(&quot;ToolbarCombobox createItemWindow end not o.k.&quot;); 
     return null; } 
    } 

    // com.sun.star.lang.XEventListener: 
    public void disposing(com.sun.star.lang.EventObject Source) 
    { 
     // TODO: Insert your implementation for &quot;disposing&quot; here. 
    } 

    // com.sun.star.frame.XStatusListener: 
    public void statusChanged(com.sun.star.frame.FeatureStateEvent State) 
    { 
     // TODO: Insert your implementation for &quot;statusChanged&quot; here. 
    } 

    // com.sun.star.lang.XServiceInfo: 
    public String getImplementationName() { 
     return m_implementationName; 
    } 

    public boolean supportsService(String sService) { 
     int len = m_serviceNames.length; 

     for(int i=0; i &lt; len; i++) { 
      if (sService.equals(m_serviceNames[i])) 
       return true; 
     } 
     return false; 
    } 

    public String[] getSupportedServiceNames() { 
     return m_serviceNames; 
    } 

    // com.sun.star.lang.XInitialization: 
    public void initialize(Object[] aArguments) throws com.sun.star.uno.Exception 
    { 
     if (aArguments.length &gt; 0) 
     { 
      mxMCF = m_xContext.getServiceManager(); 

      mxMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, mxMCF); 
     } 

    } 

    // com.sun.star.frame.XSubToolbarController: 
    public boolean opensSubToolbar() 
    { 
     // TODO: Exchange the default return implementation for &quot;opensSubToolbar&quot; !!! 
     // NOTE: Default initialized polymorphic structs can cause problems 
     // because of missing default initialization of primitive types of 
     // some C++ compilers or different Any initialization in Java and C++ 
     // polymorphic structs. 
     return false; 
    } 

    public String getSubToolbarName() 
    { 
     // TODO: Exchange the default return implementation for &quot;getSubToolbarName&quot; !!! 
     // NOTE: Default initialized polymorphic structs can cause problems 
     // because of missing default initialization of primitive types of 
     // some C++ compilers or different Any initialization in Java and C++ 
     // polymorphic structs. 
     return new String(); 
    } 

    public void functionSelected(String aCommand) 
    { 
     // TODO: Insert your implementation for &quot;functionSelected&quot; here. 
    } 

    public void updateImage() 
    { 
     // TODO: Insert your implementation for &quot;updateImage&quot; here. 
    } 

} 

Respuesta

0

la solución es para usar un archivo Addons.xcu como el siguiente. Addons.xcu debe tener una propiedad "URL" para hacer referencia a la propiedad "Command" en Controller.xcu.

<?xml version='1.0' encoding='UTF-8'?> 
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office"> 
<node oor:name="AddonUI"> 
    <node oor:name="OfficeToolBar"> 
     <node oor:name="com.example.toolbar.ToolbarAddOn" oor:op="replace"> 
      <node oor:name="a1_0" oor:op="replace"> 
       <prop oor:name="URL"> 
        <value>.uno:CommandLineToolbar</value> 
       </prop> 
       <prop oor:name="Title"> 
        <value>Text</value> 
       </prop> 
       <prop oor:name="Context" oor:type="xs:string"> 
        <value></value> 
       </prop> 
      </node> 
     </node> 
    </node> 
</node> 
</oor:component-data> 
0
No

un artículo, pero estos chicos parece haberse dado cuenta: http://www.oooforum.org/forum/viewtopic.phtml?t=85610

+0

vi este hilo, pero no es muy útil. lo está haciendo de otra manera. Estoy interesado en hacerlo para ToolbarController como se hizo para PopupMenuController en http://java.dzone.com/news/lets-extend-openofficeorg-java#comment-53245 – othman

+0

, dudo que tenga que ver con el controlador.xcu . ¿Qué poner para el elemento "Comando"? ' com.example.toolbar: Barra de herramientas ' – othman

Cuestiones relacionadas