2011-07-13 5 views
6

Y at-il un exemple sur le Web sur la façon de construire la barre d'outils complexe openoffice en Java? Je trouve des exemples en C++, mais pas en Java : http://wiki.services.openoffice.org/wiki/Framework/Article/Generic_UNO_Interfaces_for_complex_toolbar_controlsOpenoffice Complex barre d'outils dans Java

i besoin d'un article ou tutoriel sur la façon de construire et addon OO qui utilise une barre d'outils complexes en Java

i trouvé cet article http://java.dzone.com/news/lets-extend-openofficeorg-java#comment-53245 qui met en œuvre une Java PopupMenuController. J'ai essayé de faire le même processus mais en utilisant un XToolbarController au lieu de PopupMenuController. cependant je ne pourrais pas obtenir mon addon de contrôleur pour fonctionner. ci-dessous sont mon contrôleur.xcu et classe de contrôleur. pouvez-vous dire ce que je fais mal? merci.

mon 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> 

mon contrôleur de barre d'outils Classe:

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

} 

Répondre

0

la solution est utiliser un fichier Addons.xcu comme ci-dessous. Addons.xcu doit avoir une propriété "URL" pour référencer la propriété "Command" dans 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

Pas un article, mais ce gars semble avoir pensé à elle: http://www.oooforum.org/forum/viewtopic.phtml?t=85610

+0

J'ai vu ce fil mais ce n'est pas très utile. il le fait d'une autre manière. je suis intéressé à le faire pour ToolbarController comme cela a été fait pour PopupMenuController à http://java.dzone.com/news/lets-extend-openofficeorg-java#comment-53245 – othman

+0

je doute qu'il ait à faire avec le controller.xcu . que mettre pour l'élément "Command"? ' com.example.toolbar: barre d'outils ' – othman