Guest User

XToolPanel example

a guest
May 12th, 2011
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.78 KB | None | 0 0
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5.  
  6. package com.example;
  7.  
  8. import com.sun.star.accessibility.XAccessible;
  9. import com.sun.star.awt.PaintEvent;
  10. import com.sun.star.awt.PosSize;
  11. import com.sun.star.awt.Rectangle;
  12. import com.sun.star.awt.WindowAttribute;
  13. import com.sun.star.awt.WindowClass;
  14. import com.sun.star.awt.WindowDescriptor;
  15. import com.sun.star.awt.XControl;
  16. import com.sun.star.awt.XControlModel;
  17. import com.sun.star.awt.XDevice;
  18. import com.sun.star.awt.XGraphics;
  19. import com.sun.star.awt.XPaintListener;
  20. import com.sun.star.awt.XToolkit;
  21. import com.sun.star.awt.XWindow;
  22. import com.sun.star.awt.XWindowPeer;
  23. import com.sun.star.beans.XPropertySet;
  24. import com.sun.star.container.XContainer;
  25. import com.sun.star.container.XNameContainer;
  26. import com.sun.star.frame.XDesktop;
  27. import com.sun.star.frame.XFrame;
  28. import com.sun.star.frame.XFramesSupplier;
  29. import com.sun.star.lang.DisposedException;
  30. import com.sun.star.lang.EventObject;
  31. import com.sun.star.lang.XMultiComponentFactory;
  32. import com.sun.star.lang.XMultiServiceFactory;
  33. import com.sun.star.ui.XToolPanel;
  34. import com.sun.star.uno.UnoRuntime;
  35. import com.sun.star.uno.XComponentContext;
  36. import com.sun.star.uno.XInterface;
  37.  
  38. /**
  39.  *
  40.  * @author ludovic
  41.  */
  42. public class MyPanel implements XPaintListener, XToolPanel {
  43.  
  44.     XComponentContext context;
  45.     XWindow window;
  46.     String color;
  47.    
  48.     public MyPanel(XComponentContext context,   XWindow parentWindow, String color){
  49.         this.context=  context;
  50.         this.color =color;
  51.  
  52.          // retrieve the parent window for our to-be-created pane window
  53.          XWindowPeer xParentPeer =  UnoRuntime.queryInterface(XWindowPeer.class, parentWindow);
  54.  
  55.         if ( xParentPeer != null )
  56.         {
  57.             window = createPlainWindow( context, xParentPeer );
  58.             //window.addPaintListener( this );
  59.             if (window != null )
  60.             {
  61.               try
  62.             {   Rectangle aPanelAnchorSize = parentWindow.getPosSize();
  63.                 window.setPosSize( 0, 0, aPanelAnchorSize.Width, aPanelAnchorSize.Height, PosSize.POSSIZE);
  64.                 window.setVisible(true );
  65.  
  66.                 XMultiServiceFactory serviceFactory= UnoRuntime.queryInterface(XMultiServiceFactory.class,context.getServiceManager());
  67.                
  68.                 XDesktop desktop = UnoRuntime.queryInterface(XDesktop.class, serviceFactory.createInstance("com.sun.star.frame.Desktop"));
  69.  
  70.  
  71.               // create a new frame
  72.                 XFrame frame = UnoRuntime.queryInterface(XFrame.class, serviceFactory.createInstance("com.sun.star.frame.Frame"));
  73.                 frame.initialize(window);
  74.                 XPropertySet xPSetFrame = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, frame);
  75.                 //xPSetFrame.setPropertyValue("BackgroundColor", 0x00FF00);
  76.                 XFramesSupplier framesSupplier = UnoRuntime.queryInterface(XFramesSupplier.class, desktop);
  77.                 frame.setCreator(framesSupplier);
  78.                 //add a button
  79.  
  80.                  XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, serviceFactory.createInstance("com.sun.star.awt.Toolkit"));
  81.                final Object containerModel = serviceFactory.createInstance("com.sun.star.awt.UnoControlContainerModel");
  82.  
  83.                 Object tmpDialogModel = serviceFactory.createInstance("com.sun.star.awt.UnoControlDialogModel");
  84.                 XMultiServiceFactory dialogFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, tmpDialogModel);
  85.                  
  86.                 XNameContainer nameContainer = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class,dialogFactory);
  87.  
  88.                  // create buttonModel
  89.                  for(int i=0; i< 10; i++){
  90.                       XInterface affirmButtonModel = (XInterface)dialogFactory.createInstance("com.sun.star.awt.UnoControlButtonModel");
  91.  
  92.                       XPropertySet xPSetButton = (XPropertySet) UnoRuntime.queryInterface(
  93.                             XPropertySet.class, affirmButtonModel);
  94.                       //xPSetButton.getPropertySetInfo();
  95.  
  96.                       xPSetButton.setPropertyValue("PositionX", new Integer(0));
  97.                       xPSetButton.setPropertyValue("PositionY", new Integer(i*32));
  98.                       xPSetButton.setPropertyValue("Width", new Integer(100));
  99.                       xPSetButton.setPropertyValue("Height", new Integer(30));
  100.                       xPSetButton.setPropertyValue("Label", new String("b"+i));
  101.  
  102.                       Object affirmButton = context.getServiceManager().createInstanceWithContext("com.sun.star.awt.UnoControlButton",context);
  103.                       XControl xControlAffirmButton = (XControl) UnoRuntime.queryInterface(XControl.class, affirmButton);
  104.                       XControlModel xControlModelAffirmButton = (XControlModel) UnoRuntime.queryInterface(XControlModel.class, affirmButtonModel);
  105.                       xControlAffirmButton.setModel(xControlModelAffirmButton);
  106.                       XNameContainer xNameCont = (XNameContainer)UnoRuntime.queryInterface(XNameContainer.class, containerModel);
  107.                       xNameCont.insertByName("b"+i, affirmButtonModel);
  108.                 }
  109.  
  110.                   Object container = context.getServiceManager().createInstanceWithContext("com.sun.star.awt.UnoControlContainer", context);
  111.                   XControl xControl = (XControl)UnoRuntime.queryInterface(XControl.class, container );
  112.                   XControlModel xControlModel = (XControlModel)UnoRuntime.queryInterface(XControlModel.class, containerModel);
  113.                   xControl.setModel(xControlModel);
  114.  
  115.                   XWindowPeer windowPeer =  UnoRuntime.queryInterface(XWindowPeer.class, window);
  116.                   xControl.createPeer(xToolkit, windowPeer);
  117.             }
  118.             catch( Exception ex)
  119.             {
  120.                 System.out.println(ex.getMessage());
  121.                 ex.printStackTrace();
  122.             }
  123.             }
  124.         }
  125.     }
  126.  
  127.     private XWindow createPlainWindow( XComponentContext context, XWindowPeer parentWindow )
  128.         {
  129.             try
  130.             {
  131.                 XMultiComponentFactory xFactory = context.getServiceManager();
  132.                 XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, xFactory.createInstanceWithContext("com.sun.star.awt.Toolkit", context));
  133.  
  134.                 WindowDescriptor aWindow = new WindowDescriptor();
  135.                 aWindow.Type = WindowClass.CONTAINER;
  136.                 aWindow.WindowServiceName = "window";
  137.                 aWindow.Parent = parentWindow;
  138.                 aWindow.WindowAttributes = WindowAttribute.BORDER;
  139.  
  140.                 XWindowPeer xWindow = xToolkit.createWindow( aWindow );
  141.                 XWindow windowObj =  UnoRuntime.queryInterface(XWindow.class, xWindow);
  142.                 return windowObj;
  143.             }
  144.             catch( Exception ex)
  145.             {
  146.                 System.out.println(ex.getMessage());
  147.                 ex.printStackTrace();
  148.             }
  149.             return null;
  150.         }
  151.  
  152.     public void windowPaint(PaintEvent evt) {
  153.         try
  154.         {
  155.             XDevice xDevice = UnoRuntime.queryInterface(XDevice.class, evt.Source);
  156.             XGraphics xGraphics = xDevice.createGraphics();
  157.             xGraphics.setFillColor( Integer.parseInt(color, 16) );
  158.             xGraphics.setLineColor( 0x00FFFFFF );
  159.  
  160.             XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, evt.Source);
  161.             Rectangle aWindowRect = xWindow.getPosSize();
  162.             xGraphics.drawRect( 0, 0, aWindowRect.Width - 1, aWindowRect.Height - 1 );
  163.         }
  164.          catch( Exception ex)
  165.             {
  166.                 System.out.println(ex.getMessage());
  167.                 ex.printStackTrace();
  168.             }
  169.     }
  170.  
  171.     public void disposing(EventObject arg0) {
  172.         if ( window == null )
  173.             // already disposed
  174.             return;
  175.         window.removePaintListener( this );
  176.         try
  177.         {
  178.             window.dispose();
  179.         }
  180.          catch( Exception ex)
  181.             {
  182.                 System.out.println(ex.getMessage());
  183.                 ex.printStackTrace();
  184.             }
  185.         window = null;
  186.     }
  187.  
  188.     public XWindow getWindow() {
  189.        if(window == null){
  190.            throw new DisposedException();
  191.        }
  192.        return window;
  193.     }
  194.  
  195.     public XAccessible createAccessible(XAccessible arg0) {
  196.         if (window == null )
  197.             throw new DisposedException();
  198.  
  199.         // TODO: the following is wrong, since it doesn't respect i_rParentAccessible. In a real extension, you should
  200.         // implement this correctly :)
  201.         return  UnoRuntime.queryInterface(XAccessible.class, getWindow());
  202.     }
  203.  
  204. }
Advertisement
Add Comment
Please, Sign In to add comment