Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package com.example;
- import com.sun.star.accessibility.XAccessible;
- import com.sun.star.awt.PaintEvent;
- import com.sun.star.awt.PosSize;
- import com.sun.star.awt.Rectangle;
- import com.sun.star.awt.WindowAttribute;
- import com.sun.star.awt.WindowClass;
- import com.sun.star.awt.WindowDescriptor;
- import com.sun.star.awt.XControl;
- import com.sun.star.awt.XControlModel;
- import com.sun.star.awt.XDevice;
- import com.sun.star.awt.XGraphics;
- import com.sun.star.awt.XPaintListener;
- import com.sun.star.awt.XToolkit;
- import com.sun.star.awt.XWindow;
- import com.sun.star.awt.XWindowPeer;
- import com.sun.star.beans.XPropertySet;
- import com.sun.star.container.XContainer;
- import com.sun.star.container.XNameContainer;
- import com.sun.star.frame.XDesktop;
- import com.sun.star.frame.XFrame;
- import com.sun.star.frame.XFramesSupplier;
- import com.sun.star.lang.DisposedException;
- import com.sun.star.lang.EventObject;
- import com.sun.star.lang.XMultiComponentFactory;
- import com.sun.star.lang.XMultiServiceFactory;
- import com.sun.star.ui.XToolPanel;
- import com.sun.star.uno.UnoRuntime;
- import com.sun.star.uno.XComponentContext;
- import com.sun.star.uno.XInterface;
- /**
- *
- * @author ludovic
- */
- public class MyPanel implements XPaintListener, XToolPanel {
- XComponentContext context;
- XWindow window;
- String color;
- public MyPanel(XComponentContext context, XWindow parentWindow, String color){
- this.context= context;
- this.color =color;
- // retrieve the parent window for our to-be-created pane window
- XWindowPeer xParentPeer = UnoRuntime.queryInterface(XWindowPeer.class, parentWindow);
- if ( xParentPeer != null )
- {
- window = createPlainWindow( context, xParentPeer );
- //window.addPaintListener( this );
- if (window != null )
- {
- try
- { Rectangle aPanelAnchorSize = parentWindow.getPosSize();
- window.setPosSize( 0, 0, aPanelAnchorSize.Width, aPanelAnchorSize.Height, PosSize.POSSIZE);
- window.setVisible(true );
- XMultiServiceFactory serviceFactory= UnoRuntime.queryInterface(XMultiServiceFactory.class,context.getServiceManager());
- XDesktop desktop = UnoRuntime.queryInterface(XDesktop.class, serviceFactory.createInstance("com.sun.star.frame.Desktop"));
- // create a new frame
- XFrame frame = UnoRuntime.queryInterface(XFrame.class, serviceFactory.createInstance("com.sun.star.frame.Frame"));
- frame.initialize(window);
- XPropertySet xPSetFrame = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, frame);
- //xPSetFrame.setPropertyValue("BackgroundColor", 0x00FF00);
- XFramesSupplier framesSupplier = UnoRuntime.queryInterface(XFramesSupplier.class, desktop);
- frame.setCreator(framesSupplier);
- //add a button
- XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, serviceFactory.createInstance("com.sun.star.awt.Toolkit"));
- final Object containerModel = serviceFactory.createInstance("com.sun.star.awt.UnoControlContainerModel");
- Object tmpDialogModel = serviceFactory.createInstance("com.sun.star.awt.UnoControlDialogModel");
- XMultiServiceFactory dialogFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, tmpDialogModel);
- XNameContainer nameContainer = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class,dialogFactory);
- // create buttonModel
- for(int i=0; i< 10; i++){
- XInterface affirmButtonModel = (XInterface)dialogFactory.createInstance("com.sun.star.awt.UnoControlButtonModel");
- XPropertySet xPSetButton = (XPropertySet) UnoRuntime.queryInterface(
- XPropertySet.class, affirmButtonModel);
- //xPSetButton.getPropertySetInfo();
- xPSetButton.setPropertyValue("PositionX", new Integer(0));
- xPSetButton.setPropertyValue("PositionY", new Integer(i*32));
- xPSetButton.setPropertyValue("Width", new Integer(100));
- xPSetButton.setPropertyValue("Height", new Integer(30));
- xPSetButton.setPropertyValue("Label", new String("b"+i));
- Object affirmButton = context.getServiceManager().createInstanceWithContext("com.sun.star.awt.UnoControlButton",context);
- XControl xControlAffirmButton = (XControl) UnoRuntime.queryInterface(XControl.class, affirmButton);
- XControlModel xControlModelAffirmButton = (XControlModel) UnoRuntime.queryInterface(XControlModel.class, affirmButtonModel);
- xControlAffirmButton.setModel(xControlModelAffirmButton);
- XNameContainer xNameCont = (XNameContainer)UnoRuntime.queryInterface(XNameContainer.class, containerModel);
- xNameCont.insertByName("b"+i, affirmButtonModel);
- }
- Object container = context.getServiceManager().createInstanceWithContext("com.sun.star.awt.UnoControlContainer", context);
- XControl xControl = (XControl)UnoRuntime.queryInterface(XControl.class, container );
- XControlModel xControlModel = (XControlModel)UnoRuntime.queryInterface(XControlModel.class, containerModel);
- xControl.setModel(xControlModel);
- XWindowPeer windowPeer = UnoRuntime.queryInterface(XWindowPeer.class, window);
- xControl.createPeer(xToolkit, windowPeer);
- }
- catch( Exception ex)
- {
- System.out.println(ex.getMessage());
- ex.printStackTrace();
- }
- }
- }
- }
- private XWindow createPlainWindow( XComponentContext context, XWindowPeer parentWindow )
- {
- try
- {
- XMultiComponentFactory xFactory = context.getServiceManager();
- XToolkit xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, xFactory.createInstanceWithContext("com.sun.star.awt.Toolkit", context));
- WindowDescriptor aWindow = new WindowDescriptor();
- aWindow.Type = WindowClass.CONTAINER;
- aWindow.WindowServiceName = "window";
- aWindow.Parent = parentWindow;
- aWindow.WindowAttributes = WindowAttribute.BORDER;
- XWindowPeer xWindow = xToolkit.createWindow( aWindow );
- XWindow windowObj = UnoRuntime.queryInterface(XWindow.class, xWindow);
- return windowObj;
- }
- catch( Exception ex)
- {
- System.out.println(ex.getMessage());
- ex.printStackTrace();
- }
- return null;
- }
- public void windowPaint(PaintEvent evt) {
- try
- {
- XDevice xDevice = UnoRuntime.queryInterface(XDevice.class, evt.Source);
- XGraphics xGraphics = xDevice.createGraphics();
- xGraphics.setFillColor( Integer.parseInt(color, 16) );
- xGraphics.setLineColor( 0x00FFFFFF );
- XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, evt.Source);
- Rectangle aWindowRect = xWindow.getPosSize();
- xGraphics.drawRect( 0, 0, aWindowRect.Width - 1, aWindowRect.Height - 1 );
- }
- catch( Exception ex)
- {
- System.out.println(ex.getMessage());
- ex.printStackTrace();
- }
- }
- public void disposing(EventObject arg0) {
- if ( window == null )
- // already disposed
- return;
- window.removePaintListener( this );
- try
- {
- window.dispose();
- }
- catch( Exception ex)
- {
- System.out.println(ex.getMessage());
- ex.printStackTrace();
- }
- window = null;
- }
- public XWindow getWindow() {
- if(window == null){
- throw new DisposedException();
- }
- return window;
- }
- public XAccessible createAccessible(XAccessible arg0) {
- if (window == null )
- throw new DisposedException();
- // TODO: the following is wrong, since it doesn't respect i_rParentAccessible. In a real extension, you should
- // implement this correctly :)
- return UnoRuntime.queryInterface(XAccessible.class, getWindow());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment